Browse Source

Un squelette basé sur le design créé par Jordan

cf la capture écran sur l'article https://contrib.spip.net/Refonte-de-l-identite-graphique

Ce squelette Z et SCSS est conçu pour être surchargé par des thèmes spécialisé, sous la forme d'autres plugins à installer.

Ce ne sont pas des thèmes au sens de ceux qui existent pour la dist ou pour Spipr, ces thèmes là peuvent déclarer des dépendances, des configurations, des options etc.
Ils s'installent donc comme des plugins et pas avec Zen-Garden.

Deux thèmes pour l'instant : programmer.spip.net, et spip.net

C'est un travail en cours, j'uploade tout ça sur la zone pour le partager et en discuter.

TODO : une documentation du squelette et de la façon de créer un thème (surcharges).
svn/root
nicolas.dorigny@gmail.com 4 years ago
commit
f895db2a40
52 changed files with 1484 additions and 0 deletions
  1. +52
    -0
      .gitattributes
  2. +3
    -0
      aside/article.html
  3. +17
    -0
      aside/auteur.html
  4. +1
    -0
      aside/dist.html
  5. +3
    -0
      aside/mot.html
  6. +3
    -0
      aside/rubrique.html
  7. +5
    -0
      aside/sommaire.html
  8. +14
    -0
      aside/zoom.html
  9. +52
    -0
      base/galactic_programmer.php
  10. +74
    -0
      content/article.html
  11. +37
    -0
      content/auteur.html
  12. +20
    -0
      content/inscription.html
  13. +1
    -0
      content/mentions_legales.html
  14. +38
    -0
      content/plan.html
  15. +61
    -0
      content/recherche.html
  16. +6
    -0
      content/sommaire.html
  17. +27
    -0
      content/suivi.html
  18. +100
    -0
      css/geshi.css
  19. +1
    -0
      extra/article.html
  20. +0
    -0
      extra/dist.html
  21. +1
    -0
      extra/rubrique.html
  22. +12
    -0
      extra/sommaire.html
  23. +19
    -0
      footer/dist.html
  24. +20
    -0
      galactic_programmer_administrations.php
  25. +7
    -0
      galactic_programmer_options.php
  26. +107
    -0
      galactic_programmer_pipelines.php
  27. +5
    -0
      images/livre.svg
  28. +6
    -0
      images/signaler.svg
  29. +8
    -0
      images/telecharger.svg
  30. +16
    -0
      inclure/conception_graphique.html
  31. +33
    -0
      inclure/contenu_type_page.html
  32. +3
    -0
      inclure/head-theme.html
  33. +41
    -0
      inclure/liste_articles.html
  34. +31
    -0
      inclure/liste_commentaires.html
  35. +37
    -0
      inclure/liste_modifications_articles.html
  36. +12
    -0
      inclure/livre.html
  37. +10
    -0
      inclure/navigation-dernier-article-ou-rubrique.html
  38. +102
    -0
      inclure/navigation-precedent-suivant.html
  39. +1
    -0
      inclure/navigation-precedent.html
  40. +1
    -0
      inclure/navigation-suivant.html
  41. +9
    -0
      inclure/sedna.html
  42. +9
    -0
      inclure/suggestion.html
  43. +104
    -0
      lang/galactic_programmer_en.php
  44. +103
    -0
      lang/galactic_programmer_es.php
  45. +102
    -0
      lang/galactic_programmer_fr.php
  46. +10
    -0
      lang/paquet-galactic_programmer_fr.php
  47. +35
    -0
      paquet.xml
  48. +7
    -0
      prive/squelettes/contenu/configurer_galactic_programmer.html
  49. BIN
      prive/themes/spip/images/galactic_programmer-128.png
  50. BIN
      prive/themes/spip/images/galactic_programmer-32.png
  51. BIN
      prive/themes/spip/images/galactic_programmer-64.png
  52. +118
    -0
      scss/galactic_theme.scss

+ 52
- 0
.gitattributes View File

@ -0,0 +1,52 @@
* text=auto !eol
aside/article.html -text
aside/auteur.html -text
aside/dist.html -text
aside/mot.html -text
aside/rubrique.html -text
aside/sommaire.html -text
aside/zoom.html -text
base/galactic_programmer.php -text
content/article.html -text
content/auteur.html -text
content/inscription.html -text
content/mentions_legales.html -text
content/plan.html -text
content/recherche.html -text
content/sommaire.html -text
content/suivi.html -text
css/geshi.css -text
extra/article.html -text
extra/dist.html -text
extra/rubrique.html -text
extra/sommaire.html -text
footer/dist.html -text
/galactic_programmer_administrations.php -text
/galactic_programmer_options.php -text
/galactic_programmer_pipelines.php -text
images/livre.svg -text
images/signaler.svg -text
images/telecharger.svg -text
inclure/conception_graphique.html -text
inclure/contenu_type_page.html -text
inclure/head-theme.html -text
inclure/liste_articles.html -text
inclure/liste_commentaires.html -text
inclure/liste_modifications_articles.html -text
inclure/livre.html -text
inclure/navigation-dernier-article-ou-rubrique.html -text
inclure/navigation-precedent-suivant.html -text
inclure/navigation-precedent.html -text
inclure/navigation-suivant.html -text
inclure/sedna.html -text
inclure/suggestion.html -text
lang/galactic_programmer_en.php -text
lang/galactic_programmer_es.php -text
lang/galactic_programmer_fr.php -text
lang/paquet-galactic_programmer_fr.php -text
/paquet.xml -text
prive/squelettes/contenu/configurer_galactic_programmer.html -text
prive/themes/spip/images/galactic_programmer-128.png -text
prive/themes/spip/images/galactic_programmer-32.png -text
prive/themes/spip/images/galactic_programmer-64.png -text
scss/galactic_theme.scss -text

+ 3
- 0
aside/article.html View File

@ -0,0 +1,3 @@
<INCLURE{fond=inclure/navigation_mots_cles}{id_article} />
<INCLURE{fond=aside/zoom} />

+ 17
- 0
aside/auteur.html View File

@ -0,0 +1,17 @@
<BOUCLE_extra_auteur(AUTEURS){id_auteur}>
[(#REM) Autres auteurs ]
<B_auteurs>
<div class="menu">
#ANCRE_PAGINATION
<h2><:info_auteurs:></h2>
<ul class='auteurs'>
<BOUCLE_auteurs(AUTEURS) {par nom} {pagination 20}>
<li[ class="(#EXPOSE{on,off})"]><a href="#URL_AUTEUR">[(#NOM|couper{80})]</a></li>
</BOUCLE_auteurs>
</ul>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</div>
</B_auteurs>
</BOUCLE_extra_auteur>
<INCLURE{fond=aside/zoom} />

+ 1
- 0
aside/dist.html View File

@ -0,0 +1 @@
<INCLURE{fond=aside/zoom} />

+ 3
- 0
aside/mot.html View File

@ -0,0 +1,3 @@
<INCLURE{fond=inclure/navigation_tous_mots_cles}{env}{ajax} />
<INCLURE{fond=aside/zoom} />

+ 3
- 0
aside/rubrique.html View File

@ -0,0 +1,3 @@
<INCLURE{fond=inclure/navigation_mots_cles}{id_rubrique} />
<INCLURE{fond=aside/zoom} />

+ 5
- 0
aside/sommaire.html View File

@ -0,0 +1,5 @@
[(#REM) Inscription au site
#FORMULAIRE_INSCRIPTION
]
<INCLURE{fond=aside/zoom} />

+ 14
- 0
aside/zoom.html View File

@ -0,0 +1,14 @@
<div>
[(#PLUGIN{tickets}|oui)
[(#ID_RUBRIQUE|ou{#ID_ARTICLE}|oui)<INCLURE{fond=inclure/suggestion,exemple=#SELF} />]
[(#ID_RUBRIQUE|ou{#ID_ARTICLE}|non)<INCLURE{fond=inclure/suggestion} />]
]
[(#PLUGIN{sedna}|oui)
<INCLURE{fond=inclure/sedna} />
]
[(#PLUGIN{pages}|oui)
<INCLURE{fond=inclure/livre} />
]
</div>

+ 52
- 0
base/galactic_programmer.php View File

@ -0,0 +1,52 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function galactic_programmer_declarer_champs_extras($champs = array()) {
include_spip('inc/config');
$config_extras = lire_config('galactic_programmer/utiliser_champs_extras',array());
if(!in_array('exemple',$config_extras)){
$champs['spip_articles']['exemple'] = array(
'saisie' => 'textarea', // type de saisie
'options'=> array(
'nom' => 'exemple',
'label' => _T('galactic_programmer:label_exemple'), // chaine de langue 'prefix:cle'
'sql' => "text NOT NULL DEFAULT ''", // declaration sql
'traitements' => _TRAITEMENT_RACCOURCIS, // _TRAITEMENT_TYPO
'rechercher' => 2,
'class' => "inserer_barre_edition inserer_previsualisation", // classes CSS
'li_class' => "haut", // classes CSS
)
);
}
if(!in_array('exemple',$config_extras)){
$champs['spip_articles']['exercice'] = array(
'saisie' => 'textarea', // type de saisie
'options'=> array(
'nom' => 'exercice',
'label' => _T('galactic_programmer:label_exercice'), // chaine de langue 'prefix:cle'
'sql' => "text NOT NULL DEFAULT ''", // declaration sql
'traitements' => _TRAITEMENT_RACCOURCIS, // _TRAITEMENT_TYPO
'rechercher' => 2,
'class' => "inserer_barre_edition inserer_previsualisation", // classes CSS
'li_class' => "haut", // classes CSS
)
);
}
if(!in_array('exemple',$config_extras)){
$champs['spip_articles']['reponse'] = array(
'saisie' => 'textarea', // type de saisie
'options'=> array(
'nom' => 'reponse',
'label' => _T('galactic_programmer:label_reponse'), // chaine de langue 'prefix:cle'
'sql' => "text NOT NULL DEFAULT ''", // declaration sql
'traitements' => _TRAITEMENT_RACCOURCIS, // _TRAITEMENT_TYPO
'rechercher' => 2,
'class' => "inserer_barre_edition inserer_previsualisation", // classes CSS
'li_class' => "haut", // classes CSS
)
);
}
return $champs;
}
?>

+ 74
- 0
content/article.html View File

@ -0,0 +1,74 @@
<BOUCLE_art(ARTICLES){id_article}>
[(#PLUGIN{polyhier}|oui)
#INCLURE{fond=inclure/documentation_hierarchie_poly,id_article,id_rubrique}
]
<article>
<div class="cartouche surlignable">
[(#LOGO_ARTICLE|image_reduire{200,200})]
[<p class="#EDIT{surtitre} surtitre">(#SURTITRE)</p>]
<h1 class="#EDIT{titre} entry-title" itemprop="name">#TITRE</h1>
[<p class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</p>]
</div>
<div class="surlignable">
[<div class="#EDIT{chapo} chapo" itemprop="description">(#CHAPO|image_reduire{680,0})</div>]
[<div class="#EDIT{texte} texte" itemprop="text">(#TEXTE|image_reduire{680,0})</div>]
[<div class="#EDIT{exemple} exemple complements">
<h2><:galactic_programmer:exemple:></h2>
(#EXEMPLE|image_reduire{680,0})
</div>]
[<div class="#EDIT{exercice} exercice complements">
<h2><:galactic_programmer:exercice:></h2>
(#EXERCICE|image_reduire{680,0})
</div>]
[<div class="#EDIT{reponse} reponse complements">
<h2><:galactic_programmer:reponse:></h2>
<div class="reponse-contenu">
(#REPONSE|image_reduire{680,0})
</div>
</div>]
</div>
[(#PLUGIN{a2a}|oui)
<INCLURE{fond=inclure/a2a-articles,id_article} />]
[<div class="notes surlignable"><p class="pas_surlignable"><:info_notes:></p>(#NOTES)</div>]
[(#REM) Gestion du portfolio et des documents
Le critere {env} permet de passer d'autres arguments de la page
par exemple l'id_document choisi pour un affichage complet
]
[(#INCLURE{fond=inclure/documents,env})]
[<div class="extra ps">
<div class="#EDIT{ps}">(#PS|image_reduire{120,0})</div>
</div>]
<div class="article__statut">
[<p class="auteurs"><:auteur:>
(#LESAUTEURS)</p>]
<BOUCLE_mot(MOTS){type=Licence}{id_article}>[<p><:galactic_programmer:licence:>
<abbr class="licence"[ title="(#DESCRIPTIF|attribut_html)"]>(#TITRE)</abbr></p>]</BOUCLE_mot>
[<p class="publication"><:galactic_programmer:publie_le:>
<abbr class="published" itemprop="datePublished" title="[(#DATE|date_iso)]">(#DATE|affdate{d/m/y})</abbr></p>]
[<p><:galactic_programmer:mis_a_jour:>
<abbr class="modified updated" itemprop="dateModified" title="[(#MAJ|date_iso)]">(#DATE|affdate{d/m/y}|!={#MAJ|affdate{d/m/y}}|?{#MAJ|affdate{d/m/y}})</abbr></p>]
[<p class="traductions"><:galactic_programmer:traductions:>
(#MODELE{article_traductions})</p>]
</div>
[(#REM)
Si pas traduit dans plus d'une langue, le modele article_traductions n'affiche rien ce qui est normal
On ajoute donc juste cette meta inLanguage pour http://schema.org/Article qui sera invisible par l'utilisateur mais là
][(#MODELE{article_traductions}|non)<meta itemprop="inLanguage" content="#LANG" />]
[(#REM) Forum de l'article ]
[(#PARAMETRES_FORUM|oui)
<div id="forum">
<INCLURE{fond=inclure/forum}{id_article} />
#FORMULAIRE_FORUM{#SELF}
</div>]
</article>
</BOUCLE_art>

+ 37
- 0
content/auteur.html View File

@ -0,0 +1,37 @@
<BOUCLE_principale(AUTEURS) {id_auteur}>
<div class="vcard" itemscope itemtype="http://schema.org/Person">[(#REM) microformat vcard]
<div class="cartouche">
[(#LOGO_AUTEUR|image_reduire{224,*})]
<h1 class="#EDIT{qui} fn">#NOM</h1>
</div>
[<div class="#EDIT{bio} texte note">(#BIO)</div>]
[<p class="#EDIT{hyperlien} hyperlien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="url org spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
</div>[(#REM) / vcard]
[(#REM) Articles de l'auteur ]
<B_articles>
<div>
#ANCRE_PAGINATION
<h2><:articles_auteur:> (#GRAND_TOTAL)</h2>
<ul>
<BOUCLE_articles(ARTICLES) {id_auteur} {!par popularite} {pagination 10}>
<li><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles>
</ul>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</div>
</B_articles>
[(#REM) Limitons le Spam...
Ce formulaire actif uniquement aux personnes
identifiees sur le site
]
<?php if (lire_config('galactic_programmer/activer_formulaire_ecrire_auteur')=='oui' || (isset($GLOBALS['visiteur_session']['id_auteur']) && $GLOBALS['visiteur_session']['id_auteur'])) { ?>
#FORMULAIRE_ECRIRE_AUTEUR
<?php } ?>
[<div class="notes"><hr />(#NOTES)</div>]
</BOUCLE_principale>

+ 20
- 0
content/inscription.html View File

@ -0,0 +1,20 @@
<article>
<div class="cartouche">
<h1><:galactic_programmer:sinscrire:></h1>
</div>
<div class="ajax">
[(#REM|tester_config|non)
<p><:galactic_programmer:erreur_inscription_desactivee:></p>
]
[(#REM|tester_config|oui)
[(#SESSION{id_auteur}|oui)
<p><:galactic_programmer:erreur_inscription_session:></p>]
[(#SESSION{id_auteur}|non)
#FORMULAIRE_INSCRIPTION
]
]
</div>
</article>

+ 1
- 0
content/mentions_legales.html View File

@ -0,0 +1 @@
[(#INCLURE{fond=inclure/contenu_type_page,page=mentions_legales})]

+ 38
- 0
content/plan.html View File

@ -0,0 +1,38 @@
<div class="cartouche">
<h1><:plan_site:></h1>
</div>
<div class="menu">
<BOUCLE_racine(RUBRIQUES){racine}{lang}>
[(#REM) Liste des articles ]
<B_articles_racine>
<ul class="items articles">
<BOUCLE_articles_racine(ARTICLES) {id_rubrique}>
<li class="item[ (#EXPOSE{on,off})]"><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles_racine>
</ul>
</B_articles_racine>
<B_rubriques>
<ul class="items rubriques">
<BOUCLE_rubriques(RUBRIQUES) {id_parent}{lang}>
<li class="item"><a href="#URL_RUBRIQUE">#TITRE</a>
[(#REM) Liste des articles ]
<B_articles>
<ul class="items articles">
<BOUCLE_articles(ARTICLES) {id_rubrique}>
<li class="item[ (#EXPOSE{on,off})]"><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles>
</ul>
</B_articles>
[(#REM) recursion sous rubriques ]
<BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
</li>
</BOUCLE_rubriques>
</ul>
</B_rubriques>
</BOUCLE_racine>
</div>

+ 61
- 0
content/recherche.html View File

@ -0,0 +1,61 @@
[<div class="cartouche">
<h1><:resultats_recherche:></h1>
<p class="soustitre">&#171;&nbsp;(#RECHERCHE)&nbsp;&#187;</p>
</div>]
[(#REM) Articles trouves ]
<B_articles>
#ANCRE_PAGINATION
<h2><:articles:> (#GRAND_TOTAL)</h2>
<ul>
<BOUCLE_articles(ARTICLES) {recherche} {!par points} {pagination 5}>
<li class="block-link-parent"><strong><a href="#URL_ARTICLE"[ hreflang="(#LANG)"]>#TITRE</a></strong>
[<br>(#INTRODUCTION{150}|ptobr)]
</li>
</BOUCLE_articles>
</ul>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</B_articles>
[(#REM) Rubriques trouvees ]
<B_rubriques>
#ANCRE_PAGINATION
<h2><:rubriques:> (#GRAND_TOTAL)</h2>
<ul>
<BOUCLE_rubriques(RUBRIQUES) {recherche} {!par points} {pagination 5}>
<li class="block-link-parent"><strong><a href="#URL_RUBRIQUE"[ hreflang="(#LANG)"]>#TITRE</a></strong>
[<br>(#INTRODUCTION{150}|ptobr)]
</li>
</BOUCLE_rubriques>
</ul>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</B_rubriques>
[(#REM) Tickets trouvees ]
<B_tickets>
#ANCRE_PAGINATION
<h2 class="h2"><:tickets:info_liste_tickets:> (#GRAND_TOTAL)</h2>
<ul>
<BOUCLE_tickets(TICKETS?) {recherche} {par points}{inverse} {pagination 5}{tout}>
<li class="block-link-parent">
<strong><a href="#URL_TICKET">#TITRE</a></strong>
[<div class="introduction #EDIT{introduction}">(#INTRODUCTION|image_reduire{300}|propre)</div>]
</li>
</BOUCLE_tickets>
</ul>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</B_tickets>
[(#REM) Mots trouvees ]
<B_mots>
#ANCRE_PAGINATION
<h2><:documentation:mots_cles:> (#GRAND_TOTAL)</h2>
<ul>
<BOUCLE_mots(MOTS) {recherche} {!par points} {pagination 5}>
<li class="block-link-parent"><strong><a href="#URL_MOT"[ hreflang="(#LANG)"]>#TITRE</a></strong>
[<br>(#INTRODUCTION{150}|ptobr)]
</li>
</BOUCLE_mots>
</ul>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</B_mots>

+ 6
- 0
content/sommaire.html View File

@ -0,0 +1,6 @@
<div class="cartouche">
<h1>#NOM_SITE_SPIP</h1>
[(#CHEMIN{images/logo_relief.png}|image_reduire{300,0}|inserer_attribut{class,spip_logo})]
</div>
#DESCRIPTIF_SITE_SPIP

+ 27
- 0
content/suivi.html View File

@ -0,0 +1,27 @@
<div class="suggestion">
<div class="cartouche">
<h1 class="titre"><:galactic_programmer:suivi:></h1>
</div>
<div class="ajax">
[(#INCLURE{fond=inclure/liste_articles,env,ajax,
titre=<:galactic_programmer:suivi_derniers_articles:>})]
</div>
[(#SESSION{id_auteur}|oui)
<div class="ajax">
[(#INCLURE{fond=inclure/liste_articles,env,ajax,statut=prop,
titre=<:galactic_programmer:suivi_derniers_articles_proposes:>})]
</div>]
[(#PLUGIN{revisions}|oui)
<div class="ajax">
[(#INCLURE{fond=inclure/liste_modifications_articles,env,ajax,
titre=<:galactic_programmer:suivi_dernieres_modifications_articles:>})]
</div>]
<div class="ajax">
[(#INCLURE{fond=inclure/liste_commentaires,env,ajax,
titre=<:galactic_programmer:suivi_derniers_commentaires:>})]
</div>
</div>

+ 100
- 0
css/geshi.css View File

@ -0,0 +1,100 @@
/* GESHI (pour PRINCE) */
.coloration_code .spip_spip2 .imp {font-weight: bold; color: red;}
.coloration_code .spip_spip2 .coMULTI {color: #808080; font-style: italic;}
.coloration_code .spip_spip2 .es0 {color: #A8B7E0; font-weight: bold;}
.coloration_code .spip_spip2 .re0 {color: #FF4E00;}
.coloration_code .spip_spip2 .re1 {color: #FFAB00;}
.coloration_code .spip_spip2 .re2 {color: #72A9FB;}
.coloration_code .spip_spip2 .re4 {color: #FF006C;}
.coloration_code .spip_spip2 .re10 {color: #72A9FB;}
.coloration_code .spip_spip2 .re11 {color: #72A9FB;}
.coloration_code .spip_spip2 .re12 {color: #7ED9FF;}
.coloration_code .spip_spip2 .re13 {color: #BFAFFF;}
.coloration_code .spip_spip2 .re15 {color: #72A9FB;}
.coloration_code .spip_spip2 .re20 {color: #527EE0;}
.coloration_code .spip_spip2 .re21 {color: #edeab8}
.coloration_code .spip_spip2 .re22 {color: #745E4B;}
.coloration_code .spip_spip2 .re23 {color: #edeab8;}
.coloration_code .spip_spip2 .re30 {color: #DEFF00}
.coloration_code .spip_spip2 .re31 {color: #DEFF00}
.coloration_code .spip_spip2 .re40 {color: #DEFF00;}
.coloration_code .spip_spip2 .re41 {color: #DEFF00;}
.coloration_code .spip_spip2 .re50 {color: #FF551D;}
.coloration_code .spip_spip2 .re102 {color:#FF2100; font-weight:bold;}
.coloration_code .spip_spip2 span.xtra { display:block; }
.coloration_code .spip_php .imp {font-weight: bold; color: red;}
.coloration_code .spip_php .de1 {color: #FFFFFF;} /* textes */
.coloration_code .spip_php .kw1 {color: #48ABFF;} /* return if else for */
.coloration_code .spip_php .kw2 {color: #48ABFF;} /* function true false */
.coloration_code .spip_php .kw3 {color: #edeab8;} /* array isset define */
.coloration_code .spip_php .co1 {color: #AEAEAE;} /* // commentaire */
.coloration_code .spip_php .co2 {color: #AEAEAE;}
.coloration_code .spip_php .co3 {color: #444;} /* <<<EOF */
.coloration_code .spip_php .co4 {color: #00bbdd;}
.coloration_code .spip_php .coMULTI {color: #666; font-style: italic;}
.coloration_code .spip_php .es_h {color: #00bbdd; font-weight: bold;}
.coloration_code .spip_php .es_h {color: #00bbdd; font-weight: bold;}
.coloration_code .spip_php .br0 {color: #edeab8;} /* () {} */
.coloration_code .spip_php .sy0 {color: #edeab8;} /* , ! = -> & */
.coloration_code .spip_php .st0 {color: #FFC10E;} /* "chaine" */
.coloration_code .spip_php .st_h {color: #FFC10E;} /* 'chaine' */
.coloration_code .spip_php .nu0 {color: #c6c;} /* 109 */
.coloration_code .spip_php .nu8 {color: #208080;}
.coloration_code .spip_php .nu12 {color: #208080;}
.coloration_code .spip_php .nu19 {color:#c6c;} /* 0 */
.coloration_code .spip_php .me1 {color: #F85E00;} /* cle : $tab->cle */
.coloration_code .spip_php .me2 {color: #F85E00;}
.coloration_code .spip_php .re0 {color: #F85E00;} /* $param : function f($param) */
.coloration_code .spip_php span.xtra { display:block; }
.coloration_code .spip_xml .imp {font-weight: bold; color: red;}
.coloration_code .spip_xml .es_h {color: #A8B7E0; font-weight: bold;}
.coloration_code .spip_xml .br0 {color: #66cc66;}
.coloration_code .spip_xml .sy0 {color: #66cc66;}
.coloration_code .spip_xml .st0 {color: #C9CA37;} /* <x y='valeur' /> */
.coloration_code .spip_xml .sc-1 {color: #808080; font-style: italic;}
.coloration_code .spip_xml .sc0 {color: #00bbdd;}
.coloration_code .spip_xml .sc1 {color: #edeab8;} /* &machin; */
.coloration_code .spip_xml .sc2 {color: #326B76;}
.coloration_code .spip_xml .sc3 {color: #949494;} /* = (attr='valeur') */
.coloration_code .spip_xml .re0 {color: #7BCA2A;} /* <x attribut='z' /> */
.coloration_code .spip_xml .re1, /* <balise */
.coloration_code .spip_xml .re2 {color: #3FA9FF;} /* /> */
.coloration_code .spip_xml span.xtra { display:block; }
.coloration_code .spip_css .imp {font-weight: bold; color: red;}
.coloration_code .spip_css .kw1 {color: #edeab8; font-weight: bold;}
.coloration_code .spip_css .kw2 {color: #993333;}
.coloration_code .spip_css .co1 {color: #a1a100;}
.coloration_code .spip_css .co2 {color: #ff0000; font-style: italic;}
.coloration_code .spip_css .coMULTI {color: #808080; font-style: italic;}
.coloration_code .spip_css .es_h {color: #A8B7E0; font-weight: bold;}
.coloration_code .spip_css .br0 {color: #00AA00;}
.coloration_code .spip_css .sy0 {color: #00AA00;}
.coloration_code .spip_css .st0 {color: #ff0000;}
.coloration_code .spip_css .nu0 {color: #cc66cc;}
.coloration_code .spip_css .re0 {color: #cc00cc;}
.coloration_code .spip_css .re1 {color: #6666ff;}
.coloration_code .spip_css .re2 {color: #3333ff;}
.coloration_code .spip_css .re3 {color: #933;}
.coloration_code .spip_css span.xtra { display:block; }
.coloration_code .spip_bash .imp {font-weight: bold; color: red;}
.coloration_code .spip_bash .kw1 {color: #edeab8; font-weight: bold;}
.coloration_code .spip_bash .kw2 {color: #c20cb9; font-weight: bold;}
.coloration_code .spip_bash .kw3 {color: #7a0874; font-weight: bold;}
.coloration_code .spip_bash .co0 {color: #666666; font-style: italic;}
.coloration_code .spip_bash .co1 {color: #800000;}
.coloration_code .spip_bash .co2 {color: #cc0000; font-style: italic;}
.coloration_code .spip_bash .es_h {color: #A8B7E0; font-weight: bold;}
.coloration_code .spip_bash .br0 {color: #7a0874; font-weight: bold;}
.coloration_code .spip_bash .sy0 {color: #edeab8; font-weight: bold;}
.coloration_code .spip_bash .st0 {color: #ff0000;}
.coloration_code .spip_bash .nu0 {color: #edeab8;}
.coloration_code .spip_bash .re0 {color: #66C658;}
.coloration_code .spip_bash .re1 {color: #66C658;}
.coloration_code .spip_bash .re2 {color: #66C658;}
.coloration_code .spip_bash .re4 {color: #66C658;}
.coloration_code .spip_bash .re5 {color: #66C658;}
.coloration_code .spip_bash span.xtra { display:block; }

+ 1
- 0
extra/article.html View File

@ -0,0 +1 @@
<INCLURE{fond=inclure/navigation-precedent-suivant,id_article,id_rubrique} />

+ 0
- 0
extra/dist.html View File


+ 1
- 0
extra/rubrique.html View File

@ -0,0 +1 @@
<INCLURE{fond=inclure/navigation-precedent-suivant}{id_article}{id_rubrique} />

+ 12
- 0
extra/sommaire.html View File

@ -0,0 +1,12 @@
<nav class="navigation__precedent_suivant">
<BOUCLE_rub_start(RUBRIQUES){racine}{0,1}{lang}>
[(#REM) Hack, mais une boucle condition serait mieux ]
<BOUCLE_art_branche(ARTICLES){id_rubrique}{0,1}>
[(#INCLURE{fond=inclure/navigation-suivant}{url=#URL_ARTICLE}{titre=#TITRE})]
</BOUCLE_art_branche>
<BOUCLE_rub_branche(RUBRIQUES){id_parent}{0,1}>
[(#INCLURE{fond=inclure/navigation-suivant}{url=#URL_RUBRIQUE}{titre=#TITRE})]
</BOUCLE_rub_branche>
<//B_art_branche>
</BOUCLE_rub_start>
</nav>

+ 19
- 0
footer/dist.html View File

@ -0,0 +1,19 @@
<ul>
<li class="favicon"><a href="http://www.spip.net/" class="spip_out"><:site_realise_avec_spip:></a></li>
<?php if (isset($GLOBALS['visiteur_session']['id_auteur']) && $GLOBALS['visiteur_session']['id_auteur']) { ?>
<li><a href="#URL_LOGOUT" rel="nofollow"><:icone_deconnecter:></a></li>
<?php } else { ?>
<li><a href="[(#URL_PAGE{login}|parametre_url{url,#SELF})]" rel="nofollow"><:lien_connecter:></a></li>
<?php } ?>
<?php include_spip('inc/autoriser'); if (autoriser('ecrire')) { ?>
<li><a href="#URL_ECRIRE"><:espace_prive:></a></li>
<?php } ?>
<?php if (lire_config('accepter_inscriptions')=='oui' && (!isset($GLOBALS['visiteur_session']['id_auteur']) || !$GLOBALS['visiteur_session']['id_auteur'])) { ?>
<li><a href="#URL_PAGE{inscription}"><:galactic_programmer:sinscrire:></a></li>
<?php } ?>
[(#PLUGIN{tickets}|oui)<li><a href="#URL_PAGE{tickets}"><:galactic_programmer:suggestions:></a></li>]
<li><a href="#URL_PAGE{suivi}"><:galactic_programmer:suivi:></a></li>
<li><a href="[(#URL_PAGE{plan}|parametre_url{lang,#LANG})]"><:plan_site:></a></li>
<li><a href="[(#URL_PAGE{mentions_legales}|parametre_url{lang,#LANG})]"><:galactic_programmer:mentions_legales:></a></li>
<li class="rss"><a href="#URL_PAGE{backend}" rel="alternate" title="<:syndiquer_site:>">RSS&nbsp;2.0</a></li>
</ul>

+ 20
- 0
galactic_programmer_administrations.php View File

@ -0,0 +1,20 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/cextras');
include_spip('base/galactic_programmer');
function galactic_programmer_upgrade($nom_meta_base_version,$version_cible){
$maj = array();
$champs = galactic_programmer_declarer_champs_extras();
include_spip('base/upgrade');
cextras_api_upgrade($champs,$maj['1.0.0']);
maj_plugin($nom_meta_base_version, $version_cible,$maj);
}
function galactic_programmer_vider_tables($nom_meta_base_version) {
$champs = galactic_programmer_declarer_champs_extras();
cextras_api_vider_tables($champs);
effacer_meta($nom_meta_base_version);
}
?>

+ 7
- 0
galactic_programmer_options.php View File

@ -0,0 +1,7 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// ne pas notifier tous les auteurs a la creation d'un ticket
define('_TICKETS_AUTORISATION_NOTIFIER', '0minirezo');
define('LONGUEUR_MINI_COMMENTAIRES_TICKETS', 5); // un petit merci !

+ 107
- 0
galactic_programmer_pipelines.php View File

@ -0,0 +1,107 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Insertion dans le pipeline formulaire_charger (SPIP)
*
* Préchargement des valeurs type et severite des tickets dans le cas d'un nouveau ticket
*
* @param array $flux
* Le contexte du pipeline
* @return array $flux
* Le contexte du pipeline modifié
*/
function documentation_formulaire_charger($flux){
if ($flux['args']['form'] == 'editer_ticket'
and (!$flux['args']['args'][0] OR $flux['args']['args'][0] == 'oui')
and !$flux['data']['type']) {
$flux['data']['type'] = 2;
$flux['data']['severite'] = 4;
}
return $flux;
}
// ajouter automatiquement des title "art30" sur les raccourcis [->art30]
// donc, transformer [->art30] en [|art30->art30]
// ce qui permet a l'integrale de gerer des numeros de pages sur les liens
function documentation_pre_liens($texte){
// uniquement dans le public
if (test_espace_prive()) return $texte;
$regs = $match = array();
// pour chaque lien
if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER)) {
foreach ($regs as $reg) {
// si le lien est de type raccourcis "art40"
if (preg_match(_RACCOURCI_URL, $reg[4], $match)) {
$title = '|' . $match[1] . $match[2];
// s'il n'y a pas deja ce title
if (false === strpos($reg[0], $title)) {
$lien = substr_replace($reg[0], $title, strpos($reg[0], '->'), 0);
$texte = str_replace($reg[0], $lien, $texte);
}
}
}
}
return $texte;
}
// transformer les <a title="art30" href="xxx">zzz</a>
// en <a href="#art30">zzz</a> (enfin <a title="art30" href="#art30">zzz</a> en attendant mieux)
// seulement dans le squelette integrale
// pour que le pdf puisse calculer les numero de page des liens
function documentation_affichage_final($page){
// uniquement dans le public
if (test_espace_prive()) return $page;
if (_request('page') == 'integrale') {
include_spip('inc/filtres');
include_spip('inc/lien');
$as = extraire_balises($page, 'a');
foreach($as as $a) {
$classe = extraire_attribut($a, 'class');
$title = extraire_attribut($a, 'title');
if ($title) {
if (in_array($classe, array('spip_glossaire', 'spip_note'))) {
// les raccourcis [?ecrire/paquet.xml#core] ont un title qu'il faut enlever
// sinon il est pris comme ancre par DocRaptor (PrinceXML) et affiche un n° de page erroné car l’identifiant n'existe pas.
// De même : 'Note 1' en title est pris pour un raccourcis d’URL, on le vire
if (
($classe == 'spip_glossaire')
or ($classe == 'spip_note' and extraire_attribut($a, 'rev') == 'footnote')
) {
$old_a = $a;
$a = vider_attribut($a, 'title');
$page = str_replace($old_a, $a, $page);
}
continue;
}
elseif (preg_match(_RACCOURCI_URL, $title, $match)) {
$old_a = $a;
// on laisse le title parce que a[href|="#"] ne semble pas pris en compte avec DocRaptor (PrinceXML) ...
# $a = vider_attribut($a, 'title');
// si l’ancre n'est pas raccourcie (article12 et non art12), on la raccourcit
if (in_array($match[1], array('article', 'rubrique')) and $match[2]) {
$title = substr($match[1], 0, 3) . $match[2];
}
// si ancre [->12] c'est art12
if (!$match[1] and $match[2]) {
$title = 'art' . $match[2];
}
$a = inserer_attribut($a, 'href', '#' . $title);
$a = inserer_attribut($a, 'title', $title);
$page = str_replace($old_a, $a, $page);
}
}
}
unset($as, $a, $old_a, $title);
}
return $page;
}

+ 5
- 0
images/livre.svg View File

@ -0,0 +1,5 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 12 15.4" enable-background="new 0 0 12 15.4" xml:space="preserve">
<polygon fill="#ED4020" points="9,15.4 12,12.4 9,12.4 "/>
<path fill="#ED4020" d="M0,0v15.4h8.1v-3.9H12V0H0z M7,5.7H2v-1h5V5.7z M10,3.7H2v-1h8V3.7z"/>
</svg>

+ 6
- 0
images/signaler.svg View File

@ -0,0 +1,6 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 12 14.5" enable-background="new 0 0 12 14.5" xml:space="preserve">
<path fill="#FCA717" d="M10,7c0-3.3-0.2-5.5-3-5.9C7,1,7,1,7,1c0-0.6-0.4-1-1-1C5.4,0,5,0.4,5,1c0,0,0,0,0,0.1C2.2,1.5,2,3.7,2,7
c0,2.7-0.9,3.1-2,3.6V12h6h6v-1.4C10.9,10.1,10,9.7,10,7"/>
<path fill="#FCA717" d="M6,14.5c0.8,0,1.5-0.7,1.5-1.5h-3C4.5,13.8,5.2,14.5,6,14.5"/>
</svg>

+ 8
- 0
images/telecharger.svg View File

@ -0,0 +1,8 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 12.1 11" enable-background="new 0 0 12.1 11" xml:space="preserve">
<path fill="#FFFFFF" d="M11.4,6.4c-0.3,0-0.6,0.2-0.6,0.5V10H1.3V6.9c0-0.3-0.4-0.5-0.6-0.5S0,6.6,0,6.9v3.7C0,10.8,0.6,11,0.8,11
h10.3c0.3,0,0.9-0.2,0.9-0.4V6.9C12.1,6.6,11.7,6.4,11.4,6.4"/>
<path fill="#FFFFFF" d="M5.4,8.5c0,0.2,0.3,0.4,0.5,0.4c0.2,0,0.3-0.1,0.4-0.2c0,0,0,0,0,0l2.5-2.5C9,6.1,9,5.8,8.8,5.6
c-0.2-0.2-0.6-0.2-0.7,0L6.3,7.2V0.5C6.3,0.2,6.3,0,6,0C5.8,0,5.7,0.2,5.7,0.5v6.6L4,5.6c-0.2-0.2-0.6-0.2-0.8,0
C3.1,5.8,3,6.1,3.2,6.3L5.4,8.5z"/>
</svg>

+ 16
- 0
inclure/conception_graphique.html View File

@ -0,0 +1,16 @@
<h3 class="spip"><:galactic_programmer:conception_graphique:></h3>
<p class="spip">
<:galactic_programmer:conception_graphique_par:>
<a href="http://www.freelayouts.com/templates/Logistix">Logistix</a>
(<:galactic_programmer:sous_licence:>
<a href='http://creativecommons.org/licenses/by/2.5/'>Creative Commons Attribution 2.5 License</a>)
<:galactic_programmer:conception_graphique_adaptee_par:>
<a href="http://magraine.net/" class="spip_out">Matthieu Marcillaud</a>
</p>
<p class="spip">
<:galactic_programmer:icones_par:>
<a href='http://icons.mysitemyway.com/category/glossy-black-icons/'>Glossy black icons</a>
(<:galactic_programmer:sous_licence:>
<a href='http://creativecommons.org/licenses/by/3.0/'>Creative Commons Attribution 3.0 License</a>)
</p>

+ 33
- 0
inclure/contenu_type_page.html View File

@ -0,0 +1,33 @@
<BOUCLE_page_speciale(ARTICLES){page}{lang}{0,1}>
<div class="contenu-principal">
<div class="cartouche">
<div class="surlignable">
[(#LOGO_ARTICLE|image_reduire{200,200})]
[<p class="#EDIT{surtitre} surtitre">(#SURTITRE)</p>]
<h1 class="#EDIT{titre} entry-title">#TITRE</h1>
[<p class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</p>]
</div>
</div>
<div class="surlignable">
[<div class="#EDIT{chapo} chapo">(#CHAPO|image_reduire{680,0})</div>]
[<div class="#EDIT{texte} texte entry-content">(#TEXTE|image_reduire{680,0})</div>]
</div>
[<div class="notes surlignable"><h2 class="h2 pas_surlignable"><:info_notes:></h2>(#NOTES)</div>]
</div>
[(#REM) Gestion du portfolio et des documents
Le critere {env} permet de passer d'autres arguments de la page
par exemple l'id_document choisi pour un affichage complet
]
[(#INCLURE{fond=inclure/documents,id_article,env})]
[<ul class="extra en_savoir_plus">
<li>
<h2 class='h2'><:galactic_programmer:en_savoir_plus:></h2>
<div class="#EDIT{ps}">(#PS|image_reduire{120,0})</div>
</li>
</ul>]
</BOUCLE_page_speciale>

+ 3
- 0
inclure/head-theme.html View File

@ -0,0 +1,3 @@
[(#REM) Feuille de style CSS pour la coloration ]
[<link rel="stylesheet" href="(#CHEMIN{css/geshi.css}|timestamp)" type="text/css" media="all" />]

+ 41
- 0
inclure/liste_articles.html View File

@ -0,0 +1,41 @@
#CACHE{0}
[(#REM)
On teste si on utilise plusieurs langues ou pas?
]
[(#CONFIG{langues_utilisees}|explode{','}|count|>{1}|oui)
#SET{langue,oui}
]
[(#SET{hash_pagination,[_suggestions_(#ENV{titre}|sinon{pas de chance}|md5|substr{0,4})]})]
[(#REM) Noisette d'affichage d'une liste detaillee des tickets suivant des criteres passes en arguments]
<B_detaillee>
[<h2>(#ENV{titre})</h2>]
<div class="articles">
[(#ANCRE_PAGINATION)]
<table class="spip articles">
<thead>
<tr>
<th colspan='[(#GET{langue}|?{3,2})]'><:galactic_programmer:champ_resume:></th>
<th><:galactic_programmer:champ_auteur:></th>
<th><:galactic_programmer:champ_date:></th>
</tr>
</thead>
<tbody>
<BOUCLE_detaillee(ARTICLES){!par date}{pagination 10 #GET{hash_pagination}}{id_auteur?}{statut=#ENV{statut,publie}}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{odd,even})]">
[(#STATUT|=={publie}|oui)
<td><b><a title="[(#TITRE|attribut_html)]" href='#URL_ARTICLE'>##ID_ARTICLE</a></b></td>
]
[(#STATUT|=={publie}|non)
<td><b><a title="[(#TITRE|attribut_html)]" href='[(#URL_ECRIRE{articles}|parametre_url{id_article,#ID_ARTICLE})]'>##ID_ARTICLE</a></b></td>
]
[(#GET{langue}|oui)<td>#LANG</td>]
<td>#TITRE</td>
<td>#LESAUTEURS</td>
<td>[(#DATE|affdate_court)]</td>
</tr>
</BOUCLE_detaillee>
</tbody>
</table>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</div>
</B_detaillee>

+ 31
- 0
inclure/liste_commentaires.html View File

@ -0,0 +1,31 @@
#CACHE{0}
[(#SET{hash_pagination,[_suggestions_(#ENV{titre}|sinon{pas de chance}|md5|substr{0,4})]})]
[(#REM) Noisette d'affichage d'une liste detaillee des tickets suivant des criteres passes en arguments]
<B_detaillee>
[<h2>(#ENV{titre})</h2>]
<div class="commentaires">
[(#ANCRE_PAGINATION)]
<table class="spip commentaires">
<thead>
<tr>
<th colspan='2'><:galactic_programmer:champ_resume:></th>
<th><:galactic_programmer:champ_texte:></th>
<th><:galactic_programmer:champ_auteur:></th>
<th><:galactic_programmer:champ_date:></th>
</tr>
</thead>
<tbody>
<BOUCLE_detaillee(FORUMS){objet=article}{!par date}{pagination 10 #GET{hash_pagination}}{tout}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{odd,even})]">
<td><b><a title="[(#TITRE|attribut_html)]" href="#URL_FORUM">##ID_FORUM</a></b></td>
<td>[(#TITRE|couper{160})]</td>
<td>[(#TEXTE|couper{160})]</td>
<td>#AUTEUR</td>
<td>[(#DATE|affdate_court)]</td>
</tr>
</BOUCLE_detaillee>
</tbody>
</table>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</div>
</B_detaillee>

+ 37
- 0
inclure/liste_modifications_articles.html View File

@ -0,0 +1,37 @@
#CACHE{0}
[(#REM)
On teste si on utilise plusieurs langues ou pas?
]
[(#CONFIG{langues_utilisees}|explode{','}|count|>{1}|oui)
#SET{langue,oui}
]
[(#SET{hash_pagination,[_suggestions_(#ENV{titre}|sinon{pas de chance}|md5|substr{0,4})]})]
[(#REM) Noisette d'affichage d'une liste detaillee des tickets suivant des criteres passes en arguments]
<B_detaillee>
[<h2>(#ENV{titre})</h2>]
<div class="modifications_articles">
[(#ANCRE_PAGINATION)]
<table class="spip articles modifications">
<thead>
<tr>
<th colspan='[(#GET{langue}|?{3,2})]'><:galactic_programmer:champ_resume:></th>
<th><:galactic_programmer:champ_auteur:></th>
<th><:galactic_programmer:champ_date:></th>
</tr>
</thead>
<tbody>
<BOUCLE_detaillee(VERSIONS articles?){!par date}{pagination 10 #GET{hash_pagination}}{id_auteur?}{statut=#ENV{statut,publie}}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{odd,even})]">
<td><b><a title="[(#TITRE|attribut_html)]" href='#URL_ARTICLE'>##ID_ARTICLE</a></b></td>
[(#GET{langue}|oui)<td>#LANG</td>]
<td>#TITRE</td>
<td><BOUCLE_auteur(AUTEURS){tout}{id_auteur}>#NOM</BOUCLE_auteur>#ID_AUTEUR<//B_auteur>
</td>
<td>[(#DATE|affdate_court)]</td>
</tr>
</BOUCLE_detaillee>
</tbody>
</table>
[<p class="pagination">(#PAGINATION{page_precedent_suivant})</p>]
</div>
</B_detaillee>

+ 12
- 0
inclure/livre.html View File

@ -0,0 +1,12 @@
#SET{taille,#ENV{taille,50}}
<BOUCLE_articles(ARTICLES){lang}{page=livre}{0,1}>
<div class="bouton bouton_livre block-link-parent">
<a href="[(#URL_ARTICLE)]" title="<:galactic_programmer:documentation_papier:>">[
(#CHEMIN{images/livre.png}|image_reduire{#GET{taille}}|inserer_attribut{alt,<:galactic_programmer:documentation_papier:>})
]
<span><:galactic_programmer:documentation_papier:></span>
<span><:galactic_programmer:documentation_papier_complement:></span>
<img class="svg-icone" src="#CHEMIN{images/livre.svg}" alt="">
</a>
</div>
</BOUCLE_articles>

+ 10
- 0
inclure/navigation-dernier-article-ou-rubrique.html View File

@ -0,0 +1,10 @@
<BOUCLE_dernier_article(ARTICLES){id_rubrique}{n-1,1}>
[(#INCLURE{fond=inclure/navigation-precedent,url=#URL_ARTICLE,titre=#TITRE,taille})]
</BOUCLE_dernier_article>
[(#ID_PARENT|!={0}|oui)
[(#INCLURE{fond=inclure/navigation-precedent,url=#URL_RUBRIQUE,titre=#TITRE,taille})]
]
[(#ID_PARENT|=={0}|oui)
[(#INCLURE{fond=inclure/navigation-precedent, url=#URL_SITE_SPIP/, titre=#NOM_SITE_SPIP, taille})]
]
<//B_dernier_article>

+ 102
- 0
inclure/navigation-precedent-suivant.html View File

@ -0,0 +1,102 @@
[(#REM) precedent suivant des articles
Et on ne prends pas les articles de type "page unique" qui ont un id_rubrique a -1 ]
<BOUCLE_art(ARTICLES){id_article}{id_rubrique >=0 }>
<nav class="navigation__precedent_suivant">
[(#REM) Precedent ]
[(#REM)
Soit il existe un article precedent,
soit on va dans la rubrique parente
Sauf si on est dans un secteur/branche :
il ne faut pas remonter dans la rubrique du secteur (fr, en)
mais au sommaire
]
<BOUCLE_art_prec(ARTICLES){id_rubrique}{precedent}>
[(#INCLURE{fond=inclure/navigation-precedent, url=#URL_ARTICLE, titre=#TITRE, taille})]
</BOUCLE_art_prec>
<BOUCLE_rub_prec(RUBRIQUES){id_rubrique}>
[(#ID_PARENT|!={0}|oui)
[(#INCLURE{fond=inclure/navigation-precedent, url=#URL_RUBRIQUE, titre=#TITRE, taille})]
]
[(#ID_PARENT|=={0}|oui)
[(#INCLURE{fond=inclure/navigation-precedent, url=#URL_SITE_SPIP/, titre=#NOM_SITE_SPIP, taille})]
]
</BOUCLE_rub_prec>
<//B_art_prec>
[(#REM) Suivant ]
[(#REM)
Soit il existe un article suivant, sinon :
Soit il existe une sous rubrique au meme niveau que l'article
(on affiche les articles d'une rubrique avant ses sous rubriques)
Soit il existe un suivant au parent de l'article,
Soit il existe un suivant au parent du parent,
Mais cette rubrique, dans le cas d'un secteur/branche, ne doit pas etre la racine !
]
<BOUCLE_art_suiv(ARTICLES){id_rubrique}{suivant}>
[(#INCLURE{fond=inclure/navigation-suivant, url=#URL_ARTICLE, titre=#TITRE, taille})]
</BOUCLE_art_suiv>
<BOUCLE_sous_srub(RUBRIQUES){id_parent=#ID_RUBRIQUE}{0,1}>
[(#INCLURE{fond=inclure/navigation-suivant, url=#URL_RUBRIQUE, taille, titre=#TITRE})]
</BOUCLE_sous_srub>
[(#REM) la boucle article ne connait pas #ID_PARENT ! ]
<BOUCLE_rub_article(RUBRIQUES){id_rubrique}>
<BOUCLE_rub_suiv(RUBRIQUES){meme_parent}{suivant}>
[(#ID_PARENT|!={0}|oui)
[(#INCLURE{fond=inclure/navigation-suivant, url=#URL_RUBRIQUE, taille, titre=#TITRE})]
]
</BOUCLE_rub_suiv>
<BOUCLE_rub_parente(RUBRIQUES){id_rubrique=#ID_PARENT}>
<BOUCLE_rub_parente_suivante(RUBRIQUES){meme_parent}{suivant}>
[(#ID_PARENT|!={0}|oui)
[(#INCLURE{fond=inclure/navigation-suivant, url=#URL_RUBRIQUE, taille, titre=#TITRE})]
]
</BOUCLE_rub_parente_suivante>
</BOUCLE_rub_parente>
<//B_rub_suiv>
</BOUCLE_rub_article>
<//B_sous_srub>
<//B_art_suiv>
</nav>
</BOUCLE_art>
[(#REM) precedent suivant des rubriques ]
<BOUCLE_rub_actuelle(RUBRIQUES){id_rubrique}>
<nav class="navigation__precedent_suivant">
[(#REM) Precedent ]
[(#REM) S'il y a une rubrique precedente,
on prend le dernier article de la derniere rubrique enfant, sinon la derniere rubrique enfant
sinon, le dernier article de cette rubrique precedente, sinon cette rubrique precedente.
Sinon, on remonte chez le parent, et on fait pareil, sauf en cas de rubrique secteur ou on ne remonte pas tout en haut !
Sinon, on pointe vers le sommaire
]
<BOUCLE_rubrique_precedente(RUBRIQUES){meme_parent}{precedent}>
<BOUCLE_derniere_sous_rubrique(RUBRIQUES){id_parent=#ID_RUBRIQUE}{n-1,1}>
[(#INCLURE{fond=inclure/navigation-dernier-article-ou-rubrique, id_rubrique, id_parent, url=#URL_RUBRIQUE, taille, titre=#TITRE})]
</BOUCLE_derniere_sous_rubrique>
[(#INCLURE{fond=inclure/navigation-dernier-article-ou-rubrique, id_rubrique, id_parent, url=#URL_RUBRIQUE, taille, titre=#TITRE})]
<//B_derniere_sous_rubrique>
</BOUCLE_rubrique_precedente>
[(#REM) pas de rubrique precedente : rubrique parente]
<BOUCLE_parent(RUBRIQUES){id_rubrique=#ID_PARENT}>
[(#INCLURE{fond=inclure/navigation-dernier-article-ou-rubrique, id_rubrique, id_parent, url=#URL_RUBRIQUE, taille, titre=#TITRE})]
</BOUCLE_parent>
[(#REM) Pas de parent : sommaire ]
[(#INCLURE{fond=inclure/navigation-precedent, url=#URL_SITE_SPIP/, titre=#NOM_SITE_SPIP, taille})]
<//B_parent>
<//B_rubrique_precedente>
[(#REM) Suivant ]
[(#REM) Soit il existe un article premier dans la rubrique,
Sinon peut etre une sous rubrique
]
<BOUCLE_premier_art(ARTICLES){id_rubrique}{0,1}>
[(#INCLURE{fond=inclure/navigation-suivant, url=#URL_ARTICLE, titre=#TITRE, taille})]
</BOUCLE_premier_art>
[(#REM) pas d'article : premiere sous rubrique]
<BOUCLE_sous_rub(RUBRIQUES){id_parent}{0,1}>
[(#INCLURE{fond=inclure/navigation-suivant, url=#URL_RUBRIQUE, titre=#TITRE, taille})]
</BOUCLE_sous_rub>
<//B_premier_art>
</nav>
</BOUCLE_rub_actuelle>
<//B_art>

+ 1
- 0
inclure/navigation-precedent.html View File

@ -0,0 +1 @@
[<a class="navigation__precedent" href="#ENV{url}">(#ENV{titre})</a>]

+ 1
- 0
inclure/navigation-suivant.html View File

@ -0,0 +1 @@
[<a class="navigation__suivant" href="#ENV{url}">(#ENV{titre})</a>]

+ 9
- 0
inclure/sedna.html View File

@ -0,0 +1,9 @@
<BOUCLE_syndic_article(SYNDIC_ARTICLES){0,1}>
#SET{taille,#ENV{taille,50}}
<div class="bouton bouton_sedna">
<a href="[(#URL_PAGE{sedna})]" title="<:galactic_programmer:lien_sedna:>">[
(#CHEMIN{images/sedna.png}|image_reduire{#GET{taille}}|inserer_attribut{alt,<:galactic_programmer:lien_sedna_img:>})
]<span><:galactic_programmer:lien_sedna:></span>
</a>
</div>
</BOUCLE_syndic_article>

+ 9
- 0
inclure/suggestion.html View File

@ -0,0 +1,9 @@
#SET{taille,#ENV{taille,50}}
<div class="bouton bouton_suggestion block-link-parent">
<a href="[(#URL_PAGE{editer_ticket}|parametre_url{exemple,#ENV{exemple,''}})]" title="<:galactic_programmer:proposer_suggestion:>">[
(#CHEMIN{images/suggestion.png}|image_reduire{#GET{taille}}|inserer_attribut{alt,<:galactic_programmer:proposer_suggestion_img:>})
]<span><:galactic_programmer:proposer_suggestion:></span>
<span><:galactic_programmer:signaler_coquille:></span>
<img class="svg-icone" src="#CHEMIN{images/signaler.svg}" alt="">
</a>
</div>

+ 104
- 0
lang/galactic_programmer_en.php View File

@ -0,0 +1,104 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'auteur' => 'Author :',
// C
'champ_auteur' => 'Author',
'champ_date' => 'Date',
'champ_id' => 'Id',
'champ_langue' => 'Lang',
'champ_resume' => 'Summary',
'champ_texte' => 'Text',
'champ_titre' => 'Title',
'chapitre' => 'Chapter: ',
'choisir' => 'Choose...',
'commentaire' => '@nb@ comment',
'commentaire_aucun' => 'No comments',
'commentaires' => '@nb@ comments',
'commentez' => 'Comment on the documentation',
'creer_nouvelle_suggestion' => 'Make a new suggestion',
// D
'description' => 'Description',
'documentation_papier' => 'Printed documentation !',
'documentation_papier_complement' => 'To read at leisure...',
// E
'editer_suggestion' => 'Edit this suggestion',
'en_savoir_plus' => 'More',
'erreur_de_chargement_ajax' => 'AJAX loading error!',
'erreur_inscription_desactivee' => 'Registration are disabled on this site.',
'erreur_inscription_session' => 'You are already identified.',
'exemple' => 'Example',
'exercice' => 'Exercise',
// I
'icones_par' => 'Icons adapted from the theme ',
'integrale' => 'Complete!',
// L
'label_charger_url' => 'Quick access:',
'label_exemple' => 'Example',
'label_exercice' => 'Exercise',
'label_reponse' => 'Answer',
'licence' => 'License :',
'lien_sedna' => 'Websites we follow',
'lien_sedna_img' => 'Sedna',
// M
'maj' => 'Updated on ',
'mentions_legales' => 'Legal notices',
'mis_a_jour' => 'Updated :',
'mots_cles' => 'Keywords',
// N
'navigation_clavier' => 'You can turn the pages using the keyboard’s left and right arrow keys!',
'nom' => 'Name',
'nouvelle_suggestion' => 'New suggestion',
// P
'partez_a_laventure' => 'Begin the adventure!',
'precedent' => 'Previous',
'proposer_suggestion' => 'Suggest an improvement!',
'proposer_suggestion_img' => 'Tickets manager',
'publie_le' => 'Published :',
// R
'reponse' => 'Answer',
// S
'signaler_coquille' => 'Report an error…',
'sinscrire' => 'Register',
'sommaire' => 'Contents',
'sommaire_livre' => 'Contents',
'sous_licence' => 'under the',
'suggestion' => 'Suggestion',
'suggestions' => 'Suggestions',
'suivant' => 'Next',
'suivi' => 'Monitor',
'suivi_dernieres_modifications_articles' => 'Recent modifications to the articles',
'suivi_derniers_articles' => 'Recent articles',
'suivi_derniers_articles_proposes' => 'Last articles proposed',
'suivi_derniers_commentaires' => 'Recent comments',
'suivi_description' => 'Monitor the site...',
'symboles' => 'Symbols',
// T
'table_des_matieres' => 'Table of contents',
'tickets_sur_inscription' => '
Writing tickets and comments is only available
for registered users.
',
'titre_articles_lies' => 'Additional articles',
'titre_identification' => 'Identification',
'titre_inscription' => 'Registration',
'tout_voir' => 'View all',
'traductions' => 'Translations :',
);

+ 103
- 0
lang/galactic_programmer_es.php View File

@ -0,0 +1,103 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'auteur' => 'Autor:',
// C
'cfg_descriptif_documentation' => 'Opciones del esqueleto de documentación',
'cfg_titre_documentation' => 'Esqueleto "Documentación"',
'champ_auteur' => 'Autor(es)',
'champ_date' => 'Fecha',
'champ_id' => 'Id',
'champ_langue' => 'Idioma',
'champ_resume' => 'Resumen',
'champ_texte' => 'Texto',
'champ_titre' => 'Título',
'chapitre' => 'Capítulo: ',
'choisir' => 'Elegir...',
'commentaire' => '@nb@ comentario',
'commentaire_aucun' => 'Ningún comentario',
'commentaires' => '@nb@ comentarios',
'commentez' => 'Comentar la documentación',
'creer_nouvelle_suggestion' => 'Proponer una nueva sugerencia',
// D
'description' => 'Descripción',
'documentation_papier' => '¡Documentación papel!',
'documentation_papier_complement' => 'Para leer tranquilamente...',
// E
'editer_suggestion' => 'Editar esta sugerencia',
'en_savoir_plus' => '¡Saber más!',
'erreur_de_chargement_ajax' => '¡Error al cargar AJAX!',
'erreur_inscription_desactivee' => 'Los registros están desactivados para este sitio.',
'erreur_inscription_session' => 'Ya está identificado.',
'exemple' => 'Ejemplo',
'exercice' => 'Ejercicio',
// I
'icones_par' => 'Iconos adaptados del tema',
'integrale' => '¡Íntegro!',
// L
'label_charger_url' => 'Acceso rápido:',
'label_exemple' => 'Ejemplo',
'label_exercice' => 'Ejercicio',
'label_reponse' => 'Respuesta',
'licence' => 'Licencia:',
'lien_sedna' => 'Sitios que seguimos',
'lien_sedna_img' => 'Sedna',
// M
'maj' => 'Revisión del ',
'mentions_legales' => 'Menciones legales',
'mis_a_jour' => 'Actualizado:',
'mots_cles' => 'Palabras clave',
// N
'navigation_clavier' => '¡Puede pasar las páginas con las flechas de izquierda y derecha de su teclado!',
'nom' => 'Nombre',
'nouvelle_suggestion' => 'Nueva sugerencia',
// P
'partez_a_laventure' => '¡Aventúrese!',
'precedent' => 'Precedente',
'proposer_suggestion' => '¡Proponga una mejora!',
'proposer_suggestion_img' => 'Administrador de tickets',
'publie_le' => 'Publicado el:',
// R
'reponse' => 'Respuesta',
// S
'signaler_coquille' => 'Indique una errata...',
'sinscrire' => 'Registrarse',
'sommaire' => 'Contenido',
'sommaire_livre' => 'Sumario',
'sous_licence' => 'bajo licencia',
'suggestion' => 'Sugerencia',
'suggestions' => 'Sugerencias',
'suivant' => 'Siguiente',
'suivi' => 'Seguimiento',
'suivi_dernieres_modifications_articles' => 'Últimos cambios en los artículos',
'suivi_derniers_articles' => 'Últimos artículos',
'suivi_derniers_articles_proposes' => 'Últimos artículos propuestos',
'suivi_derniers_commentaires' => 'Últimos comentarios',
'suivi_description' => 'Seguimiento del sitio...',
'symboles' => 'Símbolos',
// T
'table_des_matieres' => 'Contenido',
'tickets_sur_inscription' => 'La redacción de tickets o comentarios no es posible más que para las personas identificadas.',
'titre_articles_lies' => 'Artículos complementarios',
'titre_identification' => 'Identificación',
'titre_inscription' => 'Registro',
'tout_voir' => 'Ver todo',
'traductions' => 'Traducciones:',
);

+ 102
- 0
lang/galactic_programmer_fr.php View File

@ -0,0 +1,102 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'auteur' => 'Auteur :',
// C
'champ_auteur' => 'Auteur(s)',
'champ_date' => 'Date',
'champ_id' => 'Id',
'champ_langue' => 'Lang',
'champ_resume' => 'Resumé',
'champ_texte' => 'Texte',
'champ_titre' => 'Titre',
'chapitre' => 'Chapitre : ',
'choisir' => 'Choisir...',
'commentaire' => '@nb@ commentaire',
'commentaire_aucun' => 'Aucun commentaire',
'commentaires' => '@nb@ commentaires',
'commentez' => 'Commentez la documentation',
'creer_nouvelle_suggestion' => 'Proposer une nouvelle suggestion',
// D
'description' => 'Description',
'documentation_papier' => 'Documentation papier !',
'documentation_papier_complement' => 'Pour lire à tête reposée...',
// E
'editer_suggestion' => 'Editer cette suggestion',
'en_savoir_plus' => 'En savoir plus !',
'erreur_de_chargement_ajax' => 'Erreur de chargement AJAX !',
'erreur_inscription_desactivee' => 'Les inscriptions sont désactivées sur ce site.',
'erreur_inscription_session' => 'Vous êtes déjà identifié.',
'exemple' => 'Exemple',
'exercice' => 'Exercice',
// I
'icones_par' => 'Icones adaptées du thème ',
'integrale' => 'L’intégrale !',
// L
'label_charger_url' => 'Accès rapide :',
'label_exemple' => 'Exemple',
'label_exercice' => 'Exercice',
'label_reponse' => 'Réponse',
'licence' => 'Licence :',
'lien_sedna' => 'Les sites que nous suivons',
'lien_sedna_img' => 'Sedna',
// M
'maj' => 'Révision du ',
'mentions_legales' => 'Mentions légales',
'mis_a_jour' => 'Mis à jour :',
'mots_cles' => 'Mots Clés',
// N
'nom' => 'Nom',
'nouvelle_suggestion' => 'Nouvelle suggestion',
// P
'precedent' => 'Précédent',
'proposer_suggestion' => 'Proposez une amélioration !',
'proposer_suggestion_img' => 'Gestionnaire de tickets',
'publie_le' => 'Publié le :',
// R
'reponse' => 'Réponse',
// S
'signaler_coquille' => 'Signalez une coquille…',
'sinscrire' => 'S’inscrire',
'sommaire' => 'Contenu',
'sommaire_livre' => 'Sommaire',
'sous_licence' => 'sous licence',
'suggestion' => 'Suggestion',
'suggestions' => 'Suggestions',
'suivant' => 'Suivant',
'suivi' => 'Suivi',
'suivi_dernieres_modifications_articles' => 'Dernieres modifications des articles',
'suivi_derniers_articles' => 'Derniers articles',
'suivi_derniers_articles_proposes' => 'Derniers articles proposés',
'suivi_derniers_commentaires' => 'Derniers commentaires',
'suivi_description' => 'Suivi du site...',
'symboles' => 'Symboles',
// T
'table_des_matieres' => 'Table des matières',
'tickets_sur_inscription' => '
L’écriture des tickets ou commentaires n’est
possible qu’aux personnes identifiées.
',
'titre_articles_lies' => 'Articles complémentaires',
'titre_identification' => 'Identification',
'titre_inscription' => 'Inscription',
'tout_voir' => 'Tout voir',
'traductions' => 'Traductions :',
);

+ 10
- 0
lang/paquet-galactic_programmer_fr.php View File

@ -0,0 +1,10 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
'galactic_programmer_nom' => 'Galactic - programmer.spip.net',
'galactic_programmer_slogan' => 'Surcharge le squelette Galactic',
'galactic_programmer_description' => ''
);

+ 35
- 0
paquet.xml View File

@ -0,0 +1,35 @@
<paquet
prefix="galactic_programmer"
categorie="squelette"
version="1.0.0"
etat="stable"
compatibilite="[3.1.0;3.2.*]"
logo="prive/themes/spip/images/galactic_programmer-64.png"
>
<nom>Galactic - Thème programmer.spip.net</nom>
<auteur>Jordan Zucchiatti : graphisme</auteur>
<auteur>nicod_ : intégration</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<pipeline nom="formulaire_charger" inclure="galactic_programmer_pipelines.php" />
<pipeline nom="pre_liens" inclure="galactic_programmer_pipelines.php" />
<pipeline nom="affichage_final" inclure="galactic_programmer_pipelines.php" />
<pipeline nom="declarer_champs_extras" inclure="base/galactic_programmer.php" />
<necessite nom="galactic" compatibilite="[1.0.0;]" />
<necessite nom="coloration_code" compatibilite="[0.6.1;]" />
<necessite nom="suivant_precedent" compatibilite="[1.4.2;]" />
<necessite nom="cextras" compatibilite="[3.0.0;[" />
<necessite nom="saisies" compatibilite="[1.14.0;]" />
<utilise nom="porte_plume" compatibilite="[1.11.5;]" />
<utilise nom="tickets" compatibilite="[2.0.2;]" />
<utilise nom="nospam" compatibilite="[0.8.5;]" />
<utilise nom="pages" compatibilite="[1.0.0;]" />
<utilise nom="comments" compatibilite="[3.0.3;]" />
<utilise nom="polyhier" compatibilite="[2.0.3;]" />
<utilise nom="tradrub" compatibilite="[3.0.0;[" />
</paquet>

+ 7
- 0
prive/squelettes/contenu/configurer_galactic_programmer.html View File

@ -0,0 +1,7 @@
[(#AUTORISER{configurer,galactic_programmer}|sinon_interdire_acces)]
<h1 class="grostitre"><:galactic_programmer:cfg_descriptif_galactic_programmer:></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_GALACTIC_PROGRAMMER
</div>

BIN
prive/themes/spip/images/galactic_programmer-128.png View File

Before After
Width: 129  |  Height: 128  |  Size: 11 KiB

BIN
prive/themes/spip/images/galactic_programmer-32.png View File

Before After
Width: 33  |  Height: 32  |  Size: 1.5 KiB

BIN
prive/themes/spip/images/galactic_programmer-64.png View File

Before After
Width: 65  |  Height: 64  |  Size: 3.8 KiB

+ 118
- 0
scss/galactic_theme.scss View File

@ -0,0 +1,118 @@
.contentMain__extra {
.navigation__precedent_suivant {
a {
padding: 1em;
font-style: italic;
@include ombre();
margin-bottom: 1em;
// centrage vertical du texte
@include flex();
-webkit-flex-direction: column;
flex-direction: column;
justify-content: space-around;
}
@include media($bp-small-up) {
@include flex();
justify-content: space-between;
a {
min-height: em(64px);
line-height: normal;
width: 49%;
padding: 0 1em;
margin-bottom: 0;
}
}
}
.navigation__precedent {
position: relative;
background: white;
color: $couleur-texte-gris;
text-align: right;
&:after {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%) rotate(-90deg);
left: 1em;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid $couleur-texte-gris;
}
}
.navigation__suivant {
position: relative;
background: #37d36c;
color: white;
text-align: left;
&:after {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%) rotate(90deg);
right: 1em;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid white;
}
}
}
.contentNav__aside {
.bouton {
position: relative;
background: white;
margin-bottom: em(4px);
padding-right: 1em + em(16px);
font-size: 90%;
@include ombre();
a {
display: inline-block;
padding: 1em;
color: $couleur-texte;
&:hover {
color: $couleur-lien;
}
}
span {
@include media($bp-large) {
display: block;
}
}
.svg-icone {
width: em(14px);
float: right;
right: 1em;
position: absolute;
top: 50%;
transform: translateY(-50%);