Browse Source

Simplification de l'aide en ligne en utilisant des fichiers, plutôt que d'aller la chercher sur spip.net.

`#AIDER{raccourcis}` affiche l'aide du groupe "raccourcis". (et uniquement celle là). Ce groupe contient différentes entrées, et éventuellement une intro.

La déclaration est volontairement *très* simple et traverse un pipeline "aide_index".
`$index['raccourcis'] = ['simple', 'lien', 'note', 'citation', 'tableau', 'liste', 'glossaire', 'ancre'];`

Pour garder cette simplicité on s'appuie sur la structure suivante :

Le fichier de langue "aide" tel que lang/aide_fr.php contient les titres, soit "{groupe}" ou "{groupe}_{entree}".
Comme les fichiers de langue sont extensibles (ie on peut declarer un lang/aide_fr.php dans un autre plugin), ça devrait suffire.

- 'raccourcis' => Titre...
- 'raccourcis_simple' => Titre... etc.

Le contenu lui est cherché dans un fichier "aide/{lang}/{groupe}/{entree}.spip" tel que "aide/fr/raccourcis/lien.spip".
S'il existe un "aide/{lang}/{groupe}/_intro.spip" il sera utilisé en introduction du groupe.

Si une langue n'existe pas, on tente de suivre le même chemin de recherche que pour les traductions.

Note: il reste quelques bugs d'ancres à corriger dans la popin.
pull/2/head
Matthieu Marcillaud 2 years ago
parent
commit
a340a72270
  1. 7
      aide/fr/raccourcis/_intro.spip
  2. 8
      aide/fr/raccourcis/ancre.spip
  3. 20
      aide/fr/raccourcis/citation.spip
  4. 65
      aide/fr/raccourcis/code.spip
  5. 32
      aide/fr/raccourcis/glossaire.spip
  6. 99
      aide/fr/raccourcis/lien.spip
  7. 45
      aide/fr/raccourcis/liste.spip
  8. 49
      aide/fr/raccourcis/note.spip
  9. 92
      aide/fr/raccourcis/simple.spip
  10. 74
      aide/fr/raccourcis/tableau.spip
  11. 9
      aide_options.php
  12. 312
      inc/aide.php
  13. 15
      lang/aide_fr.php
  14. 7
      paquet.xml
  15. 86
      prive/squelettes/contenu/aide.html
  16. 117
      prive/squelettes/contenu/aide_fonctions.php

7
aide/fr/raccourcis/_intro.spip

@ -0,0 +1,7 @@
<!-- ig br -->
{{Pour faciliter la mise en page des documents publiés avec SPIP, le système propose un certain nombre de «raccourcis SPIP» destinés:
- à simplifier l'utilisation par des utilisateurs ne connaissant pas le HTML;
- à faciliter le traitement automatique de la mise en page.}}
Par conséquent naturellement vous pouvez toujours utiliser le code HTML dans vos documents SPIP, mais nous vous conseillons d'utiliser de préférence ces quelques raccourcis SPIP (peu nombreux), qui sont beaucoup plus faciles à mémoriser et plus particulièrement permettent au système certaines opérations automatisées.}}

8
aide/fr/raccourcis/ancre.spip

@ -0,0 +1,8 @@
<!-- ig br -->
Vous pouvez définir des «ancres HTML» afin de pouvoir construire un lien direct vers un point donné au milieu d'une page d'un site SPIP. Il suffit d'introduire le raccourci:
<cadre>[direct<-]</cadre>
et cela créera une ancre de nom <code>direct</code>. Ainsi, s'il s'agit, par exemple, de l'article 3723, l'URL <code>http://monsite/spip.php?page=article.php&id_article=3723#direct</code> conduira directement à l'endroit de l'article où est situé cette ancre.
Il est à noter que les ancres sont compatibles avec les [liens hypertexte à l'intérieur du site->#liensite]. Ainsi, le raccourci «<code>[ce point précis->art123#precis]</code>» conduira vers l'ancre nommée «<code>precis</code>» défini dans l'article 123.

20
aide/fr/raccourcis/citation.spip

@ -0,0 +1,20 @@
<!-- ig br -->
Il est souvent pratique, dans un forum de discussion, de citer un extrait du message auquel on
est en train de répondre. Pour homogénéiser la présentation de telles citations, SPIP propose le raccourci
<html><tt>&lt;quote>...&lt;/quote></tt></html>.
Par exemple:
<cadre>
<quote>C'est drôlement bien, SPIP.</quote>
Kikou, je suis bien d'accord :-)
</cadre>
donne:
<quote><quote>C'est drôlement bien, SPIP.</quote>
Kikou, je suis bien d'accord :-)</quote>

65
aide/fr/raccourcis/code.spip

@ -0,0 +1,65 @@
<!-- ig br -->
Certains utilisateurs de SPIP veulent parfois afficher du code informatique dans leurs pages.
Le raccourci <HTML><TT>&lt;code>...&lt;/code></TT></HTML> est là pour ça.
Exemple : <cadre> <code><?php // ceci est du langage php
echo "bonjour";
</code>
</cadre>
donne
<quote>
<code><?php // ceci est du langage php
echo "bonjour";
</code>
</quote>
Il existe un autre raccourci pour publier des extraits de code informatique de plusieurs lignes:
<html><tt>&lt;cadre>...&lt;/cadre></tt></html>. Cela place le code dans un «formulaire» (ceci est souvent utilisé
sur la présente page). L'avantage de cette méthode est de faciliter grandement le copier-coller à partir
de votre page Web: il suffit de placer le curseur à l'intérieur du code, de faire «tout sélectionner» (ctrl-A)
pour pouvoir copier directement le code. De plus sur de nombreux butineurs, ce cadre permet de
bien restituer les tabulations en début de ligne.
Voici un exemple:
<cadre>
class Texte {
var
type = 'texte';
var
texte;
}
class Champ {
var
type = 'champ';
var
nom_champ,
id_champ;
var
cond_avant,
cond_apres; // tableaux d'objets
var
fonctions;
}
</cadre>
{{{Court-circuiter les raccourcis SPIP}}}
Dans certains cas, il peut être utile d'indiquer à SPIP
que certaines parties d'un document ne doivent pas être
«traitées» par le filtre des raccourcis
typographiques: vous ne voulez pas corriger la typographie, vous devez afficher
du code source (par exemple en PHP, JavaScript...)...
Le code de ce raccourci est:
<cadre><HTML>texte à ne
pas transformer; attention!</HTML>
</cadre>
ce qui donne:
<quote>
<HTML>texte à ne pas transformer; attention!</HTML>
</quote>
(ici, notez l'absence d'espaces avant le point-virgule et le point
d'exclamation).

32
aide/fr/raccourcis/glossaire.spip

@ -0,0 +1,32 @@
<!-- ig br -->
Vous pouvez en outre créer très rapidement un lien
hypertexte vers la définition d'un terme dans un glossaire
externe; pour un terme donné, il suffit d'insérer
au sein de votre texte le raccourci <code>[?terme]</code>.
Ainsi le code suivant:
« <code>{À la recherche du temps perdu} est l'œuvre majeure de [?Marcel Proust]</code> »
donnera à l'affichage:
«{À la recherche du temps perdu} est l'œuvre majeure de [?Marcel Proust]».
Pensez à cliquer sur le lien pour vérifier que le terme entré
(nom propre ou nom commun) est correctement orthographié,
et qu'il pointe sur une destination valide.
Le glossaire externe prédéfini est [Wikipedia->http://www.wikipedia.org] qui impose certaines [conventions sur les titres->
http://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Conventions_sur_les_titres].
Cette encyclopédie multilingue écrite sur un mode
coopératif est ouverte à tous les contributeurs via
Internet; prenez le temps de la connaître et d'y contribuer afin d'enrichir ce fonds de savoir partagé.
Vous pouvez aussi référencer un autre glossaire en plaçant après le terme le signe # suivi du nom {G} du glossaire. SPIP appliquera alors la fonction <tt>glossaire_</tt>{G} sur le terme pour obtenir le lien à insérer.
Cette fonction aura été placée dans le fichier <tt>mes_options.php</tt>. Si le nom {G} se termine par des chiffres, ceux-ci seront préalablement retirés de ce nom, et formeront le deuxième argument de la fonction, ce qui est très utile pour un glossaire divisé en sections. On écrira donc:
<cadre>[?read#man2]</cadre>
pour indiquer que l'on référence l'explication du terme <tt>read</tt> dans la section 2 du glossaire nommé <tt>man</tt>.
Les raccourcis pour mentionner la langue et créer une info-bulle, expliqués pour les liens externes, fonctionnent également pour les glossaires.

99
aide/fr/raccourcis/lien.spip

@ -0,0 +1,99 @@
<!-- ig br -->
On fabriquera facilement un lien hypertexte avec le code suivant:
<cadre>SPIP est une initiative du [minirézo->http://www.minirezo.net/].</cadre>
devient:
<quote>SPIP est une initiative du [minirézo->http://www.minirezo.net/].</quote>
(Mnémotechnique: le tiret suivi d'un chevron dessine une sorte de flèche qui indique que le texte du lien (avant la flèche) «pointe vers» une adresse.)
L'adresse du lien peut être une adresse absolue
(commençant, comme ici, par <code>http://</code>),
une adresse relative (vers une autre page du même site), un
lien vers un document utilisant un protocole de l'internet
(<code>ftp://</code>...), une adresse email
(«<code>[->minirezo@rezo.net]</code>»)...
Application spécifique: vous pouvez afficher en toutes lettres un lien cliquable sous la forme d'une adresse URL,
en n'indiquant rien avant la «flèche». Par exemple:
<cadre>[->http://dmoz.org/World/Deutsch/Kultur/Literatur/Autoren_und_Autorinnen/P/Proust,_Marcel/]</cadre>
affiche:
<quote>[->http://dmoz.org/World/Deutsch/Kultur/Literatur/Autoren_und_Autorinnen/P/Proust,_Marcel/]</quote>
Notez que, dans le cas des URL très longues, l'affichage est tronqué (pour éviter de dégrader
votre interface graphique), mais le lien hypertexte pointe vers la bonne adresse.
[liensite<-]
Il est possible de préciser la langue de la page vers laquelle le lien pointe,
ce que les navigateurs afficheront à leur convenance. Pour cela, il faut mettre le code-langue entre accolades.
<cadre>[Un site en français{fr}->http:///www.adresse.tld]</cadre>
Cela est particulièrement recommandé lorsque la page de destination n'est pas dans la même langue que votre texte.
Si l'on veut donner beaucoup d'informations sur le lien sans allonger excessivement la zone cliquable, on peut provoquer l'apparition d'une info-bulle en plaçant avant la flèche le signe | suivi du texte souhaité :
<cadre>[voir ici|Ce lien vous expliquera tout ce qu'il faut savoir->http:///www.adresse.tld]</cadre>
affichera <tt>voir ici</tt>, le reste du texte n'apparaissant qu'au survol.
- {{Liens hypertextes à l'intérieur du site}}
Ce même système de liens hypertextes facilite, de plus,
la création de liens à l'intérieur de votre site
sous SPIP. La seule subtilité consiste à repérer
le {numéro} de l'article, de la rubrique, ou de la
brève vers laquelle vous voulez mener votre lien hypertexte:
<img src="AIDE/fr/articlenumero.gif" alt="NUMERO" align="right" />
lorsque vous «visitez», dans l'espace privé, un
article, une brève ou une rubrique, la colonne de gauche
contient un pavé indiquant, en gros caractères, ce
numéro.
C'est ce numéro que vous allez indiquer dans le lien hypertexte:
-* Lien vers l'article 342 (quatre possibilités):}
<HTML><TT>
<br />lien vers [l'article->342]
<br />lien vers [l'article->art342]
<br />lien vers [l'article->article 342]
<br /></tt></html>
Application spécifique: <HTML><TT>[->art342]</tt></html> (on n'a rien indiqué avant la «flèche») affichera automatiquement
le titre de l'article 342 avec un lien vers cet article.
-* Lien vers la rubrique 12:}
<HTML><TT>
<br />lien vers [la rubrique->rub12]
<br />lien vers [la rubrique->rubrique 12]
</tt></html>
-* Lien vers la brève 65:}
<HTML><TT>
<br />lien vers [la brève->br65]
<br />lien vers [la brève->breve 65]
<br />lien vers [la brève->brève 65]
</tt></html>
-* Auteurs, mots-clés, sites, images, documents:}
<HTML><TT>
<br />lien vers [un auteur->aut13] ou [le même auteur->auteur13]
<br />lien vers [un mot->mot32]
<br />lien vers [un site syndiqué->site1]
<br />lien vers [un document joint->doc17] ou [le même document->document17]
<br />lien vers [une image->img13] ou [la même image->image13]
<br />
</tt></html>
Application spécifique: on peut, là aussi, ne rien spécifier avant la «flèche»
(<html><tt>[->aut13]</tt></html>...).
SPIP insérera automatiquement les informations nécessaires. Dans le cas d'un document joint ou d'une image, si l'on a indiqué un titre manuellement, c'est ce titre qui sera affiché; sinon c'est le nom du fichier lui-même qui sera utilisé.
Les raccourcis pour mentionner la langue et créer une info-bulle, expliqués pour les liens externes, fonctionnent également pour les liens internes.
<div align='right'>en savoir plus: <a href='#glossaire'>liens vers un glossaire</a>,
_ [ancres nommées->#ancres].
</div>

45
aide/fr/raccourcis/liste.spip

@ -0,0 +1,45 @@
<!-- ig br -->
- Un simple retour à la ligne s'obtient en tapant <tt>_</tt> (le trait
de soulignement ou {underscore}) au début de la ligne, suivi d'une espace.
{N.B.} En typographie classique, le simple retour à la ligne est très rare (limité essentiellement à la poésie). On le confond souvent avec le changement de paragraphe tel qu'il est affiché sur les documents imprimés (sans espacement vertical entre les paragraphes), alors que, par défaut, les butineurs Web insèrent un espacement entre les paragraphes. Beaucoup d'utilisateurs cherchent à reproduire cette caractéristique de l'imprimé (pas d'espacement vertical) en insérant de simples retours à la ligne entre ce qu'ils considèrent être des paragraphes; cela est un erreur qui risque de nuire à la facilité de maintenance et d'évolution de leur site. La solution consiste à définir, dans les squelettes, une feuille de style (CSS) décrivant le comportement des paragraphes (c'est-à-dire, selon les choix, pas d'espacement vertical entre les paragraphes, indentation de la première ligne...).
- On peut faire des {{énumérations imbriquées}} en
ajoutant des étoiles après le tiret d'énumération.
Ainsi:
<cadre>
-* Ton cheval est:
-** alezan;
-** bai;
-** noir;
-* mais mon lapin est:
-** blanc;
-*** angora;
-*** ou à poil ras.</cadre>
donne:
<quote>
-* Ton cheval est:
-** alezan;
-** bai;
-** noir;
-* mais mon lapin est:
-** blanc;
-*** angora;
-*** ou à poil ras.</quote>
- Enfin, on peut faire des {{listes numérotées}} en utilisant le <code>#</code>
à la place de l'étoile:
<cadre>
-# premier
-# deuxieme
-# troisieme</cadre>
donnera:
<quote>
-# premier
-# deuxième
-# troisième</quote>

49
aide/fr/raccourcis/note.spip

@ -0,0 +1,49 @@
<!-- ig br -->
Une note de bas de page est, habituellement, signalée par un
numéro placé à l'intérieur du texte,
numéro repris en bas de page et proposant un complément
d'information.
Dans SPIP, cette fonctionnalité (assez lourde à
gérer manuellement en HTML) est automatisée: les notes
sont numérotées par SPIP, qui gère
également des liens hypertextes à l'intérieur du
document pour passer directement de l'appel de note au texte de la
note correspondante, et vice-versa.
Une note de bas de page est indiquée, dans SPIP, entre doubles
crochets: «<HTML><TT>Une note[[Voici un complément
d'information.]] de bas de page.</TT></HTML>» sera
affiché sous la forme: «Une note[[Voici un
complément d'information.]] de bas de page.»
{{{Des notes non automatiques}}}
Dans la plupart des cas, le système de notes automatiques
indiqué ci-dessus suffit amplement. Cependant, vous pouvez
gérer les notes d'une manière non automatique en «forçant»
le choix du numéro ou de la mention affichée pour réaliser le lien.
Le principe général consiste à indiquer votre choix de la mention utilisée
entre chevrons au début de la note:
<cadre>Une note «forcée»[[<xxx> Le texte de la note.]]</cadre>
Sur ce principe:
<cadre>vous pouvez utiliser les notes numérotées automatiques[[En plaçant le texte de la note entre crochets.]],
- mais aussi forcer la numérotation de la note[[<23> En indiquant le numéro de la note entre les symboles «<» et «>».]],
- utiliser des notes sous forme d'astérisques [[<*> En plaçant simplement une astérisque entre les symboles «<» et «>».]],
- fabriquer des notes sans références (non numérotées); attention, de telles notes ne présentent plus de lien entre la note et l'appel de note[[<> En n'indiquant rien entre les symboles «<» et «>».]],
- donner un nom (en toutes lettres) à une note; cet usage est très répandu pour les références bibliographiques[[<Rab> François Rabelais.]];
- rappeler une note déjà existante[[<23>]] en indiquant le numéro de cette note entre les symboles «<» et «>» et en laissant vide le reste de la note.</cadre>
donne:
<quote>vous pouvez utiliser les notes numérotées automatiques[[En plaçant le texte de la note entre crochets.]],
- mais aussi forcer la numérotation de la note[[<23> En indiquant le numéro de la note entre les symboles «<» et «>».]],
- utiliser des notes sous forme d'astérisques [[<*> En plaçant simplement une astérisque entre les symboles «<» et «>».]],
- fabriquer des notes sans références (non numérotées); attention, de telles notes ne présentent plus de lien entre la note et l'appel de note[[<> En n'indiquant rien entre les symboles «<» et «>».]],
- donner un nom (en toutes lettres) à une note; cet usage est très répandu pour les références bibliographiques[[<Rab> François Rabelais.]];
- rappeler une note déjà existante[[<23>]] en indiquant le numéro de cette note entre les symboles «<» et «>». et en laissant vide le reste de la note.</quote>

92
aide/fr/raccourcis/simple.spip

@ -0,0 +1,92 @@
<!-- ig br -->
Dans un premier temps, nous présentons ici les raccourcis typographiques les plus courants et les plus simples. Pour les utilisateurs qui souhaiteraient affiner encore le contrôle de la mise en forme de leurs textes, nous présenterons des versions plus complexes de ces raccourcis.
{N.B.} Les raccourcis simples répondent déjà largement à la grande majorité des besoins, et permettent de publier en ligne presque aussi simplement que l'on écrit un mail.
{{{Typographie française automatique}}}
SPIP respecte automatiquement les principales règles
d'espacement de la typographie française - ainsi des espaces
insécables sont ajoutées devant les caractères
«:», «;», «!», «?»~-,
et place des espaces insécables avant et après les
guillemets «à la française».
(Note: cette fonctionnalité n'est activée que sur les sites
dont la langue principale est le français.)
{{{Créer des paragraphes}}}
Pour créer des paragraphes, il suffit de laisser une ligne
vide, un peu comment on sépare les paragraphes dans un email
(on «saute» une ligne).
Le fait de simplement «revenir à la ligne»
(retour-chariot) sans séparer les deux paragraphes par une
ligne vide ne suffit pas pour provoquer un changement de paragraphe
(cela ne provoque même pas un retour à la ligne).
Vous pouvez laisser plusieurs lignes vides à la suite sans que
cela modifie la présentation.
[puces<-]
{{{Insérer une puce}}}
On peut insérer une puce en début de ligne dans SPIP : il suffit de revenir à la
ligne et de commencer la nouvelle ligne avec un tiret
(«-»).
Notez: ici un simple retour à la ligne suffit (on peut faire
des énumérations dans le même paragraphe); mais
si l'on «saute» une ligne avant la ligne
commençant par un tiret, une ligne vide est affichée
avant l'énumération.
Par exemple, <cadre>- Qu'est-ce que cela peut faire que je lutte pour la mauvaise cause
puisque je suis de bonne foi?
- Et qu'est-ce que ça peut faire que je sois de mauvaise foi
puisque c'est pour la bonne cause. (Jacques
Prévert)</cadre>
sera affiché ainsi:
<quote>
- Qu'est-ce que cela peut faire que je lutte pour la mauvaise cause puisque je suis de bonne foi?
- Et qu'est-ce que ça peut faire que je sois de mauvaise foi
puisque c'est pour la bonne cause. (Jacques Prévert)
</quote>
On notera qu'il s'agit bien d'insérer une {puce} et non de créer une liste ([pour créer des listes voir->#listes])
{{{Gras et italique}}}
On indique simplement du texte {en italique} en le plaçant
entre des accolades simples: «<HTML><TT>...du texte {en
italique} en...</TT></HTML>».
On indique du texte {{en gras}} en le plaçant entre des
accolades doubles: «<HTML><TT>...du texte {{en gras}}
en...</TT></HTML>».
{{{Intertitres}}}
Les intertitres sont des titres à l'intérieur d'un
texte permettant d'en indiquer la structure. Dans SPIP, on les
indique très simplement en les plaçant entre des
accolades triples: «<HTML><TT>{{{Un titre de
partie}}}</tt></html>» affichera le texte en gras et centré:
<quote>{{{Un titre de partie}}}</quote>
{{{Trait de séparation horizontal}}}
Il est très simple d'insérer un trait de séparation horizontal sur toute la largeur du texte: il suffit de placer une ligne ne contenant qu'une succession d'au moins quatre tirets, ainsi:
<cadre>----</cadre>
donne:
<quote>
----
</quote>

74
aide/fr/raccourcis/tableau.spip

@ -0,0 +1,74 @@
<!-- ig br -->
Pour réaliser des tableaux très simples dans SPIP, il
suffit de faire des lignes dont les «cases» sont
séparées par le symbole «<HTML>|</HTML>»
({pipe}, un trait vertical), lignes commençant et se terminant
par des traits verticaux. Il est impératif de laisser des
lignes vides avant et après ce tableau.
Par exemple, le tableau:
| {{Nom}} | {{Prénom}} | {{Age}} |
| Marso | Ben | 23 ans |
| Capitaine | | non connu |
| Philant | Philippe | 46 ans |
| Cadoc | Bébé | 4 mois |
se code ainsi:
<cadre>
| {{Nom}} | {{Prénom}} | {{Age}} |
| Marso | Ben | 23 ans |
| Capitaine | | non connu |
| Philant | Philippe | 46 ans |
| Cadoc | Bébé | 4 mois |
</cadre>
Remarquez que toutes les entrées de la première ligne sont placées en gras. SPIP identifie ainsi
qu'il s'agit d'une page d'entête, et lui attribue une présentation différente des autres lignes (fond de couleur
différente). La présence d'une telle ligne n'est pas obligatoire.
On peut aussi ajouter une légende et un résumé à la table. Ces deux informations sont optionnelles mais sont très importantes pour rendre la table accessible aux mal-voyants, le résumé donnant une meilleure idée du contenu de la table.
_ Ces informations sont spécifiées entre double trait vertical avant la table comme ceci:
<cadre>
||Légende|Résumé||
| {{Nom}} | {{Date de naissance}} | {{Ville}} |
| Jacques | 5/10/1970 | Paris |
| Claire | 12/2/1975 | Belfort |
| Martin | 1/31/1957 | Nice |
| Marie | 23/12/1948 | Perpignan |
</cadre>
et apparaitront comme cela:
||Légende|Résumé||
| {{Nom}} | {{Date de naissance}} | {{Ville}} |
| Jacques | 5/10/1970 | Paris |
| Claire | 12/2/1975 | Belfort |
| Martin | 1/31/1957 | Nice |
| Marie | 23/12/1948 | Perpignan |
On peut ne pas spécifier l'une ou l'autre des informations, mais il faut bien penser à mettre un trait vertical simple devant le résumé si vous ne spécifiez que celui-ci : <code>|| | résumé ||</code>
Il est également possible de fusionner une case avec d'autres, en réduisant son contenu à <code>|<|</code> pour la fusionner avec la case qui la précède horizontalement ; ou à <code>|^|</code> pour la fusionner avec la case qui la précède verticalement.
<cadre>
||Tableau avec fusion| Raccourci de fusion||
| {{Colonne 1}} | {{Colonne 2}} | {{Colonne 3}} |
| Ligne 1 | L1C2 et L1C3 |<|
| Ligne 2 | L2C2 et L3C2|L2C3|
| Ligne 3 |^| L3C3 |
</cadre>
donnera
||Tableau avec fusion| Raccourci de fusion||
| {{Colonne 1}} | {{Colonne 2}} | {{Colonne 3}} |
| Ligne 1 | L1C2 et L1C3 |<|
| Ligne 2 | L2C2 et L3C2|L2C3|
| Ligne 3 |^| L3C3 |

9
aide_options.php

@ -1,9 +0,0 @@
<?php
/**
* Définition du serveur d'aide par défaut
*
* @package SPIP\Aide\Options
*/
$GLOBALS['help_server'] = array('https://www.spip.net/aide');

312
inc/aide.php

@ -31,40 +31,22 @@ if (!defined('_ECRIRE_INC_VERSION')) {
include_spip('inc/filtres');
$GLOBALS['aider_index'] = array(
'editer_article.html' => array(
'surtitre' => 'arttitre',
'titre' => 'arttitre',
'soustitre' => 'arttitre',
'id_parent' => 'artrub',
'descriptif' => 'artdesc',
'virtuel' => 'artvirt',
'chapo' => 'arttitre',
'text_area' => 'arttexte'
),
'editer_breve.html' => array(
'id_parent' => 'brevesrub',
'lien_titre' => 'breveslien',
'statut' => 'brevesstatut'
),
'editer_groupe_mot.html' => array(
'titre' => 'motsgroupes'
),
'editer_mot.html' => array(
'titre' => 'mots',
'id_groupe' => 'motsgroupes'
),
'editer_rubrique.html' => array(
'titre' => 'arttitre',
'id_parent' => 'rubrub',
'text_area' => 'raccourcis'
)
);
/**
* Déclaration de l'index d'aide
*/
function aide_index() : array {
static $index = null;
if ($index === null) {
$index = [];
$index['raccourcis'] = [
'simple', 'lien', 'note', 'citation',
'tableau', 'liste', 'glossaire', 'ancre'
];
$index = pipeline('aide_index', $index);
}
return $index;
}
/**
@ -73,37 +55,30 @@ $GLOBALS['aider_index'] = array(
* @uses aider_icone()
*
* @param string $aide
* clé d'identification de l'aide souhaitée
* @param string $skel
* Nom du squelette qui appelle ce bouton d'aide
* @param array $env
* Environnement du squelette
* @param bool $aide_spip_directe
* false : Le lien généré est relatif à notre site (par défaut)
* true : Le lien est réalisé sur spip.net/aide/ directement...
* clé d'identification du groupe d'aide souhaité. Peut indiquer une entrée spécifique.
* Tel que 'raccourcis' ou 'raccourcis/liens'
* @return string
* icone et lien…
* vide si on ne trouve pas le groupe d'aide demandé.
**/
function inc_aide_dist($aide = '', $skel = '', $env = array(), $aide_spip_directe = false) {
function inc_aide_dist($aide = '') : string {
$index = aide_index();
if (!$aide) {
// pour le moment rien sur entrée vide...
return "";
}
if (($skel = basename($skel))
and isset($GLOBALS['aider_index'][$skel])
and isset($GLOBALS['aider_index'][$skel][$aide])
) {
$aide = $GLOBALS['aider_index'][$skel][$aide];
$aide = explode('/', $aide, 2);
$groupe = array_shift($aide);
$entree = $aide ? reset($aide) : '';
if (!isset($index[$groupe])) {
return "";
}
if ($aide_spip_directe) {
// on suppose que spip.net est le premier present
// dans la liste des serveurs. C'est forcement le cas
// a l'installation tout du moins
$help_server = $GLOBALS['help_server'];
$url = array_shift($help_server) . '/';
$url = parametre_url($url, 'exec', 'aide');
$url = parametre_url($url, 'aide', $aide);
$url = parametre_url($url, 'var_lang', $GLOBALS['spip_lang']);
} else {
$args = "aide=$aide&var_lang=" . $GLOBALS['spip_lang'];
$url = generer_url_ecrire('aide', $args);
$url = generer_url_ecrire('aide');
$url = parametre_url($url, 'aide', $groupe, '&');
if ($entree) {
$url = parametre_url($url, 'entree', $entree, '&');
}
return aider_icone($url);
@ -141,180 +116,77 @@ function aider_icone($url, $clic = '') {
. '</a>';
}
/** Les sections d'un fichier aide sont reperées ainsi. */
define('_SECTIONS_AIDE', ',<h([12])(?:\s+class="spip")?' . '>([^/]+?)(?:/(.+?))?</h\1>,ism');
/**
* Création des fichiers de l'aide de SPIP
*
* @uses _DIR_AIDE
* @uses _SECTIONS_AIDE
*
* @uses copie_locale()
* @uses aide_fixe_img()
* @uses aide_section()
*
* @param string $path
* @param array $help_server
* @return array
*/
function aide_fichier($path, $help_server) {
$md5 = md5(serialize($help_server));
$fichier_aide = _DIR_AIDE . substr($md5, 0, 16) . '-' . $path;
$lastm = @filemtime($fichier_aide);
$lastversion = @filemtime(_DIR_RESTREINT . 'inc_version.php');
$here = @(is_readable($fichier_aide) and ($lastm >= $lastversion));
$contenu = '';
if ($here) {
lire_fichier($fichier_aide, $contenu);
return array($contenu, $lastm);
}
// mettre en cache (tant pis si echec)
sous_repertoire(_DIR_AIDE, '', '', true);
$contenu = array();
include_spip('inc/distant');
foreach ($help_server as $k => $server) {
// Remplacer les liens aux images par leur gestionnaire de cache
$url = "$server/$path";
$local = _DIR_AIDE . substr(md5($url), 0, 8) . '-' . preg_replace(',[^\w.]+,i', '_', $url);
$local = _DIR_RACINE . copie_locale($url, 'modif', $local);
lire_fichier($local, $page);
$page = aide_fixe_img($page, $server);
// les liens internes ne doivent pas etre deguises en externes
$url = parse_url($url);
$re = '@(<a\b[^>]*\s+href=["\'])' .
'(?:' . $url['scheme'] . '://' . $url['host'] . ')?' .
$url['path'] . '([^"\']*)@ims';
$page = preg_replace($re, '\\1\\2', $page);
preg_match_all(_SECTIONS_AIDE, $page, $sections, PREG_SET_ORDER);
// Fusionner les aides ayant meme nom de section
$vus = array();
foreach ($sections as $section) {
list($tout, $prof, $sujet, ) = $section;
if (in_array($sujet, $vus)) {
continue;
}
$corps = aide_section($sujet, $page, $prof);
foreach ($contenu as $k => $s) {
if ($sujet == $k) {
// Section deja vue qu'il faut completer
// Si le complement a des sous-sections,
// ne pas en tenir compte quand on les rencontrera
// lors des prochains passages dans la boucle
preg_match_all(_SECTIONS_AIDE, $corps, $s, PREG_PATTERN_ORDER);
if ($s) {
$vus = array_merge($vus, $s[2]);
}
$contenu[$k] .= $corps;
$corps = '';
break;
}
}
// Si totalement nouveau, inserer le titre
// mais pas le corps s'il contient des sous-sections:
// elles vont venir dans les passages suivants
if ($corps) {
$corps = aide_section($sujet, $page);
$contenu[$sujet] = $tout . "\n" . $corps;
}
// Affichage du menu de gauche avec analyse de la section demandee
function aide_data(string $groupe) : array {
static $menu = [];
if (!isset($menu[$groupe])) {
include_spip('inc/aide');
$index = aide_index();
$entrees = $index[$groupe] ?? null;
if ($entrees === null) {
// le groupe est introuvable…
return $menu[$groupe] = [];
}
$menu[$groupe] = [
'titre' => _T('aide:' . $groupe),
'intro' => aide_contenu($groupe, '_intro'),
'entrees' => [],
];
foreach ($entrees as $entree) {
$menu[$groupe]['entrees'][] = [
'titre' => _T('aide:' . $groupe . '_' . $entree),
'groupe' => $menu[$groupe]['titre'],
'texte' => aide_contenu($groupe, $entree),
];
}
}
$contenu = '<div>' . join('', $contenu) . '</div>';
// Renvoyer les liens vraiment externes dans une autre fenetre
$contenu = preg_replace(
'@<a href="(http://[^"]+)"([^>]*)>@',
'<a href="\\1"\\2 target="_blank">',
$contenu
);
// Correction typo dans la langue demandee
#changer_typo($lang_aide);
$contenu = '<body>' . $contenu . '</body>';
if (strlen($contenu) <= 100) {
return array(false, false);
}
ecrire_fichier($fichier_aide, $contenu);
return array($contenu, time());
}
/**
* Générer l'url des images de l'aide
*
* @param string|array $args
* Arguments à transmettre à l'URL :
* - string : tel que `arg1=yy&arg2=zz`
* - array : tel que `array( arg1 => yy, arg2 => zz )`
* @return string
* URL
*/
function generer_url_aide_img($args) {
return generer_url_action('aide_img', $args, false, true);
return $menu[$groupe];
}
/** Les aides non mises à jour ont un vieux Path à remplacer
*
* @note (mais ce serait bien de le faire en SQL une bonne fois)
*/
define('_REPLACE_IMG_PACK', "@(<img([^<>]* +)?\s*src=['\"])img_pack\/@ims");
/**
* Remplacer les URL des images par l'URL du gestionnaire de cache local
*
* @uses _REPLACE_IMG_PACK
* @uses _DIR_IMG_PACK
*
* @param string $contenu
* @param string $server
* @return string
* Retrouve le contenu d'une aide demandée
*/
function aide_fixe_img($contenu, $server) {
$html = '';
$re = "@(<img([^<>]* +)?\s*src=['\"])((AIDE|IMG|local)/([-_a-zA-Z0-9]*/?)([^'\"<>]*))@imsS";
while (preg_match($re, $contenu, $r)) {
$p = strpos($contenu, $r[0]);
$i = $server . '/' . $r[3];
$html .= substr($contenu, 0, $p) . $r[1] . $i;
$contenu = substr($contenu, $p + strlen($r[0]));
function aide_contenu(string $groupe, string $entree) : string {
$langues = aide_langues();
foreach ($langues as $lang) {
$aide_entree = find_in_path("aide/$lang/$groupe/$entree.spip");
if ($aide_entree) {
lire_fichier($aide_entree, $content);
return $content;
}
}
$html .= $contenu;
// traiter les vieilles doc
return preg_replace(_REPLACE_IMG_PACK, "\\1" . _DIR_IMG_PACK, $html);
return '';
}
/**
* Extraire une section d'aide
*
* Extraire la seule section demandée, qui commence par son nom entourée d'une
* balise h2 et se termine par la prochaine balise h2 ou h1 ou le /body final.
*
* @param string $aide
* Titre de la section d'aide
* @param string $contenu
* @param int $prof
* Dans quel hn doit-on mettre le titre de section
* @return string
* Retourne la liste des langues dans laquelle une aide est cherchée
* On part par défaut de spip_lang
*
* pt_br => pt => langue_du_site => langue_par_defaut => fr
*/
function aide_section($aide, $contenu, $prof = 2) {
$maxprof = ($prof >= 2) ? '12' : '1';
$r = "@<h$prof" . '(?: class="spip")?' . '>\s*' . $aide
. "\s*(?:/.+?)?</h$prof>(.*?)<(?:(?:h[$maxprof])|/body)@ism";
if (preg_match($r, $contenu, $m)) {
return $m[1];
function aide_langues($lang = null) : array {
if ($lang === null) {
$lang = $GLOBALS['spip_lang'];
}
static $langues = [];
if (!isset($langues[$lang])) {
$_langues = [$lang];
if (strpos($lang, '_') !== false) {
$l = explode('_', $lang);
while (count($l) > 1) {
array_pop($l);
$_langues[] = implode('_', $l);
}
}
# spip_log("aide inconnue $r dans " . substr($contenu, 0, 150));
return '';
}
$_langues[] = $GLOBALS['meta']['langue_site'];
$_langues[] = _LANGUE_PAR_DEFAUT;
$_langues[] = 'fr';
$_langues = array_unique($_langues);
$langues[$lang] = $_langues;
}
return $langues[$lang];
}

15
lang/aide_fr.php

@ -0,0 +1,15 @@
<?php
$GLOBALS[$GLOBALS['idx_lang']] = array(
'raccourcis' => 'Raccourcis typographiques',
'raccourcis_ancre' => 'Ancres nommées',
'raccourcis_citation' => 'Citations',
'raccourcis_code' => 'Code informatique',
'raccourcis_glossaire' => 'Glossaire externe',
'raccourcis_lien' => 'Liens hypertextes',
'raccourcis_liste' => 'Listes et énumérations',
'raccourcis_note' => 'Notes de bas de page',
'raccourcis_simple' => 'Mise en forme simple',
'raccourcis_tableau' => 'Tableaux',
);

7
paquet.xml

@ -1,8 +1,8 @@
<paquet
prefix="aide"
categorie="divers"
version="1.1.0"
etat="stable"
version="2.0.0"
etat="dev"
compatibilite="[3.3.0-dev;3.3.*]"
logo="aide-logo.svg"
>
@ -13,4 +13,7 @@
<auteur>Collectif SPIP</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL</licence>
<pipeline nom="aide_index" inclure="aide_fonctions.php" action="" />
</paquet>

86
prive/squelettes/contenu/aide.html

@ -1,45 +1,49 @@
<div style="float:#LANG_LEFT;width:200px;">
#SET{close,''}
#SET{prev,''}
#SET{next,''}
<ul>
<BOUCLE_menu(DATA){source tableau,#ENV{aide}|aide_menu}>
[(#VALEUR{1}|=={1}|oui)
#GET**{close}
<div class='liste'><h3>[(#VALEUR{2})]</h3>
<ul class="liste-items">
#SET{close,'</ul></div>'}
][(#VALEUR{1}|=={2}|oui)
[(#GET{next}|=={next}|oui)#SET{next,#VALEUR}]
<li class="item[(#VALEUR{2}|=={#ENV{aide}}|oui)on#SET{next,next}]"><a
onclick="jQuery(this).closest('#cboxLoadedContent').scrollTop(0);"
href='[(#SELF|parametre_url{aide,#VALEUR{2}})]#contenu-aide' class="ajax">[(#VALEUR{3})]</a></li>
[(#GET{next}|non)#SET{prev,#VALEUR}]
]
</BOUCLE_menu>
#GET**{close}
</ul>
</div>
[(#GET{next}|non)#SET{prev,''}]
<div class="contenu-aide" id="contenu-aide" lang="[(#EVAL{_request('var_lang_r')}|aide_changer_langue{#ENV{lang_r}})]" style="position:relative;margin-#LANG_LEFT:220px;">
[(#ENV{aide}|aide_extrait_section|image_reduire{500}|sinon{
[<div style='text-align:center;'>
(#CHEMIN_IMAGE{logo-spip.png}|balise_img{SPIP})
<p style='font-variant: small-caps;'>
Syst&egrave;me de publication pour l'Internet
</p>
<style>
.aide_conteneur {
display: flex;
}
.aide_menu {
flex: 0 0 20%;
min-width: 100px;
padding: var(--spip-spacing-y) var(--spip-spacing-x);
}
.aide_contenu {
padding: var(--spip-spacing-y) var(--spip-spacing-x);
}
</style>
<div class="aide_conteneur">
#SET{data,#ENV{aide}|aide_data}
[(#GET{data}|oui)
<div class="aide_menu">
<h3>#GET{data/titre}</h3>
<div class="navigation">
<ul class="liste_items sous_navigation">
<BOUCLE_menu_entrees(DATA){source tableau, #GET{data/entrees}}>
<li class='item[ (#ENV{entree}|=={#CLE})on]'>
<a href='#aide-#GROUPE-#CLE' class="ajax">#TITRE</a>
</li>
</BOUCLE_menu_entrees>
</ul>
</div>
<p style='text-align:center;'>
#SET{doc,#EVAL{$GLOBALS}|table_valeur{home_server}|concat{/,#EVAL{$GLOBALS}|table_valeur{spip_lang}}}
<:info_copyright_doc{spipnet=#GET{doc},spipnet_affiche=#GET{doc}}:>
</p>]
})]
<p>
[<a onclick="jQuery(this).closest('#cboxLoadedContent').scrollTop(0);"
href="[(#SELF|parametre_url{aide,#GET{prev}|table_valeur{2}})]#contenu-aide" class="ajax">&lt; (#GET{prev}|table_valeur{3})</a> | ]
[<a onclick="jQuery(this).closest('#cboxLoadedContent').scrollTop(0);"
href="[(#SELF|parametre_url{aide,#GET{next}|table_valeur{2}})]#contenu-aide" class="ajax">(#GET{next}|table_valeur{3}) &gt;</a>]
</p>
</div>
<div class="aide_contenu">
<h1>#GET{data/titre}</h1>
[<div class="introduction">(#GET{data/intro}|propre)</div>]
<BOUCLE_content_entrees(DATA){source tableau, #GET{data/entrees}}>
<div id="aide-#GROUPE-#CLE"></div>
#BOITE_OUVRIR{#TITRE,simple}
[<div class="texte">(#TEXTE)</div>]
[<div class="notes">(#NOTES)</div>]
#BOITE_FERMER
</BOUCLE_content_entrees>
</div>
</div>
]
</div>

117
prive/squelettes/contenu/aide_fonctions.php

@ -4,119 +4,4 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function aide_changer_langue($var_lang_r, $lang_r) {
if ($var_lang_r) {
changer_langue($lang = $var_lang_r);
}
if ($lang_r) {
# pour le cas ou on a fait appel au menu de changement de langue
# (aide absente dans la langue x)
changer_langue($lang = $lang_r);
} else {
$lang = $GLOBALS['spip_lang'];
}
return $lang;
}
function aide_contenu() {
static $contenu = null;
if ($contenu) {
return $contenu;
}
global $help_server;
if (!is_array($help_server)) {
$help_server = array($help_server);
}
$path = $GLOBALS['spip_lang'] . '-aide.html';
include_spip('inc/aide');
list($contenu, $lastm) = aide_fichier($path, $help_server);
if (strpos($contenu, 'aide_index') !== false) {
$contenu = preg_replace(",target=['\"][^'\"]*['\"],Uims", "class='ajax'", $contenu);
$contenu = str_replace('aide_index', 'aide', $contenu);
}
return $contenu;
}
function aide_extrait_section($aide) {
include_spip('inc/aide');
return aide_section($aide, aide_contenu());
}
/*
function aide_cache_image($help_server, $cache, $rep, $lang, $file, $ext) {
if ($rep=="IMG" AND $lang=="cache"
AND @file_exists($img = _DIR_VAR.'cache-TeX/'.preg_replace(',^TeX-,', '', $file))) {
return $img;
}
else if (@file_exists($img = _DIR_AIDE . $cache)) {
return $img;
}
else if (@file_exists($img = _DIR_RACINE . 'AIDE/aide-'.$cache)) {
return $img;
}
else {
include_spip('inc/distant');
sous_repertoire(_DIR_AIDE,'','',true);
$img = "$help_server/$rep/$lang/$file";
recuperer_page($img,$f=_DIR_AIDE . $cache);
return $f;
}
}
*/
// Affichage du menu de gauche avec analyse de la section demandee
// afin d'ouvrir le sous-menu correspondant a l'affichage a droite
// https://code.spip.net/@help_menu_rubrique
function aide_menu($aide) {
$contenu = aide_contenu();
preg_match_all(_SECTIONS_AIDE, $contenu, $sections, PREG_SET_ORDER);
return $sections;
global $spip_lang;
$afficher = false;
$ligne = $numrub = 0;
$texte = $res = '';
foreach ($sections as $section) {
list(, $prof, $sujet, $bloc) = $section;
if ($prof == '1') {
if ($afficher && $texte) {
$res .= block_parfois_visible("block$numrub", "<div class='rubrique'>$titre</div>", "\n$texte", '', $ouvrir);
}
$afficher = $bloc ? ($bloc == 'redac') : true;
$texte = '';
if ($afficher) {
$numrub++;
$ouvrir = 0;
$titre = $sujet;
}
} else {
++$ligne;
$id = "ligne$ligne";
if ($aide == $sujet) {
$ouvrir = 1;
$class = 'article-actif';
$texte .= http_script("curr_article = '$id';");
} else {
$class = 'article-inactif';
}
$h = generer_url_aide("aide=$sujet&frame=body&var_lang=$spip_lang");
$texte .= "<a class='$class' target='droite' id='$id' href='$h' onclick=\"activer_article('$id');return true;\">"
. $bloc
. "</a><br style='clear:both;' />\n";
}
}
if ($afficher && $texte) {
$res .= block_parfois_visible("block$numrub", "<div class='rubrique'>$titre</div>", "\n$texte", '', $ouvrir);
}
return $res;
}
include_spip('inc/aide');

Loading…
Cancel
Save