Compare commits

...

No commits in common. 'master' and 'v0' have entirely different histories.
master ... v0

  1. 19
      .gitattributes
  2. 7
      CHANGELOG.md
  3. 0
      formulaires/configurer_inserer_modeles.html
  4. 32
      formulaires/configurer_inserer_modeles.php
  5. 63
      formulaires/inserer_modeles.html
  6. 251
      formulaires/inserer_modeles.php
  7. BIN
      icones_barre/inserer_modeles.png
  8. BIN
      images/inserer_modeles-24.png
  9. BIN
      images/inserer_modeles-32.png
  10. BIN
      images/inserer_modeles-48.png
  11. BIN
      images/inserer_modeles-96.png
  12. 195
      inc/inserer_modeles.php
  13. 3
      inclure/inserer_modeles.html
  14. 1
      inserer_modeles.html
  15. 259
      inserer_modeles_pipelines.php
  16. 6
      javascript/autosize.min.js
  17. 19
      lang/inserer_modeles.xml
  18. 61
      lang/inserer_modeles_en.php
  19. 77
      lang/inserer_modeles_fr.php
  20. 50
      lang/inserer_modeles_nl.php
  21. 15
      lang/paquet-inserer_modeles.xml
  22. 15
      lang/paquet-inserer_modeles_en.php
  23. 13
      lang/paquet-inserer_modeles_fr.php
  24. 15
      lang/paquet-inserer_modeles_nl.php
  25. 612
      modalbox/jquery.simplemodal-1.3.3.js
  26. BIN
      modalbox/modal_closebox.png
  27. 34
      modalbox/modalbox.js
  28. 16
      modalbox/modalbox_pipelines.php
  29. 51
      modalbox/style_prive_plugin_modalbox.html
  30. 76
      modeles/media.yaml
  31. 32
      paquet.xml
  32. 38
      plugin.xml
  33. 7
      prive/squelettes/contenu/configurer_inserer_modeles.html
  34. 19
      prive/style_prive_plugin_inserer_modeles.html
  35. 1
      prive/themes/spip/images/modele-add-24.svg
  36. 1
      prive/themes/spip/images/modele-xx.svg

19
.gitattributes vendored

@ -0,0 +1,19 @@
* text=auto !eol
formulaires/inserer_modeles.html -text
formulaires/inserer_modeles.php -text
icones_barre/inserer_modeles.png -text
images/inserer_modeles-24.png -text
images/inserer_modeles-32.png -text
images/inserer_modeles-48.png -text
images/inserer_modeles-96.png -text
inc/inserer_modeles.php -text
inclure/inserer_modeles.html -text
/inserer_modeles_pipelines.php -text
lang/inserer_modeles_fr.php -text
modalbox/jquery.simplemodal-1.3.3.js -text
modalbox/modal_closebox.png -text
modalbox/modalbox.js -text
modalbox/modalbox_pipelines.php -text
modalbox/style_prive_plugin_modalbox.html -text
/plugin.xml -text
saisies/param_modele.html -text

7
CHANGELOG.md

@ -1,7 +0,0 @@
# CHANGELOG
## [2.0.2] - 2022-11-20
### Fixed
- #13 : exclure également de la barre d'outils les modèles désactivés dans la config/en pipeline

0
formulaires/configurer_inserer_modeles.html

32
formulaires/configurer_inserer_modeles.php

@ -1,32 +0,0 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_configurer_inserer_modeles_saisies_dist() {
include_spip('inc/inserer_modeles');
$modeles_dispo = inserer_modeles_lister_formulaires_modeles();
$modeles_dispo = array_map(function($n) {
return $n['nom'];
},$modeles_dispo);
return array(
array(
'saisie' => 'choisir_objets',
'options' => array(
'nom' => 'objets',
'label' => _T('inserer_modeles:choix_objets_editable'),
'defaut' => array('spip_articles', 'spip_rubriques', 'spip_breves', 'spip_mots'),
'explication' => _T('inserer_modeles:choix_objets_editable_explication'),
)
),
array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'ignorer_modeles',
'label' => _T('inserer_modeles:ignorer_modeles'),
'data' => $modeles_dispo
)
)
);
}

63
formulaires/inserer_modeles.html

@ -1,59 +1,52 @@
<div class="ajax formulaire_spip formulaire_configurer formulaire_inserer_modeles">
<div class="formulaire_spip formulaire_inserer_modeles">
[(#ENV{formulaire_modele}|non)<h3 class="titrem">
<img src="[(#CHEMIN_IMAGE{modele-add-24.svg}|url_absolue)]" class="cadre-icone" />
[(#CHEMIN{images/inserer_modeles-24.png}|image_reduire{24}|inserer_attribut{class, 'cadre-icone'}|inserer_attribut{alt, ''}|liens_absolus)]
<:inserer_modeles:titre_inserer_modeles:>
</h3>]
[(#ENV{formulaire_modele}|oui)<h3 class="titrem">
[(#ENV{icone_barre}|balise_img|liens_absolus)&nbsp;]<:inserer_modeles:titre_inserer{modele=#ENV{_nom}}:>
[(#CHEMIN{#ENV{logo}}|image_reduire{24}|inserer_attribut{class, 'cadre-icone'}|liens_absolus)]
<:inserer_modeles:titre_inserer{modele=#ENV{_nom}}:>
</h3>]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form action="#ENV{action}" method="post"><div>
#ACTION_FORMULAIRE{#ENV{action}}
<BOUCLE_deja_choisi(CONDITION){si #ENV{formulaire_modele}}>
[<textarea readonly="readonly" class="code_modele" id="code_modele[(#ENV{modalbox}|?{'_modalbox',''})]"[ (#ENV{_code_modele}|et{#ENV{_js_inserer_code}}|oui)ondblclick="#ENV**{_js_inserer_code}"]>(#ENV{_code_modele})</textarea>]
<script>$(document).ready(function(){ autosize($('#code_modele')); });</script>
[(#REM) Insertion du code dans le texte après validation ]
[(#ENV{_code_modele}|et{#ENV{modalbox}|=={oui}}|oui)
<script>$(document).ready(function(){
[(#ENV{modalbox}|oui)
var code_modele = $("#code_modele_modalbox").text(); [(#REM) On distingue #code_modele (colonne de gauche) de #code_modele_modalbox pour car les deux peuvent exister.]
if (code_modele != '') {
parent.$.markItUp( { replaceWith: code_modele } );
jQuery.modalboxclose();
}
]
[(#ENV{modalbox}|non)
[(#ENV**{_js_inserer_code})]
]
});</script>
]
[<textarea readonly="readonly" id="code_modele" >(#ENV**{_code_modele})</textarea>]
[(#REM) Si on appelle depuis le porte-plume on renvoie le code au porte-plume ]
[(#ENV{modalbox}|et{#ENV{_code_modele}}|oui)<script>
$(document).ready(function(){
var code_modele = $("#code_modele").text();
if (code_modele != '') {
parent.$.markItUp( { replaceWith: code_modele } );
jQuery.modalboxclose();
}
});
</script>]
<input type="hidden" name="formulaire_modele" value="#ENV{formulaire_modele}" />
<div class="editer-groupe">
<ul>
#GENERER_SAISIES{#ENV{_saisies}}
</div>
</ul>
<p class="boutons">
<button type="submit" class="submit" name="inserer" value="1"><:inserer_modeles:bouton_inserer:></button>
[(#ENV{ne_pas_afficher_bouton_annuler}|non)<button type="submit" class="submit" value="1" name="annuler" formnovalidate><:bouton_annuler:></button>]
<input type="submit" class="submit" name="inserer" value="<:inserer_modeles:bouton_inserer:>" />
[(#ENV{ne_pas_afficher_bouton_annuler}|non)<input type="submit" class="submit link" name="annuler" value="<:bouton_annuler:>" />]
</p>
</BOUCLE_deja_choisi>
<B_choix>
<strong><:inserer_modeles:choisir_modele:></strong>
<div class="editer-groupe">
<div class="editer">
<ul>
<BOUCLE_choix(POUR){tableau #ENV{_liste_formulaires_modeles}}{par valeur}>
<div class="choix modele">
#SET{id,#CLE|concat{#ENV{modalbox}|?{'_modalbox',''}}}
<input type="radio" class="radio" name="formulaire_modele" id="#GET{id}" value="#CLE" />
<label for="#GET{id}">[(#VALEUR|table_valeur{icone_barre}|balise_img|liens_absolus)&nbsp;][(#VALEUR|table_valeur{nom})]</label>
</div>
<li class="choix">
[(#CHEMIN{#VALEUR|table_valeur{logo}}|image_reduire{24}|inserer_attribut{'alt',''}|liens_absolus)]
<input type="radio" class="radio" name="formulaire_modele" id="#CLE" value="#CLE" style="vertical-align:top;" />
<label for="#CLE">[(#VALEUR|table_valeur{nom}|_T_ou_typo)]</label>
</li>
</BOUCLE_choix>
</div>
</div>
</ul>
<p class="boutons">
<button type="submit" class="submit" name="choisir" value="1" ><:inserer_modeles:bouton_choisir:></button>
<input type="submit" class="submit" name="choisir" value="<:inserer_modeles:bouton_choisir:>" />
</p>
</B_choix>
<//B_deja_choisi>
</div></form>
</div>
</div>

251
formulaires/inserer_modeles.php

@ -1,139 +1,112 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_inserer_modeles_charger_dist($formulaire_modele, $modalbox, $env) {
include_spip('inc/inserer_modeles');
$env = unserialize($env);
$contexte = array();
// Toujours transmettre les id_(article/rubrique/breve...), et les garder en _request pour pouvoir s'en servir après dans l'interprétation du .yaml
foreach ($env as $var => $val) {
if (substr($var, 0, 3) == 'id_' && is_numeric($val)) {
$contexte[$var] = $val;
set_request($var, $val);
}
}
if ((!_request('formulaire_modele') && $formulaire_modele=='') || _request('annuler')) {
$modeles_dispo = inserer_modeles_lister_formulaires_modeles(true);
$contexte['_liste_formulaires_modeles'] = $modeles_dispo;
} else {
if ($formulaire_modele != '') {
$contexte['ne_pas_afficher_bouton_annuler'] = 'on';
}
if ($formulaire_modele == '') {
$formulaire_modele = _request('formulaire_modele');
}
$infos_modele = charger_infos_formulaire_modele($formulaire_modele);
include_spip('inc/saisies');
$champs_saisies = saisies_charger_champs($infos_modele['parametres']);
// On charge les valeurs éventuellement passées par l'url
foreach ($champs_saisies as $champ => $val) {
if (_request($champ)) {
$champs_saisies[$champ] = _request($champ);
}
}
$contexte = array_merge($contexte, $champs_saisies);
$contexte['formulaire_modele'] = $formulaire_modele;
$contexte['_nom'] = _T_ou_typo($infos_modele['nom']);
if (isset($infos_modele['icone_barre'])) {
$contexte['icone_barre'] = inserer_modeles_find_icone_barre_path($infos_modele['icone_barre']);
}
$contexte['_saisies'] = $infos_modele['parametres'];
if (_request('_code_modele')) {
$contexte['_code_modele'] = _request('_code_modele');
}
if (_request('_js_inserer_code')) {
$contexte['_js_inserer_code'] = _request('_js_inserer_code');
}
}
if ($modalbox!='') {
$contexte['modalbox'] = 'oui';
}
return $contexte;
}
function formulaires_inserer_modeles_verifier_dist($formulaire_modele, $modalbox, $env) {
$erreurs = array();
if (_request('choisir') && !_request('formulaire_modele')) {
$erreurs['message_erreur'] = _T('inserer_modeles:erreur_choix_modele');
}
if (_request('inserer')) {
$env = unserialize($env);
include_spip('inc/saisies');
include_spip('inc/inserer_modeles');
$infos = charger_infos_formulaire_modele(_request('formulaire_modele'));
$erreurs = saisies_verifier($infos['parametres']);
}
return $erreurs;
}
function formulaires_inserer_modeles_traiter_dist($formulaire_modele, $modalbox, $env) {
if (_request('inserer')) {
$env = unserialize($env);
include_spip('inc/saisies');
include_spip('inc/inserer_modeles');
$infos = charger_infos_formulaire_modele(_request('formulaire_modele'));
$champs = saisies_lister_champs($infos['parametres'], false);
if (isset($infos['traiter'])) {
$f = charger_fonction($infos['traiter'], 'formulaires', true);
} else {
$f=false;
}
if ($f) {
$code = $f($champs);
} else {
$code = '<'._request('modele');
$has_id = false;
if (_request('id_modele') && _request('id_modele') != '') {
$code .= _request('id_modele');
$has_id = true;
}
if (_request('variante') && _request('variante') != '') {
$code .= '|'._request('variante');
}
if (_request('classe') && _request('classe') != '') {
$code .= '|'._request('classe');
}
if (_request('align') && _request('align') != '') {
$code .= '|'._request('align');
}
foreach ($champs as $champ) {
if ($champ != 'modele' && $champ != 'variante' && $champ != 'classe' && $champ != 'id_modele' && $champ != 'align' && _request($champ) && _request($champ) != '') {
if ($champ == _request($champ)) {
$code .= "|$champ";
} elseif (is_array(_request($champ))) {
// On transforme les tableaux en une liste
$code .= "|$champ=".implode(',', _request($champ));
} else {
$code .= "|$champ="._request($champ);
}
}
}
// si aucun numéro ou paramètre, il faut un | pour que le modèle soit pris en compte
if (!$has_id and strpos($code, '|') === false) {
$code .= '|';
}
$code .= '>';
}
set_request('_code_modele', $code);
// Dans la colonne de gauche, on ne peut pas presupposer du champs dans lequel on veut inserer
// le modele (chapeau, texte, ps).
// On ne fait donc pas d'insertion automatique.
if ($modalbox != '') {
return array('message_ok' => _T('inserer_modeles:message_code_insere'));
} else {
// js pour inserer la balise dans le texte
$codejs = "barre_inserer('".texte_script($code)."', $('textarea[name=texte]')[0]);";
set_request('_js_inserer_code', $codejs);
return array('message_ok' => _T('inserer_modeles:message_inserer_code'));
}
}
}
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function formulaires_inserer_modeles_charger_dist($id_article,$id_rubrique,$id_breve,$formulaire_modele='',$modalbox='') {
include_spip('inc/inserer_modeles');
$contexte = array();
if ((!_request('formulaire_modele') && $formulaire_modele=='') || _request('annuler')) {
$contexte['_liste_formulaires_modeles'] = inserer_modeles_lister_formulaires_modeles();
} else {
if ($formulaire_modele!='')
$contexte['ne_pas_afficher_bouton_annuler'] = 'on';
if ($formulaire_modele=='')
$formulaire_modele = _request('formulaire_modele');
$infos_modele = charger_infos_formulaire_modele($formulaire_modele);
include_spip('inc/saisies');
$champs_saisies = saisies_charger_champs($infos_modele['parametres']);
// On charge les valeurs éventuellement passées par l'url
foreach($champs_saisies as $champ => $val) {
if (_request($champ))
$champs_saisies[$champ] = _request($champ);
}
$contexte = array_merge($contexte,$champs_saisies);
$contexte['formulaire_modele'] = $formulaire_modele;
$contexte['_nom'] = _T_ou_typo($infos_modele['nom']);
$contexte['logo'] = $infos_modele['logo'];
$contexte['_saisies'] = $infos_modele['parametres'];
if (_request('_code_modele'))
$contexte['_code_modele'] = _request('_code_modele');
}
if (is_numeric($id_article))
$contexte['id_article'] = $id_article;
if (is_numeric($id_rubrique))
$contexte['id_rubrique'] = $id_rubrique;
if (is_numeric($id_breve))
$contexte['id_breve'] = $id_breve;
if ($modalbox!='') {
$contexte['modalbox'] = 'oui';
$_modalbox_retour = url_absolue(generer_url_ecrire('inserer_modeles','',true));
if (substr($formulaire_modele,-5)=='.yaml')
$formulaire_modele = substr($formulaire_modele,0,-5);
$_modalbox_retour = parametre_url($_modalbox_retour,'formulaire_modele',$formulaire_modele,'&');
if (is_numeric($id_article))
$_modalbox_retour = parametre_url($_modalbox_retour,'id_article',$id_article,'&');
if (is_numeric($id_rubrique))
$_modalbox_retour = parametre_url($_modalbox_retour,'id_rubrique',$id_rubrique,'&');
if (is_numeric($id_breve))
$_modalbox_retour = parametre_url($_modalbox_retour,'id_breve',$id_breve,'&');
$contexte['_modalbox_retour'] = $_modalbox_retour;
}
return $contexte;
}
function formulaires_inserer_modeles_verifier_dist() {
$erreurs = array();
if (_request('choisir') && !_request('formulaire_modele'))
$erreurs['message_erreur'] = _T('inserer_modeles:erreur_choix_modele');
if (_request('inserer')) {
include_spip('inc/saisies');
include_spip('inc/inserer_modeles');
$infos = charger_infos_formulaire_modele(_request('formulaire_modele'));
$erreurs = saisies_verifier($infos['parametres']);
}
spip_log("formulaires_inserer_modeles_verifier_dist "._request('id_modele'),"bug");
return $erreurs;
}
function formulaires_inserer_modeles_traiter_dist() {
if (_request('inserer')) {
include_spip('inc/saisies');
include_spip('inc/inserer_modeles');
$infos = charger_infos_formulaire_modele(_request('formulaire_modele'));
$champs = saisies_lister_champs($infos['parametres'],false);
if(isset($infos['traiter']))
$f = charger_fonction($infos['traiter'],'formulaires',true);
else $f=false;
if ($f)
$code = $f($champs);
else {
$code = '<'._request('modele');
if (_request('id_modele') && _request('id_modele')!='')
$code .= _request('id_modele');
if (_request('variante') && _request('variante')!='')
$code .= '|'._request('variante');
if (_request('classe') && _request('classe')!='')
$code .= '|'._request('classe');
if (_request('align') && _request('align')!='')
$code .= '|'._request('align');
foreach ($champs as $champ) {
if($champ != 'modele' && $champ != 'variante' && $champ != 'classe' && $champ != 'id_modele' && $champ != 'align' && _request($champ) && _request($champ)!='') {
if($champ == _request($champ))
$code .= "|$champ";
// On transforme les tableaux en une liste
elseif (is_array(_request($champ)))
$code .= "|$champ=".implode(',',_request($champ));
else
$code .= "|$champ="._request($champ);
}
}
$code .= '>';
}
set_request('_code_modele',$code);
return array('message_ok' => _T('inserer_modeles:message_copier_code'));
}
}
?>

BIN
icones_barre/inserer_modeles.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

BIN
images/inserer_modeles-24.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
images/inserer_modeles-32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
images/inserer_modeles-48.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
images/inserer_modeles-96.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

195
inc/inserer_modeles.php

@ -1,146 +1,49 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/saisies');
/**
* Lister les formulaires de modeles disponibles dans les dossiers modeles/
* les trie par ordre alphabétique de nom
*
* Par défaut retourne les modèles ignorés dans la config,
* on peut optionnellement les exclure.
*
* @staticvar array $liste_formulaires_modeles
* @param bool $exclure_ignores
* pour exclure les modèles ignorés dans la config
* @return array
*/
function inserer_modeles_lister_formulaires_modeles(bool $exclure_ignores = false): array {
static $listes_memoire;
$hash = ($exclure_ignores ? 1 : 0);
if (isset($listes_memoire[$hash])) {
return $listes_memoire[$hash] ?: [];
}
$liste_formulaires_modeles = array();
$match = '[^-]*[.]yaml$';
$liste = find_all_in_path('modeles/', $match);
if (count($liste)) {
include_spip('inc/yaml');
foreach ($liste as $formulaire => $chemin) {
$formulaire = str_replace('.yaml', '', $formulaire);//
$yaml_data = yaml_charger_inclusions(yaml_decode_file($chemin));
if (is_array($yaml_data)) {
$liste_formulaires_modeles[$formulaire] = array(
'nom' => $yaml_data['nom'],
'icone_barre' => isset($yaml_data['icone_barre']) ? inserer_modeles_find_icone_barre_path($yaml_data['icone_barre']) : ''
);
}
}
}
// Traduire les chaines de langues des noms
$liste_formulaires_modeles = array_map(function($valeur) {
$valeur['nom'] = _T_ou_typo($valeur['nom']);
return $valeur;
}, $liste_formulaires_modeles);
// Puis les trier par ordre alphabétique
uasort($liste_formulaires_modeles, function($valeur1, $valeur2) {
if ($valeur1['nom'] > $valeur2['nom']) {
return 1;
} elseif ($valeur1['nom'] == $valeur2['nom']) {
return 0;
} else {
return -1;
}
});
$liste_formulaires_modeles = pipeline('inserer_modeles_lister_formulaires_modeles', $liste_formulaires_modeles);
// Retirer les modèles désactivés dans la config
if ($exclure_ignores === true) {
include_spip('inc/config');
$config_ignorer = lire_config('inserer_modeles/ignorer_modeles') ?? [];
foreach ($config_ignorer as $ignorer) {
unset($liste_formulaires_modeles[$ignorer]);
}
}
$listes_memoire[$hash] = $liste_formulaires_modeles;
return $liste_formulaires_modeles;
}
/**
* Charger les informations d'un formulaire de modele
*
* @staticvar array $infos_formulaires_modeles
* @return array
*/
function charger_infos_formulaire_modele($formulaire) {
static $infos_formulaires_modeles = array();
if (!isset($infos_formulaires_modeles[$formulaire])) {
if (substr($formulaire, -5) != '.yaml') {
$formulaire .= '.yaml';
}
if ($chemin = find_in_path($formulaire, 'modeles/')) {
include_spip('inc/yaml');
$infos_formulaires_modeles[$formulaire] = yaml_charger_inclusions(yaml_decode_file($chemin));
$infos_formulaires_modeles[$formulaire]['parametres'] = inserer_modeles_definir_defaut($infos_formulaires_modeles[$formulaire]['parametres']);
}
}
return $infos_formulaires_modeles[$formulaire];
}
/**
* Lis une description tabulaire des saisies de description d'un modeles
* Cherche les paramètres defaut
* si présent, regarde si appelle à une fonction
* et l'appliquer au options de base
* et cela recursivement aux sous saisies
* @param array $saisies
* @return array()
*/
function inserer_modeles_definir_defaut($saisies) {
foreach ($saisies as &$saisie) {
if (!is_array($saisie)) {
return $tableau;
}
$options = &$saisie['options'];
if (isset($options['defaut']) and strpos($options['defaut'], 'fonction:') === 0) {
$defaut = &$options['defaut'];
$eval = '$defaut = '.str_replace('fonction:', '', $defaut).';';
eval($eval);
}
if (isset($saisie['saisies'])) {
$saisie['saisies'] = inserer_modeles_definir_defaut($saisie['saisies']);
}
}
return $saisies;
}
/**
* Retrouver l'icone :
* - d'abord dans icones_barre
* - sinon dans le thème / images (et du coup on peut jouer avec png/svg)
* - à défaut dans find_in_path
* S'assure que l'icone ne fait pas plus de 16 px, pour tenir dans la barre du porte plume.
* @param string $nom
* @return string chemin
**/
function inserer_modeles_find_icone_barre_path($nom) {
if (!$chemin = find_in_path("icones_barre/$nom")) {
if (!$chemin = find_in_theme("images/$nom")) {
if(!$chemin = find_in_path($nom)) {
return '';
}
}
}
include_spip('inc/filtres');
include_spip('inc/filtres_images_mini');
$chemin = preg_replace('#\?.*$#', '', $chemin);//Au cas où find_in_theme nous return un truc genre gis-xx.svg?16px
return extraire_attribut(image_reduire($chemin, 16), 'src');//On force la reduction à 16px, pour le porteplume
}
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Lister les formulaires de modèles disponibles dans les dossiers modeles/
*
* @staticvar array $liste_formulaires_modeles
* @return array
*/
function inserer_modeles_lister_formulaires_modeles(){
static $liste_formulaires_modeles = false;
if ($liste_formulaires_modeles === false) {
$liste_formulaires_modeles = array();
$match = "[^-]*[.]yaml$";
$liste = find_all_in_path('modeles/', $match);
if (count($liste)){
include_spip('inc/yaml');
foreach($liste as $formulaire => $chemin)
$liste_formulaires_modeles[$formulaire] = yaml_charger_inclusions(yaml_decode_file($chemin));
}
}
return $liste_formulaires_modeles;
}
/**
* Charger les informations d'un formulaire de modele
*
* @staticvar array $infos_formulaires_modeles
* @return array
*/
function charger_infos_formulaire_modele($formulaire){
static $infos_formulaires_modeles = array();
if (!isset($infos_formulaires_modeles[$formulaire])) {
if (substr($formulaire,-5)!='.yaml')
$formulaire .= '.yaml';
if ($chemin = find_in_path($formulaire,'modeles/')) {
include_spip('inc/yaml');
$infos_formulaires_modeles[$formulaire] = yaml_charger_inclusions(yaml_decode_file($chemin));
}
}
return $infos_formulaires_modeles[$formulaire];
}
?>

3
inclure/inserer_modeles.html

@ -0,0 +1,3 @@
<div class="ajax" id="inserer_modeles">
#FORMULAIRE_INSERER_MODELES{#ENV{id_article},#ENV{id_rubrique},#ENV{id_breve},#ENV{formulaire_modele},#ENV{modalbox}}
</div>

1
inserer_modeles.html

@ -1 +0,0 @@
[(#HTTP_HEADER{Content-Type: text/html; charset=#CHARSET})][(#FORMULAIRE_INSERER_MODELES{#ENV{formulaire_modele},#ENV{modalbox},#ENV*})]

259
inserer_modeles_pipelines.php

@ -1,181 +1,78 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function inserer_modeles_header_prive($flux) {
$js = find_in_path('javascript/autosize.min.js');
$flux .= "\n<script type='text/javascript' src='$js'></script>\n";
return $flux;
}
function inserer_modeles_insert_head($flux){
if(lire_config('barre_outils_public') == 'oui'){
$js = find_in_path('javascript/autosize.min.js');
$flux .= "\n<script type='text/javascript' src='$js'></script>\n";
}
return $flux;
}
function inserer_modeles_affiche_droite($flux) {
$objets = inserer_modeles_objets();
if (in_array($flux['args']['exec'], $objets)) {
include_spip('inc/inserer_modeles');
if (count(inserer_modeles_lister_formulaires_modeles(true)) > 0) {
$flux['data'] .= recuperer_fond('inserer_modeles', $flux['args']);
}
}
return $flux;
}
// Insertion dans le porte-plume
function inserer_modeles_porte_plume_barre_pre_charger($barres) {
include_spip('inc/inserer_modeles');
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles(true);
if (count($formulaires_modeles) > 0) {
$barre = &$barres['edition'];
$barre->ajouterApres('grpCaracteres', array(
'id' => 'sepInsMod',
'separator' => '---------------',
'display' => true,
));
$sous_menu = array();
foreach ($formulaires_modeles as $nom => $formulaire) {
if (substr($nom, -5) == '.yaml') {
$nom = substr($nom, 0, -5);
}
$sous_menu[] = array(
'id' => 'inserer_modele_'.$nom,
'name' => $formulaire['nom'],
'className' => 'outil_inserer_modele_'.$nom,
'beforeInsert' => "function(markitup) {
url = $(\"input[type=hidden][name='url_inserer_modeles']\", $(markitup.textarea.form)).val() + '&formulaire_modele=$nom';
jQuery.modalboxload(url,{minHeight: '90%', type: 'ajax'});}
",
'display' => true,
);
}
$barre->ajouterApres('sepInsMod', array(
//groupe inserer_modeles et bouton inserer_modeles
'id' => 'inserer_modeles',
'name' => _T('inserer_modeles:outil_inserer_modeles'),
'key' => 'M',
'className' => 'outil_inserer_modeles',
'beforeInsert' => "function(markitup) {
url = $(\"input[type=hidden][name='url_inserer_modeles']\", $(markitup.textarea.form)).val();
jQuery.modalboxload(url,{minHeight: '90%', type: 'ajax'});}
",
'display' => true,
'dropMenu' => $sous_menu,
));
}
return $barres;
}
// Icones pour le porte-plume
function inserer_modeles_porte_plume_lien_classe_vers_icone($flux) {
include_spip('inc/inserer_modeles');
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles(true);
if (count($formulaires_modeles) > 0) {
$icones = array();
$icones['outil_inserer_modeles'] = inserer_modeles_find_icone_barre_path('modele-xx.svg');
foreach ($formulaires_modeles as $nom => $formulaire) {
if (substr($nom, -5) == '.yaml') {
$nom = substr($nom, 0, -5);
}
$icones['outil_inserer_modele_'.$nom] = $formulaire['icone_barre'];
}
return array_merge($flux, $icones);
} else {
return $flux;
}
}
/**
* Retourner la liste des pages où insérer le formulaire du plugin
**/
function inserer_modeles_objets() {
include_spip('inc/config');
$objets = lire_config('inserer_modeles/objets',
array('spip_articles', 'spip_breves', 'spip_rubriques', 'spip_mots')
);
// Comme on utilise la saisie choisir_objets,
// on retravaille les objets selectionnes pour avoir leur url_edit
foreach ($objets as $key => $objet) {
$objets[$key] = objet_info($objet, 'url_edit');
}
return $objets;
}
/**
* Sur les formulaires d'édition d'objet
* Inserer dans un champ caché l'url de la mediabox d'inserer_modeles en prenant en compte l'object concerné
**/
function inserer_modeles_formulaire_fond($flux) {
if (stripos($flux['data'], '<textarea') === false) {
return $flux;
}
if (substr($flux['args']['form'], 0, 7) === 'editer_') {
if (isset($flux['args']['args']['type']) and isset($flux['args']['args']['id'])) {
$objet = $flux['args']['args']['type'];
$id = $flux['args']['args']['id'];
$hidden = inserer_modele_generer_hidden_url_modalbox($objet, $id);
} else {
$hidden = inserer_modele_generer_hidden_url_modalbox();
}
} else {
$hidden = inserer_modele_generer_hidden_url_modalbox();
}
$flux['data'] = str_replace('</form>', "$hidden</form>", $flux['data']);
return $flux;
}
/**
* Sur les formulaires de crayons
* Inserer dans un champ caché l'url de la mediabox d'inserer_modeles en prenant en compte l'object concerné
**/
function inserer_modeles_recuperer_fond($flux) {
if (stripos($flux['data']['texte'], '<textarea') === false) {
return $flux;
}
if (substr($flux['args']['fond'], 0, 12) === 'controleurs/') {
$objet = $flux['args']['contexte']['crayon_type'];
if (isset($flux['args']['contexte']["id_$objet"])) {
$id = $flux['args']['contexte']["id_$objet"];
$hidden = inserer_modele_generer_hidden_url_modalbox($objet, $id);
$flux['data']['texte'] .= $hidden;
}
}
return $flux;
}
/**
* Return un hidden contenant l'url de la modalbox
* @param str $objet
* @param int|str $id
* @return str champ hidden
**/
function inserer_modele_generer_hidden_url_modalbox($objet = '', $id = '') {
$url_inserer_modeles = url_absolue(generer_url_public('inserer_modeles'));
$url_inserer_modeles = parametre_url($url_inserer_modeles, 'modalbox', 'oui');
if ($objet and $id) {
$url_inserer_modeles = parametre_url($url_inserer_modeles, "id_$objet", $id);
}
$hidden = "<input type='hidden' disabled='disabled' name='url_inserer_modeles' value='$url_inserer_modeles' />";
return $hidden;
}
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function inserer_modeles_affiche_droite($flux){
if (in_array($flux['args']['exec'],array('articles_edit','breves_edit','rubriques_edit','mots_edit'))) {
include_spip('inc/inserer_modeles');
if (count(inserer_modeles_lister_formulaires_modeles())>0)
$flux['data'] .= recuperer_fond('inclure/inserer_modeles',$flux['args']);
}
return $flux;
}
// Insertion dans le porte-plume
function inserer_modeles_porte_plume_barre_pre_charger($barres) {
include_spip('inc/inserer_modeles');
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles();
if (count($formulaires_modeles)>0) {
$barre = &$barres['edition'];
$barre->ajouterApres('grpCaracteres', array(
"id" => "sepInsMod",
"separator" => "---------------",
"display" => true,
));
$sous_menu = array();
foreach ($formulaires_modeles as $nom => $formulaire) {
if (substr($nom,-5)=='.yaml')
$nom = substr($nom,0,-5);
$sous_menu[] = array(
"id" => 'inserer_modele_'.$nom,
"name" => _T_ou_typo($formulaire['nom']),
"className" => 'outil_inserer_modele_'.$nom,
"beforeInsert" => "function() {jQuery.modalboxload('".generer_url_public(
'inclure/inserer_modeles',
"modalbox=oui&formulaire_modele=$nom&id_article='+$(\"[name='id_article']\").val()+'&id_rubrique='+$(\"[name='id_rubrique']\").val()+'&id_breve='+$(\"[name='id_breve']\").val()"
).",{minHeight: '90%'});}",
"display" => true
);
}
$barre->ajouterApres('sepInsMod', array(
//groupe inserer_modeles et bouton inserer_modeles
"id" => 'inserer_modeles',
"name" => _T('inserer_modeles:outil_inserer_modeles'),
"key" => "M",
"className" => 'outil_inserer_modeles',
"beforeInsert" => "function() {jQuery.modalboxload('".generer_url_public(
'inclure/inserer_modeles',
"modalbox=oui&id_article='+$(\"[name='id_article']\").val()+'&id_rubrique='+$(\"[name='id_rubrique']\").val()+'&id_breve='+$(\"[name='id_breve']\").val()"
).",{minHeight: '90%'});}",
"display" => true,
"dropMenu" => $sous_menu
));
}
return $barres;
}
// Icônes pour le porte-plume
function inserer_modeles_porte_plume_lien_classe_vers_icone($flux) {
include_spip('inc/inserer_modeles');
$formulaires_modeles = inserer_modeles_lister_formulaires_modeles();
if (count($formulaires_modeles)>0) {
$icones = array();
$icones['outil_inserer_modeles'] = 'inserer_modeles.png';
foreach ($formulaires_modeles as $nom => $formulaire) {
if (substr($nom,-5)=='.yaml')
$nom = substr($nom,0,-5);
$icones['outil_inserer_modele_'.$nom] = $formulaire['icone_barre'];
}
return array_merge($flux, $icones);
} else
return $flux;
}
?>

6
javascript/autosize.min.js vendored

@ -1,6 +0,0 @@
/*!
autosize 4.0.2
license: MIT
http://www.jacklmoore.com/autosize
*/
!function(e,t){if("function"==typeof define&&define.amd)define(["module","exports"],t);else if("undefined"!=typeof exports)t(module,exports);else{var n={exports:{}};t(n,n.exports),e.autosize=n.exports}}(this,function(e,t){"use strict";var n,o,p="function"==typeof Map?new Map:(n=[],o=[],{has:function(e){return-1<n.indexOf(e)},get:function(e){return o[n.indexOf(e)]},set:function(e,t){-1===n.indexOf(e)&&(n.push(e),o.push(t))},delete:function(e){var t=n.indexOf(e);-1<t&&(n.splice(t,1),o.splice(t,1))}}),c=function(e){return new Event(e,{bubbles:!0})};try{new Event("test")}catch(e){c=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}function r(r){if(r&&r.nodeName&&"TEXTAREA"===r.nodeName&&!p.has(r)){var e,n=null,o=null,i=null,d=function(){r.clientWidth!==o&&a()},l=function(t){window.removeEventListener("resize",d,!1),r.removeEventListener("input",a,!1),r.removeEventListener("keyup",a,!1),r.removeEventListener("autosize:destroy",l,!1),r.removeEventListener("autosize:update",a,!1),Object.keys(t).forEach(function(e){r.style[e]=t[e]}),p.delete(r)}.bind(r,{height:r.style.height,resize:r.style.resize,overflowY:r.style.overflowY,overflowX:r.style.overflowX,wordWrap:r.style.wordWrap});r.addEventListener("autosize:destroy",l,!1),"onpropertychange"in r&&"oninput"in r&&r.addEventListener("keyup",a,!1),window.addEventListener("resize",d,!1),r.addEventListener("input",a,!1),r.addEventListener("autosize:update",a,!1),r.style.overflowX="hidden",r.style.wordWrap="break-word",p.set(r,{destroy:l,update:a}),"vertical"===(e=window.getComputedStyle(r,null)).resize?r.style.resize="none":"both"===e.resize&&(r.style.resize="horizontal"),n="content-box"===e.boxSizing?-(parseFloat(e.paddingTop)+parseFloat(e.paddingBottom)):parseFloat(e.borderTopWidth)+parseFloat(e.borderBottomWidth),isNaN(n)&&(n=0),a()}function s(e){var t=r.style.width;r.style.width="0px",r.offsetWidth,r.style.width=t,r.style.overflowY=e}function u(){if(0!==r.scrollHeight){var e=function(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}(r),t=document.documentElement&&document.documentElement.scrollTop;r.style.height="",r.style.height=r.scrollHeight+n+"px",o=r.clientWidth,e.forEach(function(e){e.node.scrollTop=e.scrollTop}),t&&(document.documentElement.scrollTop=t)}}function a(){u();var e=Math.round(parseFloat(r.style.height)),t=window.getComputedStyle(r,null),n="content-box"===t.boxSizing?Math.round(parseFloat(t.height)):r.offsetHeight;if(n<e?"hidden"===t.overflowY&&(s("scroll"),u(),n="content-box"===t.boxSizing?Math.round(parseFloat(window.getComputedStyle(r,null).height)):r.offsetHeight):"hidden"!==t.overflowY&&(s("hidden"),u(),n="content-box"===t.boxSizing?Math.round(parseFloat(window.getComputedStyle(r,null).height)):r.offsetHeight),i!==n){i=n;var o=c("autosize:resized");try{r.dispatchEvent(o)}catch(e){}}}}function i(e){var t=p.get(e);t&&t.destroy()}function d(e){var t=p.get(e);t&&t.update()}var l=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?((l=function(e){return e}).destroy=function(e){return e},l.update=function(e){return e}):((l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return r(e)}),e}).destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],i),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],d),e}),t.default=l,e.exports=t.default});

19
lang/inserer_modeles.xml

@ -1,19 +0,0 @@
<traduction
module="inserer_modeles"
id="inserer_modeles--inserer_modeles-f3ec3"
gestionnaire="salvatore"
url="https://trad.spip.net"
source="https://git.spip.net/spip-contrib-extensions/inserer_modeles.git"
reference="fr">
<langue code="en" url="https://trad.spip.net/tradlang_module/inserer_modeles?lang_cible=en" total="30" traduits="29" relire="1" modifs="0" nouveaux="0" pourcent="96.67">
<traducteur nom="Benitron" lien="https://trad.spip.net/auteur/benitron" />
<traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
<traducteur nom="jack31" lien="https://trad.spip.net/auteur/jack31" />
<traducteur nom="raphael" lien="https://trad.spip.net/auteur/raphael-7042" />
<traducteur nom="stefdn" lien="https://trad.spip.net/auteur/stefdn" />
</langue>
<langue code="fr" url="https://trad.spip.net/tradlang_module/inserer_modeles?lang_cible=fr" total="30" traduits="30" relire="0" modifs="0" nouveaux="0" pourcent="100.00" />
<langue code="nl" url="https://trad.spip.net/tradlang_module/inserer_modeles?lang_cible=nl" total="30" traduits="15" relire="0" modifs="6" nouveaux="9" pourcent="50.00">
<traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
</langue>
</traduction>

61
lang/inserer_modeles_en.php

@ -1,61 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/inserer_modeles?lang_cible=en
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// B
'bouton_choisir' => 'Select',
'bouton_inserer' => 'Insert',
// C
'choisir_modele' => 'What do you want to add?',
'choix_objets_editable' => 'Objects where you can propose the insertion of models.',
'choix_objets_editable_explication' => 'Please select one or more objects on which you want the template insertion block to appear. Please note that in all cases, the penholder (typographic bar) will propose the templates.',
// E
'erreur_choix_modele' => 'You must choose a template.',
'explication_alt' => 'If empty, the alternative text of the document will be used.
',
'explication_credits' => 'If empty, the document credits will be used.',
'explication_descriptif' => 'If empty, the document description will be used.
',
'explication_titre' => 'If empty, the document title will be used.',
// I
'ignorer_modeles' => 'Do not offer the following templates',
'item_center' => 'center',
'item_left' => 'left',
'item_right' => 'right',
// L
'label_alignement' => 'Alignment:',
'label_alt' => 'Alternative text if the image is not visible',
'label_credits' => 'Credits',
'label_descriptif' => 'Description',
'label_hauteur' => 'Max height (px)',
'label_id_document' => 'Document number:',
'label_largeur' => 'Max width (px)',
'label_titre' => 'Title',
// M
'message_code_insere' => 'The tag has been inserted into the text.',
'message_double_clic' => 'Double-click to insert the template in the text.',
'message_inserer_code' => 'You can copy/paste the template code into your text. Double-click on the code to insert automatically into the text field.',
// N
'nom_media' => 'a document',
// O
'outil_inserer_modeles' => 'Insert a template',
// T
'titre_inserer' => 'Insert @modele@',
'titre_inserer_modeles' => 'Insert a template',
'titre_page_configurer_inserer_modeles' => 'Configure plugin ’Model Insertion’' # RELIRE
);

77
lang/inserer_modeles_fr.php

@ -1,57 +1,20 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans https://git.spip.net/spip-contrib-extensions/inserer_modeles.git
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// B
'bouton_choisir' => 'Choisir',
'bouton_inserer' => 'Insérer',
// C
'choisir_modele' => 'Que souhaitez-vous insérer ?',
'choix_objets_editable' => 'Objets où proposer l’insertion de modèles.',
'choix_objets_editable_explication' => 'Veuillez sélectionner un ou plusieurs objets sur lesquels vous désirez que le bloc d’insertion des modèles apparaissent. À noter que dans tous les cas, le porte-plume (barre typographique) proposera les modèles.',
// E
'erreur_choix_modele' => 'Vous devez choisir un modèle.',
'explication_alt' => 'Si vide, le texte alternatif du document sera utilisé.',
'explication_credits' => 'Si vide, les crédits du document seront utilisés.',
'explication_descriptif' => 'Si vide, le descriptif du document sera utilisé.',
'explication_titre' => 'Si vide, le titre du document sera utilisé.',
// I
'ignorer_modeles' => 'Ne pas proposer les modèles suivants',
'item_center' => 'au centre',
'item_left' => 'à gauche',
'item_right' => 'à droite',
// L
'label_alignement' => 'Alignement',
'label_alt' => 'Texte alternatif si l’image n’est pas visible',
'label_credits' => 'Crédits',
'label_descriptif' => 'Descriptif',
'label_hauteur' => 'Hauteur max (px)',
'label_id_document' => 'Document numéro',
'label_largeur' => 'Largeur max (px)',
'label_titre' => 'Titre',
// M
'message_code_insere' => 'La balise a été insérée dans le texte.',
'message_double_clic' => 'Double-cliquez pour insérer le modèle dans le texte.',
'message_inserer_code' => 'Vous pouvez copier/coller le code du modèle dans votre texte. Un double-clic sur le code l’insérera automatiquement dans le champ Texte.',
// N
'nom_media' => 'Document',
// O
'outil_inserer_modeles' => 'Insérer un modèle',
// T
'titre_inserer' => 'Insérer @modele@',
'titre_inserer_modeles' => 'Insérer un modèle',
'titre_page_configurer_inserer_modeles' => 'Configurer le plugin « Insérer un modèle »'
);
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
'titre_inserer_modeles' => 'Ins&eacute;rer un mod&egrave;le',
'choisir_modele' => 'Que souhaitez-vous ins&eacute;rer&nbsp;?',
'bouton_choisir' => 'Choisir',
'bouton_inserer' => 'Ins&eacute;rer',
'item_center' => 'au centre',
'item_left' => '&agrave; gauche',
'item_right' => '&agrave; droite',
'titre_inserer' => 'Ins&eacute;rer @modele@',
'erreur_choix_modele' => 'Vous devez choisir un mod&egrave;le.',
'label_alignement' => 'Alignement&nbsp;:',
'message_copier_code' => 'Vous pouvez recopier le code ci-dessous dans votre texte ou modifier les param&egrave;tres de votre mod&egrave;le.',
'outil_inserer_modeles' => 'Ins&eacute;rer un mod&egrave;le',
);
?>

50
lang/inserer_modeles_nl.php

@ -1,50 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/inserer_modeles?lang_cible=nl
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// B
'bouton_choisir' => 'Kiezen',
'bouton_inserer' => 'Invoegen',
// C
'choisir_modele' => 'Wat wil je invoegen?',
'choix_objets_editable' => 'Kies één of meer objecten', # MODIF
'choix_objets_editable_explication' => 'Geef één of meer objecten aan waarin het blok voor het invoegen van modellen moet verschijnen.', # MODIF
// E
'erreur_choix_modele' => 'Je moet een model kiezen.',
// I
'item_center' => 'in het midden',
'item_left' => 'links',
'item_right' => 'rechts',
// L
'label_alignement' => 'Uitlijning:', # MODIF
'label_descriptif' => 'Omschrijving',
'label_id_document' => 'Documentnummer:', # MODIF
'label_titre' => 'Titel',
// M
'message_code_insere' => 'Het baken werd in de tekst geplaatst.',
'message_double_clic' => 'Dubbelklikken om het model in de tekst te plaatsen.',
'message_inserer_code' => 'Je kont de code voor het model kopiëren en in je tektst plakken. Een dubbelklik op de code voegt hem automatisch in het tekstveld in.',
// N
'nom_media' => 'een document', # MODIF
// O
'outil_inserer_modeles' => 'Een model invoegen',
// T
'titre_inserer' => '@modele@ invoegen',
'titre_inserer_modeles' => 'Een model invoegen',
'titre_page_configurer_inserer_modeles' => 'Configureer de plugin ’Model invoegen’' # MODIF
);

15
lang/paquet-inserer_modeles.xml

@ -1,15 +0,0 @@
<traduction
module="paquet-inserer_modeles"
id="paquet-inserer_modeles--inserer_modeles-f3ec3"
gestionnaire="salvatore"
url="https://trad.spip.net"
source="https://git.spip.net/spip-contrib-extensions/inserer_modeles.git"
reference="fr">
<langue code="en" url="https://trad.spip.net/tradlang_module/paquet-inserer_modeles?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
</langue>
<langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-inserer_modeles?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00" />
<langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-inserer_modeles?lang_cible=nl" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
</langue>
</traduction>

15
lang/paquet-inserer_modeles_en.php

@ -1,15 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-inserer_modeles?lang_cible=en
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// I
'inserer_modeles_description' => 'This plugin supports the insertion of models in your text by means of forms. These forms are accessible in the right-hand column or using a button in porte-plume.',
'inserer_modeles_slogan' => 'Support for insertion of models in your text'
);

13
lang/paquet-inserer_modeles_fr.php

@ -1,13 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans https://git.spip.net/spip-contrib-extensions/inserer_modeles.git
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// I
'inserer_modeles_description' => 'Ce plugin fournit une aide à l’insertion des modèles dans vos textes à travers des formulaires de saisies. Ces formulaires sont accessibles dans la colonne de droite ou via un bouton dans le porte-plume.',
'inserer_modeles_slogan' => 'Une aide à l’insertion des modèles dans vos textes'
);

15
lang/paquet-inserer_modeles_nl.php

@ -1,15 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-inserer_modeles?lang_cible=nl
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// I
'inserer_modeles_description' => 'Deze plugin biedt hulp bij het invoegen van modellen in een tekst door middel van invoerformulieren. Deze formulieren zijn in de rechterkolom beschikbaar of via een knop in porte-plume.',
'inserer_modeles_slogan' => 'Hulp bij het invoegen van modellen in een tekst'
);

612
modalbox/jquery.simplemodal-1.3.3.js

@ -0,0 +1,612 @@
/*
* SimpleModal 1.3.3 - jQuery Plugin
* http://www.ericmmartin.com/projects/simplemodal/
* Copyright (c) 2009 Eric Martin (http://twitter.com/EricMMartin)
* Dual licensed under the MIT and GPL licenses
* Revision: $Id: jquery.simplemodal.js 228 2009-10-30 13:34:27Z emartin24 $
*/
/**
* SimpleModal is a lightweight jQuery plugin that provides a simple
* interface to create a modal dialog.
*
* The goal of SimpleModal is to provide developers with a cross-browser
* overlay and container that will be populated with data provided to
* SimpleModal.
*
* There are two ways to call SimpleModal:
* 1) As a chained function on a jQuery object, like $('#myDiv').modal();.
* This call would place the DOM object, #myDiv, inside a modal dialog.
* Chaining requires a jQuery object. An optional options object can be
* passed as a parameter.
*
* @example $('<div>my data</div>').modal({options});
* @example $('#myDiv').modal({options});
* @example jQueryObject.modal({options});
*
* 2) As a stand-alone function, like $.modal(data). The data parameter
* is required and an optional options object can be passed as a second
* parameter. This method provides more flexibility in the types of data
* that are allowed. The data could be a DOM object, a jQuery object, HTML
* or a string.
*
* @example $.modal('<div>my data</div>', {options});
* @example $.modal('my data', {options});
* @example $.modal($('#myDiv'), {options});
* @example $.modal(jQueryObject, {options});
* @example $.modal(document.getElementById('myDiv'), {options});
*
* A SimpleModal call can contain multiple elements, but only one modal
* dialog can be created at a time. Which means that all of the matched
* elements will be displayed within the modal container.
*
* SimpleModal internally sets the CSS needed to display the modal dialog
* properly in all browsers, yet provides the developer with the flexibility
* to easily control the look and feel. The styling for SimpleModal can be
* done through external stylesheets, or through SimpleModal, using the
* overlayCss and/or containerCss options.
*
* SimpleModal has been tested in the following browsers:
* - IE 6, 7, 8
* - Firefox 2, 3
* - Opera 9, 10
* - Safari 3, 4
* - Chrome 1, 2
*
* @name SimpleModal
* @type jQuery
* @requires jQuery v1.2.2
* @cat Plugins/Windows and Overlays
* @author Eric Martin (http://ericmmartin.com)
* @version 1.3.3
*/
;(function ($) {
var ie6 = $.browser.msie && parseInt($.browser.version) == 6 && typeof window['XMLHttpRequest'] != "object",
ieQuirks = null,
w = [];
/*
* Stand-alone function to create a modal dialog.
*
* @param {string, object} data A string, jQuery object or DOM object
* @param {object} [options] An optional object containing options overrides
*/
$.modal = function (data, options) {
return $.modal.impl.init(data, options);
};
/*
* Stand-alone close function to close the modal dialog
*/
$.modal.close = function () {
$.modal.impl.close();
};
/*
* Chained function to create a modal dialog.
*
* @param {object} [options] An optional object containing options overrides
*/
$.fn.modal = function (options) {
return $.modal.impl.init(this, options);
};
/*
* SimpleModal default options
*
* appendTo: (String:'body') The jQuery selector to append the elements to. For ASP.NET, use 'form'.
* focus: (Boolean:true) Forces focus to remain on the modal dialog
* opacity: (Number:50) The opacity value for the overlay div, from 0 - 100
* overlayId: (String:'simplemodal-overlay') The DOM element id for the overlay div
* overlayCss: (Object:{}) The CSS styling for the overlay div
* containerId: (String:'simplemodal-container') The DOM element id for the container div
* containerCss: (Object:{}) The CSS styling for the container div
* dataId: (String:'simplemodal-data') The DOM element id for the data div
* dataCss: (Object:{}) The CSS styling for the data div
* minHeight: (Number:200) The minimum height for the container
* minWidth: (Number:200) The minimum width for the container
* maxHeight: (Number:null) The maximum height for the container. If not specified, the window height is used.
* maxWidth: (Number:null) The maximum width for the container. If not specified, the window width is used.
* autoResize: (Boolean:false) Resize container on window resize? Use with caution - this may have undesirable side-effects.
* autoPosition: (Boolean:true) Reposition container on window resize?
* zIndex: (Number: 1000) Starting z-index value
* close: (Boolean:true) If true, closeHTML, escClose and overClose will be used if set.
If false, none of them will be used.
* closeHTML: (String:'<a class="modalCloseImg" title="Close"></a>') The HTML for the
default close link. SimpleModal will automatically add the closeClass to this element.
* closeClass: (String:'simplemodal-close') The CSS class used to bind to the close event
* escClose: (Boolean:true) Allow Esc keypress to close the dialog?
* overlayClose: (Boolean:false) Allow click on overlay to close the dialog?
* position: (Array:null) Position of container [top, left]. Can be number of pixels or percentage
* persist: (Boolean:false) Persist the data across modal calls? Only used for existing
DOM elements. If true, the data will be maintained across modal calls, if false,
the data will be reverted to its original state.
* onOpen: (Function:null) The callback function used in place of SimpleModal's open
* onShow: (Function:null) The callback function used after the modal dialog has opened
* onClose: (Function:null) The callback function used in place of SimpleModal's close
*/
$.modal.defaults = {
appendTo: 'body',
focus: true,
opacity: 50,
overlayId: 'simplemodal-overlay',
overlayCss: {},
containerId: 'simplemodal-container',
containerCss: {},
dataId: 'simplemodal-data',
dataCss: {},
minHeight: 200,
minWidth: 300,
maxHeight: null,
maxWidth: null,
autoResize: false,
autoPosition: true,
zIndex: 1000,
close: true,
closeHTML: '<a class="modalCloseImg" title="Close"></a>',
closeClass: 'simplemodal-close',
escClose: true,
overlayClose: false,
position: null,
persist: false,
onOpen: null,
onShow: null,
onClose: null
};
/*
* Main modal object
*/
$.modal.impl = {
/*
* Modal dialog options
*/
o: null,
/*
* Contains the modal dialog elements and is the object passed
* back to the callback (onOpen, onShow, onClose) functions
*/
d: {},
/*
* Initialize the modal dialog
*/
init: function (data, options) {
var s = this;
// don't allow multiple calls
if (s.d.data) {
return false;
}
// $.boxModel is undefined if checked earlier
ieQuirks = $.browser.msie && !$.boxModel;
// merge defaults and user options
s.o = $.extend({}, $.modal.defaults, options);
// keep track of z-index
s.zIndex = s.o.zIndex;
// set the onClose callback flag
s.occb = false;
// determine how to handle the data based on its type
if (typeof data == 'object') {
// convert DOM object to a jQuery object
data = data instanceof jQuery ? data : $(data);
// if the object came from the DOM, keep track of its parent
if (data.parent().parent().size() > 0) {
s.d.parentNode = data.parent();
// persist changes? if not, make a clone of the element
if (!s.o.persist) {
s.d.orig = data.clone(true);
}
}
}
else if (typeof data == 'string' || typeof data == 'number') {
// just insert the data as innerHTML
data = $('<div></div>').html(data);
}
else {
// unsupported data type!
alert('SimpleModal Error: Unsupported data type: ' + typeof data);
return s;
}
// create the modal overlay, container and, if necessary, iframe
s.create(data);
data = null;
// display the modal dialog
s.open();
// useful for adding events/manipulating data in the modal dialog
if ($.isFunction(s.o.onShow)) {
s.o.onShow.apply(s, [s.d]);
}
// don't break the chain =)
return s;
},
/*
* Create and add the modal overlay and container to the page
*/
create: function (data) {
var s = this;
// get the window properties
w = s.getDimensions