Browse Source

Report de toutes les améliorations du sélecteur générique.

svn/attic/tags/spip-3.1.0-alpha/prive/21784
rastapopoulos@spip.org 8 years ago
parent
commit
43c6d3d886
  1. 2
      .gitattributes
  2. 8
      ajax_selecteur.html
  3. 7
      ajax_selecteur_fonctions.php
  4. 27
      formulaires/selecteur/ajax.html
  5. 8
      formulaires/selecteur/generique.html
  6. 78
      formulaires/selecteur/generique_fonctions.php
  7. 26
      formulaires/selecteur/hierarchie-articles.html
  8. 12
      formulaires/selecteur/hierarchie-racine.html
  9. 26
      formulaires/selecteur/hierarchie-rubriques.html
  10. 7
      formulaires/selecteur/jquery.picker.js
  11. 15
      formulaires/selecteur/lister-racine-articles.html
  12. 18
      formulaires/selecteur/lister-racine-rubriques.html
  13. 15
      formulaires/selecteur/lister-rubriques-articles.html
  14. 18
      formulaires/selecteur/lister-rubriques-rubriques.html
  15. 17
      formulaires/selecteur/lister.html
  16. 22
      themes/spip/picker.css.html

2
.gitattributes

@ -3,6 +3,8 @@
/aide_menu.html -text
/ajax_item_pick.html -text
/ajax_item_pick_fonctions.php -text
/ajax_selecteur.html -text
/ajax_selecteur_fonctions.php -text
echafaudage/contenu/objet.html -text
echafaudage/contenu/objet_edit.html -text
echafaudage/contenu/objet_edit.sans_rubrique.html -text

8
ajax_selecteur.html

@ -0,0 +1,8 @@
[(#REM)
Squelette
(c) xxx
Distribue sous licence GPL
][(#HTTP_HEADER{Content-type: text/javascript[; charset=(#CHARSET)]})
]#CACHE{3600}[(#ENV{ref}|picker_identifie_id_rapide{#ENV{objets}})]

7
ajax_selecteur_fonctions.php

@ -0,0 +1,7 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('formulaires/selecteur/generique_fonctions');
?>

27
formulaires/selecteur/ajax.html

@ -2,25 +2,25 @@
[(#REM) Afficher un bouton ajax Modifier a la premiere fois ]
[(#ENV{picker,''}|non)
<div class='picker_bouton'>&#91;<a href='[(#SELF|parametre_url{picker,1})]' class='ajax'>#GET{bouton_modif}</a>&#93;</div>
<div class='picker_bouton'><a href='[(#SELF|parametre_url{picker,1})]' class="ajax nohistory">#GET{bouton_modif}</a></div>
]
[(#REM) Afficher un bouton Fermer/Modifier ensuite ]
[(#ENV{picker,''}|oui)
<div class='picker_bouton'>
&#91;<a
class='close'
href='[(#SELF|parametre_url{picker,0})]'
<div class="picker_bouton">
<a
class="close"
href="[(#SELF|parametre_url{picker,0})]"
onclick="jQuery(this).parent().picker_toggle();return false;"
><:bouton_fermer:></a><a
class='edit'
href='[(#SELF|parametre_url{picker,1})]'
class="edit"
href="[(#SELF|parametre_url{picker,1})]"
onclick="jQuery(this).parent().picker_toggle();return false;"
style='display:none;'>#GET{bouton_modif}</a>&#93;
style="display:none;">#GET{bouton_modif}</a>
</div>
[(#REM) et enfin le navigateur ------]
<div class='browser'>
[(#REM) et enfin le navigateur (et l'ajout rapide) ------]
<div class="browser">
<div class="choix choix_rapide">
<label for="picker_rapide_#ENV{name}"><:label_ajout_id_rapide:></label>
<input type="text" value="" id="picker_rapide_#ENV{name}" size="10" />
@ -31,9 +31,8 @@
jQuery.ajax({
dataType: 'json',
url: '[(#URL_PAGE{ajax_selecteur})]',
data: {
rubriques: '#ENV{rubriques}',
articles: '#ENV{articles}',
data: {
objets:[(#ENV{objets/selectionner}|json_encode|sinon{\[\]}),]
ref: jQuery('#picker_rapide_#ENV{name}').attr('value')
},
success: function(r, statut, xhr){
@ -62,6 +61,8 @@
[(#ENV{objet}|=={racine}|ou{#ENV{id_objet}|=={0}}|non)
[(#SET{skel, [(#ENV{objet}|table_objet)]})]
]
<div class="navigateur">
<INCLURE{fond=formulaires/selecteur/hierarchie-#GET{skel}, env}>
</div>
</div>
]

8
formulaires/selecteur/generique.html

@ -1,5 +1,6 @@
#SET{img_unpick, #CHEMIN_IMAGE{supprimer-12.png}}
<script type='text/javascript'>var identifiant_selecteur = 'selecteur_#ENV{name}'; var img_unpick='#GET{img_unpick}';</script>
[(#SET{label_supprimer, <:lien_supprimer:>})]
<script type='text/javascript'>var identifiant_selecteur = 'selecteur_#ENV{name}'; var img_unpick='#GET{img_unpick}'; var selecteur_label_supprimer='#GET{label_supprimer}';</script>
<script type='text/javascript' src='#CHEMIN{formulaires/selecteur/jquery.picker.js}'></script>
[(#REM)
@ -18,7 +19,8 @@ afficher la selection dans un ul class item_picked
[(#REM) On commence par chercher la liste des objets disposant d'un sélecteur ]
[(#SET{objets, [(#ENV{whitelist,#ARRAY}|selecteur_lister_objets{#ENV{blacklist,#ARRAY}})]})]
<div id="selecteur_#ENV{name}">
[(#REM) S'il n'y a qu'un type d'objet affiché et sélectionnable, on ajoute une classe (on fait -1 car il y a toujours la racine dans "afficher" ]
<div id="selecteur_#ENV{name}" class="selecteur[ (#GET{objets/afficher}|count|moins{1}|=={1}|et{#GET{objets/selectionner}|count|=={1}})selecteur_type_unique]">
<ul class="item_picked[ (#ENV{select,''}|?{select})][ (#ENV{obligatoire}|?{obligatoire})]">
<BOUCLE_selected(POUR){tableau #ENV{selected}|picker_selected}>
@ -45,7 +47,7 @@ afficher la selection dans un ul class item_picked
#SET{id_objet, #ENV{id_objet,0}}
[(#REM) Attention si l'objet passé ne fait pas parti des objets adéquats, on va sur la racine ]
[(#GET{objet}|table_objet|in_array{#GET{objets}|table_valeur{afficher}}|non)
[(#GET{objet}|table_objet|in_array{#GET{objets/afficher}}|non)
#SET{objet, racine}
#SET{id_objet, 0}
]

78
formulaires/selecteur/generique_fonctions.php

@ -4,13 +4,23 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
/*
* Fournit la liste des objets ayant un sélecteur
* Concrètement, va chercher tous les formulaires/selecteur/hierarchie-truc.html
* Concrètement, va chercher tous les formulaires/selecteur/hierarchie-trucs.html
* Ensuite on ajoute les parents obligatoires éventuels
*
* @param array $whitelist Liste blanche décrivant les objets à lister
* @param array $blacklist Liste noire décrivant les objets à ne pas lister
* @return array Retourne un tableau de deux entrées listant les objets à lister et les objets sélectionnables
* selectionner : tableau des objets que l'on pourra sélectionner (avec un +)
* afficher : tableau des objets à afficher (mais pas forcément sélectionnables)
*/
function selecteur_lister_objets($whitelist=array(), $blacklist=array()){
$liste = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
static $liste_selecteurs, $liste_parents;
if (!$liste_selecteurs){
$liste_selecteurs = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
}
$objets_selectionner = array();
foreach ($liste as $fichier=>$chemin){
foreach ($liste_selecteurs as $fichier=>$chemin){
$objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier);
}
@ -27,15 +37,18 @@ function selecteur_lister_objets($whitelist=array(), $blacklist=array()){
// Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner
$objets_afficher = $objets_selectionner;
// Il faut alors chercher d'éventuels parents obligatoires :
// Il faut alors chercher d'éventuels parents obligatoires en plus :
// lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules"
$liste = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
foreach ($liste as $fichier=>$chemin){
if (!$liste_parents){
$liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
}
foreach ($liste_parents as $fichier=>$chemin){
preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures);
$parent = $captures[1];
$type = $captures[2];
// Si le type fait partie de ce qu'on veut sélectionner alors on ajoute le parent à l'affichage
if (in_array($type, $objets_selectionner)){
// Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage
if (in_array($type, $objets_afficher)){
$objets_afficher[] = $parent;
}
}
@ -85,20 +98,49 @@ function picker_selected($selected, $type=''){
return $select;
}
function picker_identifie_id_rapide($ref,$rubriques=0,$articles=0){
include_spip("inc/json");
include_spip("inc/lien");
if (!($match = typer_raccourci($ref)))
/*
* Récupère des informations sur un objet pour pouvoir l'ajouter aux éléments sélectionnés
*
* @param string $ref Référence de l'objet à chercher, de la forme "type|id", par exemple "rubrique|123".
* @param mixed $rubriques_ou_objets Soit un booléen (pouvant être une chaîne vide aussi) indiquant que les rubriques sont sélectionnables soit un tableau complet des objets sélectionnables.
* @param bool $articles Booléen indiquant si les articles sont sélectionnables
*/
function picker_identifie_id_rapide($ref, $rubriques_ou_objets=false, $articles=false){
include_spip('inc/json');
include_spip('inc/lien');
// On construit un tableau des objets sélectionnables suivant les paramètres
$objets = array();
if ($rubriques_ou_objets and is_array($rubriques_ou_objets)){
$objets = $rubriques_ou_objets;
}
else{
if ($rubriques_ou_objets){ $objets[] = 'rubriques'; }
if ($articles){ $objets[] = 'articles'; }
}
// Si la référence ne correspond à rien, c'est fini
if (!($match = typer_raccourci($ref))){
return json_export(false);
}
// Sinon on récupère les infos utiles
@list($type,,$id,,,,) = $match;
if (!in_array($type,array($rubriques?'rubrique':'x',$articles?'article':'x')))
// On regarde si le type trouvé fait partie des objets sélectionnables
if (!in_array(table_objet($type), $objets)){
return json_export(false);
$table_sql = table_objet_sql($type);
$id_table_objet = id_table_objet($type);
if (!$titre = sql_getfetsel('titre',$table_sql,"$id_table_objet=".intval($id)))
}
// Maintenant que tout est bon, on cherche les informations sur cet objet
include_spip('inc/filtres');
if (!$titre = generer_info_entite($id, $type, 'titre')){
return json_export(false);
$titre = attribut_html(extraire_multi($titre));
return json_export(array('type'=>$type,'id'=>"$type|$id",'titre'=>$titre));
}
// On simplifie le texte
$titre = attribut_html($titre);
return json_export(array('type' => $type, 'id' => "$type|$id", 'titre' => $titre));
}
?>

26
formulaires/selecteur/hierarchie-articles.html

@ -1,28 +1,10 @@
<BOUCLE_art(ARTICLES){tout}{id_article=#ENV{id_objet}}{statut?}>
<div class="chemin">
<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax"><:info_racine_site:></a>
<BOUCLE_chemin(HIERARCHIE){id_rubrique}> &gt; <a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax">#TITRE</a></BOUCLE_chemin> &gt; <strong class="on">#TITRE</strong>
<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax nohistory"><:info_racine_site:></a><span class="sep divider">
&gt; </span><BOUCLE_chemin(HIERARCHIE){id_rubrique}><a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider">
&gt; </span></BOUCLE_chemin><h3 class="on">#TITRE</h3>
</div>
<B_contenu>
[(#REM) afficher la racine si la profondeur le permet]
<BOUCLE_test_racine(CONDITION){si (#_contenu:GRAND_TOTAL|<{#_contenu:TOTAL_BOUCLE}|oui)}>
<div class="frame[ total_(#_contenu:GRAND_TOTAL|max{#_contenu:TOTAL_BOUCLE|moins{1}})] frame_0">
<h2>
[(#ENV{racine}|oui)
<a href="#" onclick="jQuery(this).item_pick('racine|0','#ENV{name,id_item}','<:info_racine_site:>','racine');return false;">
<img class="add" src="#CHEMIN_IMAGE{ajouter-16.png}" alt="ajouter" width="16" height="16" />
</a>
]
<:info_racine_site:>
</h2>
#INCLURE{fond=formulaires/selecteur/lister, quoi=racine, env}
</div>
</BOUCLE_test_racine>
<BOUCLE_contenu(HIERARCHIE){id_rubrique}{tout}{n-4,4}>
<div class="frame[ total_(#GRAND_TOTAL|min{#TOTAL_BOUCLE|moins{1}})][ frame_(#COMPTEUR_BOUCLE|moins{#GRAND_TOTAL|plus{1}|max{#TOTAL_BOUCLE}}|plus{#TOTAL_BOUCLE})]">
<a href="[(#SELF|parametre_url{id_objet,#ID_PARENT|?{#ID_PARENT,0}})]" class="frame_close ajax"><img src="#CHEMIN_IMAGE{fermer-16}" alt="fermer" width="16" height="16" /></a>
<h2><a class="ajax" href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]">#TITRE</a></h2>
<div class="liste">
#INCLURE{fond=formulaires/selecteur/lister, quoi=rubriques, id_rubrique, env}
</div>
</BOUCLE_contenu>
</BOUCLE_art>

12
formulaires/selecteur/hierarchie-racine.html

@ -1,14 +1,6 @@
<div class="chemin">
<strong class="on"><:info_racine_site:></strong>
<h3 class="on"><:info_racine_site:></h3>
</div>
<div class="frame total_0 frame_0">
<h2>
[(#ENV{racine}|oui)
<a href="#" onclick="jQuery(this).item_pick('racine|0','#ENV{name,id_item}','<:info_racine_site:>','racine');return false;">
<img class="add" src="#CHEMIN_IMAGE{ajouter-16.png}" alt="ajouter" width="16" height="16" />
</a>
]
<:info_racine_site:>
</h2>
<div class="liste">
#INCLURE{fond=formulaires/selecteur/lister, quoi=racine, env}
</div>

26
formulaires/selecteur/hierarchie-rubriques.html

@ -1,28 +1,10 @@
<BOUCLE_rub(RUBRIQUES){tout}{id_rubrique=#ENV{id_objet}}{statut?}>
<div class="chemin">
<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax"><:info_racine_site:></a>
<BOUCLE_chemin(HIERARCHIE){id_rubrique}> &gt; <a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax">#TITRE</a></BOUCLE_chemin> &gt; <strong class="on">#TITRE</strong>
<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax nohistory"><:info_racine_site:></a><span class="sep divider">
&gt; </span><BOUCLE_chemin(HIERARCHIE){id_rubrique}><a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider">
&gt; </span></BOUCLE_chemin><h3 class="on">#TITRE</h3>
</div>
<B_contenu>
[(#REM) afficher la racine si la profondeur le permet]
<BOUCLE_test_racine(CONDITION){si (#_contenu:GRAND_TOTAL|<{#_contenu:TOTAL_BOUCLE}|oui)}>
<div class="frame[ total_(#_contenu:GRAND_TOTAL|max{#_contenu:TOTAL_BOUCLE|moins{1}})] frame_0">
<h2>
[(#ENV{racine}|oui)
<a href="#" onclick="jQuery(this).item_pick('racine|0','#ENV{name,id_item}','<:info_racine_site:>','racine');return false;">
<img class="add" src="#CHEMIN_IMAGE{ajouter-16.png}" alt="ajouter" width="16" height="16" />
</a>
]
<:info_racine_site:>
</h2>
#INCLURE{fond=formulaires/selecteur/lister, quoi=racine, env}
</div>
</BOUCLE_test_racine>
<BOUCLE_contenu(HIERARCHIE){id_rubrique}{tout}{n-4,4}>
<div class="frame[ total_(#GRAND_TOTAL|min{#TOTAL_BOUCLE|moins{1}})][ frame_(#COMPTEUR_BOUCLE|moins{#GRAND_TOTAL|plus{1}|max{#TOTAL_BOUCLE}}|plus{#TOTAL_BOUCLE})]">
<a href="[(#SELF|parametre_url{id_objet,#ID_PARENT|?{#ID_PARENT,0}})]" class="frame_close ajax"><img src="#CHEMIN_IMAGE{fermer-16}" alt="fermer" width="16" height="16" /></a>
<h2><a class="ajax" href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]">#TITRE</a></h2>
<div class="liste">
#INCLURE{fond=formulaires/selecteur/lister, quoi=rubriques, id_rubrique, env}
</div>
</BOUCLE_contenu>
</BOUCLE_rub>

7
formulaires/selecteur/jquery.picker.js

@ -44,6 +44,7 @@ item_picked et picker doivent seulement etre voisins
}
jQuery.fn.item_pick = function(id_item,name,title,type){
var label_supprimer = (typeof selecteur_label_supprimer != 'undefined') ? selecteur_label_supprimer : 'del';
var picker = this.parents('.item_picker');
var picked = picker.siblings('ul.item_picked');
if (!picked.length) {
@ -51,7 +52,7 @@ item_picked et picker doivent seulement etre voisins
picked = picker.siblings('ul.item_picked');
}
var select = picked.is('.select');
var obligatoire = picked.is('obligatoire');
var obligatoire = picked.is('.obligatoire');
if (select)
picked.html('');
else
@ -65,8 +66,8 @@ item_picked et picker doivent seulement etre voisins
picked.append('<li class="last on '+type+'">'
+'<input type="hidden" name="'+name+'[]" value="'+id_item+'"/>'
+ title
+((select&&obligatoire)?"":" <a href='#' onclick='jQuery(this).item_unpick();return false;'>"
+"<img src='"+img_unpick+"' /></a>"
+((select&&obligatoire)?"":" <a title='"+label_supprimer+"' href='#' onclick='jQuery(this).item_unpick();return false;'>"
+"<img alt='"+label_supprimer+"' src='"+img_unpick+"' /></a>"
)
+'<span class="sep">, </span></li>').removeClass('changing').stopAnimeajax();
// masquer le selecteur apres un pick

15
formulaires/selecteur/lister-racine-articles.html

@ -4,16 +4,15 @@
<ul class="items">
<BOUCLE_enfants(ARTICLES){id_rubrique<=0}{statut?}{pagination 100 #GET{p}}{par num titre, titre}>
<li class="article">
[(#ENV{bouton_selectionner}|oui)<a
<a
class="ouvrir ajax nohistory"
href="[(#SELF|parametre_url{objet,article}|parametre_url{id_objet,#ID_ARTICLE})]"
>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
class="choisir"
href="#"
onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','#TITRE','article');return false;"
><img
class="add"
src="#CHEMIN_IMAGE{ajouter-16.png}"
alt="ajouter"
width="16"
height="16"
/></a>]#TITRE
><:bouton_choisir:></a>]
</li>
</BOUCLE_enfants>
</ul>

18
formulaires/selecteur/lister-racine-rubriques.html

@ -4,19 +4,15 @@
<ul class="items">
<BOUCLE_enfants(RUBRIQUES){id_parent=0}{statut?}{id_secteur?}{pagination 100 #GET{p}}{par num titre, titre}>
<li class="rubrique">
[(#ENV{bouton_selectionner}|oui)<a
<a
class="ouvrir ajax nohistory"
href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"
>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
class="choisir"
href="#"
onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','#TITRE','rubrique');return false;"
><img
class="add"
src="#CHEMIN_IMAGE{ajouter-16.png}"
alt="ajouter"
width="16"
height="16"
/></a>]#TITRE<a
class="ajax"
href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"><img
class="ouvrir" src="#CHEMIN_IMAGE{fleche-droite-16.png}" alt="" /></a>
><:bouton_choisir:></a>]
</li>
</BOUCLE_enfants>
</ul>

15
formulaires/selecteur/lister-rubriques-articles.html

@ -4,16 +4,15 @@
<ul class="items">
<BOUCLE_enfants(ARTICLES){id_rubrique}{statut?}{pagination 100 #GET{p}}{par num titre, titre}>
<li class="article">
[(#ENV{bouton_selectionner}|oui)<a
<a
class="ouvrir ajax nohistory"
href="[(#SELF|parametre_url{objet,article}|parametre_url{id_objet,#ID_ARTICLE})]"
>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
class="choisir"
href="#"
onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','#TITRE','article');return false;"
><img
class="add"
src="#CHEMIN_IMAGE{ajouter-16.png}"
alt="ajouter"
width="16"
height="16"
/></a>]#TITRE
><:bouton_choisir:></a>]
</li>
</BOUCLE_enfants>
</ul>

18
formulaires/selecteur/lister-rubriques-rubriques.html

@ -4,19 +4,15 @@
<ul class="items">
<BOUCLE_enfants(RUBRIQUES){id_parent=#ENV{id_rubrique}}{statut?}{id_secteur?}{pagination 100 #GET{p}}{par num titre, titre}>
<li class="rubrique">
[(#ENV{bouton_selectionner}|oui)<a
<a
class="ouvrir ajax nohistory"
href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"
>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
class="choisir"
href="#"
onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','#TITRE','rubrique');return false;"
><img
class="add"
src="#CHEMIN_IMAGE{ajouter-16.png}"
alt="ajouter"
width="16"
height="16"
/></a>]#TITRE<a
class="ajax"
href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"><img
class="ouvrir" src="#CHEMIN_IMAGE{fleche-droite-16.png}" alt="" /></a>
><:bouton_choisir:></a>]
</li>
</BOUCLE_enfants>
</ul>

17
formulaires/selecteur/lister.html

@ -1,7 +1,16 @@
<BOUCLE_objets(POUR){tableau #ENV{objets}|table_valeur{afficher}}>
[(#ENV{quoi}|in_array{#ENV{objets/selectionner}}|ou{#ENV{quoi}|=={racine}|et{#ENV{racine}|oui}})
[(#SET{titre,[(#ENV{quoi}|=={racine}|?{<:info_racine_site:>,#INFO_TITRE{#ENV{quoi},#ENV{id_objet}}})]})]
<a
href="#"
class="choisir_ici"
title="<:bouton_choisir:> : #GET{titre}"
onclick="jQuery(this).item_pick('#ENV{quoi}|#ENV{id_objet}','#ENV{name,id_item}','#GET{titre}','#ENV{quoi}');return false;"
><span><:bouton_choisir:></span></a>
]
<BOUCLE_objets(POUR){tableau #ENV{objets/afficher}}>
[(#CHEMIN{formulaires/selecteur/lister-#ENV{quoi}-#VALEUR.html}|oui)
[(#SET{bouton_selectionner, [(#VALEUR|in_array{[(#ENV{objets}|table_valeur{selectionner})]}|?{' ',''})]})]
[[<strong>(#VALEUR|table_objet_sql|lister_tables_objets_sql|table_valeur{texte_objets}|_T)</strong>]
(#INCLURE{fond=formulaires/selecteur/lister-#ENV{quoi}-#VALEUR, bouton_selectionner=#GET{bouton_selectionner}, env})]
#SET{bouton_selectionner, #VALEUR|in_array{#ENV{objets/selectionner}}|oui}
[<div class="#VALEUR">[<h4 class="type_objet">(#VALEUR|table_objet_sql|lister_tables_objets_sql|table_valeur{texte_objets}|_T)</h4>]
(#INCLURE{fond=formulaires/selecteur/lister-#ENV{quoi}-#VALEUR, bouton_selectionner=#GET{bouton_selectionner}, env})</div>]
]
</BOUCLE_objets>

22
themes/spip/picker.css.html

@ -55,25 +55,41 @@ div.rub-ouverte, a.rub-ouverte { padding-#GET{right}: 10px; background: url([(#C
/* Les éléments propres à chaque objet */
<BOUCLE_objets(POUR){tableau (#REM|lister_tables_objets_sql)}>
[(#SET{petite_icone, [(#CHEMIN_IMAGE{#VALEUR{icone_objet}-12.png}|sinon{[(#CHEMIN_IMAGE{#VALEUR{icone_objet}-16.png}|image_reduire{12}|extraire_attribut{src})]})]})]
.item_picker .frame ul li.#VALEUR{type} {background:url(#GET{petite_icone}) no-repeat[ (#GET{left}) ]2px;}
ul.item_picked li.#VALEUR{type} {padding-#GET{left}:15px;background-image:url(#GET{petite_icone});}
.item_picker .[(#VALEUR{table_objet})] .type_objet {padding-#GET{left}:15px; background:url(#GET{petite_icone}) no-repeat[ (#GET{left}) ]center;}
.item_picker .frame ul li.#VALEUR{type} {background:url(#GET{petite_icone}) no-repeat[ (#GET{left}) ]2px;}
</BOUCLE_objets>
/* Styles des éléments déjà sélectionnés */
ul.item_picked,fieldset ul.item_picked {list-style:none;margin:0;padding:0;float:left;}
ul.item_picked li {margin:0 2px 2px;padding:2px;background:#eee;border:1px solid #GET{claire};float:#GET{left};clear:none;background-repeat:no-repeat;background-position: [(#GET{left}) ]center;}
ul.item_picked li span.sep {display:none;}
ul.item_picked li label {margin:0;display:inline;float:none;}
.js ul.item_picked li .checkbox {display: none;}
ul.item_picked.select li {padding:2px 0;border:0;font-weight:bold;background:none;float:none;}
ul.item_picked.select ul > li {float:#GET{left};}
ul.item_picked.changing {}
/* Le bouton pour ouvrir le sélecteur */
.picker_bouton {float:#GET{right};clear:both;}
/* Styles de la partie contenant le sélecteur */
.item_picker {clear:#GET{left};font-size:0.95em;}
.item_picker .chemin {border-bottom:1px solid #GET{claire};margin:0.5em 0 0.25em;clear:both;}
.item_picker .navigateur{border:1px solid #GET{claire};padding:0.2em;width:20em;} /* pas trop large pour une meilleure lecture */
.item_picker .chemin {background:#GET{claire}; margin:0 0 0.25em 0;padding:0.3em;clear:both;}
.item_picker .chemin .on {margin:0;}
.item_picker a.choisir_ici {display:block;text-align:center;margin:0.2em 0;}
.item_picker a.choisir_ici span{padding-#GET{left}:18px;background:transparent url('#CHEMIN_IMAGE{ajouter-16.png}') no-repeat [ (#GET{left}) ] center;}
.item_picker .liste {margin:0;max-height:300px;overflow:auto;}
.item_picker .liste .type_objet {margin:0;}
.selecteur_type_unique .item_picker .liste .type_objet{display:none;}
.item_picker .liste ul {list-style:none;margin:0;padding:0;}
.item_picker .liste li {display:block;clear:both;line-height:1.1em;list-style:none;margin:0;padding:0;position:relative;}
.item_picker .liste li:hover {background-color:[#(#GET{claire}|couleur_eclaircir)];}
.item_picker .liste a.ouvrir {color:black;text-decoration:none;display:block;line-height:16px;margin-#GET{right}:20px;padding:0.3em 0;padding-#GET{left}:2px;padding-#GET{right}:20px;background:transparent url('#CHEMIN_IMAGE{fleche-droite-16.png}') no-repeat [ (#GET{right}) ] 0.3em;}
.item_picker .liste a.choisir {display:block;width:16px;height:16px;position:absolute;#GET{right}:0;top:0;padding:0.3em 2px;text-indent:-10000px;background:url('#CHEMIN_IMAGE{ajouter-16.png}') no-repeat center center;}
.item_picker .liste a:hover,.item_picker .liste a:focus {background-color:#GET{claire};}
.item_picker .frame {background:#fff;border:1px solid #GET{foncee};width:159px;height:400px;float:#GET{left};overflow:auto;position:relative;}
.cadre .cadre_padding .item_picker .frame {width:153px;}

Loading…
Cancel
Save