Ticket #30 (new task)

Opened 2 years ago

Last modified 2 months ago

intégration d'une lib ajax et de plugins de templates associés

Reported by: laurentj Assigned to:
Priority: highest Milestone: jelix 1.1
Component: jelix:plugins Version: 1.0alpha5
Severity: major Keywords:
Cc: Php version:
Review: Hosting Provider:
Documentation needed: 0 Blocking:

Description

Jelix devrait fournir de quoi faire de l'ajax facilement dans les templates. Voir la page fr/drafts/ajax.

Attachments

link_to_remote.diff (3.5 kB) - added by julienj on 06/01/08 17:05:35.
Function link_to_remote

Change History

04/11/07 11:11:14 changed by Aubanel MONNIER

J'ai utilisé jQuery pour faire ce genre de choses dans mon appli. La seule difficulté que j'aie rencontré, c'est l'utilisation intensive des accolades en js qui force l'utilisation de {literal}, et donc d'assigner les variables en dehors de ces tags, comme c'est le cas dans cet example pour la variable srs.

<script type="text/javascript">
srs='{$srs_id}';
{literal}
function s(link){ $(link).text('Ø');$(link).siblings('ul.review').show('slow');}
function h(link){ $(link).text('…');$(link).siblings('ul.review').hide('slow');}
show = function (){s(this);};hide = function hide(){h(this);};
toggle= function(){ if ($(this).text() == '…') s(this); else h(this);};

 $(document).ready(function(){
	$('#srs-coverage ul.review').hide().before(' <a href="#" class="more">&hellip;<\/a>'); //hide by default, add controls to unfold
	title = $('#srs-coverage h2');
	title.html(title.html()+' <a href="#" id="showAll">&hellip;<\/a> <a href="#" id="hideAll">Ø<\/a>'); //add global controls to fold/unfold all
	if (srs!='') $('#'+srs).siblings('a.more').each(show); //if $srs_id is set, show it by default
	$('#srs-coverage a.more').click(toggle);
	$('#showAll').click(function(){$('#srs-coverage a.more').each(show);});
	$('#hideAll').click(function(){$('#srs-coverage a.more').each(hide);});
	$('a.warning').click(function(){return confirm('Are you sure you want to '+this.title);});
 });
{/literal}
</script>

Sinon je ne vois rien qui ne puisse se faire facilement avec des plugins. Pourquoi s'attachere à une librairie précise ?

04/11/07 11:42:49 changed by laurentj

  • isp changed.
  • blocking changed.
  • phpversion changed.

je ne vois rien qui ne puisse se faire facilement avec des plugins

C'est une chose qu'il faut en effet étudier. Si on trouve à l'usage des choses lourdes à écrire, qui pourrait être fait via un plugin, il faudra le faire. Si on ne trouve rien à simplifier, ce n'est pas grave (et tant mieux finalement)

Pourquoi s'attacher à une librairie précise ?

Essayer de proposer un library qui collerait mieux au framework par exemple. Mais une des reflexions que l'on s'est faite, et justement parce qu'on ne trouve pas grand chose à faire coté plugins, peut être cela n'est finalement pas nécessaire de livrer une lib.

Je pense que c'est à l'usage que l'on verra ce qui est le mieux.

09/05/07 12:17:10 changed by laurentj

  • owner set to laurentj.
  • component changed from jelix to Site web.
  • milestone changed from Jelix 1.0 to Jelix 1.2.

09/05/07 12:48:14 changed by laurentj

  • priority changed from normal to highest.

02/26/08 18:24:41 changed by laurentj

  • review changed.

JQuery va être intégré dans Jelix 1.1. reste à faire des plugins de templates. Quelques plugins qui pourrait être utilisés ( inspiré de http://www.symfony-project.org/book/1_0/11-Ajax-Integration et http://api.rubyonrails.org/classes/ActionView/Helpers/ )

  • {remote_function 'element_id', 'action_selector', array(action parameters), $options}
  • {link_to_remote 'label', 'element_id','action_selector', array(action parameters), $options}
  • {periodically_call_remote 'element_id', 'action_selector', array(action parameters), $frequency, $options}

$options est un tableau d'options :

  • 'position', pour indiquer où insérer le contenu reçu par rapport à element_id
  • 'failure', indique l'id de l'element qui reçevra le contenu en cas d'erreur
  • 'condition', un script js qui teste une condition pour que l'action se fasse
  • 'method', la methode pour envoyer les infos
  • 'script_allowed', boolean pour dire si le js reçu peut être executé
  • 'onbefore', 'onafter', 'onloading', 'onloaded', 'onsuccess', 'onfailure', 'oncomplete' : scripts js à executer lors de ces évènements générées pendant la requête ajax

Autre plugins qui pourrait être interressant

  • {visual_effect 'nom_fonction_js_a_creer', 'type_effet', 'element_id', array(autre options)}
  • {draggable_element 'element_id', array(datas to send), $revert}
  • {drop_receiving_element 'element_id', 'element_id','action_selector', array(action parameters), $options} (dans les options, il y a une option supplémentaire, ondrop)
  • {sortable_element 'element_id','action_selector', array(action parameters), $options}

Les autres plugins symfony conçernant les formulaires font doublons avec jForms ;-)

05/08/08 11:32:57 changed by laurentj

  • owner deleted.
  • docneeded changed.
  • component changed from web site to jelix:plugins.

06/01/08 17:04:57 changed by julienj

  • review set to review?.

Proposition du plugin link_to_remote

exemple :

{link_to_remote
 'Link',    
 'result',    
 'test~default:ajax', array('id'=>'34'),   
 array(
   'position'=>'html',   
   'method'=>'GET',   
   'beforeSend'=>'alert("beforeSend")',   
   'complete'=>'alert("complete")',  
   'error'=>'alert("error")',   
)}
<div id="result"></div>

06/01/08 17:05:35 changed by julienj

  • attachment link_to_remote.diff added.

Function link_to_remote

06/10/08 16:31:37 changed by laurentj

  • review changed from review? to review+.
  • milestone changed from Jelix 1.2 to Jelix 1.1 beta 1.

OK, this plugin seems ok to me. I'm going to commit it into the trunk.

For other plugins, please create a specific ticket for each plugins.

06/16/08 12:13:59 changed by laurentj

  • review deleted.

06/18/08 13:07:38 changed by laurentj

  • milestone changed from Jelix 1.1 beta 1 to jelix 1.1.
Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed