component.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * Initialisation du composant export modèle
  3. *
  4. * data-default : slug du modèle d'export à mettre par défaut
  5. * data-parameters : les paramètres à renseigner pour l'export modèle
  6. * => doit contenir les clés suivantes :
  7. * - plugin (obligatoire) : le plugin ciblé
  8. * - dataset (obligatoire) : le jeu de données ciblé
  9. * - destination (facultatif) : chemin où enregistrer le fichier, ne pas mettre si on veut télécharger le fichier généré à la volée
  10. * - autres paramètres personnalisés...
  11. * data-pre-callback : string de la fonction appelée avant export (juste après affichage de modal)
  12. * data-post-callback : string de la fonction appelée après export
  13. *
  14. * @param jQuery object input l'input qui servira de support pour le composant
  15. * @return rien Affiche le modal avec les modèles trouvés pour le plugin et dataset défini
  16. */
  17. function init_components_export_model(input){
  18. var preCallback = input.attr('data-pre-callback') ? input.attr('data-pre-callback') : null;
  19. var postCallback = input.attr('data-post-callback') ? input.attr('data-post-callback') : null;
  20. var parameters = JSON.parse(input.attr('data-parameters'));
  21. $(document).ready(function(e){
  22. input.off('click').on('click', function(e){
  23. $.ajax({
  24. type: 'GET',
  25. url: 'plugin/export/modal.export.model.php',
  26. async: true,
  27. success : function(modal){
  28. if(preCallback!=null) window[preCallback]();
  29. }
  30. }).done(function(modalContent){
  31. if(!$('#export-modal').length)
  32. $('body').append(modalContent);
  33. var modal = $('#export-modal');
  34. reset_inputs(modal);
  35. $.action({
  36. action: 'export_model_search',
  37. params: parameters
  38. }, function(r){
  39. var selectExport = $('#exportModel');
  40. if(r.rows){
  41. var defaultExport = input.attr('data-default');
  42. selectExport.find('option').remove();
  43. $.each(r.rows,function(i, option){
  44. var opt = $('<option value="'+option.id+'">'+option.label+(option.description.length?' - '+option.description:'')+'</option>');
  45. if(defaultExport && defaultExport.length && option.slug === defaultExport) opt.attr('selected', true);
  46. selectExport.append(opt);
  47. });
  48. }
  49. $('#exportmodel-form').attr('data-parameters', JSON.stringify(parameters));
  50. if($('> option',selectExport).length == 1){
  51. selectExport.val($('>option',selectExport).val());
  52. if(selectExport.val()=='none'){
  53. $.message('warning', "Aucun modèle d'export existant");
  54. return;
  55. }
  56. input.find('.btn').addClass('btn-preloader');
  57. export_model_export(postCallback);
  58. return;
  59. }
  60. init_components($('#export-modal'));
  61. modal.modal('show');
  62. if(postCallback!=null) modal.attr('data-post-callback', postCallback);
  63. });
  64. });
  65. });
  66. });
  67. }