baz_april v2.0 rebasé sur zboot en entier

This commit is contained in:
chankalan 2020-05-16 12:21:49 +02:00
parent 1628a0b5ab
commit 2335123b59
153 changed files with 4026 additions and 4440 deletions

44
baz_april_administrations.php Executable file → Normal file
View File

@ -1,10 +1,29 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Fichier gérant l'installation et désinstallation du plugin baz_april
*
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Installation
*/
include_spip('inc/meta');
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
// Installation et mise à jour sur modele sjcycle
function baz_april_upgrade($nom_meta_version_base, $version_cible) {
/**
* Fonction d'installation et de mise à jour du plugin baz_april.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @param string $version_cible
* Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
*
* @return void
**/
function baz_april_upgrade($nom_meta_base_version, $version_cible) {
// Création du tableau des mises à jour.
$maj = array();
@ -20,9 +39,6 @@ function baz_april_upgrade($nom_meta_version_base, $version_cible) {
$config_compositions = array(
'masquer_formulaire' => 'oui'
);
$config_baz_april = array(
'afficherauteurs' => 'non'
);
// Tableau de la configuration par défaut
$maj['create'] = array(
array('ecrire_config', 'feuillederoute', $config_fdr),
@ -37,8 +53,14 @@ function baz_april_upgrade($nom_meta_version_base, $version_cible) {
maj_plugin($nom_meta_version_base, $version_cible, $maj);
}
// Désinstallation
function baz_april_vider_tables($nom_meta_version_base) {
effacer_meta('baz');
effacer_meta($nom_meta_version_base);
/**
* Fonction de désinstallation du plugin baz_april.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
*
* @return void
**/
function baz_april_vider_tables($nom_meta_base_version) {
effacer_meta($nom_meta_base_version);
}

View File

@ -0,0 +1,22 @@
<?php
/**
* Définit les autorisations du plugin baz_april
*
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'appel pour le pipeline
*
* @pipeline autoriser
*/
function baz_april_autoriser() {
}

44
baz_april_fonctions.php Executable file → Normal file
View File

@ -1,40 +1,14 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/* reprise d'une fonction du plugin Agenda
* renommee pour eviter plantage
https://zone.spip.org/trac/spip-zone/browser/_plugins_/agenda/trunk/agenda_fonctions.php#L32
*/
/**
* decale les mois de la date.
* cette fonction peut raboter le jour si le nouveau mois ne les contient pas
* exemple 31/01/2007 + 1 mois => 28/02/2007
* Fonctions utiles au plugin baz_april
*
* @param string $date
* @param int $decalage
* @param string $format
* @return string
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Fonctions
*/
function baz_moisdecal($date, $decalage, $format = 'Y-m-d H:i:s') {
include_spip('inc/filtres');
$date_array = recup_date($date);
if ($date_array) {
list($annee, $mois, $jour) = $date_array;
}
if (!$jour) {
$jour = 1;
}
if (!$mois) {
$mois = 1;
}
$mois2 = $mois + $decalage;
$date2 = mktime(1, 1, 1, $mois2, $jour, $annee);
// mois normalement attendu
$mois3 = date('m', mktime(1, 1, 1, $mois2, 1, $annee));
// et si le mois de la nouvelle date a moins de jours...
$mois2 = date('m', $date2);
if ($mois2 - $mois3) {
$date2 = mktime(1, 1, 1, $mois2, 0, $annee);
}
return date($format, $date2);
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

58
baz_april_options.php Executable file → Normal file
View File

@ -1,44 +1,24 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// les blocs de baz
if (!isset($GLOBALS['z_blocs'])) {
$GLOBALS['z_blocs'] = array('content','aside','extra','connex','head','head_js','header','footer','breadcrumb');
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
// les images de plus de 2000*1000 pixels de haut seront réduites en 2000x1000 maximum
// define('_IMG_MAX_WIDTH', 2000);
// define('_IMG_MAX_HEIGHT', 1000);
// surligner le terme de recherche
define('_SURLIGNE_RECHERCHE_REFERERS',true);
if (isset($_REQUEST['recherche'])) {
$_GET['var_recherche'] = $_REQUEST['recherche'];
}
// les images de plus de 2000*1000 pixels de haut seront réduites en 2000x1000 maximum
// define('_IMG_MAX_WIDTH', 2000);
// define('_IMG_MAX_HEIGHT', 1600);
// $GLOBALS['quota_cache'] = 200;
define('_DUREE_CACHE_DEFAUT', 24*3600*90);
// pour sauter une ligne en rédaction
// $GLOBALS['ligne_horizontale'] = '<br class="clear" />';
// afficher les erreurs
// define('_NO_CACHE', -1);
// define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
// error_reporting(E_ALL^E_NOTICE);
// ini_set ("display_errors", "On");
// define('SPIP_ERREUR_REPORT',E_ALL);
// $GLOBALS['taille_des_logs'] = 500;
// define('_MAX_LOG', 500000);
// define('_LOG_FILELINE',true);
// define('_LOG_FILTRE_GRAVITE',8);
// define('_DEBUG_SLOW_QUERIES', true);
// define('_BOUCLE_PROFILER', 5000);
$GLOBALS['debut_intertitre'] = "\n<h2 class=\"spip\">\n";
// corriger les intertitres de SPIP
$GLOBALS['debut_intertitre'] = "\n<h2>";
$GLOBALS['fin_intertitre'] = "</h2>\n";
// Blocs Zcore
$GLOBALS['z_blocs'] = array(
'content',
'head',
'header',
'breadcrumb',
'extra',
'aside',
'connex',
'footer',
);
define('_CONTENT_WIDTH', 650);
define('_IMAGE_RATIO', '1.5:1');

21
baz_april_pipelines.php Executable file → Normal file
View File

@ -1,3 +1,22 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Utilisations de pipelines par baz_april
*
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function baz_april_pre_typo($texte) {
// belles puces
$texte = preg_replace('/^-\s?(?!\*|#|-)/m', '-* ', $texte);
return $texte;
}

View File

@ -0,0 +1 @@
<BOUCLE_premier_article(ARTICLES){id_rubrique} {tri_rubrique} {0,1}>#ID_ARTICLE</BOUCLE_premier_article>

13
formulaires/configurer_baz_april.html Executable file → Normal file
View File

@ -1,11 +1,12 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:baz_april:configuration_baz_april:></h3>
<h3 class="titrem"><:baz_april:titre_page_configurer_baz_april:/></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}"><div>
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul class="editer-groupe">
[(#SAISIE{case,afficherauteurs,
@ -13,9 +14,7 @@
explication=<:baz_april:afficherauteurs_explications:>,
defaut=non})]
</ul>
<p class="boutons">
<input type="submit" class="submit" value="<:bouton_valider:>" />
</p>
</div></form>
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:/>" /></p>
</div>
</form>
</div>

View File

@ -1,57 +0,0 @@
#HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate"}
#HTTP_HEADER{"Pragma: no-cache"}
<div class='formulaire_spip formulaire_login'>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{_deja_loge})</p>]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class='reponse_formulaire reponse_formulaire_erreur'>(#ENV*{message_erreur})</p>]
[(#ENV{echec_cookie})
<fieldset class='reponse_formulaire reponse_formulaire_erreur'>
<h2><:avis_erreur_cookie:></h2>
<p class="erreur_message"><:login_cookie_oblige:><br /><:login_cookie_accepte:></p>
</fieldset>]
[(#ENV{editable})
<form id='formulaire_login' method='post' action='#ENV{action}'>
[(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ]
#ACTION_FORMULAIRE
<fieldset>
<legend><:form_forum_identifiants:></legend>
<div class="form-group editer-groupe">
<div class="editer editer_login obligatoire[(#ENV**{erreurs}|table_valeur{var_login}|oui)erreur]">
<label for="var_login"><:login_login2:></label>[
<span class="erreur_message">(#ENV**{erreurs}|table_valeur{var_login})</span>
]<input type='text' class='form-control text [(#ENV*{_logo}|oui)avec_spip_logo_auteur]' name='var_login' id='var_login' value="[(#ENV**{var_login})]" size='40'[(#HTML5) required='required' autofocus='autofocus'] autocapitalize="off" autocorrect="off" />[
<span id="spip_logo_auteur">(#ENV*{_logo,''})</span>]
</div>
<div class="editer editer_password obligatoire[(#ENV**{erreurs}|table_valeur{password}|oui)erreur]">
<label for="password"><:login_pass2:></label>[
<span class="erreur_message">(#ENV**{erreurs}|table_valeur{password})</span>
]<input type='password' class='form-control text password' name='password' id='password' value="" size='40' autocapitalize="off" autocorrect="off" />
<p class='details'><a href="[(#URL_PAGE{spip_pass}|parametre_url{lang,#LANG})]" id='spip_pass'><:login_motpasseoublie:></a></p>
</div>
[(#ENV{rester_connecte})
<div class="editer editer_session"><div class='choix'>
<input type="checkbox" class="form-control checkbox" name="session_remember" id="session_remember" value="oui" [(#ENV**{cnx}|?{' '})checked="checked"] onchange="jQuery(this).addClass('modifie');" />
<label class='nofx' for="session_remember"><:login_rester_identifie:></label>
</div></div>]
</div>
</fieldset>
<p class="boutons"><input type="submit" class="submit" value="<:bouton_valider|attribut_html:>" /></p>
</form>
]
[(#REM) en cas d'absence de cookie, on represente le formulaire alternatif ]
[<form action="(#ENV{auth_http})" method="get">[
(#ENV{auth_http}|form_hidden)
]
<fieldset>
<legend><:login_sans_cookie:></legend>
<:login_preferez_refuser:>
<input type="hidden" name="essai_auth_http" value="oui"/>
[<input type="hidden" name="url" value="(#ENV{url})"/>]
<p class="boutons"><input type="submit" class="submit" value="<:login_sans_cookie|attribut_html:>"/></p>
</fieldset>
</form>
]
</div>

View File

@ -1,333 +0,0 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/**
* Gestion du formulaire d'identification / de connexion à SPIP
*
* @package SPIP\Core\Formulaires
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('base/abstract_sql');
/**
* Teste si une URL est une URL de l'espace privé (administration de SPIP)
* ou de l'espace public
*
* @param string $cible URL
* @return bool
* true si espace privé, false sinon.
**/
function is_url_prive($cible) {
include_spip('inc/filtres_mini');
$path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible));
$path = (isset($path['path']) ? $path['path'] : '');
return strncmp(substr($path, -strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS)) == 0;
}
/**
* Chargement du formulaire de login
*
* Si on est déjà connecté, on redirige directement sur l'URL cible !
*
* @uses auth_informer_login()
* @uses is_url_prive()
* @uses login_auth_http()
*
* @param string $cible
* URL de destination après identification.
* Cas spécifique : la valeur `@page_auteur` permet d'être redirigé
* après connexion sur le squelette public de l'auteur qui se connecte.
* @param string $login
* Login de la personne à identifier (si connu)
* @param null|bool $prive
* Identifier pour l'espace privé (true), public (false)
* ou automatiquement (null) en fonction de la destination de l'URL cible.
* @return array
* Environnement du formulaire
**/
function formulaires_login_charger_dist($cible = '', $login = '', $prive = null) {
$erreur = _request('var_erreur');
if (!$login) {
$login = strval(_request('var_login'));
}
// si on est deja identifie
if (!$login and isset($GLOBALS['visiteur_session']['login'])) {
$login = $GLOBALS['visiteur_session']['login'];
}
// ou si on a un cookie admin
// if (!$login) {
// if (isset($_COOKIE['spip_admin'])
// and preg_match(',^@(.*)$,', $_COOKIE['spip_admin'], $regs)
// ) {
// $login = $regs[1];
// }
// }
include_spip('inc/auth');
$row = auth_informer_login($login);
// Construire l'environnement du squelette
// Ne pas proposer de "rester connecte quelques jours"
// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
$valeurs = array(
'var_login' => $login,
'editable' => !$row,
'cnx' => isset($row['cnx']) ? $row['cnx'] : '0',
'auth_http' => login_auth_http(),
'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '),
'_logo' => isset($row['logo']) ? $row['logo'] : '',
'_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '',
'_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '',
'_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth
);
if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) {
$valeurs['editable'] = true;
}
if (is_null($prive) ? is_url_prive($cible) : $prive) {
include_spip('inc/autoriser');
$loge = autoriser('ecrire');
} else {
$loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != '');
}
// Si on est connecte, appeler traiter()
// et lancer la redirection si besoin
if (!$valeurs['editable'] and $loge and _request('formulaire_action')!=='login') {
$traiter = charger_fonction('traiter', 'formulaires/login');
$res = $traiter($cible, $login, $prive);
$valeurs = array_merge($valeurs, $res);
if (isset($res['redirect']) and $res['redirect']) {
include_spip('inc/headers');
# preparer un lien pour quand redirige_formulaire ne fonctionne pas
$m = redirige_formulaire($res['redirect'], '', 'ajaxform');
$valeurs['_deja_loge'] = inserer_attribut(
'<a>' . _T('login_par_ici') . "</a>$m",
'href',
$res['redirect']
);
}
}
// en cas d'echec de cookie, inc_auth a renvoye vers le script de
// pose de cookie ; s'il n'est pas la, c'est echec cookie
// s'il est la, c'est probablement un bookmark sur bonjour=oui,
// et pas un echec cookie.
if ($erreur == 'cookie') {
$valeurs['echec_cookie'] = ' ';
} elseif ($erreur) {
// une erreur d'un SSO indique dans la redirection vers ici
// mais il faut se proteger de toute tentative d'injection malveilante
include_spip('inc/texte');
$valeurs['message_erreur'] = safehtml($erreur);
}
return $valeurs;
}
/**
* Identification via HTTP (si pas de cookie)
*
* Gére le cas un utilisateur ne souhaite pas de cookie :
* on propose alors un formulaire pour s'authentifier via http
*
* @return string
* - Si connection possible en HTTP : URL pour réaliser cette identification,
* - chaîne vide sinon.
**/
function login_auth_http() {
if (!$GLOBALS['ignore_auth_http']
and _request('var_erreur') == 'cookie'
and (!isset($_COOKIE['spip_session']) or $_COOKIE['spip_session'] != 'test_echec_cookie')
and (($GLOBALS['flag_sapi_name'] and preg_match(',apache,i', @php_sapi_name()))
or preg_match(',^Apache.* PHP,', $_SERVER['SERVER_SOFTWARE']))
// Attention dans le cas 'intranet' la proposition de se loger
// par auth_http peut conduire a l'echec.
and !(isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']))
) {
return generer_url_action('cookie', '', false, true);
} else {
return '';
}
}
/**
* Vérifications du formulaire de login
*
* Connecte la personne si l'identification réussie.
*
* @uses auth_identifier_login()
* @uses auth_loger()
* @uses login_autoriser()
*
* @param string $cible
* URL de destination après identification.
* Cas spécifique : la valeur `@page_auteur` permet d'être redirigé
* après connexion sur le squelette public de l'auteur qui se connecte.
* @param string $login
* Login de la personne à identifier (si connu)
* @param null|bool $prive
* Identifier pour l'espace privé (true), public (false)
* ou automatiquement (null) en fonction de la destination de l'URL cible.
* @return array
* Erreurs du formulaire
**/
function formulaires_login_verifier_dist($cible = '', $login = '', $prive = null) {
$session_login = _request('var_login');
$session_password = _request('password');
$session_remember = _request('session_remember');
if (!$session_login) {
# pas de login saisi !
return array('var_login' => _T('info_obligatoire'));
}
// appeler auth_identifier_login qui va :
// - renvoyer un string si echec (message d'erreur)
// - un array decrivant l'auteur identifie si possible
// - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
include_spip('inc/auth');
$auteur = auth_identifier_login($session_login, $session_password);
// on arrive ici si on ne s'est pas identifie avec un SSO
if (!is_array($auteur)) {
$erreurs = array();
if (is_string($auteur) and strlen($auteur)) {
$erreurs['var_login'] = $auteur;
}
include_spip('inc/cookie');
spip_setcookie('spip_admin', '', time() - 3600);
if (strlen($session_password)) {
$erreurs['password'] = _T('login_erreur_pass');
} else {
// sinon c'est un login en deux passe old style (ou js en panne)
// pas de message d'erreur
$erreurs['password'] = ' ';
}
return
$erreurs;
}
// on a ete authentifie, construire la session
// en gerant la duree demandee pour son cookie
if ($session_remember !== null) {
$auteur['cookie'] = $session_remember;
}
// si la connexion est refusee on renvoi un message erreur de mot de passe
// car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte
if (auth_loger($auteur) === false) {
$erreurs['message_erreur'] = _T('login_erreur_pass');
return $erreurs;
}
return (is_null($prive) ? is_url_prive($cible) : $prive)
? login_autoriser() : array();
}
/**
* Teste l'autorisation d'accéder à l'espace privé une fois une connexion
* réussie, si la cible est une URL privée.
*
* Dans le cas contraire, un message d'erreur est retourné avec un lien
* pour se déconnecter.
*
* @return array
* - Erreur si un connecté n'a pas le droit d'acceder à l'espace privé
* - tableau vide sinon.
**/
function login_autoriser() {
include_spip('inc/autoriser');
if (!autoriser('ecrire')) {
$h = generer_url_action('logout', 'logout=prive&url=' . urlencode(self()));
return array(
'message_erreur' => '<h1>'
. _T('avis_erreur_visiteur')
. '</h1><p>'
. _T('texte_erreur_visiteur')
. "</p><p class='retour'>[<a href='$h'>"
. _T('icone_deconnecter') . '</a>]</p>'
);
}
return array();
}
/**
* Traitements du formulaire de login
*
* On arrive ici une fois connecté.
* On redirige simplement sur l'URL cible désignée.
*
* @param string $cible
* URL de destination après identification.
* Cas spécifique : la valeur `@page_auteur` permet d'être redirigé
* après connexion sur le squelette public de l'auteur qui se connecte.
* @param string $login
* Login de la personne à identifier (si connu)
* @param null|bool $prive
* Identifier pour l'espace privé (true), public (false)
* ou automatiquement (null) en fonction de la destination de l'URL cible.
* @return array
* Retours du traitement
**/
function formulaires_login_traiter_dist($cible = '', $login = '', $prive = null) {
$res = array();
// Si on se connecte dans l'espace prive,
// ajouter "bonjour" (repere a peu pres les cookies desactives)
if (is_null($prive) ? is_url_prive($cible) : $prive) {
$cible = parametre_url($cible, 'bonjour', 'oui', '&');
}
if ($cible == '@page_auteur') {
$cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'], 'auteur');
}
if ($cible) {
$cible = parametre_url($cible, 'var_login', '', '&');
// transformer la cible absolue en cible relative
// pour pas echouer quand la meta adresse_site est foireuse
if (strncmp($cible, $u = url_de_base(), strlen($u)) == 0) {
$cible = './' . substr($cible, strlen($u));
} elseif (tester_url_absolue($cible) and !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
// si c'est une url absolue, refuser la redirection
// sauf si cette securite est levee volontairement par le webmestre
$cible = '';
}
}
// Si on est connecte, envoyer vers la destination
if ($cible and ($cible != self('&')) and ($cible != self())) {
$res['redirect'] = $cible;
$res['message_ok'] = inserer_attribut(
'<a>' . _T('login_par_ici') . '</a>',
'href',
$cible
);
}
// avant de rediriger il faut mettre a jour les sessions sur le disque si on a charge une session
if (function_exists('terminer_actualiser_sessions')) {
terminer_actualiser_sessions();
}
return $res;
}

View File

@ -1,12 +0,0 @@
<div class="recherche"><form action="[(#ENV{action})]" method="get">
<div class="input-group flex">
[(#ENV{action}|form_hidden)]
[<input type="hidden" name="lang" value="(#ENV{lang})" />]
<div class="input-group-prepend">
<input class="form-control" type="search" placeholder="Rechercher" aria-label="Rechercher" name="recherche"[ value="(#ENV{recherche})"] />
</div>
<div class="input-group-append">
<button type="submit" class="input-group-text">ok</button>
</div>
</div>
</form></div>

12
lang/baz_april_fr.php Executable file → Normal file
View File

@ -1,10 +1,18 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[ $GLOBALS['idx_lang'] ] = array(
// C
'baz_april_titre' => 'baz april',
// T
'titre_page_configurer_baz_april' => 'Configuration',
'cfg_baz_april' => 'Configuration du jeu de squelettes<br />
APRIL - base',

View File

@ -1,12 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
//
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[ $GLOBALS['idx_lang'] ] = array(
'baz_april_description' => 'squelettes HTML5 avec scss et Tiny Typo',
'baz_april_slogan' => 'squelettes de base pour les sites APRIL',
// C
'baz_april_description' => '',
'baz_april_nom' => 'baz april',
'baz_april_slogan' => 'Squelette de base Zcore + SCSS',
);

102
mes_options.php Normal file
View File

@ -0,0 +1,102 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (substr(_request('recherche'), 0, 4) == 'http') {
$ecran_securite_raison = 'Recherche mal formee';
if ($GLOBALS['ip'] AND date('s') == 0) {
touch(_DIR_TMP . 'flood/' . $GLOBALS['ip']);
}
}
if (isset($ecran_securite_raison)) {
header("HTTP/1.0 403 Forbidden");
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: text/html");
die("<html><title>Error 403: Forbidden</title><body><h1>Error 403</h1><p>You are not authorized to view this page ($ecran_securite_raison)</p></body></html>");
}
// ------------------------------------------------------------
// Définition de l'environnement : DEV / PREPROD / PROD
// ------------------------------------------------------------
if (in_array($_SERVER["SERVER_ADDR"], array(
"::1",
"127.0.0.1",
))) {
define('_SERVEUR_MODE', 'DEV');
} else {
if ($_SERVER["SERVER_NAME"] == 'dev.domain.tld') {
define('_SERVEUR_MODE', 'PREPROD');
} else {
define('_SERVEUR_MODE', 'PROD');
}
}
// ------------------------------------------------------------
// Config selon l'environnement
// ------------------------------------------------------------
switch (_SERVEUR_MODE) {
case 'DEV':
case 'PREPROD':
define('SPIP_ERREUR_REPORT', E_ALL & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
error_reporting(SPIP_ERREUR_REPORT);
ini_set('display_errors', 1);
define('_DEBUG_AUTORISER', true);
define('_LOG_FILTRE_GRAVITE', 8);
define('_TEST_EMAIL_DEST', 'nd@dataetic.fr');
define('_SCSS_SOURCE_MAP', true);
break;
case 'PROD':
ini_set('display_errors', 0);
define('_LOG_FILTRE_GRAVITE', 8);
define('_SPIP_CHMOD', 0777);
break;
}
ini_set('memory_limit', '384M');
// ------------------------------------------------------------
// Débug et logs
// ------------------------------------------------------------
define('_LOG_FILELINE', true);
define('_DEBUG_SLOW_QUERIES', true);
define('_BOUCLE_PROFILER', 1000);
// Ne pas remlacer < par &lt; dans les logs
define('_LOG_BRUT', true);
ini_set("log_errors", 1);
ini_set("error_log", $_SERVER['DOCUMENT_ROOT'] . '/tmp/log/php.log');
$nombre_de_logs = 6;
$taille_des_logs = 1024; // 1Mo avant rotation
// ------------------------------------------------------------
// Configs spécifiques
// ------------------------------------------------------------
// crypter les noms des inputs dans les formulaires protégés par nospam
define('_SPAM_ENCRYPT_NAME', true);
define('_STATUT_AUTEUR_CREATION', '6forum');
define ('_SAISIES_AFFICHER_SI_JS_SHOW', 'slideDown(300)');
define ('_SAISIES_AFFICHER_SI_JS_HIDE', 'slideUp(300)');
//--------------------------------------------------------------------
// Taille et poids maxi des images et logos
define('_IMG_MAX_WIDTH', 3000);
define('_IMG_MAX_HEIGHT', 3000);
define('_IMG_MAX_SIZE', 1024*4); # poids en ko
define('_LOGO_MAX_WIDTH', 3000);
define('_LOGO_MAX_HEIGHT', 3000);
define('_LOGO_MAX_SIZE', 1024*4); # poids en ko
define('_FILE_MAX_SIZE', 1024*12); # poids en ko

View File

@ -1,44 +1,42 @@
<paquet
prefix="baz_april"
categorie="squelette"
version="0.2.0"
schema="0.0.1"
version="2.0.0"
etat="dev"
compatibilite="[3.2.7;3.3.*]"
compatibilite="[3.2.0;3.3.*]"
logo="prive/themes/spip/images/baz_april-64.png"
documentation=""
schema="1.0.0"
>
<nom>APRIL - base</nom>
<!-- Base de développement sur Z-core + SCSSPHP (SASS) + Tiny Typo + FontAwesome v5 -->
<auteur>collectif APRIL</auteur>
<credit>nicod_ (astuces scss dans galactic)</credit>
<credit lien="https://sasscss.org/#license-faqs">Sass CSS</credit>
<credit lien="https://fontawesome.io/license/">Font Awesome</credit>
<nom>baz_april</nom>
<auteur>chankalan</auteur>
<auteur>Nicolas Dorigny</auteur>
<licence>GNU/GPL</licence>
<licence lien="https://www.gnu.org/licenses/gpl-3.0.html">GPL 3 pour le squelette SPIP</licence>
<licence lien="http://scripts.sil.org">SIL pour les typographies</licence>
<necessite nom="Zcore" />
<necessite nom="scssphp" />
<necessite nom="noizetier" />
<necessite nom="pages" />
<necessite nom="bigup"/>
<necessite nom="crayons"/>
<necessite nom="rang"/>
<necessite nom="tri_par_rubrique"/>
<necessite nom="scssphp"/>
<necessite nom="zcore"/>
<necessite nom="pages" />
<necessite nom="porte_plume_intertitres" />
<necessite nom="compositions" />
<necessite nom="mailcrypt" />
<necessite nom="bellespuces" />
<necessite nom="facteur" />
<necessite nom="ppp" />
<necessite nom="roles_documents" />
<necessite nom="feuillederoute" />
<necessite nom="tri_par_rubrique" />
<necessite nom="basicone" />
<necessite nom="menus" />
<necessite nom="prive_fluide_remix" />
<!-- <necessite nom="rang" /> -->
<utilise nom="compositions" />
<utilise nom="photoswipe" />
<utilise nom="sociaux" />
<utilise nom="prive_fluide_remix"/>
<utilise nom="courtcircuit"/>
<pipeline nom="autoriser" inclure="baz_april_autorisations.php"/>
<pipeline nom="pre_typo" inclure="baz_april_pipelines.php"/>
<chemin path="squelettes"/>
<chemin path="squelettes/scss"/>

11
prive/squelettes/contenu/configurer_baz_april.html Executable file → Normal file
View File

@ -1,6 +1,7 @@
[(#AUTORISER{configurer, baz_april}|sinon_interdire_acces)]
<h1 class="grostitre"><:baz_april:cfg_baz_april:></h1>
[(#AUTORISER{configurer,_baz_april}|sinon_interdire_acces)]
[<div class="ajax">
(#FORMULAIRE_CONFIGURER_BAZ_APRIL)
</div>]
<h1 class="grostitre"><:baz_april:titre_page_configurer_baz_april:/></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_BAZ_APRIL
</div>

View File

@ -0,0 +1,7 @@
<svg enable-background="new 0 0 79.6 94.7" viewBox="0 0 79.6 94.7" xmlns="http://www.w3.org/2000/svg">
<path d="m79.6 40.9c0-23.7-16.7-40.9-39.8-40.9s-39.8 17.2-39.8 40.9c0 10.3 3.1 19.4 8.9 26.7-.1.3-.1.7-.1 1 0 3.2 2.6 5.9 5.9 5.9h.5c1.1 11.8 11.1 20.1 24.6 20.1s23.5-8.3 24.6-20.1h.6c3.2 0 5.9-2.6 5.9-5.9 0-.4 0-.7-.1-1.1 5.8-7.2 8.8-16.3 8.8-26.6z" fill="#fff"/>
<path d="m79.6 40.9c0-23.7-16.7-40.9-39.8-40.9s-39.8 17.2-39.8 40.9c0 10.3 3.1 19.4 8.9 26.7-.1.3-.1.7-.1 1 0 3.2 2.6 5.9 5.9 5.9h.5c1.1 11.8 11.1 20.1 24.6 20.1s23.5-8.3 24.6-20.1h.6c3.2 0 5.9-2.6 5.9-5.9 0-.4 0-.7-.1-1.1 5.8-7.2 8.8-16.3 8.8-26.6zm-39.8 49.6c-10.3 0-17.8-5.3-19.9-13.4 2 1.1 4 2 6.1 2.8v2.7c0 1.2.9 2.1 2.1 2.1s2.1-.9 2.1-2.1v-1.4c2.4.5 4.8.9 7.3 1v2.9c0 1.2.9 2.1 2.1 2.1s2.1-.9 2.1-2.1v-2.9c2.3-.1 4.6-.4 6.8-.9v1.3c0 1.2.9 2.1 2.1 2.1s2.1-.9 2.1-2.1v-2.5c2.3-.8 4.6-1.8 6.7-3-1.7 8-9.3 13.4-19.6 13.4zm25.1-20.1h-2.5c-.8 0-1.4.4-1.8 1.1-2.3 1.7-4.9 3-7.5 4v-.5c0-1.2-.9-2.1-2.1-2.1s-2.1.9-2.1 2.1v1.8c-2.2.5-4.5.9-6.8 1v-2.8c0-1.2-.9-2.1-2.1-2.1s-2.1.9-2.1 2.1v2.8c-2.5-.1-4.9-.5-7.3-1.1v-1.7c0-1.2-.9-2.1-2.1-2.1s-2.2.9-2.2 2.1v.3c-2.5-1-4.8-2.3-7-3.8-.4-.7-1-1.1-1.9-1.1h-2.5c-.9 0-1.6-.7-1.6-1.6s.7-1.6 1.6-1.6c1.2 0 2.1-.9 2.1-2.1s-.9-2.1-2.1-2.1-2.4.4-3.4 1.1c-4.7-6.3-7.1-14.3-7.1-22.9 0-21.3 15-36.7 35.6-36.7s35.7 15.3 35.7 36.5c0 8.6-2.4 16.6-7.1 22.9-.9-.6-2.1-1-3.3-1s-2.1.9-2.1 2.1.9 2.1 2.1 2.1c.9 0 1.6.7 1.6 1.6-.4.8-1.1 1.7-2 1.7z"/>
<path d="m24.7 40.2c-5.3 0-9.6 4.3-9.6 9.6s4.3 9.6 9.6 9.6 9.6-4.3 9.6-9.6c.1-5.3-4.2-9.6-9.6-9.6z"/>
<path d="m54.9 40.2c-5.3 0-9.6 4.3-9.6 9.6s4.3 9.6 9.6 9.6 9.6-4.3 9.6-9.6-4.3-9.6-9.6-9.6z"/>
<path d="m39.8 58.8c-.8 0-1.5.5-1.9 1.2l-3.2 6.5 2.1 1c.4-1.3 1.6-2.2 3.1-2.2 1.4 0 2.6.9 3.1 2.2l2.1-1-3.2-6.5c-.5-.7-1.3-1.2-2.1-1.2z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -41,5 +41,3 @@ git clone https://github.com/nd-/tri_par_rubrique.git
git clone https://git.spip.net/spip-contrib-extensions/role_documents.git
git clone https://git.spip.net/spip-contrib-extensions/menus.git
git clone https://git.spip.net/spip-contrib-extensions/prive_fluide_remix.git

View File

@ -1 +0,0 @@
.spip-admin-float { z-index: 100; position: fixed; right: 20%; top: auto; bottom:0; white-space: nowrap; }

View File

@ -1,4 +0,0 @@
#HTTP_HEADER{#VAL{"HTTP/1.0 "}|concat{#ENV{code,"401 Not Found"}}}
#HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate"}
#HTTP_HEADER{Pragma: no-cache}
<INCLURE{fond=structure,env,type-page=#ENV{status,401}} />

2
squelettes/article.html Executable file → Normal file
View File

@ -1,3 +1,3 @@
<BOUCLE_principale_article(ARTICLES){id_article}>
<INCLURE{fond=structure,env,id_rubrique=#ENV{id_rubrique,#ID_RUBRIQUE},id_secteur=#ID_SECTEUR,type-page=article,composition=#COMPOSITION} />
<INCLURE{fond=structure,env,id_rubrique,id_secteur,type-page=article,composition=#COMPOSITION} />
</BOUCLE_principale_article>

13
squelettes/aside/dist.html Executable file → Normal file
View File

@ -1,2 +1,11 @@
[(#REM) Menu de navigation par rubriques ]
<INCLURE{fond=inclure/rubriques,env,type-page,composition} />
[(#REM) Articles dans la meme rubrique ]
<B_articles_rubrique>
<ul>
<BOUCLE_articles_rubrique(ARTICLES) {id_rubrique} {tri_rubrique} {0,10}>
<li><a href="#URL_ARTICLE"[ class="(#EXPOSE)"]>#TITRE</a></li>
</BOUCLE_articles_rubrique>
</ul>
</B_articles_rubrique>

View File

View File

@ -1,10 +0,0 @@
[(#REM)
Squelette Big_Pipe
http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
(c) 2010 Cedric Morin
Distribue sous licence GPL
]#CACHE{0}
#INCLURE{fond=inclure/ajax_parallel_load,bloc=#SQUELETTE}

View File

@ -1,40 +1,39 @@
<body class="body[--(#ENV{type-page})][ body--(#COMPOSITION)]">
<ul class="accesrapide accesrapide--main">
<li class="accesrapide"><a class="accesrapide__lien visuallyhidden focusable" href="#contenu"><:baz_april:evitement_contenu:></a></li>
<li class="accesrapide"><a class="accesrapide__lien visuallyhidden focusable" href="#navigation"><:baz_april:evitement_navigation:></a></li>
</ul>
<div class="page__wrapper">
<body class="body[__(#ENV{type-page})][--(#COMPOSITION)][ body--(#COMPOSITION)][ body--(#SITE_COURANT)]">
<div class="page_wrapper">
<header class="page__header">
<div class="page--container">
<INCLURE{fond=header/#ENV{type-page},env} />
<INCLURE{fond=inclure/nav-secteurs,env} />
<header class="page_header">
<div class="page_container page_header_container">
<INCLURE{fond=header/#ENV{type-page},env}>
</div>
[<div class="header__boussole" data-page="(#URL_PAGE{boussole}|parametre_url{var_zajax,content})"></div>]
<INCLURE{fond=inclure/boussole} />
</header>
<div class="page__content page--container">
<main class="contentMain">
<INCLURE{fond=content/#ENV{type-page},env,composition} />
<aside class="contentMain__extra">
<INCLURE{fond=extra/#ENV{type-page},env} />
</aside>
</main><!--.main-->
[(#COMPOSITION|=={dossier}|et{#ENV{type-page}|=={article}}|non)
<aside class="contentAside">
<div class="page_main">
<div class="page_container page_main__container">
<div class="page_main_content">
<div class="page_content">
<INCLURE{fond=breadcrumb/#ENV{type-page},env}>
<INCLURE{fond=content/#ENV{type-page},env}>
<div class="page_extra">
<INCLURE{fond=extra/#ENV{type-page},env}>
</div>
</div>[(#COMPOSITION|=={dossier}|et{#ENV{type-page}|=={article}}|non)
<aside class="page_aside">
<INCLURE{fond=aside/#ENV{type-page},env} />
</aside><!--.aside-->]
</div>
</div>
</div>
<aside class="connex">
<INCLURE{fond=connex/#ENV{type-page},env} />
</aside>
<footer class="page__footer">
<div class="page--container">
<INCLURE{fond=footer/#ENV{type-page},env} />
<footer class="page_footer">
<div class="page_container page_footer__container">
<INCLURE{fond=footer/#ENV{type-page},env}>
</div>
</footer>
</div><!--.container-->
</div>
</body>

View File

@ -1,5 +0,0 @@
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a> <span class="divider"> &gt; </span>
<span class="active"><:pass_erreur:>[ (#ENV{status})]</span>
</nav>

View File

@ -1,5 +0,0 @@
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a> <span class="divider"> &gt; </span>
<span class="active"><:pass_erreur:> 404</span>
</nav>

View File

@ -0,0 +1,13 @@
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<BOUCLE_breadcrumb(ARTICLES){id_article}>
<BOUCLE_ariane(HIERARCHIE){id_article}>
<li class="breadcrumb-item"><a href="#URL_RUBRIQUE">[(#TITRE|couper{60})]</a></li>
</BOUCLE_ariane>
<li class="breadcrumb-item">[(#TITRE|couper{60})]</li>
</BOUCLE_breadcrumb>
</ol>
</nav>
</B_breadcrumb>

16
squelettes/breadcrumb/auteur.html Executable file → Normal file
View File

@ -1,8 +1,10 @@
<BOUCLE_content(AUTEURS){id_auteur}>
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<:info_auteurs:><span class="divider"> &gt; </span>
[<span class="active">(#NOM|couper{80})</span>]
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<BOUCLE_breadcrumb(AUTEURS){id_auteur}{tout}>
<li class="breadcrumb-item">[(#NOM|couper{60})]</li>
</BOUCLE_breadcrumb>
</ol>
</nav>
</BOUCLE_content>
</B_breadcrumb>

18
squelettes/breadcrumb/dist.html Executable file → Normal file
View File

@ -1,15 +1,5 @@
<nav class="arbo" aria-label="Fil d'Ariane">
#SET{objet,''}#SET{id_objet,''}
[(#ENV{id_rubrique}|oui)#SET{objet,rubrique}#SET{id_objet,#ENV{id_rubrique}}]
[(#ENV{id_syndic}|oui)#SET{objet,site}#SET{id_objet,#ENV{id_syndic}}]
[(#ENV{id_breve}|oui)#SET{objet,breve}#SET{id_objet,#ENV{id_breve}}]
[(#ENV{id_article}|oui)#SET{objet,article}#SET{id_objet,#ENV{id_article}}]
[(#ENV{id_objet}|oui)#SET{objet,#ENV{objet}}#SET{id_objet,#ENV{id_objet}}]
[(#GET{objet}|oui)
#INCLURE{fond=breadcrumb/inc-objet,id_objet=#GET{id_objet},objet=#GET{objet}}
][(#GET{objet}|non)
<a href="#URL_SITE_SPIP/"><:accueil_site:></a>
]
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
</ol>
</nav>

View File

@ -1,7 +0,0 @@
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<BOUCLE_contexte_rubrique(RUBRIQUES) {id_rubrique=(#OBJET|=={rubrique}|?{#INFO_ID_PARENT{#OBJET,#ID_OBJET},#INFO_ID_RUBRIQUE{#OBJET,#ID_OBJET}})}>
<BOUCLE_ariane_hier(HIERARCHIE) {id_rubrique}{tout}>
<a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a><span class="divider"> &gt; </span>
</BOUCLE_ariane_hier>
</BOUCLE_contexte_rubrique>
<span[(#ENV{expose,' '}|oui)class="active"]>[(#ID_OBJET|generer_url_entite{#OBJET}|lien_ou_expose{#INFO_TITRE{#OBJET,#ID_OBJET}|sinon{?}|couper{80},#ENV{expose,' '}|?{span}})]</span>[<span class="divider">(#ENV{expose,' '}|non)&gt; </span>]

View File

@ -1,10 +0,0 @@
[(#REM)
Est-ce qu'on se connecte a l'espace prive ou pas ?
]#SET{prive,''}
[(#ENV{url}|=={''}|?{#SET{prive,' '}})]
[(#ENV{url}|match{^#EVAL{_DIR_RESTREINT_ABS}}|?{#SET{prive,' '}})]
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane"><a href="#URL_SITE_SPIP/"><:accueil_site:></a>
[<span class="divider"> &gt; </span><strong class="on">(#GET{prive}|?{<:login_acces_prive:>,<:lien_connecter:>})</strong>]
</nav>

16
squelettes/breadcrumb/mot.html Executable file → Normal file
View File

@ -1,8 +1,10 @@
<BOUCLE_content(MOTS) {id_mot} {doublons}>
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<span><:mots_clefs:></span><span class="divider"> &gt; </span>
<BOUCLE_ariane(GROUPES_MOTS){id_groupe}><span>[(#TITRE|couper{80})]</span><span class="divider"> &gt; </span></BOUCLE_ariane>
<span class="active">[(#TITRE|couper{80})]</span>
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<BOUCLE_breadcrumb(MOTS){id_mot}>
<li><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
[<li>(#TITRE|couper{60})</li>]
</BOUCLE_breadcrumb>
</ol>
</nav>
</BOUCLE_content>
</B_breadcrumb>

8
squelettes/breadcrumb/plan.html Executable file → Normal file
View File

@ -1,4 +1,6 @@
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<span class="active"><:plan_site:></span>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<li class="breadcrumb-item"><:plan_site:/></li>
</ol>
</nav>

8
squelettes/breadcrumb/recherche.html Executable file → Normal file
View File

@ -1,4 +1,6 @@
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<span class="active"><:info_rechercher:> [&laquo; <strong class="on">(#RECHERCHE)</strong> &raquo;]</span>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<li class="breadcrumb-item"><:resultats_recherche:/></li>
</ol>
</nav>

View File

@ -0,0 +1,13 @@
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<BOUCLE_breadcrumb(RUBRIQUES){id_rubrique}>
<BOUCLE_ariane(HIERARCHIE){id_rubrique}>
<li class="breadcrumb-item"><a href="#URL_RUBRIQUE">[(#TITRE|couper{60})]</a></li>
</BOUCLE_ariane>
<li class="breadcrumb-item">[(#TITRE|couper{60})]</li>
</BOUCLE_breadcrumb>
</ol>
</nav>
</B_breadcrumb>

View File

View File

@ -1,10 +0,0 @@
[(#REM) Fil d'Ariane ]
<section class="content">
<header class="cartouche">
<h1><:pass_erreur:>[ (#ENV{status})]</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[<div class="chapo">(#ENV{erreur})</div>]
</div>
</section>

11
squelettes/content/404.html Executable file → Normal file
View File

@ -1,10 +1 @@
[(#REM) Fil d'Ariane ]
<section class="content">
<header class="cartouche">
<h1><:pass_erreur:> 404</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[<div class="chapo">(#ENV{erreur})</div>]
</div>
</section>
<h1><:pass_erreur:/> 404</h1>

45
squelettes/content/article.html Executable file → Normal file
View File

@ -1,16 +1,19 @@
<BOUCLE_content(ARTICLES){id_article}>
<article class="content" id="content">
<BOUCLE_principale(ARTICLES){id_article}>
<article>
<header class="cartouche">
[<p class="#EDIT{surtitre} surtitre">(#SURTITRE)</p>]
<h1><span class="#EDIT{titre}">#TITRE</span>[
<h1><span class="#EDIT{titre} article__titre">#TITRE</span>[
<small class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</small>
]</h1>
[(#ENV{composition}|=={blog}|oui)<INCLURE{fond=breadcrumb/rubrique-blog,env} />]
[(#ENV{composition}|=={blog}|non)<INCLURE{fond=breadcrumb/article,env} />]
[<p class="publication"><time datetime="[(#DATE|date_iso)]"><i class="icon-calendar"></i> (#DATE|affdate)</time></p>][(#CONFIG{baz_april/afficherauteurs}|=={on}|oui)[<p class="auteurs"><:par_auteur:> (#LESAUTEURS)</p>]]
<p class="article__infos">
[<span class="article__date">Publié le (#DATE|nom_jour) [(#DATE|affdate)] #SET{heure,#DATE|heures_minutes} [à (#GET{heure}|=={00h00min}|non)#GET{heure}]</span>]
[(#CONFIG{baz_april/afficherauteurs}|=={on}|oui)[<span class="article__auteurs"><:par_auteur:> (#LESAUTEURS)</span>]]
</p>
[(#REM) Inclure le modele des liens de traductions ]
<div class="postmeta">
#MODELE{article_traductions}
<B_tags>
@ -28,21 +31,29 @@
</header>
<div class="main">
[<div class="#EDIT{chapo} chapo surlignable">(#CHAPO|image_reduire{700,*})</div>]
[<div class="#EDIT{texte} texte surlignable">(#TEXTE|image_reduire{700,*})</div>]
[<p class="#EDIT{hyperlien} hyperlien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
[<div class="#EDIT{chapo} article__chapo">(#CHAPO)</div>]
[<div class="#EDIT{texte} article__texte">(#TEXTE|image_reduire{#CONST{_CONTENT_WIDTH},0})</div>]
</div>
<aside>
[(#REM) Gestion du portfolio et des documents ]
[(#INCLURE{fond=inclure/documents,id_article})]
</aside>
[<aside>
(#INCLURE{fond=inclure/documents,id_article})
</aside>]
<footer>
[<div class="#EDIT{ps} ps surlignable"><h2><:info_ps:></h2>(#PS|image_reduire{700,*})</div>]
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
[<p class="#EDIT{hyperlien} article__hyperlien"><:voir_en_ligne:/> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
[<div class="ps">
<div class="#EDIT{ps} article__ps">(#PS|image_reduire{#CONST{_CONTENT_WIDTH},0})</div>
</div>]
[<div class="article__notes">(#NOTES)</div>]
</footer>
</article>
</BOUCLE_content>
</BOUCLE_principale>

View File

@ -1,22 +0,0 @@
<BOUCLE_content(AUTEURS){id_auteur}>
<section class="content vcard" id="content" itemscope itemtype="http://schema.org/Person"> [(#REM) microformat vcard]
<header class="cartouche">
<h1 class="#EDIT{qui} fn" itemprop="name">[(#LOGO_AUTEUR|image_reduire|inserer_attribut{itemprop,image})]#NOM</h1>
</header>
<div class="main">
[<div class="#EDIT{bio} texte bio">(#BIO|image_reduire{700,*})</div>]
[<p class="#EDIT{hyperlien} hyperlien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="url spip_out" itemprop="url">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
</div>
<aside>
<INCLURE{fond=liste/articles-auteur,id_auteur,env,ajax} />
#FORMULAIRE_ECRIRE_AUTEUR
</aside>
<footer>
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
</section>
</BOUCLE_content>

View File

@ -1,18 +0,0 @@
<div class="page--container">
<span class="initiatives"><:baz_april:des_initiatives_april:></span>
<button type="button" class="btn-boussole"><:baz_april:site_april:></button>
<nav class="nav"><BOUCLE_csv(DATA){source csv, #CHEMIN{csv/boussole.csv}}>
<a href="#VALEUR{1}">#VALEUR{0}</a></BOUCLE_csv>
</nav>
</div>
<script type="text/javascript">
jQuery(function($){
// afficher/masquer la boussole < medium
$('.btn-boussole').on('click', function(){
$(this).toggleClass('actif').siblings('.nav').toggleClass('ouvert');
$('.principale .btn-nav').removeClass('actif').siblings('.nav-list').removeClass('ouvert');
});
});
</script>

View File

View File

@ -1,17 +0,0 @@
[(#REM)
Est-ce qu'on se connecte a l'espace prive ou pas ?
]#SET{prive,''}
[(#ENV{url}|=={''}|?{#SET{prive,' '}})]
[(#ENV{url}|match{^#EVAL{_DIR_RESTREINT_ABS}}|?{#SET{prive,' '}})]
<section class="content" id="content">
<header class="cartouche">
[<h1>(#GET{prive}|?{<:login_acces_prive:>,<:lien_connecter:>})
<small>#NOM_SITE_SPIP</small>
</h1>]
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header >
<div class="main">
[(#FORMULAIRE_LOGIN{#ENV{url}|sinon{#URL_ECRIRE{accueil}}})]
</div>
</section>

49
squelettes/content/mot.html Executable file → Normal file
View File

@ -1,49 +0,0 @@
<BOUCLE_content(MOTS) {id_mot} {doublons}>
<section class="content" id="content">
<header class="cartouche">
<h1 class="#EDIT{titre}">[(#LOGO_MOT|image_reduire)]#TITRE</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[<div class="#EDIT{texte} chapo">(#TEXTE|image_reduire{700,*})</div>]
</div>
<aside>
[(#REM) Articles lies au mot-cle ]
<div class="liste articles">
<INCLURE{fond=liste/articles-resume,env,ajax,id_mot,titre=<:baz_april:articles_lies:>} />
</div>
[(#REM) Rubriques liees au mot-cle ]
<B_rubriques>
<div class="liste rubriques">
<h2 class="h2"><:rubriques:></h2>
<ul class="liste-items">
<BOUCLE_rubriques(RUBRIQUES) {id_mot} {par titre} {pagination 50}>
<li class="item"><a href="#URL_RUBRIQUE">#TITRE</a></li>
</BOUCLE_rubriques>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</div>
</B_rubriques>
[(#REM) Sites web lies au mot-cle ]
<B_sites>
<div class="liste sites">
<h2 class="h2"><:sites_web:></h2>
<ul class="liste-items">
<BOUCLE_sites(SITES) {id_mot} {par nom_site} {pagination 50}>
<li class="item"><a href="[(#ID_SYNDIC|generer_url_entite{site,'','',#CONNECT})]">#NOM_SITE</a></li>
</BOUCLE_sites>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</div>
</B_sites>
</aside>
[<footer>
<div class="notes"><hr />(#NOTES)</div>
</footer>]
</section>
</BOUCLE_content>

View File

@ -1,53 +1,34 @@
<section class="content" id="content">
<header class="cartouche">
<h1><:plan_site:></h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<h1><:plan_site:/></h1>
<div class="main">
[(#REM)
Le plan de site ci-dessous est a adapter selon les besoins.
En particulier, on n'aura pas necessairement besoin de tous les elements (sous-rubriques, articles, breves et sites)
]
<BOUCLE_secteurs(RUBRIQUES) {racine} {par num titre}{!par date}>
<h2>#TITRE</h2>
[(#REM) Articles et sous-rubriques ]
<B_articles_pages>
<ul class="plan">
<BOUCLE_articles_pages(ARTICLES) {id_rubrique=-1} {page !IN accueil, mentions} {par titre}>
<li><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles_pages>
</ul>
</B_articles_pages>
<BOUCLE_secteurs(RUBRIQUES) {racine} {par num titre, titre}>
<h2 class="h2"><a href="#URL_RUBRIQUE">#TITRE</a></h2>
[(#REM) Articles et sous-rubriques ]
<BOUCLE_test_article_r1(ARTICLES){id_rubrique}{1,2}>
</BOUCLE_test_article_r1>
<B_articles_racine>
<ul class="plan">
<BOUCLE_articles_racine(ARTICLES) {id_rubrique} {par titre}>
<ul>
<BOUCLE_articles_racine(ARTICLES) {id_rubrique} {tri_rubrique}>
<li><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles_racine>
</ul>
</B_articles_racine>
</B_test_article_r1>
<B_rubriques>
<ul class="plan">
<BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
<ul>
<BOUCLE_rubriques(RUBRIQUES) {id_parent} {par num titre}{!par date}>
<li>
<strong><a href="#URL_RUBRIQUE">#TITRE</a></strong>
<BOUCLE_test_article_r2(ARTICLES){id_rubrique}{1,2}>
</BOUCLE_test_article_r2>
<B_articles>
<ul>
<BOUCLE_articles(ARTICLES) {id_rubrique} {par titre}>
[(#TOTAL_BOUCLE|>{1}|oui)<li><a href="#URL_ARTICLE">#TITRE</a></li>]
<BOUCLE_articles(ARTICLES) {id_rubrique} {tri_rubrique}>
<li><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles>
</ul>
</B_articles>
</B_test_article_r2>
<BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
</li>
</BOUCLE_rubriques>
@ -55,6 +36,3 @@
</B_rubriques>
</BOUCLE_secteurs>
</div>
</section>

16
squelettes/content/recherche.html Executable file → Normal file
View File

@ -1,14 +1,4 @@
<section class="content" id="content">
[<header class="cartouche">
<h1><:resultats_recherche:>
<small>&#171;&nbsp;(#RECHERCHE)&nbsp;&#187;</small>
</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>]
<h1><:resultats_recherche:/></h1>
[<p class="soustitre">« (#RECHERCHE) »</p>]
<div class="main">
<INCLURE{fond=liste/articles-recherche,env,ajax} />
<INCLURE{fond=liste/rubriques-recherche,env,ajax} />
</div>
</section>
<INCLURE{fond=inclure/recherche/articles, env, ajax} />

72
squelettes/content/rubrique.html Executable file → Normal file
View File

@ -1,54 +1,30 @@
<BOUCLE_content(RUBRIQUES){id_rubrique}>
<section class="content" id="content">
<BOUCLE_principale(RUBRIQUES){id_rubrique}>
<header class="cartouche">
<h1 class="#EDIT{titre}">#TITRE</h1>
[<p class="publication"><time datetime="[(#DATE|date_iso)]"><:dernier_ajout:> : (#DATE|affdate_jourcourt).</time></p>]
<INCLURE{fond=breadcrumb/rubrique,env} />
</header>
<h1 class="#EDIT{titre} page_titre">#TITRE</h1>
<div class="main">
[<div class="#EDIT{texte} texte">(#TEXTE|image_reduire{700,*})</div>]
<div class="page_content">
<div class="liste articles">
<INCLURE{fond=liste/articles-resume,env,ajax,titre=<:articles_rubrique:>} />
[<div class="#EDIT{texte} texte surlignable">(#TEXTE|image_reduire{#CONST{_CONTENT_WIDTH},0})</div>]
<B_articles>
<div class="liste_articles">
#ANCRE_PAGINATION
<BOUCLE_articles(ARTICLES){id_rubrique} {tri_rubrique} {pagination 10}>
#INCLURE{fond=inclure/article-resume, id_article}
</BOUCLE_articles>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</div>
[(#REM) Si aucun article, affiche un plan de la rubrique : en fait non, on a la liste en aside, on la garde là-bas et on se sert du texte si on veut en mettre en avant au cas par cas
ou éventuellement avec un modèle <rubriqueX|articles>
+ activer le plugin court-circuit pour aller directement dans larticle si un seul présent
]
</B_articles>
<BOUCLE_rubriques(RUBRIQUES) {id_parent} {par num titre, titre}>
<h2><a href="#URL_RUBRIQUE">#TITRE</a></h2>
<div class="liste_articles">
<BOUCLE_articles_rub(ARTICLES){id_rubrique} {tri_rubrique} {0,3}>
#INCLURE{fond=inclure/article-resume, id_article}
</BOUCLE_articles_rub>
</div>
<p class="liste_articles__suite"><a href="#URL_RUBRIQUE">Tous les articles &laquo;&nbsp;#TITRE&nbsp;&raquo;</a></p>
</BOUCLE_rubriques>
</div>
<footer>
[(#REM) Gestion du portfolio et des documents ]
[(#INCLURE{fond=inclure/documents,id_rubrique})]
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
<aside>
[(#REM) Sites de la rubrique ]
<B_sites>
<div class="liste sites">
<h2 class="h2"><:sur_web:></h2>
<ul class="liste-items">
<BOUCLE_sites(SITES) {id_rubrique} {par nom_site}>
<li class="item short">#INCLURE{fond=inclure/resume/site,id_syndic}
<B_syndic>
<ul class="spip">
<BOUCLE_syndic(SYNDIC_ARTICLES) {id_syndic} {age<180} {par date}{inverse} {0,3}>
<li class="short with-publication-inline">#INCLURE{fond=inclure/resume/syndic_article,id_syndic_article}</li>
</BOUCLE_syndic>
</ul>
</B_syndic>
</li>
</BOUCLE_sites>
</ul>
</div>
</B_sites>
</aside>
</section>
</BOUCLE_content>
</BOUCLE_principale>

View File

@ -12,7 +12,7 @@
</div>
<aside>
<INCLURE{fond=liste/syndicarticles,id_syndic,env,ajax} />
<INCLURE{fond=inclure/liste/syndicarticles,id_syndic,env,ajax} />
</aside>
<footer>

39
squelettes/content/sommaire.html Executable file → Normal file
View File

@ -1,33 +1,10 @@
<section class="content" id="content">
<header class="cartouche visuallyhidden">
<h1>#NOM_SITE_SPIP</h1>
</header>
<div class="main">
<B_accueil>
<article class="texte_accueil">
<BOUCLE_accueil(ARTICLES){page=accueil}>
[<h2 class="h2 visuallyhidden">(#TITRE|sinon{<:accueil:>})</h2>]
<div class="main">
[<div class="#EDIT{chapo} chapo surlignable">(#CHAPO|image_reduire{700,*})</div>]
[<div class="#EDIT{texte} texte surlignable">(#TEXTE|image_reduire{700,*})</div>]
[<p class="#EDIT{hyperlien} hyperlien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
</div>
<footer>
[<div class="#EDIT{ps} ps surlignable"><h2><:info_ps:></h2>(#PS|image_reduire{700,*})</div>]
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
</BOUCLE_accueil>
</article>
</B_accueil>
[<div id="descriptif_site_spip" class="#EDIT{meta-descriptif_site} texte_accueil">(#DESCRIPTIF_SITE_SPIP)</div>]
<//B_accueil>
<div class="liste long articles">
<INCLURE{fond=liste/articles-resume,env,ajax} />
<div class="liste_articles">
<B_articles>
#ANCRE_PAGINATION
<BOUCLE_articles(ARTICLES){!par date} {pagination 5}>
#INCLURE{fond=inclure/article-resume, id_article, longueur=480}
</BOUCLE_articles>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</B_articles>
</div>
</div>
</section>

View File

@ -0,0 +1,13 @@
#HTTP_HEADER{Content-Type: image/x-icon}
#HTTP_HEADER{Content-Transfer-Encoding: binary}
<?php
$file="[(#CHEMIN{favicon.ico}|sinon{[(#CHEMIN{favicon.png}
|image_passe_partout{32,32}
|image_recadre{32,32,center}
|image_format{ico}|extraire_attribut{src}
)]}|sinon{#CHEMIN{spip.ico}})]";
if ($cl = filesize($file=preg_replace(',[?].*$,','',$file)))
header("Content-Length: ". $cl);
readfile($file);
?>

BIN
squelettes/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

13
squelettes/footer/dist.html Executable file → Normal file
View File

@ -1,6 +1,17 @@
<div class="menus_footer">
#INCLURE{fond=inclure/menu, env, identifiant=pied1}
#INCLURE{fond=inclure/menu, env, identifiant=pied2}
#INCLURE{fond=inclure/menu, env, identifiant=pied3}
#INCLURE{fond=inclure/menu, env, identifiant=pied4}
#INCLURE{fond=inclure/menu, env, identifiant=pied5}
</div>
#FORMULAIRE_RECHERCHE
<p class="colophon">
<span class="april"><img src="#CHEMIN{scss/img/logo_april_b.png}" /></span>
<span class="april"><img src="#CHEMIN{images/logo_april_b.png}" /></span>
<BOUCLE_contact(ARTICLES){page=contact}>
<a href="#URL_ARTICLE">#TITRE</a>

View File

@ -0,0 +1,9 @@
<div class="formulaire_spip formulaire_recherche[ (#ENV{class})]">
<form action="[(#ENV{action})]" method="get" role="search" aria-label="site">
[(#ENV{action}|form_hidden)]
[<input type="hidden" name="lang" value="(#ENV{lang})" />]
<label for="#ENV{_id_champ}"><:info_rechercher_02:/></label>
<input type="[(#HTML5|?{search,text})]" class="search text" size="10" name="recherche" placeholder="Rechercher" id="#ENV{_id_champ}"[ value="(#ENV{recherche})"] accesskey="4" autocapitalize="off" autocorrect="off"/>
<button type="submit" class="submit"><:info_rechercher:/></button>
</form>
</div>

View File

@ -0,0 +1,43 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
* \***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* chargement des valeurs par defaut des champs du #FORMULAIRE_RECHERCHE
* on peut lui passer l'url de destination en premier argument
* on peut passer une deuxième chaine qui va différencier le formulaire pour pouvoir en utiliser plusieurs sur une même page
*
* @param string $lien URL amène le formulaire validé
* @param string $class Une class différenciant le formulaire
*
* @return array
*/
function formulaires_recherche_charger_dist($lien = '', $class = '') {
if ($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']) {
$lang = $GLOBALS['spip_lang'];
} else {
$lang = '';
}
$action = ($lien ? $lien : generer_url_public('recherche')); # action specifique, ne passe pas par Verifier, ni Traiter
return
array(
'action' => $action,
'recherche' => _request('recherche'),
'lang' => $lang,
'class' => $class,
'_id_champ' => $class ? substr(md5($action . $class), 0, 4) : 'recherche',
);
}

2
squelettes/head/401.html Normal file
View File

@ -0,0 +1,2 @@
<title>Accès réservé - [(#NOM_SITE_SPIP|textebrut)]</title>
<meta name="robots" content="noindex">

4
squelettes/head/404.html Executable file → Normal file
View File

@ -1,2 +1,2 @@
<title><:pass_erreur:> 404 - [(#NOM_SITE_SPIP|textebrut)]</title>
<meta name="robots" content="none" />
<title><:pass_erreur:/> 404 - [(#NOM_SITE_SPIP|textebrut)]</title>
<meta name="robots" content="noindex">

4
squelettes/head/article.html Executable file → Normal file
View File

@ -1,5 +1,5 @@
<BOUCLE_article_head(ARTICLES) {id_article}>
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#INTRODUCTION{150}|attribut_html)" />]
<title>[(#TITRE|textebrut)][ - (#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#INTRODUCTION|couper{150}|textebrut)" />]
[<link rel="canonical" href="(#URL_ARTICLE|url_absolue)" />]
</BOUCLE_article_head>

View File

@ -1,11 +0,0 @@
<BOUCLE_auteur_head(AUTEURS) {id_auteur}>
<title>[(#NOM|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#BIO|couper{150}|attribut_html)" />]
[<link rel="canonical" href="(#URL_AUTEUR|url_absolue)" />]
[(#REM) Favicon personnalisee a partir du logo (si filtres d'image) ]
[(#MODELE{favicon}{favicon=#LOGO_AUTEUR})]
[(#REM) Lien vers le flux RSS des articles de l'auteur ]
<link rel="alternate" type="application/rss+xml" title="[(#NOM|textebrut)]" href="[(#URL_PAGE{backend}|parametre_url{id_auteur,#ID_AUTEUR})]" />
</BOUCLE_auteur_head>

24
squelettes/head/dist.html Executable file → Normal file
View File

@ -1,26 +1,2 @@
[(#REM)
Cette inclusion est celle utilisee par defaut lorsqu'un head/xxx demande
n'existe pas
Ces deux balises #NOM_SITE_SPIP et #DESCRIPTIF_SITE_SPIP
permettent de récupérer des informations de configuration de SPIP
que l'on renseigne dans l'espace privé.
Ces enregistrements sont stockés en base de donnée dans une
table appelée "spip_meta". Les champs de la table peuvent aussi
être récupérés en utilisant la balise #CONFIG{nom de la configuration}
ce qui donnerait ici : #CONFIG{nom_site_spip}
Les |mot suivants les #BALISE indique qu'on applique certains traitements
au texte retourné par la balise.
|textebrut supprime toute balise HTML, |couper{150} coupe le texte
retourné à 150 caractères. Ces "filtres" peuvent se chaîner
|filtreA|filtreB ...
Ces deux lignes permettent au bout du compte de renseigner le titre
de la page affiché tout en haut du navigateur ainsi que la description du site
(utile aux moteurs de recherche)
]
<title>[(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|textebrut)" />]

11
squelettes/head/mot.html Executable file → Normal file
View File

@ -1,6 +1,5 @@
<BOUCLE_principale(MOTS) {id_mot} >
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF|couper{150}|attribut_html)" />]
[(#REM) Lien vers le flux RSS des articles du mot cle ]
<link rel="alternate" type="application/rss+xml"[ title="(#TITRE|attribut_html)"] href="[(#URL_PAGE{backend}|parametre_url{id_mot,#ID_MOT})]" />
</BOUCLE_principale>
<BOUCLE_mot_head(MOTS) {id_mot}>
<title>[(#TITRE|textebrut)][ - (#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF|couper{150}|textebrut)" />]
[<link rel="canonical" href="(#URL_MOT|url_absolue)" />]
</BOUCLE_article_head>

View File

@ -1,3 +0,0 @@
<title><:plan_site:> - [(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|attribut_html)" />]
<meta name="robots" content="none" />

2
squelettes/head/recherche.html Executable file → Normal file
View File

@ -1,2 +1,2 @@
<title><:resultats_recherche:> - [(#NOM_SITE_SPIP|textebrut)]</title>
<title><:resultats_recherche:/>[ - (#NOM_SITE_SPIP|textebrut)]</title>
<meta name="robots" content="none" />

4
squelettes/head/rubrique.html Executable file → Normal file
View File

@ -1,7 +1,5 @@
<BOUCLE_rubrique_head(RUBRIQUES) {id_rubrique}>
[<title>(#TITREWEB|sinon{#TITRE}|textebrut)</title>]
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#INTRODUCTION{150}|textebrut)" />]
[<link rel="canonical" href="(#URL_RUBRIQUE|url_absolue)" />]
[(#REM) Lien vers le flux RSS de la rubrique ]
<link rel="alternate" type="application/rss+xml" title="<:syndiquer_rubrique:>" href="[(#URL_PAGE{backend}|parametre_url{id_rubrique,#ID_RUBRIQUE})]" />
</BOUCLE_rubrique_head>

View File

@ -1,5 +0,0 @@
<BOUCLE_site(SITES){id_syndic}>
<title>[(#NOM_SITE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF|couper{150}|textebrut)" />]
<meta name="robots" content="none" />
</BOUCLE_site>

View File

@ -1,23 +0,0 @@
[(#REM)
Ces deux balises #NOM_SITE_SPIP et #DESCRIPTIF_SITE_SPIP
permettent de récupérer des informations de configuration de SPIP
que l'on renseigne dans l'espace privé.
Ces enregistrements sont stockés en base de donnée dans une
table appelée "spip_meta". Les champs de la table peuvent aussi
être récupérés en utilisant la balise #CONFIG{nom de la configuration}
ce qui donnerait ici : #CONFIG{nom_site_spip}
Les |mot suivants les #BALISE indique qu'on applique certains traitements
au texte retourné par la balise.
|textebrut supprime toute balise HTML, |couper{150} coupe le texte
retourné à 150 caractères. Ces "filtres" peuvent se chaîner
|filtreA|filtreB ...
Ces deux lignes permettent au bout du compte de renseigner le titre
de la page affiché tout en haut du navigateur ainsi que la description du site
(utile aux moteurs de recherche)
]
<title>[(#NOM_SITE_SPIP|typo|textebrut)][ - (#SLOGAN_SITE_SPIP|typo|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|textebrut)" />]

13
squelettes/header/dist.html Executable file → Normal file
View File

@ -1,6 +1,17 @@
<div class="accueil">
<div class="header_title print">
<h1 id="logo_site_spip"[ class="(#EDIT{meta-nom_site})"]>[(#SI_PAGE{sommaire}|non)<a rel="start home" href="#URL_SITE_SPIP/" title="<:accueil_site:>">]
[(#LOGO_SITE_SPIP|image_reduire{400,60}) ]<span class="nom_site_spip">#NOM_SITE_SPIP</span>
[<small class="slogan_site_spip[ (#EDIT{meta-slogan_site})]">(#SLOGAN_SITE_SPIP)</small>]
[(#SI_PAGE{sommaire}|non)</a>]</h1>
</div>
<B_nav>
<nav class="nav principale" aria-label="Menu principal">
<ul class="nav-list">
<BOUCLE_nav(RUBRIQUES) {racine} {par num titre, titre}>
<li class="nav-item[ (#EXPOSE)][ (#COMPTEUR_BOUCLE|=={1}|oui)first][ (#COMPTEUR_BOUCLE|=={#TOTAL_BOUCLE}|oui)last]"><a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>#TITRE</a></li>
</BOUCLE_nav>
</ul>
</nav>
</B_nav>

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,9 +0,0 @@
<div class="liste articles archives">
<h2 class="h2"><:baz_april:archives:></h2>
<ul class="liste-items inline">
<BOUCLE_hero(ARTICLES){id_rubrique}{fusion YEAR(date)}{fusion MONTH(date)}{!par date}>
[<li class="item annees">(#DATE|affdate{Y}|unique)</li>]
[<li class="item"><a[ href="(#URL_RUBRIQUE|parametre_url{date,#DATE|affdate{Y-m}})"]>(#DATE|affdate{nom_mois})</a></li>]
</BOUCLE_hero>
</ul>
</div>

View File

@ -1,10 +0,0 @@
<BOUCLE_hero(ARTICLES){id_article}>
<div class="hero-unit item hentry">
<h1 class="entry-title"><a href="#URL_ARTICLE" rel="bookmark">#TITRE[(#LOGO_ARTICLE_RUBRIQUE|image_reduire{500,100}|responsive_logo)]</a></h1>
<p class="publication">[<time pubdate="pubdate" datetime="[(#DATE|date_iso)]">(#DATE|affdate)</time>]</p>
[<div class="#EDIT{intro} introduction entry-content">(#INTRODUCTION)</div>]
<p class="postmeta">
<a class="btn btn-primary btn-large lire-la-suite" href="#URL_ARTICLE" title="<:zcore:lire_la_suite|attribut_html:> <:zcore:lire_la_suite_de|attribut_html:> [(#TITRE|attribut_html)]"><:zcore:lire_la_suite:></a>
</p>
</div>
</BOUCLE_hero>

View File

@ -0,0 +1,20 @@
<BOUCLE_articles(ARTICLES) {id_article}>
<article class="article-resume[ article-resume--(#ENV{class})] block-link-parent">
<div class="article-resume__logo">
[(#LOGO_ARTICLE_NORMAL|sinon{#CHEMIN{images/nologo.png}}|image_recadre{#CONST{_IMAGE_RATIO},-}|image_reduire{#CONST{_CONTENT_WIDTH}|div{2}} )]
</div>
<div class="article-resume__texte">
<h2 class="article-resume__titre"><a href="#URL_ARTICLE" class="block-link[ (#ENV{class_link})]">#TITRE</a></h2>
<div class="article-resume__infos">
[<span class="article-resume__rubrique">(#INFO_TITRE{rubrique,#ID_RUBRIQUE})</span>]
#SET{heure,#DATE|heures|concat{h}}
#SET{minutes,#DATE|minutes}
[(#GET{minutes}|=={00}|non)#SET{heure,#GET{heure}|concat{#GET{minutes}}}]
[<span class="article-resume__date">(#DATE|nom_jour|ucfirst) [(#DATE|affdate)] [(#ENV{class}|=={vertical}|non)à #GET{heure}]</span>]
</div>
<div class="article-resume__intro">
[(#INTRODUCTION{#ENV{longueur,180}}|PtoBR)]
</div>
</div>
</article>
</BOUCLE_articles>

View File

@ -1,10 +0,0 @@
<B_articles>
#ANCRE_PAGINATION
<h2 class="h2">[(#ENV{titre,<:derniers_articles:>})]</h2>
<ul class="liste-items">
<BOUCLE_articles(ARTICLES){id_rubrique!=-1}{id_rubrique?} {lang} {par num titre} {!par date} {pagination #ENV{nb,10}}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env}</li>
</BOUCLE_articles>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</B_articles>

View File

@ -1,16 +0,0 @@
[(#REM) on affiche tous les articles, on garde le paramètre url des paginations article et rubrique ]
<BOUCLE_env(ARTICLES){id_article}>
<BOUCLE_trad(ARTICLES){origine_traduction}{traduction}>[(#SET{trad#ID_ARTICLE,on})]</BOUCLE_trad>
</BOUCLE_env>
<B_articles_rubrique>#ANCRE_PAGINATION
<ul[(#COMPOSITION|=={blog}|oui) class="blog"]>
<BOUCLE_articles_rubrique(ARTICLES) {id_rubrique} {lang} {par num titre} {!par date} {pagination #ENV{nb,10}}>
<li>
<a[ href="(#URL_ARTICLE|parametre_url{debut_articles_rubrique,@#ID_ARTICLE})"] class="article[(#LOGO_ARTICLE|oui)logo clearfix][ (#EXPOSE)][ (#GET{trad#ID_ARTICLE})]">[(#COMPOSITION|=={blog}|oui)[<p class="date">(#DATE|affdate)</p>]]
[(#LOGO_ARTICLE|image_reduire{60,*})] #TITRE [(#COMPOSITION|=={blog}|oui)[<p class="soustitre">(#SOUSTITRE)</p>][<p class="introduction">(#INTRODUCTION|couper{120})</p>]]
</a>
</li>
</BOUCLE_articles_rubrique>
</ul>
[<p class="pagination">(#PAGINATION{page})</p>]
</B_articles_rubrique>

View File

@ -1,5 +1,7 @@
<div class="header__boussole">
<div class="page--container">
<div class="header_boussole">
<div class="page_container">
<span class="initiatives"><:baz_april:des_initiatives_april:></span>
<button type="button" class="btn-boussole"><:baz_april:site_april:></button>
<nav class="nav"><BOUCLE_csv(DATA){source csv, #CHEMIN{csv/boussole.csv}}>
<a href="#VALEUR{1}">#VALEUR{0}</a></BOUCLE_csv>
</nav>

View File

@ -1,42 +1,24 @@
[(#REM)
Head standard de toutes les pages ;
les elements specifiques (title, description) figurent dans chaque squelette
Head standard de toutes les pages ; les elements specifiques
(title, description) figurent dans le squelette article.html
]
<meta name="viewport" content="width=device-width, initial-scale=1" />
[(#REM) Lien vers le flux RSS du site ]
[<link rel="alternate" type="application/rss+xml" title="<:syndiquer_site:>" href="(#URL_PAGE{backend})" />]
[(#REM) baz scss ]
[<link rel="stylesheet" href="(#CSS{scss/baz.css})" type="text/css" />]
[(#REM) surcharge facile pur css ]
[<link rel="stylesheet" href="(#CSS{css/perso.css})" type="text/css" />]
<meta name="generator" content="SPIP[ (#SPIP_VERSION)]" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
#INSERT_HEAD_CSS
[(#REM)
Balise permettant aux plugins d'inserer des appels javascript ;
4. C'est ici que SPIP va inserer l'appel de la librairie jQuery
5. Et appeler a la fin compacte_head pour agreger et compacter tout le head dans des fichiers statiques si l'option est cochee dans Configuration
]
#INSERT_HEAD
[<script src="(#CHEMIN{js/baz_script.js})" type="text/javascript"></script>]
[(#REM) 6. Vos scripts ]
[<script src="(#CHEMIN{js/script.js})" type="text/javascript"></script>]
[<link rel="stylesheet" href="(#CSS{css/spip.css})" type="text/css" />]
[<link rel="stylesheet" href="(#CSS{css/media.css})" type="text/css" />]
[(#REM) Fierement fabrique avec SPIP ]
<meta name="generator" content="SPIP[ (#SPIP_VERSION)]" />
[(#REM) Thème SCSS du plugin ]
[<link rel="stylesheet" href="(#CSS{scss/theme.css})" type="text/css" />]
[(#REM) Favicon + activer le plugin Favicon ]
[<link rel="shortcut icon" href="(#ENV*{favicon}
|sinon{#CHEMIN{favicon.ico}}
|sinon{#CHEMIN{favicon.png}}
|sinon{#LOGO_SITE_SPIP}
|image_passe_partout{16,16}
|image_recadre{16,16,center}
|image_format{ico}|extraire_attribut{src})" type="image/x-icon" />]
[(#REM) scripts génériques ]
[<script type="text/javascript" src="(#CHEMIN{javascript/sidr/jquery.sidr.min.js})"></script>]
[<script type="text/javascript" src="(#CHEMIN{javascript/script.js}|timestamp)"></script>]
[(#REM) meta robots ]
[<meta name="robots" content="(#ENV{robots})" />]
[(#REM) flux RSS ]
[<link rel="alternate" type="application/rss+xml" title="<:syndiquer_site:/>" href="(#URL_PAGE{backend}|url_absolue)" />]

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

View File

@ -1,10 +0,0 @@
<B_articles>
#ANCRE_PAGINATION
<h2 class="h2">[(#ENV{titre,<:derniers_articles:>})]</h2>
<ul class="liste-items">
<BOUCLE_articles(ARTICLES){id_rubrique!=-1}{id_rubrique?} {lang} {par num titre} {!par date} {pagination #ENV{nb,10}}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env}</li>
</BOUCLE_articles>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</B_articles>

View File

@ -1,25 +0,0 @@
#SET{sens_tri_map, #ARRAY{direct,0, inverse,-1}}
#SET{sens_tri, #GET{sens_tri_map/#ENV{sens}}}
#SET{par_map, #ARRAY{
num_titre, 'num titre'
}}
#SET{defaut_tri, #ARRAY{
titre, #GET{sens_tri,0},
num titre, #GET{sens_tri,0},
date, #GET{sens_tri,-1},
date_modif, #GET{sens_tri,-1}
}}
#SET{par, #ENV{par}|in_array{#GET{par_map}|array_keys}|?{#GET{par_map/#ENV{par}},#ENV{par}}}
#SET{tri, #GET{par,titre}}
<BOUCLE_rubrique(RUBRIQUES){id_rubrique}>
<B_rubriques_rubrique>
#ANCRE_PAGINATION
[<h2 class="h2">(#ENV{titre,<:rubriques:>})</h2>]
<ul class="liste-items">
<BOUCLE_rubriques_rubrique(RUBRIQUES) {id_parent} {tri #GET{tri}, #GET{defaut_tri}} {pagination #ENV{parpage,10}}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/rubrique,id_rubrique,env,largeur_logo=#ENV{largeur_logo},coupe=#ENV{coupe}}</li>
</BOUCLE_rubriques_rubrique>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</B_rubriques_rubrique>
</BOUCLE_rubrique>

0
squelettes/inclure/nav-secteurs.html Executable file → Normal file
View File

View File

@ -1,45 +0,0 @@
[(#REM) Signer la petition ]
#FORMULAIRE_SIGNATURE
[(#REM) Signatures de la petition ]
<B_signatures>
<div id="signatures">
[<div class="pagination">(#PAGINATION)</div>]
<table class="spip">
<caption><h2 class="h2">#GRAND_TOTAL <:signatures_petition:></h2></caption>
<thead>
<tr class="row_first">
<th class="signature-date"><a href='[(#SELF|parametre_url{tri,date_time}|parametre_url{tri_inverse,''})]#signatures' title="<:lien_trier_date:>"><:date:></a></th>
<th class="signature-nom"><a href='[(#SELF|parametre_url{tri,nom_email}|parametre_url{tri_inverse,''})]#signatures' title="<:lien_trier_nom:>"><:nom:></a></th>
[(#REM) Afficher la colonne des messages si autorises ]
<BOUCLE_signature-message-th(PETITIONS){id_article}{message=oui}>
<th class="signature-message"><:message:></th>
</BOUCLE_signature-message-th>
</tr>
</thead>
<tbody>
<BOUCLE_signatures(SIGNATURES) {id_article} {pagination #ENV{pagination, 15} } {recherche ?#ENV{recherche_signatures}} {!par #ENV{tri}}{par #ENV{tri_inverse}} {!par #ENV{tri,#ENV{tri_inverse}}|?{'',date_time}}>
<tr [class="(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})" ]id='id_signature#ID_SIGNATURE'>
<td class="signature-date">[(#DATE|affdate_jourcourt)]</td>
<td class="signature-nom"><strong class="#EDIT{qui}">#NOM</strong>[ <div class="small #EDIT{hyperlien}"><a href="(#URL_SITE)"[ title="(#NOM_SITE|attribut_html|couper{80})"] class="spip_out"><:site_web:></a></div>]</td>
[(#REM) Afficher la colonne des messages si autorises ]
<BOUCLE_signature-message-td(PETITIONS){id_article}{message=oui}> </BOUCLE_signature-message-td>
<td class="signature-message #EDIT{message}">[(#MESSAGE|PtoBR)]</td>
</B_signature-message-td>
</tr>
</BOUCLE_signatures>
</tbody>
</table>
[<div class="pagination">(#PAGINATION)</div>]
[(#REM) Afficher un moteur de recherche si plus de 30 signatures
ou s'il etait deja present au coup d'avant]
[(#ENV{recherche_signatures}|?{31,#_signatures:GRAND_TOTAL}|>{3}|oui)
<div class="formulaire_spip formulaire_recherche formulaire_recherche_signatures" id="formulaire_recherche_signatures">
<form method='get' action='#SELF'><div>[(#SELF|form_hidden)]
<label for="recherche_signatures"><:info_rechercher:></label> <input type="text" class="text" size="10" name="recherche_signatures" id="recherche_signatures" style='font-style: italic;' value=" <:entree_signature:>"/> <input type="submit" class="submit" value="<:info_rechercher:>" />
</div></form>
</div>
]
</div><!--#signatures-->
</B_signatures>

View File

@ -0,0 +1,14 @@
[(#REM) Articles trouves ]
<B_articles>
#ANCRE_PAGINATION
<h2><:articles:/> (#GRAND_TOTAL)</h2>
<ul>
<BOUCLE_articles(ARTICLES) {recherche} {lang} {!par points} {pagination 5}>
<li class="block-link-parent">
<strong><a class="block-link" href="#URL_ARTICLE"[ hreflang="(#LANG)"]>#TITRE</a></strong>
[(#INTRODUCTION{150})]
</li>
</BOUCLE_articles>
</ul>
[<p class="pagination">(#PAGINATION)</p>]
</B_articles>

View File

@ -1,13 +0,0 @@
[(#REM)
Squelette Presentation resumee d'un article dans une liste
Distribue sous licence GPL
]
<BOUCLE_articles(ARTICLES) {id_article} {statut?}>
<article class="entry article hentry[(#COMPOSITION|=={blog}|oui) blog]">
<p class="publication">[<time datetime="[(#DATE|date_iso)]">(#DATE|affdate)</time>]</p>
<h3 class="h3 entry-title"><a href="[(#URL_ARTICLE|parametre_url{debut_articles_rubrique,@#ID_ARTICLE}|parametre_url{recherche,#ENV{recherche}})]" rel="bookmark">[(#ENV{logo_rubrique,' '}|?{#LOGO_ARTICLE_RUBRIQUE,#LOGO_ARTICLE}|image_reduire{#ENV{largeur_logo,-1},#ENV{hauteur_logo,-1}}|responsive_logo)]<span>#TITRE</span></a></h3>
[<div class="#EDIT{intro} introduction entry-content">(#INTRODUCTION{#ENV{coupe,300}})</div>]
</article>
</BOUCLE_articles>

View File

@ -1,13 +0,0 @@
[(#REM)
Squelette Presentation resumee d'un article dans une liste
Distribue sous licence GPL
]
<BOUCLE_articles(RUBRIQUES) {id_rubrique} {statut?}>
<article class="entry rubrique hentry">
<p class="publication[(#COMPOSITION|=={blog}|oui) blog]">[<time datetime="[(#DATE|date_iso)]">(#DATE|affdate)</time>]</p>
<h3 class="h3 entry-title"><a href="[(#URL_RUBRIQUE|parametre_url{recherche,#ENV{recherche}})]" rel="bookmark">[(#LOGO_RUBRIQUE|image_reduire{#ENV{largeur_logo,-1},#ENV{hauteur_logo,-1}}|responsive_logo)]<span>#TITRE</span></a></h3>
[<div class="#EDIT{introduction} introduction entry-content">(#INTRODUCTION{#ENV{coupe,300}})</div>]
</article>
</BOUCLE_articles>

View File

@ -1,12 +0,0 @@
[(#REM)
Squelette Presentation resumee d'un syndic dans une liste
Distribue sous licence GPL
]
<BOUCLE_resume_syndic(SYNDIC) {id_syndic} {statut?}>
<article class="entry site">
<h3 class="h3 entry-title"><a href="#ENV{url,#URL_SITE}" rel="bookmark" class="spip_out">[(#LOGO_SYNDIC_RUBRIQUE|image_reduire{#ENV{largeur_logo,-1},#ENV{hauteur_logo,-1}}|responsive_logo)]#NOM_SITE</a></h3>
[<div class="#EDIT{intro} introduction entry-content">(#DESCRIPTIF|couper{#ENV{coupe,300}})</div>]
</article>
</BOUCLE_resume_syndic>

View File

@ -1,9 +0,0 @@
<BOUCLE_resume_article_syndique(SYNDIC_ARTICLES){id_syndic_article}>
<article class="entry article syndic_article">
<h4 class="h4 entry-title">[<a href="#URL_SITE" rel="bookmark" class="spip_out">(#LOGO_SITE|image_reduire{#ENV{largeur_logo,25},#ENV{hauteur_logo,50}}|inserer_attribut{alt,#NOM_SITE}|responsive_logo)</a>]
[<a href="#URL_ARTICLE" rel="bookmark" class="spip_out">(#TITRE*)<span
class="read-more hide"><i class="icon-chevron-right" title="<:zcore:lire_la_suite|attribut_html:><:zcore:lire_la_suite_de|attribut_html:>&laquo;[(#TITRE*|attribut_html)]&raquo;"></i></span></a>]</h4>
<p class="publication">[<time datetime="[(#DATE|date_iso)]"><i class="icon-calendar"></i> (#DATE|affdate)</time>]</p>
[<div class="#EDIT{intro} introduction entry-content">(#DESCRIPTIF|couper{#ENV{coupe,300}})</div>]
</article>
</BOUCLE_resume_article_syndique>

View File

@ -1,56 +0,0 @@
[(#REM)
Barre de navigation, ouverte sur la hierarchie courante
On fait un plan, et, quand on avance vers une rubrique,
on l'affiche si son parent est expose ou est la racine du site. ]
<B_rubriques>
<nav class="nav">
<BOUCLE_rubriques(RUBRIQUES) {racine} {id_secteur}>
[(#REM) si plus d'un article, la liste des articles ]
<BOUCLE_test_article_r1(ARTICLES){id_rubrique}>
</BOUCLE_test_article_r1>
[(#SI_PAGE{rubrique}|non)[(#TOTAL_BOUCLE|>={10}|oui)
#SET{nb,10}[(#COMPOSITION|=={blog}|oui)#SET{nb,5}]
<INCLURE{fond=inclure/articles,env,ajax,id_rubrique=#ID_SECTEUR,id_article,debut_articles_rubrique,composition,nb=#GET{nb}} />
]]
[(#SI_PAGE{rubrique}|non)
[(#TOTAL_BOUCLE|>={10}|non)
[(#TOTAL_BOUCLE|>={2}|oui)
[(#COMPOSITION|=={blog}|oui)#SET{nb,5}<INCLURE{fond=inclure/articles,env,ajax,id_rubrique,id_article,composition,nb=#GET{nb}} />]
[(#COMPOSITION|=={blog}|non)
[(#COMPOSITION|=={accueil}|non)<INCLURE{fond=inclure/articles,id_rubrique,id_article,composition,nb=#GET{nb}} />]
]
]
]]
</B_test_article_r1>
[(#REM) quoi qu'il en soit, la liste des rubriques ]
<B_rubriques_rubrique>
<ul class="nav-list">
<BOUCLE_rubriques_rubrique(RUBRIQUES) {id_parent} {par num titre, titre}>
<li class="nav-item">
<a href="#URL_RUBRIQUE"[ class="(#EXPOSE)"]>[(#TITRE)]</a>
<BOUCLE_test_expose_r2(RUBRIQUES) {id_rubrique}>#EXPOSE{' '}</BOUCLE_test_expose_r2>
<BOUCLE_test_article_r2(ARTICLES){id_rubrique}>
</BOUCLE_test_article_r2>
[(#TOTAL_BOUCLE|>={10}|oui)
<INCLURE{fond=inclure/articles,env,ajax,id_rubrique,id_article,debut_articles_rubrique} />
]
[(#TOTAL_BOUCLE|>={10}|non)
[(#TOTAL_BOUCLE|>={2}|oui)
<INCLURE{fond=inclure/articles,id_rubrique,id_article,composition} />
]
]
</B_test_article_r2>
<BOUCLE_re_rubriques_rubrique(BOUCLE_rubriques_rubrique)></BOUCLE_re_rubriques_rubrique>
</B_test_expose_r2>
</li>
</BOUCLE_rubriques_rubrique>
</ul>
</B_rubriques_rubrique>
</BOUCLE_rubriques>
</nav>
</B_rubriques>

View File

@ -0,0 +1,74 @@
$(function() {
// masquer les mois des annees precedentes, les afficher au clic sur l'annee
// $.each( ['.annees.archive'], function(i,hi){
// $( ".periode div" ).find(hi).each(function(index) {
// // Creer un div apres et y placer tout ce qui se trouve apres et jusqu'au hi suivant
// $(this).after("<span class=\"mois_archives\"></span>").next().append($(this).next().nextUntil(hi));
// // plier/deplier le contenu
// // $(this).next().hide();
// $(this).click(function(){
// $(this).next().toggleClass('ouvert');
// $(this).toggleClass('ouvert');
// return false;
// });
// });
// });
// afficher/masquer la boussole < medium
$('.btn-boussole').on('click', function(){
$(this).toggleClass('actif').siblings('.nav').toggleClass('ouvert');
$('.principale .btn-nav').removeClass('actif').siblings('.nav-list').removeClass('ouvert');
});
// placer le html du bouton du menu, visible < medium
$('.nav.principale').prepend('<button type="button" class="btn-nav"><span class="ham"></span>MENU</button>');
// afficher/masquer le menu
$('.principale .btn-nav').on('click', function(){
$(this).toggleClass('actif').siblings('ul').toggleClass('ouvert');
$('.btn-boussole').removeClass('actif');
$('.header_boussole .nav').removeClass('ouvert');
});
/// styler les boutons radios et checkboxes
$('.formulaire_spip .choix label').each(function() {
$(this).prepend('<span><span></span></span>').parent().addClass('custom-radios');
});
// liens sortant et PDF en target _blank + ajout d'une mention dans le title ou alt des images
$('a.spip_out, a.spip_url, a.spip_glossaire, a.external, a[href$=".pdf"], a[href$=".doc"]').each(function() {
$(this).attr('target', '_blank').attr('rel', 'noreferrer noopener');
if($(this).attr('title') && $(this).attr('title').length) {
$(this).attr('title', $(this).attr('title') + ' - Nouvelle fenêtre');
} else if($(this).text().trim().length) {
$(this).attr('title', $(this).text().trim() + ' - Nouvelle fenêtre');
} else {
$(this).children('img').each(function() {
$(this).attr('alt', $(this).attr('alt') + ' - Nouvelle fenêtre');
});
}
});
// smooth scroll
$('a[href^="#"], .js-scrollTo').on('click', function(e) {
if($(this).hasClass('js-noscroll')) {
return;
}
var hash = this.hash;
var $target = $(hash);
var offset = $target.offset();
if(!offset) {
$target = $('a[name='+hash.replace(/#/,'')+']');
offset = $target.offset();
}
if(offset) {
e.preventDefault();
var newPos = offset.top - 10;
$('html, body').stop().animate(
{'scrollTop': newPos}, 750, 'swing', function() {
window.location.hash = hash;
});
}
});
});

View File

@ -0,0 +1,579 @@
/*! sidr - v2.2.1 - 2016-02-17
* http://www.berriart.com/sidr/
* Copyright (c) 2013-2016 Alberto Varela; Licensed MIT */
(function () {
'use strict';
var babelHelpers = {};
babelHelpers.classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
babelHelpers.createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
babelHelpers;
var sidrStatus = {
moving: false,
opened: false
};
var helper = {
// Check for valids urls
// From : http://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-an-url
isUrl: function isUrl(str) {
var pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|' + // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
'(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
if (pattern.test(str)) {
return true;
} else {
return false;
}
},
// Add sidr prefixes
addPrefixes: function addPrefixes($element) {
this.addPrefix($element, 'id');
this.addPrefix($element, 'class');
$element.removeAttr('style');
},
addPrefix: function addPrefix($element, attribute) {
var toReplace = $element.attr(attribute);
if (typeof toReplace === 'string' && toReplace !== '' && toReplace !== 'sidr-inner') {
$element.attr(attribute, toReplace.replace(/([A-Za-z0-9_.\-]+)/g, 'sidr-' + attribute + '-$1'));
}
},
// Check if transitions is supported
transitions: function () {
var body = document.body || document.documentElement,
style = body.style,
supported = false,
property = 'transition';
if (property in style) {
supported = true;
} else {
(function () {
var prefixes = ['moz', 'webkit', 'o', 'ms'],
prefix = undefined,
i = undefined;
property = property.charAt(0).toUpperCase() + property.substr(1);
supported = function () {
for (i = 0; i < prefixes.length; i++) {
prefix = prefixes[i];
if (prefix + property in style) {
return true;
}
}
return false;
}();
property = supported ? '-' + prefix.toLowerCase() + '-' + property.toLowerCase() : null;
})();
}
return {
supported: supported,
property: property
};
}()
};
var $$2 = jQuery;
var bodyAnimationClass = 'sidr-animating';
var openAction = 'open';
var closeAction = 'close';
var transitionEndEvent = 'webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend';
var Menu = function () {
function Menu(name) {
babelHelpers.classCallCheck(this, Menu);
this.name = name;
this.item = $$2('#' + name);
this.openClass = name === 'sidr' ? 'sidr-open' : 'sidr-open ' + name + '-open';
this.menuWidth = this.item.outerWidth(true);
this.speed = this.item.data('speed');
this.side = this.item.data('side');
this.displace = this.item.data('displace');
this.timing = this.item.data('timing');
this.method = this.item.data('method');
this.onOpenCallback = this.item.data('onOpen');
this.onCloseCallback = this.item.data('onClose');
this.onOpenEndCallback = this.item.data('onOpenEnd');
this.onCloseEndCallback = this.item.data('onCloseEnd');
this.body = $$2(this.item.data('body'));
}
babelHelpers.createClass(Menu, [{
key: 'getAnimation',
value: function getAnimation(action, element) {
var animation = {},
prop = this.side;
if (action === 'open' && element === 'body') {
animation[prop] = this.menuWidth + 'px';
} else if (action === 'close' && element === 'menu') {
animation[prop] = '-' + this.menuWidth + 'px';
} else {
animation[prop] = 0;
}
return animation;
}
}, {
key: 'prepareBody',
value: function prepareBody(action) {
var prop = action === 'open' ? 'hidden' : '';
// Prepare page if container is body
if (this.body.is('body')) {
var $html = $$2('html'),
scrollTop = $html.scrollTop();
$html.css('overflow-x', prop).scrollTop(scrollTop);
}
}
}, {
key: 'openBody',
value: function openBody() {
if (this.displace) {
var transitions = helper.transitions,
$body = this.body;
if (transitions.supported) {
$body.css(transitions.property, this.side + ' ' + this.speed / 1000 + 's ' + this.timing).css(this.side, 0).css({
width: $body.width(),
position: 'absolute'
});
$body.css(this.side, this.menuWidth + 'px');
} else {
var bodyAnimation = this.getAnimation(openAction, 'body');
$body.css({
width: $body.width(),
position: 'absolute'
}).animate(bodyAnimation, {
queue: false,
duration: this.speed
});
}
}
}
}, {
key: 'onCloseBody',
value: function onCloseBody() {
var transitions = helper.transitions,
resetStyles = {
width: '',
position: '',
right: '',
left: ''
};
if (transitions.supported) {
resetStyles[transitions.property] = '';
}
this.body.css(resetStyles).unbind(transitionEndEvent);
}
}, {
key: 'closeBody',
value: function closeBody() {
var _this = this;
if (this.displace) {
if (helper.transitions.supported) {
this.body.css(this.side, 0).one(transitionEndEvent, function () {
_this.onCloseBody();
});
} else {
var bodyAnimation = this.getAnimation(closeAction, 'body');
this.body.animate(bodyAnimation, {
queue: false,
duration: this.speed,
complete: function complete() {
_this.onCloseBody();
}
});
}
}
}
}, {
key: 'moveBody',
value: function moveBody(action) {
if (action === openAction) {
this.openBody();
} else {
this.closeBody();
}
}
}, {
key: 'onOpenMenu',
value: function onOpenMenu(callback) {
var name = this.name;
sidrStatus.moving = false;
sidrStatus.opened = name;
this.item.unbind(transitionEndEvent);
this.body.removeClass(bodyAnimationClass).addClass(this.openClass);
this.onOpenEndCallback();
if (typeof callback === 'function') {
callback(name);
}
}
}, {
key: 'openMenu',
value: function openMenu(callback) {
var _this2 = this;
var $item = this.item;
if (helper.transitions.supported) {
$item.css(this.side, 0).one(transitionEndEvent, function () {
_this2.onOpenMenu(callback);
});
} else {
var menuAnimation = this.getAnimation(openAction, 'menu');
$item.css('display', 'block').animate(menuAnimation, {
queue: false,
duration: this.speed,
complete: function complete() {
_this2.onOpenMenu(callback);
}
});
}
}
}, {
key: 'onCloseMenu',
value: function onCloseMenu(callback) {
this.item.css({
left: '',
right: ''
}).unbind(transitionEndEvent);
$$2('html').css('overflow-x', '');
sidrStatus.moving = false;
sidrStatus.opened = false;
this.body.removeClass(bodyAnimationClass).removeClass(this.openClass);
this.onCloseEndCallback();
// Callback
if (typeof callback === 'function') {
callback(name);
}
}
}, {
key: 'closeMenu',
value: function closeMenu(callback) {
var _this3 = this;
var item = this.item;
if (helper.transitions.supported) {
item.css(this.side, '').one(transitionEndEvent, function () {
_this3.onCloseMenu(callback);
});
} else {
var menuAnimation = this.getAnimation(closeAction, 'menu');
item.animate(menuAnimation, {
queue: false,
duration: this.speed,
complete: function complete() {
_this3.onCloseMenu();
}
});
}
}
}, {
key: 'moveMenu',
value: function moveMenu(action, callback) {
this.body.addClass(bodyAnimationClass);
if (action === openAction) {
this.openMenu(callback);
} else {
this.closeMenu(callback);
}
}
}, {
key: 'move',
value: function move(action, callback) {
// Lock sidr
sidrStatus.moving = true;
this.prepareBody(action);
this.moveBody(action);
this.moveMenu(action, callback);
}
}, {
key: 'open',
value: function open(callback) {
var _this4 = this;
// Check if is already opened or moving
if (sidrStatus.opened === this.name || sidrStatus.moving) {
return;
}
// If another menu opened close first
if (sidrStatus.opened !== false) {
var alreadyOpenedMenu = new Menu(sidrStatus.opened);
alreadyOpenedMenu.close(function () {
_this4.open(callback);
});
return;
}
this.move('open', callback);
// onOpen callback
this.onOpenCallback();
}
}, {
key: 'close',
value: function close(callback) {
// Check if is already closed or moving
if (sidrStatus.opened !== this.name || sidrStatus.moving) {
return;
}
this.move('close', callback);
// onClose callback
this.onCloseCallback();
}
}, {
key: 'toggle',
value: function toggle(callback) {
if (sidrStatus.opened === this.name) {
this.close(callback);
} else {
this.open(callback);
}
}
}]);
return Menu;
}();
var $$1 = jQuery;
function execute(action, name, callback) {
var sidr = new Menu(name);
switch (action) {
case 'open':
sidr.open(callback);
break;
case 'close':
sidr.close(callback);
break;
case 'toggle':
sidr.toggle(callback);
break;
default:
$$1.error('Method ' + action + ' does not exist on jQuery.sidr');
break;
}
}
var i;
var $ = jQuery;
var publicMethods = ['open', 'close', 'toggle'];
var methodName;
var methods = {};
var getMethod = function getMethod(methodName) {
return function (name, callback) {
// Check arguments
if (typeof name === 'function') {
callback = name;
name = 'sidr';
} else if (!name) {
name = 'sidr';
}
execute(methodName, name, callback);
};
};
for (i = 0; i < publicMethods.length; i++) {
methodName = publicMethods[i];
methods[methodName] = getMethod(methodName);
}
function sidr(method) {
if (method === 'status') {
return sidrStatus;
} else if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'function' || typeof method === 'string' || !method) {
return methods.toggle.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.sidr');
}
}
var $$3 = jQuery;
function fillContent($sideMenu, settings) {
// The menu content
if (typeof settings.source === 'function') {
var newContent = settings.source(name);
$sideMenu.html(newContent);
} else if (typeof settings.source === 'string' && helper.isUrl(settings.source)) {
$$3.get(settings.source, function (data) {
$sideMenu.html(data);
});
} else if (typeof settings.source === 'string') {
var htmlContent = '',
selectors = settings.source.split(',');
$$3.each(selectors, function (index, element) {
htmlContent += '<div class="sidr-inner">' + $$3(element).html() + '</div>';
});
// Renaming ids and classes
if (settings.renaming) {
var $htmlContent = $$3('<div />').html(htmlContent);
$htmlContent.find('*').each(function (index, element) {
var $element = $$3(element);
helper.addPrefixes($element);
});
htmlContent = $htmlContent.html();
}
$sideMenu.html(htmlContent);
} else if (settings.source !== null) {
$$3.error('Invalid Sidr Source');
}
return $sideMenu;
}
function fnSidr(options) {
var transitions = helper.transitions,
settings = $$3.extend({
name: 'sidr', // Name for the 'sidr'
speed: 200, // Accepts standard jQuery effects speeds (i.e. fast, normal or milliseconds)
side: 'left', // Accepts 'left' or 'right'
source: null, // Override the source of the content.
renaming: true, // The ids and classes will be prepended with a prefix when loading existent content
body: 'body', // Page container selector,
displace: true, // Displace the body content or not
timing: 'ease', // Timing function for CSS transitions
method: 'toggle', // The method to call when element is clicked
bind: 'touchstart click', // The event(s) to trigger the menu
onOpen: function onOpen() {},
// Callback when sidr start opening
onClose: function onClose() {},
// Callback when sidr start closing
onOpenEnd: function onOpenEnd() {},
// Callback when sidr end opening
onCloseEnd: function onCloseEnd() {} // Callback when sidr end closing
}, options),
name = settings.name,
$sideMenu = $$3('#' + name);
// If the side menu do not exist create it
if ($sideMenu.length === 0) {
$sideMenu = $$3('<div />').attr('id', name).appendTo($$3('body'));
}
// Add transition to menu if are supported
if (transitions.supported) {
$sideMenu.css(transitions.property, settings.side + ' ' + settings.speed / 1000 + 's ' + settings.timing);
}
// Adding styles and options
$sideMenu.addClass('sidr').addClass(settings.side).data({
speed: settings.speed,
side: settings.side,
body: settings.body,
displace: settings.displace,
timing: settings.timing,
method: settings.method,
onOpen: settings.onOpen,
onClose: settings.onClose,
onOpenEnd: settings.onOpenEnd,
onCloseEnd: settings.onCloseEnd
});
$sideMenu = fillContent($sideMenu, settings);
return this.each(function () {
var $this = $$3(this),
data = $this.data('sidr'),
flag = false;
// If the plugin hasn't been initialized yet
if (!data) {
sidrStatus.moving = false;
sidrStatus.opened = false;
$this.data('sidr', name);
$this.bind(settings.bind, function (event) {
event.preventDefault();
if (!flag) {
flag = true;
sidr(settings.method, name);
setTimeout(function () {
flag = false;
}, 100);
}
});
}
});
}
jQuery.sidr = sidr;
jQuery.fn.sidr = fnSidr;
}());

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
.sidr {display: block;position: fixed;top: 0;height: 100%;z-index: 999999;width: 260px;overflow-x: hidden;overflow-y: auto}
.sidr.right {left: auto;right: -260px}
.sidr.left {left: -260px;right: auto}

View File

@ -0,0 +1,164 @@
.sidr {
display: block;
position: fixed;
top: 0;
height: 100%;
z-index: 999999;
width: 260px;
overflow-x: hidden;
overflow-y: auto;
font-family: "lucida grande", tahoma, verdana, arial, sans-serif;
font-size: 15px;
background: #333;
color: #fff;
box-shadow: 0 0 5px 5px #222 inset;
}
.sidr .sidr-inner {
padding: 0 0 15px;
}
.sidr .sidr-inner > p {
margin-left: 15px;
margin-right: 15px;
}
.sidr.right {
left: auto;
right: -260px;
}
.sidr.left {
left: -260px;
right: auto;
}
.sidr h1,
.sidr h2,
.sidr h3,
.sidr h4,
.sidr h5,
.sidr h6 {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFhMWExYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #1a1a1a));
background-image: -moz-linear-gradient(#4d4d4d, #1a1a1a);
background-image: -webkit-linear-gradient(#4d4d4d, #1a1a1a);
background-image: linear-gradient(#4d4d4d, #1a1a1a);
font-size: 11px;
font-weight: normal;
padding: 0 15px;
margin: 0 0 5px;
color: #fff;
line-height: 24px;
box-shadow: 0 5px 5px 3px rgba(0, 0, 0, 0.2);
}
.sidr p {
font-size: 13px;
margin: 0 0 12px;
}
.sidr p a {
color: rgba(255, 255, 255, 0.9);
}
.sidr > p {
margin-left: 15px;
margin-right: 15px;
}
.sidr ul {
display: block;
margin: 0 0 15px;
padding: 0;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #4d4d4d;
}
.sidr ul li {
display: block;
margin: 0;
line-height: 48px;
border-top: 1px solid #4d4d4d;
border-bottom: 1px solid #1a1a1a;
}
.sidr ul li:hover, .sidr ul li.active, .sidr ul li.sidr-class-active {
border-top: 0;
line-height: 49px;
}
.sidr ul li:hover > a,
.sidr ul li:hover > span, .sidr ul li.active > a,
.sidr ul li.active > span, .sidr ul li.sidr-class-active > a,
.sidr ul li.sidr-class-active > span {
box-shadow: 0 0 15px 3px #222 inset;
}
.sidr ul li a,
.sidr ul li span {
padding: 0 15px;
display: block;
text-decoration: none;
color: #fff;
}
.sidr ul li ul {
border-bottom: 0;
margin: 0;
}
.sidr ul li ul li {
line-height: 40px;
font-size: 13px;
}
.sidr ul li ul li:last-child {
border-bottom: 0;
}
.sidr ul li ul li:hover, .sidr ul li ul li.active, .sidr ul li ul li.sidr-class-active {
border-top: 0;
line-height: 41px;
}
.sidr ul li ul li:hover > a,
.sidr ul li ul li:hover > span, .sidr ul li ul li.active > a,
.sidr ul li ul li.active > span, .sidr ul li ul li.sidr-class-active > a,
.sidr ul li ul li.sidr-class-active > span {
box-shadow: 0 0 15px 3px #222 inset;
}
.sidr ul li ul li a,
.sidr ul li ul li span {
color: rgba(255, 255, 255, 0.8);
padding-left: 30px;
}
.sidr form {
margin: 0 15px;
}
.sidr label {
font-size: 13px;
}
.sidr input[type="text"],
.sidr input[type="password"],
.sidr input[type="date"],
.sidr input[type="datetime"],
.sidr input[type="email"],
.sidr input[type="number"],
.sidr input[type="search"],
.sidr input[type="tel"],
.sidr input[type="time"],
.sidr input[type="url"],
.sidr textarea,
.sidr select {
width: 100%;
font-size: 13px;
padding: 5px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0 0 10px;
border-radius: 2px;
border: 0;
background: rgba(0, 0, 0, 0.1);
color: rgba(255, 255, 255, 0.6);
display: block;
clear: both;
}
.sidr input[type=checkbox] {
width: auto;
display: inline;
clear: none;
}
.sidr input[type=button],
.sidr input[type=submit] {
color: #333;
background: #fff;
}
.sidr input[type=button]:hover,
.sidr input[type=submit]:hover {
background: rgba(255, 255, 255, 0.9);
}

View File

@ -0,0 +1 @@
.sidr{display:block;position:fixed;top:0;height:100%;z-index:999999;width:260px;overflow-x:hidden;overflow-y:auto;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:15px;background:#333;color:#fff;box-shadow:0 0 5px 5px #222 inset}.sidr .sidr-inner{padding:0 0 15px}.sidr .sidr-inner>p{margin-left:15px;margin-right:15px}.sidr.right{left:auto;right:-260px}.sidr.left{left:-260px;right:auto}.sidr h1,.sidr h2,.sidr h3,.sidr h4,.sidr h5,.sidr h6{background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFhMWExYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d),color-stop(100%, #1a1a1a));background-image:-moz-linear-gradient(#4d4d4d,#1a1a1a);background-image:-webkit-linear-gradient(#4d4d4d,#1a1a1a);background-image:linear-gradient(#4d4d4d,#1a1a1a);font-size:11px;font-weight:normal;padding:0 15px;margin:0 0 5px;color:#fff;line-height:24px;box-shadow:0 5px 5px 3px rgba(0,0,0,0.2)}.sidr p{font-size:13px;margin:0 0 12px}.sidr p a{color:rgba(255,255,255,0.9)}.sidr>p{margin-left:15px;margin-right:15px}.sidr ul{display:block;margin:0 0 15px;padding:0;border-top:1px solid #1a1a1a;border-bottom:1px solid #4d4d4d}.sidr ul li{display:block;margin:0;line-height:48px;border-top:1px solid #4d4d4d;border-bottom:1px solid #1a1a1a}.sidr ul li:hover,.sidr ul li.active,.sidr ul li.sidr-class-active{border-top:0;line-height:49px}.sidr ul li:hover>a,.sidr ul li:hover>span,.sidr ul li.active>a,.sidr ul li.active>span,.sidr ul li.sidr-class-active>a,.sidr ul li.sidr-class-active>span{box-shadow:0 0 15px 3px #222 inset}.sidr ul li a,.sidr ul li span{padding:0 15px;display:block;text-decoration:none;color:#fff}.sidr ul li ul{border-bottom:0;margin:0}.sidr ul li ul li{line-height:40px;font-size:13px}.sidr ul li ul li:last-child{border-bottom:0}.sidr ul li ul li:hover,.sidr ul li ul li.active,.sidr ul li ul li.sidr-class-active{border-top:0;line-height:41px}.sidr ul li ul li:hover>a,.sidr ul li ul li:hover>span,.sidr ul li ul li.active>a,.sidr ul li ul li.active>span,.sidr ul li ul li.sidr-class-active>a,.sidr ul li ul li.sidr-class-active>span{box-shadow:0 0 15px 3px #222 inset}.sidr ul li ul li a,.sidr ul li ul li span{color:rgba(255,255,255,0.8);padding-left:30px}.sidr form{margin:0 15px}.sidr label{font-size:13px}.sidr input[type="text"],.sidr input[type="password"],.sidr input[type="date"],.sidr input[type="datetime"],.sidr input[type="email"],.sidr input[type="number"],.sidr input[type="search"],.sidr input[type="tel"],.sidr input[type="time"],.sidr input[type="url"],.sidr textarea,.sidr select{width:100%;font-size:13px;padding:5px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 0 10px;border-radius:2px;border:0;background:rgba(0,0,0,0.1);color:rgba(255,255,255,0.6);display:block;clear:both}.sidr input[type=checkbox]{width:auto;display:inline;clear:none}.sidr input[type=button],.sidr input[type=submit]{color:#333;background:#fff}.sidr input[type=button]:hover,.sidr input[type=submit]:hover{background:rgba(255,255,255,0.9)}

View File

@ -0,0 +1,164 @@
.sidr {
display: block;
position: fixed;
top: 0;
height: 100%;
z-index: 999999;
width: 260px;
overflow-x: hidden;
overflow-y: auto;
font-family: "lucida grande", tahoma, verdana, arial, sans-serif;
font-size: 15px;
background: #f8f8f8;
color: #333;
box-shadow: 0 0 5px 5px #ebebeb inset;
}
.sidr .sidr-inner {
padding: 0 0 15px;
}
.sidr .sidr-inner > p {
margin-left: 15px;
margin-right: 15px;
}
.sidr.right {
left: auto;
right: -260px;
}
.sidr.left {
left: -260px;
right: auto;
}
.sidr h1,
.sidr h2,
.sidr h3,
.sidr h4,
.sidr h5,
.sidr h6 {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2RmZGZkZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dfdfdf));
background-image: -moz-linear-gradient(#ffffff, #dfdfdf);
background-image: -webkit-linear-gradient(#ffffff, #dfdfdf);
background-image: linear-gradient(#ffffff, #dfdfdf);
font-size: 11px;
font-weight: normal;
padding: 0 15px;
margin: 0 0 5px;
color: #333;
line-height: 24px;
box-shadow: 0 5px 5px 3px rgba(0, 0, 0, 0.2);
}
.sidr p {
font-size: 13px;
margin: 0 0 12px;
}
.sidr p a {
color: rgba(51, 51, 51, 0.9);
}
.sidr > p {
margin-left: 15px;
margin-right: 15px;
}
.sidr ul {
display: block;
margin: 0 0 15px;
padding: 0;
border-top: 1px solid #dfdfdf;
border-bottom: 1px solid white;
}
.sidr ul li {
display: block;
margin: 0;
line-height: 48px;
border-top: 1px solid white;
border-bottom: 1px solid #dfdfdf;
}
.sidr ul li:hover, .sidr ul li.active, .sidr ul li.sidr-class-active {
border-top: 0;
line-height: 49px;
}
.sidr ul li:hover > a,
.sidr ul li:hover > span, .sidr ul li.active > a,
.sidr ul li.active > span, .sidr ul li.sidr-class-active > a,
.sidr ul li.sidr-class-active > span {
box-shadow: 0 0 15px 3px #ebebeb inset;
}
.sidr ul li a,
.sidr ul li span {
padding: 0 15px;
display: block;
text-decoration: none;
color: #333;
}
.sidr ul li ul {
border-bottom: 0;
margin: 0;
}
.sidr ul li ul li {
line-height: 40px;
font-size: 13px;
}
.sidr ul li ul li:last-child {
border-bottom: 0;
}
.sidr ul li ul li:hover, .sidr ul li ul li.active, .sidr ul li ul li.sidr-class-active {
border-top: 0;
line-height: 41px;
}
.sidr ul li ul li:hover > a,
.sidr ul li ul li:hover > span, .sidr ul li ul li.active > a,
.sidr ul li ul li.active > span, .sidr ul li ul li.sidr-class-active > a,
.sidr ul li ul li.sidr-class-active > span {
box-shadow: 0 0 15px 3px #ebebeb inset;
}
.sidr ul li ul li a,
.sidr ul li ul li span {
color: rgba(51, 51, 51, 0.8);
padding-left: 30px;
}
.sidr form {
margin: 0 15px;
}
.sidr label {
font-size: 13px;
}
.sidr input[type="text"],
.sidr input[type="password"],
.sidr input[type="date"],
.sidr input[type="datetime"],
.sidr input[type="email"],
.sidr input[type="number"],
.sidr input[type="search"],
.sidr input[type="tel"],
.sidr input[type="time"],
.sidr input[type="url"],
.sidr textarea,
.sidr select {
width: 100%;
font-size: 13px;
padding: 5px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0 0 10px;
border-radius: 2px;
border: 0;
background: rgba(0, 0, 0, 0.1);
color: rgba(51, 51, 51, 0.6);
display: block;
clear: both;
}
.sidr input[type=checkbox] {
width: auto;
display: inline;
clear: none;
}
.sidr input[type=button],
.sidr input[type=submit] {
color: #f8f8f8;
background: #333;
}
.sidr input[type=button]:hover,
.sidr input[type=submit]:hover {
background: rgba(51, 51, 51, 0.9);
}

Some files were not shown because too many files have changed in this diff Show More