diff --git a/.gitattributes b/.gitattributes index 611f68a30ee07f224a953ad784457d2029a1884c..fd5e9ab46d7f033f53ca7e304d2b96f698c8bb70 100644 --- a/.gitattributes +++ b/.gitattributes @@ -276,6 +276,8 @@ prive/aide_body.css -text prive/aide_menu.html -text prive/ajax_item_pick.html -text prive/ajax_item_pick_fonctions.php -text +prive/ajax_selecteur.html -text +prive/ajax_selecteur_fonctions.php -text prive/echafaudage/contenu/objet.html -text prive/echafaudage/contenu/objet_edit.html -text prive/echafaudage/contenu/objet_edit.sans_rubrique.html -text diff --git a/prive/ajax_selecteur.html b/prive/ajax_selecteur.html new file mode 100644 index 0000000000000000000000000000000000000000..ad51409e4ecd6b5b12484e049576e599774f1cbf --- /dev/null +++ b/prive/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}})] diff --git a/prive/ajax_selecteur_fonctions.php b/prive/ajax_selecteur_fonctions.php new file mode 100644 index 0000000000000000000000000000000000000000..d5194d6d848b030f616ef56152a6898cc62307ca --- /dev/null +++ b/prive/ajax_selecteur_fonctions.php @@ -0,0 +1,7 @@ +<?php + +if (!defined('_ECRIRE_INC_VERSION')) return; + +include_spip('formulaires/selecteur/generique_fonctions'); + +?> diff --git a/prive/formulaires/selecteur/ajax.html b/prive/formulaires/selecteur/ajax.html index 31765e5432cf9a0ce0bf68caaf7b4e113fdb028d..fee3a58c4fb5fa3a725e29da5b7eefc60e62be59 100644 --- a/prive/formulaires/selecteur/ajax.html +++ b/prive/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'>[<a href='[(#SELF|parametre_url{picker,1})]' class='ajax'>#GET{bouton_modif}</a>]</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'> -[<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>] + 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> ] diff --git a/prive/formulaires/selecteur/generique.html b/prive/formulaires/selecteur/generique.html index 99fc8e60fe0bcf8ea64ea3f4618fc861a2340bb9..d9c21f1d95fcd49849b5a86b170ceb185ac3e2fb 100644 --- a/prive/formulaires/selecteur/generique.html +++ b/prive/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} ] diff --git a/prive/formulaires/selecteur/generique_fonctions.php b/prive/formulaires/selecteur/generique_fonctions.php index 8936e31cb98007718f1e15baf5e5efa4c7015004..d569d8cd688f94b649a480e5969a35445559a95a 100644 --- a/prive/formulaires/selecteur/generique_fonctions.php +++ b/prive/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)); } ?> diff --git a/prive/formulaires/selecteur/hierarchie-articles.html b/prive/formulaires/selecteur/hierarchie-articles.html index 2fdeac173f7090774c878890172f8d48f250aeab..0b9a7abbcd192412f4a7175ba4873a7240be40b4 100644 --- a/prive/formulaires/selecteur/hierarchie-articles.html +++ b/prive/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}> > <a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax">#TITRE</a></BOUCLE_chemin> > <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"> + > </span><BOUCLE_chemin(HIERARCHIE){id_rubrique}><a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider"> + > </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> diff --git a/prive/formulaires/selecteur/hierarchie-racine.html b/prive/formulaires/selecteur/hierarchie-racine.html index 1603fd6fe34810f67e4c637007b73022fbbbcbad..f275ed8ea3d331b3097870b7f846d2c482b2842e 100644 --- a/prive/formulaires/selecteur/hierarchie-racine.html +++ b/prive/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> diff --git a/prive/formulaires/selecteur/hierarchie-rubriques.html b/prive/formulaires/selecteur/hierarchie-rubriques.html index e3b6a059efb321c5f3f30e3ad0a17328a74915df..ef78f3070176c9b0c5faaafd0e7a16f26e9728bf 100644 --- a/prive/formulaires/selecteur/hierarchie-rubriques.html +++ b/prive/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}> > <a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax">#TITRE</a></BOUCLE_chemin> > <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"> + > </span><BOUCLE_chemin(HIERARCHIE){id_rubrique}><a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider"> + > </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> diff --git a/prive/formulaires/selecteur/jquery.picker.js b/prive/formulaires/selecteur/jquery.picker.js index eae4669a781135b0dfea08df68480e6892930378..7fc54c50c2f8530a5dfb82b81a0058b574babe81 100644 --- a/prive/formulaires/selecteur/jquery.picker.js +++ b/prive/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 diff --git a/prive/formulaires/selecteur/lister-racine-articles.html b/prive/formulaires/selecteur/lister-racine-articles.html index 7f0dea58595d26021184e687bcd415c654b67775..d83adaf393df7ed1a311356c6e00ebc019f5140c 100644 --- a/prive/formulaires/selecteur/lister-racine-articles.html +++ b/prive/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> diff --git a/prive/formulaires/selecteur/lister-racine-rubriques.html b/prive/formulaires/selecteur/lister-racine-rubriques.html index dadc3078907929a76060297bfa30b397cd494ea3..e204d6a234d6c4827e462c88794942334eb6eb14 100644 --- a/prive/formulaires/selecteur/lister-racine-rubriques.html +++ b/prive/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> diff --git a/prive/formulaires/selecteur/lister-rubriques-articles.html b/prive/formulaires/selecteur/lister-rubriques-articles.html index 6f1556062ef2f06226a4b815cf9e2149898907c2..d92cc0dea7aa99ed1883065ab07181cdace6c3c6 100644 --- a/prive/formulaires/selecteur/lister-rubriques-articles.html +++ b/prive/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> diff --git a/prive/formulaires/selecteur/lister-rubriques-rubriques.html b/prive/formulaires/selecteur/lister-rubriques-rubriques.html index 3b2c73fd1862e629e854189d2b0a826a24efc2eb..0f3666de511cc8b4033d08567ea0c9ac7316a5b0 100644 --- a/prive/formulaires/selecteur/lister-rubriques-rubriques.html +++ b/prive/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> diff --git a/prive/formulaires/selecteur/lister.html b/prive/formulaires/selecteur/lister.html index 1548cfbd65d003a8d2d0d1f686df46642c72146a..8e31017c4c53e055b2ee1ea8c799d9a9a0435781 100644 --- a/prive/formulaires/selecteur/lister.html +++ b/prive/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> diff --git a/prive/themes/spip/picker.css.html b/prive/themes/spip/picker.css.html index 401e8919a25cd5aa1235b60a160ebdbf8b46ad9a..0f538ac72cdbd4f177dd864a60718853b1db93d0 100644 --- a/prive/themes/spip/picker.css.html +++ b/prive/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;}