//CHARGEMENT DE LA PAGE var isProcessing = false; function init_plugin_export(){ switch($.urlParam('page')){ case 'sheet': export_model_get_dataset($('#dataset')); export_model_format_refresh(); break; default: break; } } //Init des settings function init_setting_export(parameter){ switch(parameter.section){ case 'export': break; } $('#exportmodels').sortable_table({ onSort : export_model_search }); } /* EXPORTMODELE */ //Récuperation d'une liste de exportmodel dans le tableau #exportmodels function export_model_search(callback){ var box = new FilterBox('#filters'); $('#exportmodels').fill({ action:'export_model_search', filters : box.filters(), sort : $('#exportmodels').sortable_table('get') }, function(){ if(callback!=null) callback(); }); } //Ajout ou modification d'élément exportmodel function export_model_save(){ var data = $('#exportmodel-form').toJson(); data.plugin = $('#dataset option:selected').attr('data-plugin'); $.action(data,function(r){ $('#exportmodel-form').attr('data-id',r.id); $.urlParam('id',r.id); $('#document_temporary').val(''); var modelFile = $('#exportmodel-form [data-type="dropzone"] ul > li'); modelFile.attr('data-path', r.relativePath); $('> a',modelFile).attr('href', r.filePath); $('> i.fa-times',modelFile).attr('onclick', 'export_model_delete_document(this)'); $.message('success','Export modèle enregistré'); }); } function export_model_format_refresh(){ var li = $('#document > ul > li:visible'); var tpl = ''; $('#export_format').html(''); $('.options-box').addClass('hidden'); if(li.length==0 || li.attr('data-ext')=='') return; $.action({ action: 'export_model_format_refresh', ext: li.attr('data-ext') },function(r){ for(var key in r.rows) $('#export_format').append(Mustache.render(tpl,r.rows[key])); $('#export_format').val( ($('#export_format').attr('data-value').length ? $('#export_format').attr('data-value') : li.attr('data-ext')) ); if(r.rows.length>0) $('.options-box').removeClass('hidden'); }); } //Récuperation ou edition d'élément exportmodel function export_model_edit(element){ var line = $(element).closest('tr'); $.action({ action:'export_model_edit', id:line.attr('data-id') },function(r){ $.setForm('#exportmodel-form',r); $('#exportmodel-form').attr('data-id',r.id); }); } //Suppression d'élement exportmodel function export_model_delete(element){ if(!confirm('Êtes-vous sûr de vouloir supprimer cet item ?')) return; var line = $(element).closest('tr'); $.action({ action : 'export_model_delete', id : line.attr('data-id') },function(r){ line.remove(); $.message('info','Export modèle supprimé'); }); } //Ajout de document function export_model_add_document(files){ var form = $('#exportmodel-form'); var exportmodelId = form.attr('data-id'); $.action({ action : 'export_model_add_document', id: exportmodelId, files : files, plugin: $('#dataset option:selected').attr('data-plugin') }, function(r){ form.attr('data-id', r.id); $.each(r.files, function(i, file){ var line = $('li[data-path="'+file.oldPath+'"]', form); line.attr('data-path', file.relative); line.find('a').attr('href', file.url); line.find('i.pointer').attr('onclick', 'export_model_delete_document(this)'); $('[data-type="dropzone"] input:not(:visible)', form).val(''); $.message('success', 'Fichier "'+file.name+'" sauvegardé'); }); export_model_format_refresh(); }); } //Suppression de document function export_model_delete_document(element){ if(!confirm("Êtes-vous sûr de vouloir supprimer ce fichier ?")) return; var line = $(element).closest('li'); $.action({ action : 'export_model_delete_document', path : line.attr('data-path') },function(r){ line.remove(); export_model_format_refresh(); $.message('info','Élement supprimé'); }); } //Récupération du jeu de données //associé à l'élément exportmodel function export_model_get_dataset(element){ var container = $('#dataset-container'); container.addClass('hidden'); $('#empty-files').removeClass('hidden'); $('li:not(.template)', container).remove(); var datasetSelect = $(element); var curVal = datasetSelect.val(); var pluginVal = $('option:selected',datasetSelect).attr('data-plugin'); if(!curVal || !pluginVal) return; var label = $('#label'); if(!label.length) label.val(pluginVal+': '+$('option:selected',datasetSelect).text()); if($('#slug').length && !$('#slug').val().length){ var slug = label.val().toString().toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/\-\-+/g, '-'); $('#slug').val(slug); } $.action({ action: 'export_model_get_dataset', params: { dataset: curVal, plugin: pluginVal } }, function(r){ container.removeClass('hidden'); if(r.dataset){ var showcase = $('.dataset-showcase'); var tpl = $('li.hidden',showcase).get(0).outerHTML; export_model_recursive_dataset($('> ul', showcase),tpl,r.dataset,''); } if(r.files && r.files.length) $('.dataset-example-files > ul').addLine(r.files); }); } function export_copy_macro(element,event){ event.stopPropagation(); var element = $(element); value = export_get_macro_recursive(element, []); value.reverse(); if(element.attr('data-type')!='list') value = '{{'+value.join('.').replace(/[}{]/ig,'')+'}}'; copy_string(value,element.find('>code')); } function export_get_macro_recursive(element,path){ var parent = element.parent().parent(); if(parent.attr('data-macro')!=null && parent.attr('data-macro')!='' && parent.attr('data-type')!='list'){ path.push(element.attr('data-macro')); path.concat(export_get_macro_recursive(parent,path)); }else{ path.push(element.attr('data-macro')); } return path; } function export_model_recursive_dataset(container,tpl,dataset){ var typeLabel = { 'list' : 'Liste', 'image' : 'Image', 'value': 'Valeur', 'object': 'Objet' }; $.each(dataset, function(macro, data){ data.macro = data.type == 'list' ?'{{#'+macro+'}}{{/'+macro+'}}':'{{'+macro+'}}'; data.type = data.type && data.type!='' ? data.type : 'value'; data.badge = typeLabel[data.type]; var li = $(Mustache.render(tpl, data)); li.removeClass('hidden template'); container.append(li); if(data.type=='object' || data.type=='list'){ var ul = $(''); li.append(ul); if(data.type=='list'){ data.value = data.value[0]; } export_model_recursive_dataset(ul,tpl,data.value); } }); } //Export des données en fonction du modèle //sélectionné dans la modal d'export function export_model_export(callback){ if(isProcessing) return; var modal = $('#export-modal'); var model = $('#exportModel').val(); if(model=='none') return $.message('error', 'Vous devez choisir un modèle d\'export'); callback = callback!=null ? callback : modal.attr('data-post-callback'); var parameters = JSON.parse($('#exportmodel-form').attr('data-parameters')); parameters.model = model; parameters.previousUrl = window.location.href.substring(window.location.href.lastIndexOf('/')+1); isProcessing = true; $('#export-button', modal).addClass('btn-preloader'); $.action({ action: 'export_model_export', parameters: parameters, downloadResponse: !("destination" in parameters) }, function(r){ isProcessing = false; $.message('success', "Export modèle correctement généré"); modal.modal('hide'); if(callback!=null && callback.length) window[callback](r); }, function(r){ isProcessing = false; }); }