//CHARGEMENT DE LA PAGE
function init_plugin_factory(event){
$('#factoryForm').on('keyup','input',function(){
//Evite le flood de render lorsqu'on tape un texte
if(window.factoryRenderTimeout) clearTimeout(window.factoryRenderTimeout);
window.factoryRenderTimeout = setTimeout(function(){
factory_render();
},300);
});
$('#factoryForm').on('change','#plugin-color,#plugin-icon',factory_render);
$('#factoryForm').on('change','select',factory_render);
$('#factoryForm').on('keydown','input,select',factory_shortcut);
factory_change_template();
$('#factoryParts').on('click','li a',function(){
$('#factoryParts li a').removeClass('active');
$(this).addClass('active');
factory_render(event);
});
$('#factoryParts .nav-link.active').trigger('click');
$('#plugin').autocomplete({
action : 'factory_autocomplete_plugin',
onClick : function(selected,element){
$('#plugin').val(selected.value);
$('#pluginLabel').val(selected.label);
$('#description').val(selected.description);
$('#plugin-color').val(selected.color);
$('#plugin-icon').val(selected.icon);
init_components('#factoryForm');
}
});
$('#plugin').focus();
factory_entity_picker('#entity',function(element,r){
$('#entityLabel').val(r.label);
$('#factoryForm .field:not(:eq(0))').remove();
var firstField = $('#factoryForm .field:eq(0)');
$('.fieldSlug',firstField).val(r.rows[0].key);
$('.fieldLabel',firstField).val(r.rows[0].label);
$('.fieldType',firstField).val(r.rows[0].type);
if(r.rows[0].link){
$('.entity-picker',firstField).val(r.rows[0].link).removeClass('hidden');
init_components(firstField);
}
for(var k in r.rows){
if(k==0) continue;
factory_addline(null,r.rows[k]);
}
factory_render();
});
$('#entity-fields').sortable({
axis : 'y',
handle : '.btn-move',
update : function(){
factory_render();
}
});
}
function factory_entity_picker(element,callback){
var element = $(element);
element.attr('autocomplete','off').typeahead({
items: 5,
minLength: 2,
autoSelect : false,
selectOnBlur : false,
displayText : function(item){
return ''+item.parent+'/'+item.name+'';
},
source: function(keyword, response){
$.action({
action: 'factory_autocomplete_entity',
keyword: element.val(),
plugin: element.is('[data-all-plugin]')? false : $('#plugin').val()
},function(r){
if(r.rows != null)
response(r.rows);
});
},
matcher: function(r){
return '
'+r.name+'
';
},
afterSelect: function(item) {
element.data('selected',true);
element.val(item.name);
element.attr('data-path',item.path);
$.action({
action: 'factory_autocomplete_entity_select',
entity: item.name,
plugin: element.is('[data-all-plugin]')? false : $('#plugin').val()
},function(r){
if(callback) callback(element,r);
});
}
});
}
function factory_change_type(element){
var select = $(element);
var parent = select.parent();
if(select.val()=='entity-external-entity'){
var picker = parent.find('.entity-picker');
picker.removeClass('hidden');
picker.focus();
init_components(picker.parent());
}else{
parent.find('.entity-picker').addClass('hidden');
}
}
function factory_change_template(event){
factory_search_part();
factory_search_filters();
if(event) event.stopPropagation();
}
function factory_shortcut(event){
if(this.id=='entity' && event.keyCode==9){
event.preventDefault();
$('#factoryForm .field:eq(0) input:eq(0)').focus();
}
if($(this).hasClass('fieldType') && event.keyCode==9){
event.preventDefault();
return factory_addline(this);
}
if(event.keyCode == 107){
event.preventDefault();
return factory_addline(this);
}
if(event.keyCode == 109){
event.preventDefault();
return factory_removeline(this);
}
}
function factory_search_part(callback){
$('#factoryParts').fill({
action : 'factory_search_part',
template : $('#template').val()
},
function(){
factory_render();
if(callback) callback();
});
}
function factory_search_filters(callback){
$('#factoryFilters ul').fill({
action : 'factory_search_filters',
template : $('#template').val(),
part : $('#factoryParts li a.active').attr('data-part'),
},
function(){
if($('#factoryFilters ul li:visible').length!=0){
$('#factoryFilters h4').removeClass('hidden');
}else{
$('#factoryFilters h4').addClass('hidden');
}
$('#factoryFilters input[data-checked="true"]').prop('checked',true);
if(callback) callback();
});
}
function factory_render(event,generate){
if(generate)
if(!confirm("Souhaitez-vous générer le fichier associé à l'onglet courant ?\nSi le fichier existe déjà, il sera écrasé.")) return;
var data = $('#factoryForm').toJson();
data.part = $('#factoryParts li a.active').attr('data-part');
if(!data.part) return;
data.template = $('#template').val();
data.fields = {};
$('#factoryForm .field').each(function(i,line){
var field= {type:$('.fieldType',line).val(),label:$('.fieldLabel',line).val()} ;
var entityPicker = $(line).find('.entity-picker').val();
if(entityPicker) field.entityPath = $(line).find('.entity-picker').val();
data.fields[$('.fieldSlug',line).val()] = field;
});
data.filters = [];
$('#factoryFilters li:visible input:checked').each(function(i,line){
data.filters.push($(line).attr('data-id')) ;
});
data.generate = generate ? 1 : 0;
$('#factoryCode').load('action.php?action='+data.action,data,function(){
if(generate) $('#factory-generate-message').text("Fichier "+data.part+" généré");
$('#factoryCode').attr('class',$('#factoryParts li a.active').attr('data-langage')) ;
hljs.highlightBlock($('#factoryCode').get(0));
});
}
function factory_addline(element,data){
if(element){
var line = $(element).closest('.field');
var newline = $(line).clone();
newline.find('.entity-picker').addClass('hidden');
newline.find('.data-type-entitypicker').remove();
newline.find('input').val('');
$(line).after(newline);
}else{
var line = $('#entity-fields .field:eq(0)');
var newline = $(line).clone();
newline.find('input').val('');
$('#entity-fields').append(newline);
}
newline.find('input:eq(0)').focus();
if(data){
$('.fieldSlug',newline).val(data.key);
$('.fieldLabel',newline).val(data.label);
$('.fieldType',newline).val(data.type);
if(data.link){
$('.entity-picker',newline).val(data.link).removeClass('hidden');
}else{
$('.entity-picker',newline).val('').addClass('hidden');
}
}
}
function factory_removeline(element){
var line = $(element).closest('.field');
if($('.field').length==1){
line.find('input').val('');
line.find('input:eq(0)').focus();
}else{
prevline = line.prev('.field');
line.remove();
prevline.find('input:eq(0)').focus();
}
}