Version 0.3: replace Prototype by JQuery and use bootstrap

This commit is contained in:
nemunaire 2013-12-30 12:26:30 +01:00
parent 32b69fbd20
commit ad51d9da73
39 changed files with 19585 additions and 8406 deletions

View File

@ -7,204 +7,206 @@ ob_start();
//Inclusion de l'API Onyx
require_once(trim(file_get_contents('./.onyx')));
require_once(ONYX.'include/functions.php');
$SESS = new Session();
//sleep(1);
$json = array("ping" => time(), "statut" => !empty($SESS->values["connecte"]));
if ($json["statut"])
$json["username"] = $SESS->values["username"];
$SESS = new Session();
//Création du fichier XML
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
$xml_root = $xml->createElement("root");
$xml->appendChild($xml_root);
//sleep(1);
$demande = gpc('d');
$value = intval(gpc('i'));
if ($demande == "connecte")
{
$nom = strtolower(gpc("name", "post"));
$mdp = hash("sha512", $nom.'♂♫↨'.gpc("mdp", "post"));
$nom = strtolower(gpc("name", "post"));
$mdp = hash("sha512", $nom.'♂♫↨'.gpc("mdp", "post"));
$bdd = new BDD();
$bdd->escape($nom);
$bdd->query("UPDATE users SET last_ip = '".$_SERVER["REMOTE_ADDR"]."', last_visite = ".time()." WHERE pseudo = '$nom' AND password = '$mdp';");
$affected = $bdd->affected();
if ($affected)
$user = $bdd->unique_query("SELECT * FROM users WHERE pseudo = '$nom' AND password = '$mdp';");
$bdd->deconnexion();
$bdd = new BDD();
$bdd->escape($nom);
$bdd->query("UPDATE users SET last_ip = '".$_SERVER["REMOTE_ADDR"]."', last_visite = ".time()." WHERE pseudo = '$nom' AND password = '$mdp';");
$affected = $bdd->affected();
if ($affected)
$user = $bdd->unique_query("SELECT * FROM users WHERE pseudo = '$nom' AND password = '$mdp';");
$bdd->deconnexion();
if ($affected != 0)
{
$json["statut"] = 1;
$SESS->values["connecte"] = true;
$SESS->values["username"] = $nom;
$SESS->values["id_user"] = $user["id"];
$SESS->put();
}
else
{
$json["statut"] = 0;
$SESS->values["connecte"] = false;
$SESS->values["username"] = "";
$SESS->values["id_user"] = 0;
$SESS->put();
}
if ($affected != 0)
{
$SESS->values["connecte"] = true;
$SESS->values["username"] = $nom;
$SESS->values["id_user"] = $user["id"];
$SESS->put($user["id"]);
}
else
{
$SESS->values["connecte"] = false;
$SESS->values["username"] = "";
$SESS->values["id_user"] = 0;
$SESS->put();
}
}
elseif ($demande == "logout")
{
$SESS->values["connecte"] = false;
$SESS->values["username"] = "";
$SESS->close();
$SESS->values["connecte"] = false;
$SESS->values["username"] = "";
$SESS->close();
}
elseif ($demande == "accueil")
{
$dir = opendir(APPSDIR);
while (($app = readdir($dir)) !== false)
$dir = opendir(APPSDIR);
while (($app = readdir($dir)) !== false)
{
if (is_dir(APPSDIR.$app) && is_file(APPSDIR.$app.'/property.xml'))
{
if (is_dir(APPSDIR.$app) && is_file(APPSDIR.$app.'/property.xml'))
$applicationXML = new DOMDocument();
$applicationXML->load(APPSDIR.$app.'/property.xml');
if ($applicationXML->documentElement->getAttribute('active') && $applicationXML->getElementsByTagName('application'))
{
//Vérification de sécurités
if (!acces_application($app, $applicationXML))
continue;
$xml_appli = $xml->createElement("application");
$xml_appli->appendChild($xml->createElement("dir", $app));
foreach($applicationXML->getElementsByTagName('property') as $property)
{
$applicationXML = new DOMDocument();
$applicationXML->load(APPSDIR.$app.'/property.xml');
if ($applicationXML->documentElement->getAttribute('active') && $applicationXML->getElementsByTagName('application'))
{
//Vérification de sécurités
if (!acces_application($app, $applicationXML))
continue;
$xml_appli = $xml->createElement("application");
$xml_appli->appendChild($xml->createElement("dir", $app));
foreach($applicationXML->getElementsByTagName('property') as $property)
{
$xml_appli->appendChild($xml->createElement($property->getAttribute('value'), $property->textContent));
}
$xml_root->appendChild($xml_appli);
}
$xml_appli->appendChild($xml->createElement($property->getAttribute('value'), $property->textContent));
}
$xml_root->appendChild($xml_appli);
}
}
closedir($dir);
}
closedir($dir);
}
elseif ($demande == "property" && $app = gpc('a'))
{
if (empty($app) || ereg('/', $app) || !is_file(APPSDIR.$app.'/property.xml'))
send404($xml_root);
else
if (empty($app) || ereg('/', $app) || !is_file(APPSDIR.$app.'/property.xml'))
send404($xml_root);
else
{
$appXML = new DOMDocument();
$appXML->load(APPSDIR.$app.'/property.xml');
if ($appXML->documentElement->getAttribute('active') && $appXML->getElementsByTagName('application'))
{
$appXML = new DOMDocument();
$appXML->load(APPSDIR.$app.'/property.xml');
//Vérification de sécurités
if (!acces_application($app, $appXML))
continue;
if ($appXML->documentElement->getAttribute('active') && $appXML->getElementsByTagName('application'))
{
//Vérification de sécurités
if (!acces_application($app, $appXML))
continue;
$xml_appli = $xml->createElement("property");
foreach($appXML->getElementsByTagName('property') as $property)
{
$xml_appli->appendChild($xml->createElement($property->getAttribute('value'), $property->textContent));
}
$xml_appli->appendChild($xml->createElement("dir", $app));
$xml_root->appendChild($xml_appli);
}
$xml_appli = $xml->createElement("property");
foreach($appXML->getElementsByTagName('property') as $property)
{
$xml_appli->appendChild($xml->createElement($property->getAttribute('value'), $property->textContent));
}
$xml_appli->appendChild($xml->createElement("dir", $app));
$xml_root->appendChild($xml_appli);
}
}
}
elseif ($demande == "display" && $app = gpc('a'))
{
if (empty($app) || ereg('/', $app) || !is_file(APPSDIR.$app.'/property.xml'))
send404($xml_root);
else
if (empty($app) || ereg('/', $app) || !is_file(APPSDIR.$app.'/property.xml'))
send404($xml_root);
else
{
$appXML = new DOMDocument();
$appXML->load(APPSDIR.$app.'/property.xml');
if ($appXML->documentElement->getAttribute('active') && $appXML->getElementsByTagName('application'))
{
$appXML = new DOMDocument();
$appXML->load(APPSDIR.$app.'/property.xml');
//Vérification de sécurités
if (!acces_application($app, $appXML))
continue;
if ($appXML->documentElement->getAttribute('active') && $appXML->getElementsByTagName('application'))
require(APPSDIR.$app.'/main.php');
$xml_root->appendChild($xml->createElement("dir", $app));
$xml_appli = $xml->createElement("display");
foreach($appXML->getElementsByTagName('display') as $contenu)
{
if ($contenu->getAttribute('value') == "css")
{
//Vérification de sécurités
if (!acces_application($app, $appXML))
continue;
require(APPSDIR.$app.'/main.php');
$xml_root->appendChild($xml->createElement("dir", $app));
$xml_appli = $xml->createElement("display");
foreach($appXML->getElementsByTagName('display') as $contenu)
{
if ($contenu->getAttribute('value') == "css")
{
$xml_css = $xml->createElement($contenu->getAttribute('value'), $contenu->textContent);
if ($contenu->getAttribute('media'))
$xml_css->setAttribute("media", $contenu->getAttribute('media'));
$xml_appli->appendChild($xml_css);
}
else
$xml_appli->appendChild($xml->createElement($contenu->getAttribute('value'), $contenu->textContent));
}
$xml_root->appendChild($xml_appli);
$xml_appli = $xml->createElement("property");
foreach($appXML->getElementsByTagName('property') as $property)
{
$xml_appli->appendChild($xml->createElement($property->getAttribute('value'), $property->textContent));
}
if ($appXML->getElementsByTagName('menu'))
{
$menu = array();
foreach($appXML->getElementsByTagName('menu') as $item)
$menu[] = array("text" => $item->getAttribute('text'), "eventClick" => $item->getAttribute('eventClick'));
$xml_appli->appendChild($xml->createElement("menu", json_encode($menu)));
}
$xml_root->appendChild($xml_appli);
$xml_css = $xml->createElement($contenu->getAttribute('value'), $contenu->textContent);
if ($contenu->getAttribute('media'))
$xml_css->setAttribute("media", $contenu->getAttribute('media'));
$xml_appli->appendChild($xml_css);
}
else
$xml_appli->appendChild($xml->createElement($contenu->getAttribute('value'), $contenu->textContent));
}
$xml_root->appendChild($xml_appli);
$xml_appli = $xml->createElement("property");
foreach($appXML->getElementsByTagName('property') as $property)
{
$xml_appli->appendChild($xml->createElement($property->getAttribute('value'), $property->textContent));
}
if ($appXML->getElementsByTagName('menu'))
{
$menu = array();
foreach($appXML->getElementsByTagName('menu') as $item)
$menu[] = array("text" => $item->getAttribute('text'), "eventClick" => $item->getAttribute('eventClick'));
$xml_appli->appendChild($xml->createElement("menu", json_encode($menu)));
}
$xml_root->appendChild($xml_appli);
}
}
}
elseif ($demande == "action" && $app = gpc('a'))
{
if (empty($app) || ereg('/', $app) || !is_file(APPSDIR.$app.'/property.xml'))
send404($xml_root);
else
{
$appXML = new DOMDocument();
$appXML->load(APPSDIR.$app.'/property.xml');
if (empty($app) || ereg('/', $app) || !is_file(APPSDIR.$app.'/property.xml'))
send404($xml_root);
else
{
$appXML = new DOMDocument();
$appXML->load(APPSDIR.$app.'/property.xml');
if ($appXML->documentElement->getAttribute('active') && $appXML->getElementsByTagName('application'))
require(APPSDIR.$app.'/main.php');
}
if ($appXML->documentElement->getAttribute('active') && $appXML->getElementsByTagName('application'))
require(APPSDIR.$app.'/main.php');
}
}
elseif ($demande == "page" && $page = gpc('p'))
{
if (empty($page) || ereg('/', $page) || !is_file(PAGESDIR.$page.'.xml'))
send404($xml_root);
else
{
$pageXML = new DOMDocument();
$pageXML->load(PAGESDIR.$page.'.xml');
if (empty($page) || ereg('/', $page) || !is_file(PAGESDIR.$page.'.xml'))
send404($xml_root);
else
{
$pageXML = new DOMDocument();
$pageXML->load(PAGESDIR.$page.'.xml');
if ($pageXML->documentElement->getAttribute('active') && $pageXML->getElementsByTagName('page'))
if ($pageXML->documentElement->getAttribute('active') && $pageXML->getElementsByTagName('page'))
{
//Vérification de sécurité
if (!acces_application($page, $pageXML))
send403($xml_root);
else
{
foreach($pageXML->getElementsByTagName('display') as $contenu)
{
//Vérification de sécurité
if (!acces_application($page, $pageXML))
send403($xml_root);
else
{
foreach($pageXML->getElementsByTagName('display') as $contenu)
{
$xml_root->appendChild($xml->createElement($contenu->getAttribute('value'), $contenu->textContent));
}
}
$xml_root->appendChild($xml->createElement($contenu->getAttribute('value'), $contenu->textContent));
}
}
}
}
}
header("X-JSON: ".json_encode($json));
$sortie = ob_get_contents();
$output = ob_get_contents();
ob_end_clean();
if (!empty($sortie))
$xml_root->appendChild($xml->createElement("sortie", $sortie));
$xml->appendChild($xml_root);
if (!empty($output))
$xml_root->appendChild($xml->createElement("output", $output));
$xml_root->setAttribute("ping", time());
$xml_root->setAttribute("statut", intval(!empty($SESS->values["connecte"])));
if (!empty($SESS->values["connecte"]))
$xml_root->setAttribute("username", $SESS->values["username"]);
print $xml->saveXML();
?>

View File

@ -0,0 +1,8 @@
function Album(elt)
{
this.id = elt.getAttribute("id");
this.type = parseInt(elt.getAttribute("type"));
this.titre = elt.getAttribute("titre");
if (elt.hasAttribute("couleur"))
this.color = elt.getAttribute("couleur");
}

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@ $nom = gpc('auteur', 'post');
$bdd = new BDD();
$bdd->escape($nom);
$chanteurs = $bdd->query("SELECT chanteur FROM gsm WHERE chanteur LIKE '$nom%' GROUP BY chanteur;");
$chanteurs = $bdd->query("SELECT artiste FROM gsm_titres WHERE artiste LIKE '$nom%' GROUP BY artiste;");
$bdd->deconnexion();
if (!empty($chanteurs) && !empty($nom))
@ -21,7 +21,7 @@ if (!empty($chanteurs) && !empty($nom))
print "<ul>\n";
foreach ($chanteurs as $chanteur)
{
print ' <li>'.$chanteur["chanteur"]."</li>\n";
print ' <li>'.$chanteur["artiste"]."</li>\n";
}
print "</ul>";
}

View File

@ -0,0 +1,45 @@
function Chanson(elt)
{
this.albums = new Array();
if (elt)
{
this.id = elt.getAttribute("id");
this.titre = elt.getAttribute("titre");
this.artiste = elt.getAttribute("artiste");
for (var albm in elt.getElementsByTagName("inalbum"))
{
if (albm.isInt())
this.albums.push(elt.getElementsByTagName("inalbum")[albm].getAttribute("id"));
}
}
}
Chanson.prototype.inAlbum = function(idAlbum, types)
{
for (var i = 0; i < this.albums.length; i++)
{
if (
(typeof(idAlbum) == 'undefined' || this.albums[i] == idAlbum) &&
(typeof(types) == 'undefined' || types.in_array(GSM_liste_CDs[this.albums[i]].type))
)
return true;
}
return false;
}
Chanson.prototype.search = function(titre, artiste, album, types)
{
if (
(titre == '' || this.titre.toLowerCase().indexOf(titre.toLowerCase()) >= 0) &&
(artiste == '' || this.artiste.toLowerCase().indexOf(artiste.toLowerCase()) >= 0)
)
{
for (var i = 0; i < this.albums.length; i++)
{
if (album == '' || GSM_liste_CDs[this.albums[i]].titre.toLowerCase().indexOf(album.toLowerCase()) >= 0)
return (types.length == 0 || types.in_array(GSM_liste_CDs[this.albums[i]].type));
}
}
return false;
}

View File

@ -2,10 +2,10 @@
{
border: solid 1px black;
display: table-cell;
height: 11.5cm;
height: 12cm;
text-align: center;
vertical-align: middle;
width: 11.5cm;
width: 12cm;
}
.front .title, .front .cd
@ -24,9 +24,10 @@
.back
{
border: solid 1px black;
color: black;
display: table;
height: 11.1cm;
width: 14.4cm;
height: 11.8cm;
width: 15.3cm;
}
.back .title
@ -43,10 +44,10 @@
.back .left, .back .right
{
display: block;
height: 11.1cm;
height: 11.8cm;
text-align: left;
vertical-align: top;
width: 0.7cm;
width: 0.8cm;
}
.back .left
{
@ -71,6 +72,7 @@
{
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
transform: rotate(-90deg);
text-align: center;
width: 11.1cm;
}
@ -78,6 +80,7 @@
{
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
transform: rotate(90deg);
text-align: center;
width: 11cm;
}
@ -95,5 +98,5 @@
.back .author
{
float: right;
width: 50%;
width: 45%;
}

View File

@ -6,11 +6,8 @@ body
width: 18cm;
}
h1 {
display: none;
}
#GSM_menu {
display: none;
#bt-menu, h1, menu {
display: none;
}
.back .center
@ -18,7 +15,3 @@ h1 {
overflow:hidden;
height: 11.1cm;
}
.back .center ol
{
-webkit-margin-before: 0.5em;
}

View File

@ -1,5 +1,5 @@
html {
height: 100%;
height: 100%;
}
body {
@ -19,27 +19,26 @@ body {
);
font-family: serif;
margin-bottom: 10px;
min-height: 80%;
min-height: 80%;
}
a:link, a:visited {
text-decoration: none;
color:#000000;
text-decoration: none;
color:#000000;
}
h1 {
text-align: center;
margin-left: 250px;
text-align: center;
margin-left: 250px;
}
.pagination a:link, .pagination a:visited {
text-decoration: none;
color:#FFFFFF;
text-decoration: none;
color:#FFFFFF;
}
.pagination a:hover, a:hover {
text-decoration: underline;
text-decoration: underline;
}
.news {
@ -60,9 +59,9 @@ h1 {
border-radius: 17px;
box-shadow: 3px 4px 5px #444466;
height: 127px;
height: 140px;
margin: auto;
padding: 20px;
padding: 0 20px;
text-align: left;
width: 75%;
}
@ -71,7 +70,7 @@ h1 {
color: orange;
}
#GSM_menu {
menu {
background: -webkit-gradient(
linear,
left top,
@ -92,36 +91,35 @@ h1 {
left: 0px;
list-style: none;
margin: 0;
-webkit-padding-start: 0;
padding: 0;
position: fixed;
text-align: center;
top: 0px;
width: 250px;
}
#GSM_menu h2 {
menu h2 {
margin-left: 69px;
}
#GSM_menu li {
menu > li {
margin-bottom: 40px;
text-align: center;
width: 250px;
}
#GSM_menu li[onclick] {
menu > li ul {
margin-left: 20px;
}
menu > li li {
margin-top: 5px;
}
menu li[onclick] {
cursor: pointer;
}
#GSM_menu li[onclick]:hover {
menu li[onclick]:hover {
text-decoration: underline;
}
label {
font-weight: bold;
}
label:hover {
text-decoration: underline;
}
form {
background: -webkit-gradient(
linear,
@ -138,101 +136,40 @@ form {
border: 1px solid #ff9b42;
border-radius: 25px;
box-shadow: 2px 2px 5px #553333;
}
form#addAlbms {
margin: auto;
padding: 13px;
text-align: left;
width: 345px;
}
form#addAlbms div {
text-align: center;
}
form#addAlbms div#testColor {
background-color: black;
border: solid 1px black;
display: inline-block;
height: 1em;
margin-left: 5px;
margin-bottom: -4px;
width: 2em;
}
form#ajout {
height: 182px;
margin: 10px auto;
padding: 13px;
text-align: left;
width: 642px;
}
form#ajout input[type=text] {
width: 444px;
}
form#ajout select {
margin-right: 10px;
}
form#ajout label {
float: left;
display: block;
font-weight: bold;
margin: 10px 7px 10px 0;
text-align: right;
width: 110px;
}
form#ajout label:hover {
text-decoration: underline;
}
input[type=text], select {
margin: 10px 0;
transition: background 0.75s;
-moz-transition: background 0.75s;
-webkit-transition: background 0.75s;
-o-transition: background 0.75s;
}
input, select {
background: #FF6600;
border: #CA2A20 solid 1px;
border-radius: 3px;
margin-top: 5px;
}
input:hover, input:focus, select:hover, select:focus {
background: #CC6600;
}
input.erreur, select.erreur {
background: #CC0000;
form#addAlbum {
padding: 14px;
width: 456px;
}
div#GSM_menu {
background: url(backmenu.png);
color:#FFFFFF;
top: 0px;
font-weight: bold;
height: 1200px;
padding-top: 30px;
position: fixed;
text-align: center;
left: 0px;
width: 250px;
background: url(backmenu.png);
color:#FFFFFF;
top: 0px;
font-weight: bold;
height: 1200px;
padding-top: 30px;
position: fixed;
text-align: center;
left: 0px;
width: 250px;
}
div#GSM_menu h2 {
margin-bottom: 40px;
margin-bottom: 40px;
}
div#contenu {
margin-left: 250px;
text-align: center;
margin-left: 250px;
text-align: center;
}
.table {
border: 1px solid black;
border-radius: 10px;
box-shadow: 3px 3px 5px #666666;
margin: auto;
margin: auto;
}
.table .body div {
transition: background 500ms;
@ -241,32 +178,32 @@ div#contenu {
-o-transition: background 500ms;
}
.table .body div.elt0 {
background: #ec7d60;
background: #ec7d60;
}
.table .body div.elt1 {
background: #f68063;
background: #f68063;
}
.table .body div:hover {
background: #fa8022;
background: #fa8022;
}
.table.cols2 div span {
display: inline-block;
display: inline-block;
width: 40%;
}
.table.cols3 div span {
display: inline-block;
display: inline-block;
width: 40%;
}
.table.cols3 div span+span+span {
width: 20%;
}
.table div.lign {
display: inline-block;
display: inline-block;
width: 100%;
}
.table .head {
background: #f26340;
background: #f26340;
border-bottom: 1px solid black;
border-radius: 10px 10px 0 0;
font-weight: bolder;
@ -278,21 +215,21 @@ div#contenu {
.table.stats {
float: left;
margin: 0 1%;
margin: 0 1%;
width: 31%;
}
.table#list {
width: 83%;
}
.table#list .head {
cursor: pointer;
cursor: pointer;
}
.table .body div {
cursor: pointer;
cursor: pointer;
}
.pagination {
background: #f26340;
background: #f26340;
border: 1px solid black;
color: white;
margin: auto;
@ -308,13 +245,13 @@ div#contenu {
box-shadow: 0px 2px 7px #666666;
}
.pagination a {
cursor: pointer;
padding: 0 5px;
cursor: pointer;
padding: 0 5px;
}
.front, .back
{
background: white;
background: white;
}
.back .center
{
@ -322,10 +259,11 @@ div#contenu {
}
.back ol li:hover
{
background-color: teal;
background-color: teal;
}
div.autocomplete {
margin-top: 20px;
margin-left: 6px;
div.autocomplete
{
margin-top: 20px;
margin-left: 6px;
}

View File

@ -7,531 +7,441 @@ var nbParPage = 50;
//On charge la liste des porte-clés
function GSPC_loadList()
{
GSPC_origin_liste = false;
GSPC_liste = false;
GSPC_lastSort = -1;
$('nbpc').innerHTML = '<img src="applications/GSPC/loader.gif" alt="Chargement en cours ...">';
new Ajax.Request(
'ajax.php',
{
method: 'get',
parameters: {d: "action", a: "GSPC", p: "liste"},
onSuccess: GSPC_parseList,
onFailure: function() { printEtat(3); }
}
);
GSPC_origin_liste = false;
GSPC_liste = false;
GSPC_lastSort = -1;
$('#nbpc').html('<img src="applications/GSPC/loader.gif" alt="Chargement en cours ...">');
$.ajax({
url: "ajax.php",
data: {d: "action", a: "GSPC", p: "liste"},
}).done(GSPC_parseList).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
GSPC_loadList();
//Une fois la liste reçue, on la parse
function GSPC_parseList(transport, json)
function GSPC_parseList(data)
{
$('nbpc').innerHTML = json.nombre;
$('#nbpc').html(data.documentElement.getAttribute("nombre"));
var liste = transport.responseXML.documentElement.getElementsByTagName("liste")[0].getElementsByTagName("porteclef");
GSPC_origin_liste = new Array();
var liste = data.documentElement.getElementsByTagName("liste")[0].getElementsByTagName("porteclef");
GSPC_origin_liste = new Array();
for (var i = 0; i < liste.length; i++)
{
var elt = liste[i];
GSPC_origin_liste.push([elt.getAttribute("id"), elt.getAttribute("nom"), elt.getAttribute("caracteristique"), elt.getAttribute("ligne"), elt.getAttribute("special")])
}
for (var i = 0; i < liste.length; i++)
{
var elt = liste[i];
GSPC_origin_liste.push([elt.getAttribute("id"), elt.getAttribute("nom"), elt.getAttribute("caracteristique"), elt.getAttribute("ligne"), elt.getAttribute("special")]);
}
}
//Met en place le formulaire d'ajout de porte-clé
function GSPC_add()
{
if (GSPC_delay)
clearTimeout(GSPC_delay);
if (GSPC_delay)
clearTimeout(GSPC_delay);
$('contenu').innerHTML = "";
var titre = document.createElement("h2");
titre.innerHTML = "Ajout d'un porte-clef à la base de données";
$('contenu').appendChild(titre);
$('#contenu').html("<h2>Ajout d'un porte-clef à la base de données</h2>");
GSPC_addScreen(false);
GSPC_addScreen(false);
}
//Affiche la liste des porte-clés
function GSPC_list()
{
if (GSPC_delay)
clearTimeout(GSPC_delay);
if (GSPC_delay)
clearTimeout(GSPC_delay);
window.scrollTo(0,0);
window.scrollTo(0,0);
$('contenu').innerHTML = "";
var titre = document.createElement("h2");
titre.innerHTML = "Liste des porte-clefs";
$('contenu').appendChild(titre);
$('#contenu').html("<h2>Liste des porte-clefs</h2>");
GSPC_liste = false;
GSPC_lastSort = -1;
GSPC_liste = false;
GSPC_lastSort = -1;
GSPC_viewliste();
GSPC_viewliste();
}
//Affiche la page de statistiques
function GSPC_stats()
{
if (GSPC_delay)
clearTimeout(GSPC_delay);
if (GSPC_delay)
clearTimeout(GSPC_delay);
window.scrollTo(0,0);
window.scrollTo(0,0);
$('contenu').innerHTML = "";
var titre = document.createElement("h2");
titre.innerHTML = "Statistiques";
$('contenu').appendChild(titre);
$('#contenu').html("<h2>Statistiques</h2>");
var tableau = document.createElement("div");
tableau.className = "table cols2";
tableau.id = "stats";
var tableau_head = document.createElement("div");
tableau_head.className = "head";
var head_th = document.createElement("span");
head_th.innerHTML = "Ligne";
tableau_head.appendChild(head_th);
var head_th = document.createElement("span");
head_th.innerHTML = "Nombre";
tableau_head.appendChild(head_th);
tableau.appendChild(tableau_head);
var tableau_body = document.createElement("div");
tableau_body.className = "body";
tableau_body.innerHTML = '<div class="lign elt0 foot">Téléchargement des statistiques en cours ... <img src="applications/GSPC/loader.gif" alt="Veuillez patienter"></div>';
tableau.appendChild(tableau_body);
$('contenu').appendChild(tableau);
var tableau = document.createElement("div");
tableau.className = "table cols2";
tableau.id = "stats";
var tableau_head = document.createElement("div");
tableau_head.className = "head";
var head_th = document.createElement("span");
head_th.innerHTML = "Ligne";
tableau_head.appendChild(head_th);
var head_th = document.createElement("span");
head_th.innerHTML = "Nombre";
tableau_head.appendChild(head_th);
tableau.appendChild(tableau_head);
var tableau_body = document.createElement("div");
tableau_body.className = "body";
tableau_body.innerHTML = '<div class="lign elt0 foot">Téléchargement des statistiques en cours ... <img src="applications/GSPC/loader.gif" alt="Veuillez patienter"></div>';
tableau.appendChild(tableau_body);
$('#contenu').append(tableau);
new Ajax.Request(
'ajax.php',
{
method: 'get',
parameters: {d: "action", a: "GSPC", p: "stats"},
onSuccess: function(transport, json)
{
var stats = transport.responseXML.documentElement.getElementsByTagName("statistiques")[0];
var nbPC = stats.getElementsByTagName("ligne").length;
$.ajax({
url: "ajax.php",
data: { d: "action", a: "GSPC", p: "stats" }
}).done(function(data) {
var stats = data.documentElement.getElementsByTagName("statistiques")[0];
var nbPC = stats.getElementsByTagName("ligne").length;
tableau_body.innerHTML = "";
tableau_body.innerHTML = "";
for (var i = 0; i < nbPC; i++)
{
if (stats.getElementsByTagName("ligne")[i].getAttribute("nom") != "")
{
var lign = document.createElement("div");
lign.className = "elt" + (i%2);
GSPC_addStatLign(lign, stats.getElementsByTagName("ligne")[i].getAttribute("nom"));
var col = document.createElement("span");
col.innerHTML = stats.getElementsByTagName("ligne")[i].getAttribute("nom");
lign.appendChild(col);
var col = document.createElement("span");
col.innerHTML = stats.getElementsByTagName("ligne")[i].getAttribute("nombre");
lign.appendChild(col);
tableau_body.appendChild(lign);
}
}
lign.className += " foot";
},
onFailure: function() { printEtat(3); }
}
);
for (var i = 0; i < nbPC; i++)
{
if (stats.getElementsByTagName("ligne")[i].getAttribute("nom") != "")
{
var lign = document.createElement("div");
lign.className = "elt" + (i%2);
GSPC_addStatLign(lign, stats.getElementsByTagName("ligne")[i].getAttribute("nom"));
var col = document.createElement("span");
col.innerHTML = stats.getElementsByTagName("ligne")[i].getAttribute("nom");
lign.appendChild(col);
var col = document.createElement("span");
col.innerHTML = stats.getElementsByTagName("ligne")[i].getAttribute("nombre");
lign.appendChild(col);
tableau_body.appendChild(lign);
}
}
lign.className += " foot";
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
function GSPC_addStatLign(lign, ligne)
{
lign.onclick = function() { window.scrollTo(0,0); GSPC_viewligne(ligne) };
lign.onclick = function() { window.scrollTo(0,0); GSPC_viewligne(ligne) };
}
function GSPC_viewligne(ligne)
{
$('contenu').innerHTML = "";
var titre = document.createElement("h2");
titre.innerHTML = "Liste des porte-clefs de la ligne " + ligne;
$('contenu').appendChild(titre);
$('#contenu').html("<h2>Liste des porte-clefs de la ligne " + ligne + "</h2>");
GSPC_delay_viewligne(ligne);
GSPC_delay_viewligne(ligne);
}
function GSPC_delay_viewligne(ligne)
{
if (GSPC_origin_liste == false)
GSPC_delay = setTimeout(GSPC_delay_viewligne, 200, ligne);
else
if (GSPC_origin_liste == false)
GSPC_delay = setTimeout(GSPC_delay_viewligne, 200, ligne);
else
{
GSPC_liste = new Array();
for (var i = 0; i < GSPC_origin_liste.length; i++)
{
GSPC_liste = new Array();
for (var i = 0; i < GSPC_origin_liste.length; i++)
{
if (GSPC_origin_liste[i][3] == ligne)
GSPC_liste.push(GSPC_origin_liste[i]);
}
GSPC_lastSort = -1;
GSPC_viewliste();
if (GSPC_origin_liste[i][3] == ligne)
GSPC_liste.push(GSPC_origin_liste[i]);
}
GSPC_lastSort = -1;
GSPC_viewliste();
}
}
function GSPC_addScreen(modif)
{
formulaire = document.createElement("form");
formulaire.id = "add"
formulaire.onsubmit = function(){ checkAndAdd(modif); return false; }
lab_nom = document.createElement("label");
lab_nom.innerHTML = "Nom/marque :";
lab_nom.setAttribute("for", "nompc");
inp_nom = document.createElement("input");
if(modif)
inp_nom.value = GSPC_liste[modif-1][1];
inp_nom.type = "text";
inp_nom.size = "34";
inp_nom.maxLength = "250";
inp_nom.id = "nompc";
formulaire.id = "add";
formulaire.className = "form-horizontal";
formulaire.onsubmit = function() { checkAndAdd(modif); return false; }
formulaire.innerHTML = '<div class="form-group"><label for="nompc" class="col-sm-5 control-label">Nom/marque :</label><div class="col-sm-7"><input type="text" id="nompc" maxlength="250" class="form-control"></div></div> <div class="form-group"><label for="caracpc" class="col-sm-5 control-label">Caractéristiques :</label><div class="col-sm-7"><input type="text" id="caracpc" maxlength="250" class="form-control"></div></div> <div class="form-group"><label for="lignepc" class="col-sm-5 control-label">Ligne :</label><div class="col-sm-7"><input type="text" id="lignepc" maxlength="3" size="5" class="form-control"></div></div> <div class="form-group"><label for="quantitepc" class="col-sm-5 control-label">Quantité :</label><div class="col-sm-7"><select class="form-control" id="quantitepc"><option value="1">Simple</option><option value="2">Double</option><option value="3">Triple</option><option value="4">Quadruple</option></select></div></div>';
lab_carac = document.createElement("label");
lab_carac.innerHTML = "Caractéristiques :";
lab_carac.setAttribute("for", "caracpc");
inp_carac = document.createElement("input");
if(modif)
inp_carac.value = GSPC_liste[modif-1][2];
inp_carac.type = "text";
inp_carac.size = "34";
inp_carac.maxLength = "250";
inp_carac.id = "caracpc";
if(modif)
{
formulaire.innerHTML += '<button type="submit" class="btn btn-primary">Modifier</button>';
lab_lign = document.createElement("label");
lab_lign.innerHTML = "Ligne :";
lab_lign.setAttribute("for", "lignepc");
inp_lign = document.createElement("input");
if(modif)
inp_lign.value = GSPC_liste[modif-1][3];
inp_lign.type = "text";
inp_lign.size = "10";
inp_lign.maxLength = "3";
inp_lign.id = "lignepc";
inp_del = document.createElement("button");
inp_del.type = "button";
inp_del.className = "btn btn-danger";
inp_del.innerHTML = '<span class="glyphicon glyphicon-trash"></span> Supprimer';
inp_del.style.marginLeft = "15px";
formulaire.appendChild(inp_del);
}
else
formulaire.innerHTML += '<button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter</button>';
lab_quan = document.createElement("label");
lab_quan.innerHTML = "Quantité :";
lab_quan.setAttribute("for", "quantitepc");
sel_quan = document.createElement("select");
sel_quan.id = "quantitepc";
sel_quan_1 = document.createElement("option");
sel_quan_1.value = "1";
sel_quan_1.innerHTML = "Simple";
sel_quan_2 = document.createElement("option");
sel_quan_2.value = "2";
sel_quan_2.innerHTML = "Double";
sel_quan_3 = document.createElement("option");
sel_quan_3.value = "3";
sel_quan_3.innerHTML = "Triple";
sel_quan_4 = document.createElement("option");
sel_quan_4.value = "4";
sel_quan_4.innerHTML = "Quadruple";
$('#contenu').append(formulaire);
inp_submit = document.createElement("input");
inp_submit.type = "submit";
if (modif)
inp_submit.value = "Modifier";
else
inp_submit.value = "Ajouter";
inp_submit.style.marginLeft = "165px";
if(modif)
{
$('#nompc').val(GSPC_liste[modif-1][1]);
$('#caracpc').val(GSPC_liste[modif-1][2]);
$('#lignepc').val(GSPC_liste[modif-1][3]);
$('#quantitepc').val(GSPC_liste[modif-1][4]);
}
formulaire.appendChild(lab_nom);
formulaire.appendChild(inp_nom);
formulaire.appendChild(document.createElement("br"));
formulaire.appendChild(lab_carac);
formulaire.appendChild(inp_carac);
formulaire.appendChild(document.createElement("br"));
formulaire.appendChild(lab_lign);
formulaire.appendChild(inp_lign);
formulaire.appendChild(document.createElement("br"));
formulaire.appendChild(lab_quan);
sel_quan.appendChild(sel_quan_1);
sel_quan.appendChild(sel_quan_2);
sel_quan.appendChild(sel_quan_3);
sel_quan.appendChild(sel_quan_4);
formulaire.appendChild(sel_quan);
formulaire.appendChild(document.createElement("br"));
if(modif)
sel_quan.value = GSPC_liste[modif-1][4];
formulaire.appendChild(document.createElement("br"));
formulaire.appendChild(inp_submit);
if (modif)
{
inp_del = document.createElement("input");
inp_del.type = "button";
inp_del.value = "Supprimer";
inp_del.onclick = function() { GSPC_del(modif); };
inp_del.style.marginLeft = "15px";
formulaire.appendChild(inp_del);
}
$('contenu').appendChild(formulaire);
$('nompc').focus();
$('#nompc').focus();
$('#add button.btn-danger').click(function() { GSPC_del(modif); });
confirmation = document.createElement("h3");
confirmation.style.color = "teal";
confirmation.id = "confirm";
$('contenu').appendChild(confirmation);
$('#contenu').append(confirmation);
}
function GSPC_del(modif)
{
$('nompc').disabled = true;
$('caracpc').disabled = true;
$('lignepc').disabled = true;
$('quantitepc').disabled = true;
$('#nompc').prop("disabled", true);
$('#caracpc').prop("disabled", true);
$('#lignepc').prop("disabled", true);
$('#quantitepc').prop("disabled", true);
var ligne = GSPC_liste[modif-1][3];
var ligne = GSPC_liste[modif-1][3];
new Ajax.Request(
'ajax.php?d=action&a=GSPC&p=del',
{
method: 'post',
parameters: {id: GSPC_liste[modif-1][0]},
onSuccess: function(transport, json)
{
if (json.statut != 1)
{
firstLoad();
alert("Vous avez été déconnecté. Le porte-clef n'a pas été enregistré");
}
else
{
$('contenu').innerHTML = "";
confirmation = document.createElement("h2");
confirmation.style.color = "teal";
confirmation.innerHTML = "Porte-clef supprimé avec succès !";
$('contenu').appendChild(confirmation);
$('nbpc').innerHTML = json.nombre;
$.ajax({
url: "ajax.php?d=action&a=GSPC&p=del",
type: "post",
data: { id: GSPC_liste[modif-1][0] },
}).done(function(data) {
if (data.documentElement.getAttribute("statut") != 1)
{
firstLoad();
alert("Vous avez été déconnecté. Le porte-clef n'a pas été supprimé");
}
else
{
$('#contenu').html('<div class="alert alert-success"><strong>Porte-clef supprimé avec succès</strong></div>');
$('#nbpc').innerHTML = data.documentElement.getAttribute("nombre");
GSPC_loadList();
GSPC_delay_viewligne(ligne);
}
},
onFailure: function() { printEtat(3); }
}
);
GSPC_loadList();
GSPC_delay_viewligne(ligne);
}
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
$('contenu').innerHTML = "<h2 class=\"vp\">Veuillez patienter suppression du porte-clef en cours ...</h2>";
$('#contenu').innerHTML = "<h2 class=\"vp\">Veuillez patienter suppression du porte-clef en cours ...</h2>";
}
function checkAndAdd(modif)
{
if(modif)
modif = "&id=" + GSPC_liste[modif-1][0];
else
modif = "";
if(modif)
modif = "&id=" + GSPC_liste[modif-1][0];
else
modif = "";
if ($('nompc').value == "")
{
$('nompc').className = "erreur";
alert('Veuillez indiquer une marque ou un nom !');
$('nompc').focus();
}
else if ($('lignepc').value == "")
{
$('lignepc').className = "erreur";
alert('Veuillez indiquer une ligne !');
$('lignepc').focus();
}
else
{
$('nompc').disabled = true;
$('caracpc').disabled = true;
$('lignepc').disabled = true;
$('quantitepc').disabled = true;
$('#nompc').parent().parent().removeClass("has-error");
$('#lignepc').parent().parent().removeClass("has-error");
if ($('#nompc').val() == "")
{
$('#nompc').parent().parent().addClass("has-error");
alert('Veuillez indiquer une marque ou un nom !');
$('#nompc').focus();
}
else if ($('#lignepc').val() == "")
{
$('#lignepc').parent().parent().addClass("has-error");
alert('Veuillez indiquer une ligne !');
$('#lignepc').focus();
}
else
{
$('#nompc').prop("disabled", true);
$('#caracpc').prop("disabled", true);
$('#lignepc').prop("disabled", true);
$('#quantitepc').prop("disabled", true);
new Ajax.Request(
'ajax.php?d=action&a=GSPC' + modif,
{
method: 'post',
parameters: {nom: $('nompc').value, caracteristique: $('caracpc').value, ligne: $('lignepc').value, quantite: $('quantitepc').value},
onSuccess: function(transport, json)
{
if (json.statut != 1)
{
firstLoad();
alert("Vous avez été déconnecté. Le porte-clef n'a pas été enregistré");
}
else
{
GSPC_loadList();
if(modif)
{
$('contenu').innerHTML = "";
confirmation = document.createElement("h2");
confirmation.style.color = "teal";
confirmation.innerHTML = "Porte-clef modifié avec succès !";
$('contenu').appendChild(confirmation);
$('nbpc').innerHTML = json.nombre;
GSPC_delay_viewligne(lign);
}
else
{
$('nompc').value = "";
$('nompc').className = "";
$('caracpc').value = "";
$('lignepc').className = "";
$('quantitepc').value = 1;
$('nompc').disabled = false;
$('caracpc').disabled = false;
$('lignepc').disabled = false;
$('quantitepc').disabled = false;
$('nbpc').innerHTML = json.nombre;
$('confirm').innerHTML = "Porte-clef ajouté avec succès !";
setTimeout("$('confirm').innerHTML = '';", 3500);
$('nompc').focus();
}
}
},
onFailure: function() { printEtat(3); }
}
);
$.ajax({
url: 'ajax.php?d=action&a=GSPC' + modif,
type: "POST",
data: { nom: escapeHtml($('#nompc').val()),
caracteristique: escapeHtml($('#caracpc').val()),
ligne: escapeHtml($('#lignepc').val()),
quantite: escapeHtml($('#quantitepc').val())
},
}).done(function(data) {
if (data.documentElement.getAttribute("statut") != 1)
{
firstLoad();
alert("Vous avez été déconnecté. Le porte-clef n'a pas été enregistré");
}
else
{
GSPC_loadList();
if(modif)
{
lign = $('lignepc').value;
$('contenu').innerHTML = "<h2 class=\"vp\">Veuillez patienter, modification du porte-clef en cours ...</h2>";
$('#contenu').html('<div class="alert alert-success">Porte-clef modifié avec succès !</div>');
$('#nbpc').html(data.documentElement.getAttribute("nombre"));
GSPC_delay_viewligne(lign);
}
else
{
$('#nompc').val("");
$('#nompc').parent().parent().removeClass("has-error");
$('#caracpc').val("");
$('#lignepc').parent().parent().removeClass("has-error");
$('#quantitepc').val(1);
$('#nompc').prop("disabled", false);
$('#caracpc').prop("disabled", false);
$('#lignepc').prop("disabled", false);
$('#quantitepc').prop("disabled", false);
$('#nbpc').html(data.documentElement.getAttribute("nombre"));
$('#confirm').html('<div class="alert alert-success">Porte-clef ajouté avec succès !</div>');
setTimeout("$('confirm').innerHTML = '';", 3500);
$('#nompc').focus();
}
}
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
if(modif)
{
lign = $('#lignepc').val();
$('#contenu').html("<h2 class=\"vp\">Veuillez patienter, modification du porte-clef en cours ...</h2>");
}
}
}
function GSPC_viewliste()
{
var pagination = document.createElement("div");
pagination.className = "pagination top";
pagination.id = "pagination1";
$('contenu').appendChild(pagination);
var pagination = document.createElement("div");
pagination.className = "pagination top";
pagination.id = "pagination1";
$('#contenu').append(pagination);
var tableau = document.createElement("div");
tableau.className = "table cols3";
tableau.id = "list";
var tableau_head = document.createElement("div");
tableau_head.className = "head";
var head_th = document.createElement("span");
head_th.innerHTML = "Nom/Marque";
head_th.onclick = function(){ GSPC_showliste(1, 0); }
tableau_head.appendChild(head_th);
var head_th = document.createElement("span");
head_th.innerHTML = "Caractéristique";
head_th.onclick = function(){ GSPC_showliste(2, 0); }
tableau_head.appendChild(head_th);
var head_th = document.createElement("span");
head_th.innerHTML = "Ligne";
head_th.onclick = function(){ GSPC_showliste(3, 0); }
tableau_head.appendChild(head_th);
tableau.appendChild(tableau_head);
var tableau_body = document.createElement("div");
tableau_body.className = "body";
tableau_body.id = "bodyList";
tableau_body.innerHTML = '<div class="lign elt0 foot">Chargement de la liste en cours ... <img src="applications/GSPC/loader.gif" alt="Veuillez patienter"></div>';
tableau.appendChild(tableau_body);
$('contenu').appendChild(tableau);
var tableau = document.createElement("div");
tableau.className = "table cols3";
tableau.id = "list";
var tableau_head = document.createElement("div");
tableau_head.className = "head";
var head_th = document.createElement("span");
head_th.innerHTML = "Nom/Marque";
head_th.onclick = function(){ GSPC_showliste(1, 0); }
tableau_head.appendChild(head_th);
var head_th = document.createElement("span");
head_th.innerHTML = "Caractéristique";
head_th.onclick = function(){ GSPC_showliste(2, 0); }
tableau_head.appendChild(head_th);
var head_th = document.createElement("span");
head_th.innerHTML = "Ligne";
head_th.onclick = function(){ GSPC_showliste(3, 0); }
tableau_head.appendChild(head_th);
tableau.appendChild(tableau_head);
var tableau_body = document.createElement("div");
tableau_body.className = "body";
tableau_body.id = "bodyList";
tableau_body.innerHTML = '<div class="lign elt0 foot">Chargement de la liste en cours ... <img src="applications/GSPC/loader.gif" alt="Veuillez patienter"></div>';
tableau.appendChild(tableau_body);
$('#contenu').append(tableau);
var pagination = document.createElement("div");
pagination.className = "pagination bottom";
pagination.id = "pagination2";
$('contenu').appendChild(pagination);
var pagination = document.createElement("div");
pagination.className = "pagination bottom";
pagination.id = "pagination2";
$('#contenu').append(pagination);
GSPC_showliste(-1, 0);
GSPC_showliste(-1, 0);
}
function GSPC_showliste(tri, page)
{
if (GSPC_origin_liste == false)
setTimeout(GSPC_showliste, 200, tri);
else
{
if (GSPC_liste == false)
GSPC_liste = GSPC_origin_liste;
if (GSPC_origin_liste == false)
setTimeout(GSPC_showliste, 200, tri);
else
{
if (GSPC_liste == false)
GSPC_liste = GSPC_origin_liste;
//On tente un tri
if (GSPC_lastSort != tri)
{
$('bodyList').innerHTML = '<div class="lign elt0 foot">Tri de la liste en cours ...</div>';
GSPC_liste = GSPC_liste.sort(function(a,b){return a[tri].localeCompare(b[tri]);});
GSPC_lastSort = tri;
}
//On tente un tri
if (GSPC_lastSort != tri)
{
$('#bodyList').html('<div class="lign elt0 foot">Tri de la liste en cours ...</div>');
GSPC_liste = GSPC_liste.sort(function(a,b){return a[tri].localeCompare(b[tri]);});
GSPC_lastSort = tri;
}
nbPages = Math.ceil(GSPC_liste.length / nbParPage);
$('pagination1').innerHTML = "";
$('pagination2').innerHTML = "";
for (var i = 0; i < 4 && i < nbPages; i++)
GSPC_addLinkPagination(i);
if (page > 5 && i < nbPages)
{
$('pagination1').innerHTML += "...";
$('pagination2').innerHTML += "...";
}
for (var i = (page < 6?4:page - 2); (i < page + 3 && i < nbPages); i++)
GSPC_addLinkPagination(i);
if (page <= 5 && i < nbPages)
{
$('pagination1').innerHTML += "...";
$('pagination2').innerHTML += "...";
for (var i = Math.ceil(nbPages/2) - 2; i < nbPages/2 + 2; i++)
GSPC_addLinkPagination(i);
}
if (page + 3 < nbPages - 4)
{
$('pagination1').innerHTML += "...";
$('pagination2').innerHTML += "...";
}
for (var i = (page + 3 >= nbPages - 4?page + 3:nbPages - 4); (i < nbPages); i++)
GSPC_addLinkPagination(i);
nbPages = Math.ceil(GSPC_liste.length / nbParPage);
$('#pagination1').html("");
$('#pagination2').html("");
for (var i = 0; i < 4 && i < nbPages; i++)
GSPC_addLinkPagination(i);
if (page > 5 && i < nbPages)
{
$('#pagination1').append("...");
$('#pagination2').append("...");
}
for (var i = (page < 6?4:page - 2); (i < page + 3 && i < nbPages); i++)
GSPC_addLinkPagination(i);
if (page <= 5 && i < nbPages)
{
$('#pagination1').append("...");
$('#pagination2').append("...");
for (var i = Math.ceil(nbPages/2) - 2; i < nbPages/2 + 2; i++)
GSPC_addLinkPagination(i);
}
if (page + 3 < nbPages - 4)
{
$('#pagination1').append("...");
$('#pagination2').append("...");
}
for (var i = (page + 3 >= nbPages - 4?page + 3:nbPages - 4); (i < nbPages); i++)
GSPC_addLinkPagination(i);
start = page * nbParPage;
$('bodyList').innerHTML = "";
start = page * nbParPage;
$('#bodyList').html("");
for (var i = 0; i < nbParPage && i + start < GSPC_liste.length; i++)
{
var lign = document.createElement("div");
lign.className = "elt" + (i%2);
GSPC_addLinkPC(lign, i + start);
var col = document.createElement("span");
col.innerHTML = GSPC_liste[i + start][1];
lign.appendChild(col);
var col = document.createElement("span");
col.innerHTML = GSPC_liste[i + start][2];
lign.appendChild(col);
var col = document.createElement("span");
col.innerHTML = GSPC_liste[i + start][3];
lign.appendChild(col);
$('bodyList').appendChild(lign);
}
lign.className += " foot"
}
for (var i = 0; i < nbParPage && i + start < GSPC_liste.length; i++)
{
var lign = document.createElement("div");
lign.className = "elt" + (i%2);
GSPC_addLinkPC(lign, i + start);
var col = document.createElement("span");
col.innerHTML = GSPC_liste[i + start][1];
lign.appendChild(col);
var col = document.createElement("span");
col.innerHTML = GSPC_liste[i + start][2];
lign.appendChild(col);
var col = document.createElement("span");
col.innerHTML = GSPC_liste[i + start][3];
lign.appendChild(col);
$('#bodyList').append(lign);
}
lign.className += " foot"
}
}
function GSPC_addLinkPagination(page)
{
var lnkP = document.createElement("a");
lnkP.href = "javascript:GSPC_showliste(" + GSPC_lastSort + ", " + page + ");";
lnkP.innerHTML = page+1;
$('pagination1').appendChild(lnkP);
var lnkP = document.createElement("a");
lnkP.href = "javascript:GSPC_showliste(" + GSPC_lastSort + ", " + page + ");";
lnkP.innerHTML = page+1;
$('pagination2').appendChild(lnkP);
var lnkP = document.createElement("a");
lnkP.href = "javascript:GSPC_showliste(" + GSPC_lastSort + ", " + page + ");";
lnkP.innerHTML = page + 1;
$('#pagination1').append(lnkP);
var lnkP = document.createElement("a");
lnkP.href = "javascript:GSPC_showliste(" + GSPC_lastSort + ", " + page + ");";
lnkP.innerHTML = page + 1;
$('#pagination2').append(lnkP);
}
function GSPC_addLinkPC(elt, idPC)
{
elt.onclick = function() {
$('contenu').innerHTML = "";
var titre = document.createElement("h2");
titre.innerHTML = "Modification d'un porte-clef";
$('contenu').appendChild(titre);
elt.onclick = function() {
$('#contenu').html('<h2>Modification d\'un porte-clef</h2>');
GSPC_addScreen(idPC+1);
}
GSPC_addScreen(idPC + 1);
}
}
function GSPC_apropos()
{
aproposApp("GSPC", "contenu");
aproposApp("GSPC", "contenu");
}

View File

@ -19,7 +19,7 @@ body {
);
font-family: serif;
min-height: 80%;
min-height: 80%;
}
a:link, a:visited {
@ -59,7 +59,7 @@ h1 {
border-radius: 17px;
box-shadow: 3px 4px 5px #444466;
height: 127px;
height: 200px;
margin: auto;
padding: 20px;
text-align: left;
@ -91,7 +91,7 @@ h1 {
left: 0px;
list-style: none;
margin: 0;
-webkit-padding-start: 0;
padding: 0;
position: fixed;
text-align: center;
top: 0px;
@ -140,42 +140,13 @@ form#add {
border: 1px solid #8A77A1;
border-radius: 25px;
box-shadow: 2px 2px 5px #333355;
height: 205px;
height: 250px;
margin: auto;
padding: 13px;
padding: 14px;
text-align: left;
width: 456px;
}
label {
float: left;
display: block;
font-weight: bold;
margin: 10px 7px 10px 0;
text-align: right;
width: 170px;
}
label:hover {
text-decoration: underline;
}
input[type=text], select {
margin: 10px 0;
transition: background 0.75s;
-moz-transition: background 0.75s;
-webkit-transition: background 0.75s;
-o-transition: background 0.75s;
}
input, select {
background: #00EAF5;
border: #009AA5 solid 1px;
border-radius: 3px;
margin-top: 5px;
}
input:hover, input:focus, select:hover, select:focus {
background: #95cdff;
}
input#nompc {
font-variant: small-caps;
}
@ -183,11 +154,6 @@ input#lignepc {
text-transform:uppercase;
}
input.erreur, select.erreur {
background: #CC0000;
border: #A59A00 solid 1px;
}
.table {
border: 1px solid black;
border-radius: 10px;

347
htdocs/css/bootstrap-theme.css vendored Normal file
View File

@ -0,0 +1,347 @@
/*!
* Bootstrap v3.1.1 (http://getbootstrap.com)
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-primary {
background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #2b669a;
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #2d6ca2;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #2d6ca2;
border-color: #2b669a;
}
.btn-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #3e8f3e;
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #28a4c9;
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.btn-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #e38d13;
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-color: #b92c28;
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #357ebd;
background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
background-repeat: repeat-x;
}
.navbar-default {
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
}
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
}
.navbar-inverse {
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
background-repeat: repeat-x;
}
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
background-image: linear-gradient(to bottom, #222 0%, #282828 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
background-repeat: repeat-x;
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
}
.alert-success {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
background-repeat: repeat-x;
border-color: #b2dba1;
}
.alert-info {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.alert-warning {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
background-repeat: repeat-x;
border-color: #f5e79e;
}
.alert-danger {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.progress {
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar {
background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-success {
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-info {
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-warning {
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
background-repeat: repeat-x;
}
.progress-bar-danger {
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
background-repeat: repeat-x;
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #3071a9;
background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
background-repeat: repeat-x;
border-color: #3278b3;
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
}
.panel-default > .panel-heading {
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
background-repeat: repeat-x;
}
.panel-primary > .panel-heading {
background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
background-repeat: repeat-x;
}
.panel-success > .panel-heading {
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
background-repeat: repeat-x;
}
.panel-info > .panel-heading {
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
background-repeat: repeat-x;
}
.panel-warning > .panel-heading {
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
background-repeat: repeat-x;
}
.panel-danger > .panel-heading {
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
background-repeat: repeat-x;
}
.well {
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
background-repeat: repeat-x;
border-color: #dcdcdc;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
/*# sourceMappingURL=bootstrap-theme.css.map */

File diff suppressed because one or more lines are too long

7
htdocs/css/bootstrap-theme.min.css vendored Normal file

File diff suppressed because one or more lines are too long

5785
htdocs/css/bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

7
htdocs/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

67
htdocs/css/common.css Normal file
View File

@ -0,0 +1,67 @@
body {
background: url('/images/background.jpg') fixed #E1E2E4;
font-family: sans-serif;
}
#bt-menu {
position: fixed;
left: 7px;
top: 7px;
z-index: 9999;
}
#bt-menu button img {
width: 35px;
}
#menu .nameApp {
font-family: serif;
text-align: center;
font-weight: bold;
}
div#state {
background-color: #CDF;
border-right: solid 1px #89B;
border-top: solid 1px #89B;
border-radius: 5px;
bottom: 0px;
font-size: small;
font-style: italic;
left: 0px;
padding: 1px 4px;
position: fixed;
}
div.autocomplete {
position: absolute;
width: 500px;
background-color: white;
border: 1px solid #888;
margin: 0px;
padding: 0px;
}
div.autocomplete ul {
list-style-type: none;
margin: 0px;
padding: 0px;
max-height: 20em;
overflow: auto;
}
div.autocomplete ul li.selected {
background-color: #ffb;
}
div.autocomplete ul li {
list-style-type:none;
display: block;
margin: 0;
padding: 2px;
cursor: pointer;
}
div.autocomplete ul li span.informal {
color: gray;
}

105
htdocs/css/style.css Normal file
View File

@ -0,0 +1,105 @@
@font-face
{
font-family: title;
src: url('/fonts/kidprint.ttf');
}
h1 {
color: #75903b;
}
h2 {
color: #7f9a48;
}
h3 {
color: #89a355;
}
h4, h5, h6 {
color: #95ae64;
}
div#logo {
background: transparent url('/images/logog.png') no-repeat 0 0;
display: block;
height: 312px;
text-align: right;
margin: auto;
width: 999px;
}
div#logo img#etatAvance {
display: block;
float: right;
margin-top: 80px;
margin-right: 170px;
}
div#logo img#titre {
clear: right;
display: block;
float: right;
margin-top: 79px;
margin-right: 127px;
}
/* Pages */
fieldset.connexion {
background: #e3e3e3;
border-radius: 10px;
box-shadow: 0px 0px 11px #555;
margin: auto;
min-width: 420px;
width: 420px;
}
dl.application {
background: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.31, #15DD47),
color-stop(0.66, #31FF64)
);
background: -moz-linear-gradient(
center bottom,
#15DD47 31%,
#31FF64 66%
);
border: 2px solid black;
border-radius: 10px;
box-shadow: 0px 0px 11px #11CC99;
padding: 5px;
text-align: left;
transition: background 0.5s;
-moz-transition: background 0.5s;
-webkit-transition: background 0.5s;
-o-transition: background 0.5s;
}
dl.application.construction {
box-shadow: 0px 0px 11px #e9771a;
}
dl.application.alpha {
box-shadow: 0px 0px 11px #db302d;
}
dl.application.beta {
box-shadow: 0px 0px 11px #8c9c4a;
}
dl.application:hover {
background-image: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.2, #3082E2),
color-stop(0.6, #4D9CFF)
);
background-image: -moz-linear-gradient(
center bottom,
#3082E2 20%,
#4D9CFF 60%
);
}
dl.application dt {
font-weight: bold;
font-size: 130%;
}

Binary file not shown.

View File

@ -0,0 +1,229 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
<font-face units-per-em="1200" ascent="960" descent="-240" />
<missing-glyph horiz-adv-x="500" />
<glyph />
<glyph />
<glyph unicode="&#xd;" />
<glyph unicode=" " />
<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
<glyph unicode="&#xa0;" />
<glyph unicode="&#x2000;" horiz-adv-x="652" />
<glyph unicode="&#x2001;" horiz-adv-x="1304" />
<glyph unicode="&#x2002;" horiz-adv-x="652" />
<glyph unicode="&#x2003;" horiz-adv-x="1304" />
<glyph unicode="&#x2004;" horiz-adv-x="434" />
<glyph unicode="&#x2005;" horiz-adv-x="326" />
<glyph unicode="&#x2006;" horiz-adv-x="217" />
<glyph unicode="&#x2007;" horiz-adv-x="217" />
<glyph unicode="&#x2008;" horiz-adv-x="163" />
<glyph unicode="&#x2009;" horiz-adv-x="260" />
<glyph unicode="&#x200a;" horiz-adv-x="72" />
<glyph unicode="&#x202f;" horiz-adv-x="260" />
<glyph unicode="&#x205f;" horiz-adv-x="326" />
<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,31 +1,50 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<title>.: Pommultimédia 4 home :.</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="common.css" type="text/css" media="all">
<link rel="stylesheet" href="style.css" type="text/css" media="all" id="main_thm">
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/src/effects.js"></script>
<script type="text/javascript" src="js/src/controls.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript" src="js/pa4h.js"></script>
</head>
<body id="body">
<div id="btMenu"><span>Menu</span></div>
<ul id="menu" class="submenu"></ul>
<div id="logo">
<img src="images/etats/alpha.png" alt="Alpha" id="etatAvance" />
<img src="images/titres/bienvenue.png" alt="Bienvenue" id="titre" />
</div>
<div id="corps">
<h1>Bienvenue sur le serveur <em>Pommultimédia for home</em> !</h1>
<noscript>
<h2 style="color: #FF0000;"><em>Pommultimédia for home</em> nécessite que votre navigateur supporte le JavaScript !</h2>
<p style="color: #FF0000;">Si vous utilisez un navigateur supportant cette technologie, veuillez l'activer pour pouvoir accéder au contenu disponible.<br /><br />Si votre navigateur ne supporte pas cette technologie, <a href="http://www.mozilla-europe.org/">téléchargez gratuitement Firefox</a> !</p>
</noscript>
</div>
<div id="etat">Détection du JavaScript ...</div>
</body>
<head>
<title>.: Pommultimédia 4 home :.</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" media="all">
<link rel="stylesheet" href="css/bootstrap-theme.min.css" type="text/css" media="all">
<link rel="stylesheet" href="css/common.css" type="text/css" media="all">
<link rel="stylesheet" href="css/style.css" type="text/css" media="all" id="main_thm">
<!-- <script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/src/effects.js"></script>
<script type="text/javascript" src="js/src/controls.js"></script>-->
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript" src="js/pa4h.js"></script>
</head>
<body id="body">
<div class="btn-group" id="bt-menu">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown">
<img src="favicon.ico" alt="Pomme"> <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" id="menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div>
<div id="logo">
<img src="images/etats/alpha.png" alt="Alpha" id="etatAvance">
<img src="images/titres/bienvenue.png" alt="Bienvenue" id="titre">
</div>
<div id="corps">
<h1>Bienvenue sur le serveur <em>Pommultimédia for home</em> !</h1>
<noscript>
<h2 style="color: red;"><em>Pommultimédia for home</em> nécessite que votre navigateur supporte le JavaScript !</h2>
<p style="color: red;">Si vous utilisez un navigateur supportant cette technologie, veuillez l'activer pour pouvoir accéder au contenu disponible.<br /><br />Si votre navigateur ne supporte pas cette technologie, <a href="https://www.mozilla.org/firefox/">téléchargez gratuitement Firefox</a> !</p>
</noscript>
</div>
<div id="state">Détection du JavaScript ...</div>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

View File

@ -39,7 +39,7 @@ Application.prototype.getHomeElt = function()
var appDescription = document.createElement("dd");
appDescription.innerHTML = this.description;
app.observe('click', this.load.bind(this));
$(app).bind('click', this.load.bind(this));
app.appendChild(appTitle);
app.appendChild(appDescription);
@ -49,158 +49,138 @@ Application.prototype.getHomeElt = function()
Application.prototype.load = function()
{
printEtat(6);
var test = new Ajax.Request(
'ajax.php',
{
method: 'get',
parameters: {d: "display", a: this.dir},
onSuccess: this.loaded.bind(this),
onFailure: function() { printEtat(3); }
}
);
printState(6);
$.ajax({
url: "ajax.php",
data: {d: "display", a: this.dir},
}).done(this.loaded.bind(this)).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
Application.prototype.loaded = function(transport, json)
Application.prototype.loaded = function(data)
{
clearScreen();
var display = transport.responseXML.documentElement.getElementsByTagName("display")[0];
var property = transport.responseXML.documentElement.getElementsByTagName("property")[0];
var display = data.documentElement.getElementsByTagName("display")[0];
var property = data.documentElement.getElementsByTagName("property")[0];
if (display.getElementsByTagName("titre")[0])
$('titre').src = imgTitres_dir + display.getElementsByTagName("titre")[0].firstChild.data;
$('#titre').prop("src", imgTitres_dir + display.getElementsByTagName("titre")[0].firstChild.data);
if (display.getElementsByTagName("css"))
{
//On supprime le style par défaut
if ($("main_thm"))
document.getElementsByTagName('head')[0].removeChild($("main_thm"));
//On supprime le style par défaut
$("#main_thm").remove();
var styles = display.getElementsByTagName("css");
for (i = styles.length - 1; i >= 0; i--)
{
var css_file = document.createElement("link");
css_file.type = 'text/css';
css_file.rel = 'stylesheet';
css_file.className = 'app';
if (styles[i].getAttribute("media"))
css_file.media = styles[i].getAttribute("media");
css_file.href = "applications/" + this.dir + "/" + styles[i].firstChild.data;
var styles = display.getElementsByTagName("css");
for (i = styles.length - 1; i >= 0; i--)
{
var css_file = document.createElement("link");
css_file.type = 'text/css';
css_file.rel = 'stylesheet';
css_file.className = 'app';
if (styles[i].getAttribute("media"))
css_file.media = styles[i].getAttribute("media");
css_file.href = "applications/" + this.dir + "/" + styles[i].firstChild.data;
document.getElementsByTagName('head')[0].appendChild(css_file);
}
document.getElementsByTagName('head')[0].appendChild(css_file);
}
}
if (display.getElementsByTagName("script"))
{
var scripts = display.getElementsByTagName("script");
for (i = scripts.length - 1; i >= 0; i--)
{
js_file = document.createElement("script");
js_file.type = 'text/javascript';
js_file.className = 'app';
js_file.src = "applications/" + this.dir + "/" + scripts[i].firstChild.data;
js_file.defer = true;
var scripts = display.getElementsByTagName("script");
for (i = scripts.length - 1; i >= 0; i--)
{
js_file = document.createElement("script");
js_file.type = 'text/javascript';
js_file.className = 'app';
js_file.src = "applications/" + this.dir + "/" + scripts[i].firstChild.data;
js_file.defer = true;
document.getElementsByTagName('head')[0].appendChild(js_file);
}
document.getElementsByTagName('head')[0].appendChild(js_file);
}
}
if (display.getElementsByTagName("background").length > 0)
$('body').style.backgroundImage = "url(" + display.getElementsByTagName("background")[0].firstChild.data + ")";
$('#body').css("backgroundImage", "url(" + display.getElementsByTagName("background")[0].firstChild.data + ")");
var etat;
if (property.getElementsByTagName("etatAvancement").length > 0)
etat = property.getElementsByTagName("etatAvancement")[0].firstChild.data;
etat = property.getElementsByTagName("etatAvancement")[0].firstChild.data;
else
etat = "";
etat = "";
if (etat == "En construction" || etat == "en construction" || etat == "enconstruction" || etat == "construction" || etat == "c")
$('etatAvance').src = "images/etats/construction.png";
$('#etatAvance').prop("src", "images/etats/construction.png");
else if (etat == "Alpha" || etat == "alpha" || etat == "a")
$('etatAvance').src = "images/etats/alpha.png";
$('#etatAvance').prop("src", "images/etats/alpha.png");
else if (etat == "Beta" || etat == "beta" || etat == "Béta" || etat == "béta" || etat == "b")
$('etatAvance').src = "images/etats/beta.png";
$('#etatAvance').prop("src", "images/etats/beta.png");
else
$('etatAvance').src = "images/etats/final.png";
$('#etatAvance').prop("src", "images/etats/final.png");
//On affiche la page
if (display.getElementsByTagName('body')[0])
$('corps').innerHTML = display.getElementsByTagName('body')[0].firstChild.data;
$('#corps').html(display.getElementsByTagName('body')[0].firstChild.data);
//On prépare le menu
if (property.getElementsByTagName("menu").length > 0)
this.menu = eval(property.getElementsByTagName("menu")[0].firstChild.data);
this.menu = eval(property.getElementsByTagName("menu")[0].firstChild.data);
this.genMenu(username != "");
//On lance l'application
if (display.getElementsByTagName("js")[0])
{
var scripts = display.getElementsByTagName("js");
for (i = scripts.length - 1; i >= 0; i--)
eval(scripts[i].firstChild.data);
var scripts = display.getElementsByTagName("js");
for (i = scripts.length - 1; i >= 0; i--)
eval(scripts[i].firstChild.data);
runApplication(property, display, json);
runApplication(property, display);
}
else
setTimeout("runApplication" + this.dir + "(" + property + ", " + display + ", " + json + ");", 1);
// setTimeout("alert('test')", 0);
setTimeout("runApplication" + this.dir + "(" + property + ", " + display + ");", 1);
printEtat(0);
printState(0);
}
Application.prototype.genMenu = function(online)
{
//On supprime tous les éléments du menu actuel
clearNode($('menu'));
$('#menu').empty();
//On ajoute le titre
var item = document.createElement("li");
item.innerHTML = this.name;
item.id = "nameApp";
$('menu').appendChild(item);
$('#menu').append('<li class="nameApp">' + this.name + "</li>");
//Lien vers la page d'accueil
var item = document.createElement("li");
item.onclick = function() { hideShownMenu(); firstLoad(); };
item.innerHTML = "Accueil";
if (online)
item.className = "item";
else
item.className = "item hr";
$('menu').appendChild(item);
$('#menu').append(newMenuItem("Accueil", firstLoad));
//Lien de déconnexion
if (online)
{
var item = document.createElement("li");
item.onclick = function() { hideShownMenu(); deconnexion(); };
item.innerHTML = "Déconnexion";
item.className = "item hr";
$('menu').appendChild(item);
}
$('#menu').append(newMenuItem("Déconnexion", deconnexion));
$('#menu').append('<li class="divider"></li>');
//On insère les éléments de l'app
if (this.menu)
{
for (var i = this.menu.length - 1; i >= 0; i--)
addMenuItem(this.menu[i]["text"], this.menu[i]["eventClick"]);
for (var i = this.menu.length - 1; i >= 0; i--)
addMenuItem(this.menu[i]["text"], this.menu[i]["eventClick"]);
}
//On insère le about app
var item = document.createElement("li");
item.observe('click', this.about.bind(this));
item.innerHTML = "À propos de ...";
item.className = "item hr";
$('menu').appendChild(item);
$('#menu').append(newMenuItem("À propos de ...",
function() { this.about.bind(this); },
"about-app"));
$('#menu').append('<li class="divider"></li>');
//Lien vers la page à propos du site
var item = document.createElement("li");
item.onclick = function() { hideShownMenu(); loadPage('aproposdusite'); };
item.innerHTML = "À propos du site";
item.className = "item";
$('menu').appendChild(item);
$('#menu').append(newMenuItem("À propos du site",
function() { loadPage('aproposdusite'); },
"about-PA4home"));
}
Application.prototype.about = function()

1951
htdocs/js/bootstrap.js vendored Normal file

File diff suppressed because it is too large Load Diff

6
htdocs/js/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

8829
htdocs/js/jquery.js vendored Normal file

File diff suppressed because it is too large Load Diff

6
htdocs/js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,195 +1,180 @@
var imgTitres_dir = "images/titres/";
var imgTitres_dir = "/images/titres/";
var username = "";
var apps = Array();
function clearNode(node)
String.prototype.isInt = function()
{
if (node.hasChildNodes())
{
while (node.childNodes.length >= 1)
node.removeChild(node.firstChild);
}
var re = new RegExp("^-?[\\d]+$");
return this.match(re);
}
Array.prototype.in_array = function(v)
{
for(var i = 0, l = this.length; i < l; i++)
{
if(this[i] == v)
return true;
}
return false;
}
window.onload = function()
{
printEtat(1);
clearScreen();
firstLoad();
document.getElementById('btMenu').onclick = function(){
showMenu();
}
document.getElementById('btMenu').onmouseout = function(){
setHideMenuTimeout();
}
document.getElementById('menu').onmouseover = function(){
showMenu();
}
document.getElementById('menu').onmouseout = function(){
setHideMenuTimeout();
}
printState(1);
clearScreen();
firstLoad();
}
function firstLoad()
{
new Ajax.Request(
'ajax.php',
{
onSuccess: function(transport, json)
{
printEtat(2);
if (json.statut == 1)
{
username = json.username;
$.ajax({
url: "ajax.php",
}).done(function(data) {
printState(2);
if (data.documentElement.getAttribute("statut") == 1)
{
username = data.documentElement.getAttribute("username");
if (window.sessionStorage && window.sessionStorage.username == username)
{
//On restaure l'application en cours
if (window.sessionStorage && window.sessionStorage.username == username)
{
//On restaure l'application en cours
}
else
page_accueil();
}
else
loadPage("connexion");
printEtat(0);
},
onFailure: function() { printEtat(3); }
}
);
}
else
page_accueil();
}
else
loadPage("connexion");
printState(0);
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
function deconnexion()
{
printEtat(1);
clearScreen();
new Ajax.Request(
'ajax.php',
{
method: 'get',
parameters: {d: "logout"},
onSuccess: function(transport, json) { firstLoad(); },
onFailure: function() { printEtat(3); }
}
);
printState(1);
clearScreen();
$.ajax({
url: "ajax.php",
data: {d: "logout"},
}).done(function(data) {
firstLoad();
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
function printEtat(id)
function printState(id, appendText)
{
if (id == 0)
$('etat').innerHTML = "";
else if (id == 1)
$('etat').innerHTML = "Connexion au serveur en cours ...";
else if (id == 2)
$('etat').innerHTML = "Connexion établie, affichage de la page ...";
else if (id == 3)
$('etat').innerHTML = "Impossible de contacter le serveur, délais d'attente expiré !";
else if (id == 4)
$('etat').innerHTML = "Vérification des informations en cours ...";
else if (id == 5)
$('etat').innerHTML = "Récupération de la liste des applications ...";
else if (id == 6)
$('etat').innerHTML = "Chargement de l'application ...";
else
$('etat').innerHTML = "État inconnu : #" + id;
var state;
var color = null;
switch(id)
{
case 0:
state = "";
break;
case 1:
state = "Connexion au serveur en cours ...";
break;
case 2:
state = "Connexion établie, affichage de la page ...";
color = "green";
break;
case 3:
state = "Impossible de contacter le serveur, délais d'attente expiré !";
color = "red";
break;
case 4:
state = "Vérification des informations en cours ...";
color = "orange";
break;
case 5:
state = "Récupération de la liste des applications ...";
color = "green";
break;
case 6:
state = "Chargement de l'application ...";
break;
case 7:
state = "Une erreur est survenue";
color = "red";
break;
default:
state = "État inconnu : #" + id;
};
if (appendText != null)
state += ": " + appendText;
$('#state').html(state);
if (color)
$('#state').css("background-color", color);
else
$('#state').css("background-color", "#CDF");
}
function clearScreen()
{
if ($('logo').style.display != "block")
$('logo').style.display = "block";
$('#logo').css("display", "block");
genMenu(username != "");
$('corps').innerHTML = "";
genMenu(username != "");
$('#corps').html("");
$('etatAvance').src = "images/etats/alpha.png";
$('#etatAvance').prop("src", "images/etats/alpha.png");
var head = document.getElementsByTagName("head")[0];
//On décharge les fichiers JavaScript non standards
if (head.getElementsByTagName("script")[4])
{
var scripts = head.getElementsByTagName("script");
for (i = scripts.length - 1; i >= 0; i--)
{
if (scripts[i].className == "app")
head.removeChild(scripts[i]);
}
}
//On décharge les fichiers JavaScript et CSS non standards
$("script").remove(".app");
$("link").remove(".app");
//Idem avec les fichiers CSS
if (head.getElementsByTagName("link")[3])
{
var links = head.getElementsByTagName("link");
for (i = links.length - 1; i >= 0; i--)
{
if (links[i].className == "app")
head.removeChild(links[i]);
}
}
//On ajoute le thème par défaut
if (!$("#main_thm").length)
$("head").append('<link type="text/css" rel="stylesheet" media="all" id="main_thm" href="css/style.css">');
}
//On ajoute le thème par défaut
if (!$("main_thm"))
{
var css_file = document.createElement("link");
css_file.type = 'text/css';
css_file.rel = 'stylesheet';
css_file.media = 'all';
css_file.id = 'main_thm';
css_file.href = "style.css";
document.getElementsByTagName('head')[0].appendChild(css_file);
}
function newMenuItem(text, onclick, link)
{
item = document.createElement("li");
itemLink = document.createElement("a");
if (link)
itemLink.href = "#" + link;
else
itemLink.href = "#";
itemLink.onclick = onclick;
itemLink.innerHTML = text;
item.appendChild(itemLink);
return item;
}
function genMenu(online)
{
//On supprime tous les éléments du menu
clearNode($('menu'));
$('#menu').empty();
//On ajoute le titre
var item = document.createElement("li");
item.innerHTML = "PA4home";
item.id = "nameApp";
$('menu').appendChild(item);
$('#menu').append('<li class="nameApp">PA4home</li>');
//Lien vers la page d'accueil
item = document.createElement("li");
item.onclick = function() { hideShownMenu(); firstLoad(); };
item.innerHTML = "Accueil";
if (online)
item.className = "item";
else
item.className = "item hr";
$('menu').appendChild(item);
$('#menu').append(newMenuItem("Accueil", firstLoad));
//Lien de déconnexion
if (online)
{
item = document.createElement("li");
item.onclick = function() { hideShownMenu(); deconnexion(); };
item.innerHTML = "Déconnexion";
item.className = "item hr";
$('menu').appendChild(item);
}
$('#menu').append(newMenuItem("Déconnexion", deconnexion));
$('#menu').append('<li class="divider"></li>');
//Lien vers la page à propos du site
item = document.createElement("li");
item.onclick = function() { hideShownMenu(); loadPage('aproposdusite'); };
item.innerHTML = "À propos du site";
item.className = "item";
$('menu').appendChild(item);
$('#menu').append(newMenuItem("À propos du site",
function() { loadPage('aproposdusite'); },
"about-PA4home"));
}
function addMenuItem(text, iven)
{
var item = document.createElement("li");
item.onclick = function(e) {
hideShownMenu();
eval(iven);
};
item.innerHTML = text;
item.className = "item";
$('menu').appendChild(item);
$('#menu').append(newMenuItem(text,
function() { eval(iven) })
);
}
/**************************************
@ -198,101 +183,111 @@ function addMenuItem(text, iven)
function loadPage(nom)
{
clearScreen();
printEtat(1);
new Ajax.Request(
'ajax.php',
{
method: 'get',
parameters: {d: "page", p: nom},
onSuccess: function(transport, json)
{
printEtat(2);
$('titre').src = imgTitres_dir + transport.responseXML.documentElement.getElementsByTagName("titre")[0].firstChild.data;
$('corps').innerHTML = transport.responseXML.documentElement.getElementsByTagName("body")[0].firstChild.data;
clearScreen();
printState(1);
if (transport.responseXML.documentElement.getElementsByTagName("js"))
{
var scripts = transport.responseXML.documentElement.getElementsByTagName("js");
var nbScripts = scripts.length;
for (i = 0; i < nbScripts; i++)
eval(scripts[i].firstChild.data);
}
$.ajax({
url: "ajax.php",
data: { d: "page", p: nom }
}).done(function(data) {
printState(2);
printEtat(0);
},
onFailure: function() { printEtat(3); }
}
);
$('#titre').prop("src", imgTitres_dir + data.documentElement.getElementsByTagName("titre")[0].firstChild.data);
$('#corps').html(data.documentElement.getElementsByTagName("body")[0].firstChild.data);
if (data.documentElement.getElementsByTagName("js"))
{
var scripts = data.documentElement.getElementsByTagName("js");
var nbScripts = scripts.length;
for (i = 0; i < nbScripts; i++)
eval(scripts[i].firstChild.data);
}
printState(0);
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
function page_accueil()
{
clearScreen();
printEtat(5);
clearScreen();
printState(5);
if (username == "root" || username == "pierre-o")
$('titre').src = imgTitres_dir + "bienvenuePierreO.png";
else if (username == "sergcaen" || username == "serge")
$('titre').src = imgTitres_dir + "bienvenueSerge.png";
else if (username == "christine" || username == "chriscaen")
$('titre').src = imgTitres_dir + "bienvenueChristine.png";
else if (username == "raphael" || username == "minou")
$('titre').src = imgTitres_dir + "bienvenueRaphael.png";
else if (username == "florence" || username == "floflo")
$('titre').src = imgTitres_dir + "bienvenueFlorence.png";
else if (username == "florent")
$('titre').src = imgTitres_dir + "bienvenueFlorent.png";
else if (username == "alisson13081991" || username == "alisson13081991@hotmail.fr")
$('titre').src = imgTitres_dir + "bienvenueAlisson.png";
else
$('titre').src = imgTitres_dir + "bienvenue.png";
if (username == "root" || username == "pierre-o")
$('#titre').prop("src", imgTitres_dir + "bienvenuePierreO.png");
else if (username == "sergcaen" || username == "serge")
$('#titre').prop("src", imgTitres_dir + "bienvenueSerge.png");
else if (username == "christine" || username == "chriscaen")
$('#titre').prop("src", imgTitres_dir + "bienvenueChristine.png");
else if (username == "raphael" || username == "minou")
$('#titre').prop("src", imgTitres_dir + "bienvenueRaphael.png");
else if (username == "florence" || username == "floflo")
$('#titre').prop("src", imgTitres_dir + "bienvenueFlorence.png");
else if (username == "florent")
$('#titre').prop("src", imgTitres_dir + "bienvenueFlorent.png");
else if (username == "alisson13081991" || username == "alisson13081991@hotmail.fr")
$('#titre').prop("src", imgTitres_dir + "bienvenueAlisson.png");
else
$('#titre').prop("src", imgTitres_dir + "bienvenue.png");
new Ajax.Request(
'ajax.php',
{
method: 'get',
parameters: {d: "accueil"},
onSuccess: function(transport, json)
{
var applications = transport.responseXML.documentElement.getElementsByTagName("application");
for (i = applications.length - 1; i >= 0; i--)
{
var app = new Application(applications[i]);
apps.pop(app);
$.ajax({
url: "ajax.php",
data: {d: "accueil"},
}).done(function(data) {
printState(2);
var applications = data.documentElement.getElementsByTagName("application");
for (i = applications.length - 1; i >= 0; i--)
{
var app = new Application(applications[i]);
apps.pop(app);
var elt = app.getHomeElt();
var elt = app.getHomeElt();
$('corps').appendChild(elt);
}
printEtat(0);
},
onFailure: function() { printEtat(3); }
}
);
$('#corps').append(elt);
}
printState(0);
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
function runApplication(property, display, json){
alert("Aucun lancement à faire !");
}
var entityMap = {
"&": "&amp;",
"<": "&lt;",
">": "&gt;",
'"': '&quot;',
"'": '&#39;',
"/": '&#x2F;'
};
function escapeHtml(string) {
return String(string).replace(/[&<>"'\/]/g, function (s) {
return entityMap[s];
});
}
//Menu
var menu_timeout;
function showMenu()
{
if (menu_timeout)
clearTimeout(menu_timeout);
if (menu_timeout)
clearTimeout(menu_timeout);
$('menu').style.display = "block";
$('menu').style.display = "block";
}
function setHideMenuTimeout()
{
menu_timeout = setTimeout('hideShownMenu()', 500);
menu_timeout = setTimeout('hideShownMenu()', 500);
}
function hideShownMenu()
{
$('menu').style.display = "none";
$('menu').style.display = "none";
}

6082
htdocs/js/prototype.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -5,97 +5,121 @@ $p = strtolower(gpc("p"));
$titre = ucfirst(trim(gpc("titre", "post")));
$auteur = ucwords(trim(gpc("auteur", "post")));
function build_list($req)
{
$chansons = array();
if (!empty($req))
foreach($req as $ligne)
{
if (isset($chansons[$ligne["id"]]))
$chansons[$ligne["id"]][] = $ligne;
else
$chansons[$ligne["id"]] = array($ligne);
}
return $chansons;
}
function format_list($chansons, $xml, $xml_root)
{
if (!empty($chansons))
{
foreach($chansons as $chanson)
{
$c = $chanson[0];
if (empty($c["titre"]))
continue;
$chan = $xml->createElement("chanson");
$chan->setAttribute("id", $c["id"]);
$chan->setAttribute("titre", $c["titre"]);
$chan->setAttribute("artiste", $c["artiste"]);
if (!empty($c["id_album"]))
{
foreach ($chanson as $cd)
{
$albm = $xml->createElement("inalbum");
$albm->setAttribute("id", $cd["id_album"]);
$albm->setAttribute("type", $cd["type"]);
$albm->setAttribute("titre", $cd["nom"]);
$chan->appendChild($albm);
}
}
$xml_root->appendChild($chan);
}
}
}
var_dump($_GET, $_POST);
if ($p == "liste")
{
$bdd = new BDD();
$req = $bdd->query("SELECT id, titre, chanteur, CDDeca, CDChanteur, CDAnnee FROM gsm ORDER BY id;");
$req = $bdd->query("SELECT T.*, A.id AS id_album, A.type, A.titre AS nom FROM gsm_titres T RIGHT OUTER JOIN gsm_in I ON T.id = I.id_titre RIGHT OUTER JOIN gsm_albums A ON A.id = I.id_album;");
$req["nombre"] = $bdd->num_rows;
$reqCDA = $bdd->query("SELECT id, nom FROM gsm_cdannee;");
$reqCDC = $bdd->query("SELECT id, nom FROM gsm_cdchant;");
$reqCDD = $bdd->query("SELECT id, nom FROM gsm_cddece;");
$reqCDs = $bdd->query("SELECT * FROM gsm_albums;");
$bdd->deconnexion();
$xml_cds = $xml->createElement("liste");
if (!empty($req))
foreach($req as $ligne)
{
if (!empty($ligne["id"]))
{
$chan = $xml->createElement("chanson");
$chan->setAttribute("id", $ligne["id"]);
$chan->setAttribute("titre", $ligne["titre"]);
$chan->setAttribute("chanteur", $ligne["chanteur"]);
$chan->setAttribute("CD_decenie", $ligne["CDDeca"]);
$chan->setAttribute("CD_annee", $ligne["CDAnnee"]);
$chan->setAttribute("CD_interprete", $ligne["CDChanteur"]);
$xml_cds->appendChild($chan);
}
}
if (!empty($reqCDA))
foreach($reqCDA as $cd)
{
$chan = $xml->createElement("cdannee");
$chan->setAttribute("id", $cd["id"]);
$chan->setAttribute("nom", $cd["nom"]);
$xml_cds->appendChild($chan);
}
if (!empty($reqCDC))
foreach($reqCDC as $cd)
{
$chan = $xml->createElement("cdchant");
$chan->setAttribute("id", $cd["id"]);
$chan->setAttribute("nom", $cd["nom"]);
$xml_cds->appendChild($chan);
}
if (!empty($reqCDD))
foreach($reqCDD as $cd)
{
$chan = $xml->createElement("cddece");
$chan->setAttribute("id", $cd["id"]);
$chan->setAttribute("nom", $cd["nom"]);
$xml_cds->appendChild($chan);
}
$xml_root->appendChild($xml_cds);
format_list(build_list($req), $xml, $xml_root);
if (!empty($reqCDs))
{
foreach($reqCDs as $cd)
{
if (empty($cd["id"]))
continue;
$chan = $xml->createElement("album");
$chan->setAttribute("type", $cd["type"]);
$chan->setAttribute("id", $cd["id"]);
$chan->setAttribute("titre", $cd["titre"]);
$chan->setAttribute("couleur", $cd["color"]);
$xml_root->appendChild($chan);
}
}
}
elseif ($p == "add" && ($type = intval(gpc("type", "post"))) && ($title = gpc("title", "post")))
{
$color = hexdec(gpc("color", "post"));
if ($type == 1)
$table = "gsm_cdannee";
else if ($type == 2)
$table = "gsm_cdchant";
else
$table = "gsm_cddece";
$bdd = new BDD();
$bdd->escape($title);
$bdd->query("INSERT INTO `$table` (nom, color) VALUES ('$title', $color);");
$bdd->query("INSERT INTO `gsm_albums` (type, titre, color) VALUES ($type, '$title', $color);");
$id = $bdd->insert_id();
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
if ($id == 0)
{
$res = $bdd->unique_query("SELECT id FROM `gsm_albums` WHERE type = $type AND titre = '$title';");
$id = $res["id"];
}
$req = $bdd->unique_query("SELECT COUNT(*) AS nombre FROM gsm_in");
$bdd->deconnexion();
$xml_root->appendChild($xml->createElement("id", $id));
if ($id != 0)
$xml_root->appendChild($xml->createElement("id", $id));
}
elseif ($p == "del" && $id = intval(gpc("id", "post")))
{
$alb = intval(gpc("alb", "post"));
$bdd = new BDD();
$bdd->query("DELETE FROM `gsm` WHERE id = $id;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
if (empty($alb))
$bdd->query("DELETE FROM `gsm_in` WHERE id_titre = $id;");
else
$bdd->query("DELETE FROM `gsm_in` WHERE id_titre = $id AND id_album = $alb;");
$res = $bdd->unique_query("SELECT COUNT(*) AS c FROM `gsm_in` WHERE id_titre = $id;");
if ($res["c"] <= 0)
$bdd->query("DELETE FROM `gsm_titres` WHERE id = $id;");
$req = $bdd->unique_query("SELECT COUNT(*) AS nombre FROM gsm_in");
$bdd->deconnexion();
}
elseif ($p == "color" && ($type = intval(gpc("type", "get"))) && ($idAlbum = intval(gpc("id", "get"))))
{
if ($type == 1)
$table = "gsm_cdannee";
else if ($type == 2)
$table = "gsm_cdchant";
else
$table = "gsm_cddece";
$bdd = new BDD();
$res = $bdd->unique_query("SELECT color FROM `$table` WHERE id = $idAlbum;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$res = $bdd->unique_query("SELECT color FROM `gsm_albums` WHERE id = $idAlbum;");
$req = $bdd->unique_query("SELECT COUNT(*) AS nombre FROM gsm_in;");
$bdd->deconnexion();
$xml_root->appendChild($xml->createElement("color", sprintf("#%06X", $res["color"])));
@ -113,30 +137,38 @@ elseif ($p == "color" && ($type = intval(gpc("type", "get"))) && ($idAlbum = int
}
elseif ($p == "rech")
{
$type = substr(gpc("type", "post"), 0, 1);
$id = intval(gpc("id", "post"));
$where = "TRUE";
$type = array();
if ($type == "d")
{
$bdd = new BDD();
$rech = $bdd->query("SELECT * FROM gsm WHERE CDDeca = $id;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$bdd->deconnexion();
}
elseif ($type == "a")
{
$bdd = new BDD();
$rech = $bdd->query("SELECT * FROM gsm WHERE CDAnnee = $id;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$bdd->deconnexion();
}
elseif ($type == "i")
{
$bdd = new BDD();
$rech = $bdd->query("SELECT * FROM gsm WHERE CDChanteur = $id;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$bdd->deconnexion();
}
$bdd = new BDD();
foreach($_POST as $key => $val)
{
$v = gpc($key, "post");
$bdd->escape($v);
if ($key == "titre")
$where .= " AND T.titre LIKE = '%".$v."%'";
else if ($key == "artiste")
$where .= " AND T.artiste LIKE = '%".$v."%'";
else if ($key == "album")
$where .= " AND A.titre LIKE = '%".$v."%'";
else if (preg_match($key, "#^type([0-9]+)$#", $out) && gpc($key, "post") == "1")
$type[] = intval($out[1]);
}
if (count($type) > 0)
{
$where .= " AND (FALSE";
foreach($type as $t)
$where .= " OR A.type = ".$t;
$where .= ")";
}
$rech = $bdd->query("SELECT T.*, A.id AS id_album, A.type, A.titre AS nom FROM gsm_titres T RIGHT OUTER JOIN gsm_in I ON T.id = I.id_titre RIGHT OUTER JOIN gsm_albums A ON A.id = I.id_album WHERE ".$where);
$req = $bdd->unique_query("SELECT COUNT(*) AS nombre FROM gsm_in");
$bdd->deconnexion();
format_list(build_list($rech), $xml, $xml_root);
$xml_cds = $xml->createElement("album");
if (!empty($rech))
@ -160,10 +192,10 @@ elseif ($p == "stats")
$cds = array();
$bdd = new BDD();
$cds["annees"] = $bdd->query("SELECT A.id, A.nom, COUNT(T.id) AS nombre FROM gsm_cdannee A LEFT OUTER JOIN gsm T ON A.id = T.CDAnnee GROUP BY A.id ORDER BY A.nom;");
$cds["interpretes"] = $bdd->query("SELECT A.id, A.nom, COUNT(T.id) AS nombre FROM gsm_cdchant A LEFT OUTER JOIN gsm T ON A.id = T.CDChanteur GROUP BY A.id ORDER BY A.nom;");
$cds["decenies"] = $bdd->query("SELECT A.id, A.nom, COUNT(T.id) AS nombre FROM gsm_cddece A LEFT OUTER JOIN gsm T ON A.id = T.CDDeca GROUP BY A.id ORDER BY A.nom;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$cds["annees"] = $bdd->query("SELECT A.id, A.titre AS nom, COUNT(A.id) AS nombre FROM gsm_albums A RIGHT OUTER JOIN gsm_in I ON A.id = I.id_album WHERE A.type = 1 GROUP BY A.id ORDER BY nom DESC;");
$cds["interpretes"] = $bdd->query("SELECT A.id, A.titre AS nom, COUNT(A.id) AS nombre FROM gsm_albums A RIGHT OUTER JOIN gsm_in I ON A.id = I.id_album WHERE A.type = 3 GROUP BY A.id ORDER BY nom ASC;");
$cds["decenies"] = $bdd->query("SELECT A.id, A.titre AS nom, COUNT(A.id) AS nombre FROM gsm_albums A RIGHT OUTER JOIN gsm_in I ON A.id = I.id_album WHERE A.type = 2 GROUP BY A.id ORDER BY nom ASC;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm_in");
$bdd->deconnexion();
if (!empty($cds["annees"]))
@ -205,7 +237,7 @@ elseif ($p == "cds")
$cds["decenies"] = $bdd->query("SELECT A.*, COUNT(T.id) AS nombre FROM gsm_cddece A LEFT OUTER JOIN gsm T ON A.id = T.CDDeca GROUP BY A.nom;");
$cds["interpretes"] = $bdd->query("SELECT A.*, COUNT(T.id) AS nombre FROM gsm_cdchant A LEFT OUTER JOIN gsm T ON A.id = T.CDChanteur GROUP BY A.nom;");
$cds["annees"] = $bdd->query("SELECT A.*, COUNT(T.id) AS nombre FROM gsm_cdannee A LEFT OUTER JOIN gsm T ON A.id = T.CDAnnee GROUP BY A.nom;");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm_in");
$bdd->deconnexion();
$xml_cds = $xml->createElement("decenies");
@ -260,57 +292,21 @@ elseif (!empty($titre) && !empty($auteur))
$bdd->escape($titre);
$bdd->escape($auteur);
if ($id)
$bdd->query("UPDATE gsm SET titre = '$titre', chanteur = '$auteur' WHERE id = $id;");
$bdd->query("UPDATE gsm_titres SET titre = '$titre', artiste = '$auteur' WHERE id = $id;");
else
{
//On recherche la chanson pour tester si elle n'existe pas déjà
$chanson = $bdd->unique_query("SELECT id, CDDeca, CDAnnee, CDChanteur FROM gsm WHERE titre LIKE '$titre' AND chanteur LIKE '$auteur' LIMIT 1;");
$update = "";
if (!empty($chanson))
{
if (isset($update) && !empty($type) && $type == 3)
{
if (empty($chanson["CDDeca"]))
$update .= "CDDeca = ".$alb.", ";
else
$update = null;
}
if (isset($update) && !empty($type) && $type == 1)
{
if (empty($chanson["CDAnnee"]))
$update .= "CDAnnee = ".$alb.", ";
else
$update = null;
}
if (isset($update) && !empty($type) && $type == 2)
{
if (empty($chanson["CDChanteur"]))
$update .= "CDChanteur = ".$alb.", ";
else
$update = null;
}
}
if (!empty($update))
{
$bdd->query("UPDATE gsm SET $update titre = titre WHERE id = ".$chanson["id"].";");
$res = $chanson["id"];
}
else
{
if ($type == 1)
$disc = array("annee" => $alb, "interprete" => 0, "decenie" => 0);
else if ($type == 2)
$disc = array("annee" => 0, "interprete" => $alb, "decenie" => 0);
else if ($type == 3)
$disc = array("annee" => 0, "interprete" => 0, "decenie" => $alb);
else
$disc = array("annee" => 0, "interprete" => 0, "decenie" => 0);
$bdd->query("INSERT INTO gsm_titres (titre, artiste) VALUES ('$titre', '$auteur');");
$res = $bdd->insert_id();
if (empty($res))
{
$res = $bdd->unique_query("SELECT id FROM gsm_titres WHERE titre = '$titre' AND artiste = '$auteur';");
$res = $res["id"];
}
$bdd->query("INSERT INTO gsm (titre, chanteur, CDDeca, CDAnnee, CDChanteur) VALUES ('$titre', '$auteur', ".$disc["decenie"].", ".$disc["annee"].", ".$disc["interprete"].");");
$res = $bdd->insert_id();
}
if (!empty($alb))
$bdd->query("INSERT INTO gsm_in (id_titre, id_album) VALUES ($res, $alb);");
}
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm_titres");
$bdd->deconnexion();
$xml_root->appendChild($xml->createElement("id", $res));
@ -318,9 +314,8 @@ elseif (!empty($titre) && !empty($auteur))
else
{
$bdd = new BDD();
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm");
$req = $bdd->unique_query("SELECT COUNT(id) AS nombre FROM gsm_titres");
$bdd->deconnexion();
}
$json["nombre"] = $req["nombre"];
?>
$xml_root->setAttribute("nombre", $req["nombre"]);

View File

@ -0,0 +1,66 @@
<?php
//Définition de la constante anti-hacking
define("INDEX", 1);
require_once(trim(file_get_contents('./.onyx')));
require_once(ONYX.'include/functions.php');
$bdd = new BDD();
/*
//$res = $bdd->query("SELECT * FROM gsm_cdannee;");
$res = $bdd->query("SELECT * FROM gsm_cddece;");
//$res = $bdd->query("SELECT * FROM gsm_cdannee;");
foreach($res as $cd)
{
$type = 2;
$nom = $cd["nom"];
$color = $cd["color"];
$bdd->escape($nom);
$bdd->query("INSERT INTO gsm_albums (type, titre, color) VALUES ($type, '$nom', $color);");
}
*/
session_start();
$_SESSION["page"]++;
$start = $_SESSION["page"] * 500;
$res = $bdd->query("SELECT * FROM gsm LIMIT $start, 500;");
foreach($res as $cd)
{
// Insert the title
$titre = $cd["titre"];
$chanteur = $cd["chanteur"];
$bdd->escape($titre);
$bdd->escape($chanteur);
$bdd->query("INSERT INTO gsm_titres (titre, artiste) VALUES ('$titre', '$chanteur');");
$idtitre = $bdd->insert_id();
if (empty($idtitre))
{
$r = $bdd->unique_query("SELECT id FROM gsm_titres WHERE titre = '$titre' AND artiste = '$chanteur';");
if (empty($r) || empty($r["id"]))
die("empty ID on ".$res["id"]);
$idtitre = $r["id"];
}
// Found CD
if (!empty($cd["CDDeca"]))
{
$deca = $bdd->unique_query("SELECT nom, color FROM gsm_cddece WHERE id = ".$cd["CDDeca"]);
$album = $bdd->unique_query("SELECT id FROM gsm_albums WHERE type = 2 AND titre = '".$deca["nom"]."' AND color = ".$deca["color"]);
if (isset($album))
$bdd->query("INSERT INTO gsm_in VALUES ($idtitre, ".$album["id"].");");
}
if (!empty($cd["CDAnnee"]))
{
$deca = $bdd->unique_query("SELECT nom, color FROM gsm_cdannee WHERE id = ".$cd["CDAnnee"]);
$album = $bdd->unique_query("SELECT id FROM gsm_albums WHERE type = 1 AND titre = '".$deca["nom"]."' AND color = ".$deca["color"]);
if (isset($album))
$bdd->query("INSERT INTO gsm_in VALUES ($idtitre, ".$album["id"].");");
}
}
$bdd->deconnexion();
?>

View File

@ -3,7 +3,7 @@
<property value="name">Gérer sa musique</property>
<property value="description">Cette application vous permet de gérer facilement votre discothèque.</property>
<property value="etatAvancement">beta</property>
<property value="version">1.1</property>
<property value="version">1.3</property>
<property value="lang">fr_FR</property>
<property value="developpeur"><![CDATA[<span style="font-variant: small-caps">Mercier</span> Pierre-Olivier]]></property>
<property value="corps">contenu</property>
@ -17,31 +17,36 @@
<display value="css" media="all">main.css</display>
<display value="css" media="screen">style.css</display>
<display value="css" media="print">print.css</display>
<display value="script">album.js</display>
<display value="script">chanson.js</display>
<display value="script">app.js</display>
<display value="body">
<![CDATA[
<h1>Bienvenue dans la gestion d'une discothèque</h1>
<ul id="GSM_menu">
<li><h2>Discothèque</h2></li>
<li onclick="GSM_add();">Ajouter un album</li>
<li onclick="GSM_listAlbums();">Liste des albums</li>
<li onclick="GSM_listTitres();">Liste des titres</li>
<li>Nombre de titres enregistrés : <span id="nbpc"></span></li>
</ul>
<div id="contenu"></div>
<h1>Bienvenue dans la gestion d'une discothèque</h1>
<menu>
<li><h2>Discothèque</h2></li>
<li onclick="GSM_add();">Ajouter un album</li>
<li onclick="GSM_listAlbums();">Liste des albums</li>
<li>
Liste des titres
<ul>
<li onclick="GSM_listTitres([1,2]);">Années</li>
<li onclick="GSM_listTitres([3]);">Classique</li>
</ul>
</li>
<li onclick="GSM_rechTitres();">Rechercher ...</li>
<li>Nombre de titres enregistrés : <span id="nbpc"></span></li>
</menu>
<div id="contenu"></div>
]]>
</display>
<display value="js">
<![CDATA[
function runApplication(property, display, json)
function runApplication(property, display)
{
$('logo').style.display = 'none';
$('#logo').css("display", 'none');
$('contenu').innerHTML = "";
news = document.createElement("div");
news.className = "news";
news.innerHTML = "<h3>Bienvenue dans la version béta de GSM pour Pommultimédia For Home !</h3>Cette nouvelle version est plus rapide que la version précédente et a une meilleur intégration avec Pommultimédia For Home.<br />N'hésitez pas à nous faire part de vos commentaires ;)";
$('contenu').appendChild(news);
$('#contenu').html("<div class=\"news\"><h3>Bienvenue dans la version béta de GSM pour Pommultimédia For Home !</h3>Cette nouvelle version est plus rapide que la version précédente et a une meilleur intégration avec Pommultimédia For Home.<br />N'hésitez pas à nous faire part de vos commentaires ;)</div>");
}
]]>
</display>

View File

@ -9,73 +9,72 @@ $ligne = trim(utf8_decode(utf8_encode(strtoupper(gpc("ligne", "post")))));
if ($p == "liste")
{
$bdd = new BDD();
$req = $bdd->query("SELECT * FROM gspc;");
$req["nombre"] = $bdd->num_rows;
$bdd->deconnexion();
$bdd = new BDD();
$req = $bdd->query("SELECT * FROM gspc;");
$req["nombre"] = $bdd->num_rows;
$bdd->deconnexion();
$xml_pc = $xml->createElement("liste");
foreach($req as $ligne)
$xml_pc = $xml->createElement("liste");
foreach($req as $ligne)
{
if (!empty($ligne["reftable"]))
{
if (!empty($ligne["reftable"]))
{
$portecle = $xml->createElement("porteclef");
$portecle->setAttribute("id", $ligne["reftable"]);
$portecle->setAttribute("nom", $ligne["nom"]);
$portecle->setAttribute("caracteristique", ucfirst($ligne["caracteristique"]));
$portecle->setAttribute("ligne", $ligne["ligne"]);
$portecle->setAttribute("special", $ligne["special"]);
$xml_pc->appendChild($portecle);
}
$portecle = $xml->createElement("porteclef");
$portecle->setAttribute("id", $ligne["reftable"]);
$portecle->setAttribute("nom", $ligne["nom"]);
$portecle->setAttribute("caracteristique", ucfirst($ligne["caracteristique"]));
$portecle->setAttribute("ligne", $ligne["ligne"]);
$portecle->setAttribute("special", $ligne["special"]);
$xml_pc->appendChild($portecle);
}
$xml_root->appendChild($xml_pc);
}
$xml_root->appendChild($xml_pc);
}
elseif ($p == "stats")
{
$bdd = new BDD();
$req = $bdd->query("SELECT ligne, COUNT(reftable) AS nombre FROM `gspc` GROUP BY ligne ORDER BY ligne ASC;");
$bdd->deconnexion();
$bdd = new BDD();
$req = $bdd->query("SELECT ligne, COUNT(reftable) AS nombre FROM `gspc` GROUP BY ligne ORDER BY ligne ASC;");
$bdd->deconnexion();
$xml_pc = $xml->createElement("statistiques");
foreach($req as $ligne)
{
$portecle = $xml->createElement("ligne");
$portecle->setAttribute("nom", $ligne["ligne"]);
$portecle->setAttribute("nombre", $ligne["nombre"]);
$xml_pc->appendChild($portecle);
}
$xml_root->appendChild($xml_pc);
$xml_pc = $xml->createElement("statistiques");
foreach($req as $ligne)
{
$portecle = $xml->createElement("ligne");
$portecle->setAttribute("nom", $ligne["ligne"]);
$portecle->setAttribute("nombre", $ligne["nombre"]);
$xml_pc->appendChild($portecle);
}
$xml_root->appendChild($xml_pc);
}
elseif ($p == "del" && $id = intval(gpc("id", "post")))
{
$bdd = new BDD();
$bdd->query("DELETE FROM `gspc` WHERE reftable = $id;");
$req = $bdd->unique_query("SELECT COUNT(reftable) AS nombre FROM gspc");
$bdd->deconnexion();
$bdd = new BDD();
$bdd->query("DELETE FROM `gspc` WHERE reftable = $id;");
$req = $bdd->unique_query("SELECT COUNT(reftable) AS nombre FROM gspc");
$bdd->deconnexion();
}
elseif (!empty($nom) && !empty($ligne))
{
$carac = trim(utf8_decode(utf8_encode(gpc("caracteristique", "post"))));
$quantite = intval(gpc("quantite", "post"));
$id = intval(gpc("id"));
$carac = trim(utf8_decode(utf8_encode(gpc("caracteristique", "post"))));
$quantite = intval(gpc("quantite", "post"));
$id = intval(gpc("id"));
$bdd = new BDD();
$bdd->escape($nom);
$bdd->escape($carac);
$bdd->escape($ligne);
if ($id)
$bdd->query("UPDATE gspc SET nom = '$nom', caracteristique = '$carac', ligne = '$ligne', special = $quantite WHERE reftable = $id;");
else
$bdd->query("INSERT INTO gspc (nom, caracteristique, ligne, special) VALUES ('$nom', '$carac', '$ligne', $quantite);");
$req = $bdd->unique_query("SELECT COUNT(reftable) AS nombre FROM gspc");
$bdd->deconnexion();
$bdd = new BDD();
$bdd->escape($nom);
$bdd->escape($carac);
$bdd->escape($ligne);
if ($id)
$bdd->query("UPDATE gspc SET nom = '$nom', caracteristique = '$carac', ligne = '$ligne', special = $quantite WHERE reftable = $id;");
else
$bdd->query("INSERT INTO gspc (nom, caracteristique, ligne, special) VALUES ('$nom', '$carac', '$ligne', $quantite);");
$req = $bdd->unique_query("SELECT COUNT(reftable) AS nombre FROM gspc");
$bdd->deconnexion();
}
else
{
$bdd = new BDD();
$req = $bdd->unique_query("SELECT COUNT(reftable) AS nombre FROM gspc");
$bdd->deconnexion();
$bdd = new BDD();
$req = $bdd->unique_query("SELECT COUNT(reftable) AS nombre FROM gspc");
$bdd->deconnexion();
}
$json["nombre"] = $req["nombre"];
?>
$xml_root->setAttribute("nombre", $req["nombre"]);

View File

@ -3,7 +3,7 @@
<property value="name">Gérer ses porte-clefs</property>
<property value="description">Cette application vous permet de gérer facilement une collection de porte-clefs.</property>
<property value="etatAvancement">final</property>
<property value="version">1.1</property>
<property value="version">1.2</property>
<property value="lang">fr_FR</property>
<property value="developpeur"><![CDATA[<span style="font-variant: small-caps">Mercier</span> Pierre-Olivier]]></property>
<property value="corps">contenu</property>
@ -21,28 +21,24 @@
<display value="script">app.js</display>
<display value="body">
<![CDATA[
<h1>Bienvenue dans la gestion de collection de porte-clefs</h1>
<ul id="GSPC_menu">
<li><h2>Porte-clefs</h2></li>
<li onclick="GSPC_add();">Ajouter un porte-clef</li>
<li onclick="GSPC_list();">Liste des porte-clefs</li>
<li onclick="GSPC_stats();">Liste des lignes</li>
<li>Nombre de porte-clefs enregistrés : <span id="nbpc"></span></li>
</ul>
<div id="contenu"></div>
<h1>Bienvenue dans la gestion de collection de porte-clefs</h1>
<ul id="GSPC_menu">
<li><h2>Porte-clefs</h2></li>
<li onclick="GSPC_add();">Ajouter un porte-clef</li>
<li onclick="GSPC_list();">Liste des porte-clefs</li>
<li onclick="GSPC_stats();">Liste des lignes</li>
<li>Nombre de porte-clefs enregistrés : <span id="nbpc"></span></li>
</ul>
<div id="contenu"></div>
]]>
</display>
<display value="js">
<![CDATA[
function runApplication(property, display, json)
function runApplication(property, display)
{
$('logo').style.display = 'none';
$('#logo').css("display", 'none');
$('contenu').innerHTML = "";
news = document.createElement("div");
news.className = "news";
news.innerHTML = "<h3>Bienvenue dans la version finale de GSPC pour Pommultimédia For Home !</h3>Cette nouvelle version a été encore plus simplifiée et réduit les temps d'attente en préchargeant les données de manière asynchrone.<br />N'hésitez pas à nous faire part de vos commentaires. Bonne utilisation ;)";
$('contenu').appendChild(news);
$('#contenu').html("<div class=\"news\"><h3>Bienvenue dans la version finale de GSPC pour Pommultimédia For Home !</h3>Cette nouvelle version a été encore plus simplifiée et réduit les temps d'attente en préchargeant les données de manière asynchrone.<br />N'hésitez pas à nous faire part de vos commentaires. Bonne utilisation ;)</div>");
}
]]>
</display>

View File

@ -3,14 +3,17 @@
<display value="titre">aproposdusite.png</display>
<display value="body">
<![CDATA[
<h2>A propos de Pommultimedia for Home</h2>
<h3>Pommultimedia for Home<br />
Version 0.2 du 22/04/2011</h3>
<h3>Ce site a été développé avec Emacs et Eclipse (plug-in Aptana) sur un serveur utilisant la technologie <a href="http://www.php.net/">PHP</a>.</h3>
<br />
<h3>Navigateurs conseillés : <a href="www.mozilla.org/firefox/">Mozilla Firefox</a> et <a href="http://www.google.com/chrome/">Google Chrome</a>.</h3>
<br />
<h2>À propos de Pommultimedia for Home</h2>
<h3>Pommultimédia for Home<br>Version 0.3 du 30/12/2013</h3>
<h3>Ce site a été développé avec <a href="https://www.gnu.org/software/emacs/">Emacs</a> et <a href="https://www.eclipse.org">Eclipse</a> (plug-in <a href="http://www.aptana.org/">Aptana</a>) sur un serveur utilisant la technologie <a href="http://www.php.net/">PHP</a>.</h3>
<br>
<h3>Navigateur conseillé : <a href="http://www.mozilla.org/firefox/">Mozilla Firefox</a>.</h3>
<br>
<h3>Historique des versions :</h3>
<h4>Version 0.3 du 30/12/2013</h4>
<ul>
<li>Utilisation de JQuery au lieu de Prototype</li>
</ul>
<h4>Version 0.2 du 22/04/2011</h4>
<ul>
<li>Factorisation du code JavaScript du framework</li>

View File

@ -5,57 +5,59 @@
<![CDATA[
<h1>Bienvenue sur le serveur <em>Pommultimédia for home</em> !</h1>
<h2>Pour vous connecter au serveur, veuillez indiquer votre nom d'utilisateur ainsi que votre mot de passe.</h2>
<form action="#" method="post">
<fieldset class="connexion">
<label for="pseudo">Nom d'utilisateur :</label>
<input type="text" id="pseudo" maxlength="32"><br>
<label for="mdp">Mot de passe :</label>
<input type="password" id="mdp" maxlength="32"><br>
<input type="submit" value="Connexion">
<form action="#" method="post" class="form-horizontal" id="login-form">
<fieldset class="col-md-4 col-md-offset-4 well">
<div class="form-group">
<label for="pseudo" class="col-sm-6 control-label">Nom d'utilisateur :</label>
<div class="col-sm-6"><input type="text" id="pseudo" maxlength="32" class="form-control"></div>
</div>
<div class="form-group">
<label for="mdp" class="col-sm-6 control-label">Mot de passe :</label>
<div class="col-sm-6"><input type="password" id="mdp" maxlength="32" class="form-control"></div>
</div>
<div class="form-group"><div class="col-sm-offset-6 col-sm-6"><button type="submit" id="submit" class="btn btn-primary">Connexion</button></div></div>
<div id="erreur" style="text-align: center"></div>
</fieldset>
</form>
<p id="erreur"></p>
]]>
</display>
<display value="js">
<![CDATA[
function connexion(nom, pass)
{
printEtat(4);
$('pseudo').disabled = "disabled";
$('mdp').disabled = "disabled";
new Ajax.Request(
'ajax.php?d=connecte',
{
method: 'post',
parameters: {name: nom, mdp: pass},
onSuccess: function(transport, json)
{
if (json.statut == 1)
{
printEtat(2);
username = nom.toLowerCase();
page_accueil();
}
else
{
$('pseudo').disabled = "";
$('mdp').disabled = "";
$('pseudo').className = "erreur";
$('mdp').className = "erreur";
$('erreur').innerHTML = "Nom d'utilisateur ou mot de passe incorrect !";
$('pseudo').focus();
$('pseudo').select();
printEtat(0);
}
},
onFailure: function() { printEtat(3); }
}
);
printState(4);
$('#pseudo').prop("disabled", true);
$('#mdp').prop("disabled", true);
$.ajax({
url: "ajax.php?d=connecte",
type: "POST",
data: {name: nom, mdp: pass}
}).done(function(data) {
if (data.documentElement.getAttribute("statut") == 1)
{
printState(2);
username = nom.toLowerCase();
page_accueil();
}
else
{
$('#pseudo').prop("disabled", false);
$('#mdp').prop("disabled", false);
$('#pseudo').parent().parent().addClass("has-error");
$('#mdp').parent().parent().addClass("has-error");
$('#erreur').html('<div class="alert alert-danger">Nom d\'utilisateur ou mot de passe incorrect !</div>');
$('#pseudo').focus();
$('#pseudo').select();
printState(0);
}
}).fail(function(jqXHR, textStatus) {
printState(7, textStatus);
});
}
$('corps').getElementsByTagName("form")[0].onsubmit = function() { connexion($('pseudo').value, $('mdp').value); return false; };
$('pseudo').focus();
$('#login-form').submit(function() { connexion($('#pseudo').val(), $('#mdp').val()); return false; });
$('#pseudo').focus();
]]>
</display>

0
onyx2/log/php.log Executable file → Normal file
View File

View File

@ -1,16 +1,16 @@
<?php
function hexstr($var)
{
return pack('H*',$var);
}
function strhex($var)
{
$tab = unpack('H*',$var);
return $tab[1];
}
function bitstr($var)
function hexstr($var)
{
return pack('H*',$var);
}
/*function bitstr($var)
{
$r = NULL;
for($i = 0; $i < strlen($var); $i += 8) $r .= chr(bindec(substr($var,$i,8)));
@ -37,7 +37,7 @@ function hex2bin($str)
while ($i < strlen($str));
return $bin;
}
*/
function cxor($msg,$cle)
{
$xor = NULL;