You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
316 lines
12 KiB
316 lines
12 KiB
{% extends template ~ "/layout/layout_1_col.tpl" %}
|
|
|
|
{% block content %}
|
|
<script>
|
|
var url = '{{ _p.web_ajax }}sequence.ajax.php';
|
|
var parentList = [];
|
|
var resourceId = 0;
|
|
var sequenceId = 0;
|
|
|
|
function useAsReference(type, sequenceId, itemId) {
|
|
var id = itemId || $("#item option:selected" ).val();
|
|
|
|
sequenceId = $("#sequence_id option:selected" ).val();
|
|
|
|
// Cleaning parent list.
|
|
parentList = [];
|
|
|
|
// Check if data exists and load parents
|
|
$.ajax({
|
|
url: url + '?a=load_resource&load_resource_type=parent&id=' + id + '&type='+type+'&sequence_id='+sequenceId,
|
|
success: function (data) {
|
|
if (data) {
|
|
var loadingResources = new Array(),
|
|
listLoaded = data.split(',');
|
|
|
|
listLoaded.forEach(function(value) {
|
|
var loadResource = $.ajax(url, {
|
|
data: {
|
|
a: 'get_icon',
|
|
id: value,
|
|
type: type,
|
|
sequence_id: sequenceId,
|
|
show_delete: 1
|
|
},
|
|
success: function() {
|
|
parentList.push(value);
|
|
}
|
|
});
|
|
|
|
loadingResources.push(loadResource);
|
|
});
|
|
|
|
if (loadingResources.length) {
|
|
$.when.apply($, loadingResources).done(function() {
|
|
if (loadingResources.length === 1) {
|
|
$('#parents').append(arguments[0]);
|
|
|
|
return;
|
|
}
|
|
|
|
var i;
|
|
|
|
for (i = 0; i < arguments.length; i++) {
|
|
$('#parents').append(arguments[i][0]);
|
|
|
|
if (i !== arguments.length - 1) {
|
|
$('#parents').append('<i class="fa fa-plus fa-3x sequence-plus-icon"></i>');
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
// Check if data exists and load children
|
|
$.ajax({
|
|
url: url + '?a=load_resource&load_resource_type=children&id=' + id + '&type='+type+'&sequence_id='+sequenceId,
|
|
success: function (data) {
|
|
if (data) {
|
|
var listLoaded = data.split(',');
|
|
listLoaded.forEach(function(value) {
|
|
$.ajax({
|
|
url: url + '?a=get_icon&id='+ value+'&type='+type+'&sequence_id='+sequenceId,
|
|
success:function(data){
|
|
$('#children').append(data);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
// Cleaning
|
|
$('#parents').html('');
|
|
$('#children').html('');
|
|
|
|
$.ajax({
|
|
url: url + '?a=get_icon&id='+ id+'&type='+type+'&sequence_id='+sequenceId,
|
|
success:function(data){
|
|
$('#resource').html(data);
|
|
parentList.push(id);
|
|
resourceId = id;
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
url: url + '?a=graph&type='+type+'&sequence_id='+sequenceId,
|
|
success: function (data) {
|
|
$('#show_graph').html(data);
|
|
}
|
|
});
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
var type = $('input[name="sequence_type"]').val();
|
|
// By default "set requirement" is set to false
|
|
|
|
$('button[name="set_requirement"]').prop('disabled', true);
|
|
$('#requirements').prop('disabled', true);
|
|
$('button[name="save_resource"]').prop('disabled', true);
|
|
|
|
sequenceId = $("#sequence_id option:selected" ).val();
|
|
|
|
// Load parents
|
|
$('#parents').on('click', 'a.delete_vertex, a.undo_delete', function(e) {
|
|
e.preventDefault();
|
|
|
|
var self = $(this),
|
|
parent = self.parent(),
|
|
vertexId = self.attr('data-id') || 0;
|
|
|
|
if (!vertexId) {
|
|
return;
|
|
}
|
|
|
|
if (self.is('.delete_vertex')) {
|
|
self.hide();
|
|
parent.find('.undo_delete').show();
|
|
|
|
self.parents('.parent').addClass('parent-deleted');
|
|
} else if (self.is('.undo_delete')) {
|
|
self.hide();
|
|
parent.find('.delete_vertex').show();
|
|
|
|
self.parents('.parent').removeClass('parent-deleted');
|
|
}
|
|
});
|
|
|
|
$('#parents, #resource, #children').on('click', '.parent .sequence-id', function(e) {
|
|
e.preventDefault();
|
|
|
|
var itemId = $(this).parents('.parent').data('id') || 0;
|
|
|
|
if (!itemId) {
|
|
return;
|
|
}
|
|
|
|
$('button[name="set_requirement"]').prop('disabled', false);
|
|
$('#requirements').prop('disabled', false);
|
|
$('button[name="save_resource"]').prop('disabled', false);
|
|
|
|
useAsReference(type, sequenceId, itemId);
|
|
});
|
|
|
|
// Button use as reference
|
|
|
|
$('button[name="use_as_reference"]').click(function() {
|
|
$('button[name="set_requirement"]').prop('disabled', false);
|
|
$('#requirements').prop('disabled', false);
|
|
$('#requirements').selectpicker('refresh');
|
|
$('button[name="save_resource"]').prop('disabled', false);
|
|
|
|
useAsReference(type, sequenceId);
|
|
|
|
return false;
|
|
});
|
|
|
|
// Button set requirement
|
|
|
|
$('button[name="set_requirement"]').click(function() {
|
|
$("#requirements option:selected" ).each(function() {
|
|
var id = $(this).val();
|
|
if ($.inArray(id, parentList) == -1) {
|
|
$.ajax({
|
|
url: url + '?a=get_icon&id=' + id + '&type='+type+'&sequence_id='+sequenceId,
|
|
success: function (data) {
|
|
$('#parents').append(data);
|
|
parentList.push(id);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
|
|
// Button save
|
|
$('button[name="save_resource"]').click(function(e) {
|
|
e.preventDefault();
|
|
|
|
var self = $(this).prop('disabled', true);
|
|
|
|
// parse to integer the parents IDs
|
|
parentList = parentList.map(function(id) {
|
|
return parseInt(id);
|
|
});
|
|
|
|
var deletingVertex = new Array();
|
|
|
|
// Delete all vertex confirmed to be deleted.
|
|
$('#parents .parent.parent-deleted').each(function() {
|
|
var self = $(this),
|
|
vertexId = self.data('id') || 0,
|
|
deleteVertex;
|
|
|
|
deleteVertex = $.ajax(url, {
|
|
data: {
|
|
a: 'delete_vertex',
|
|
id: resourceId,
|
|
vertex_id: vertexId,
|
|
type: type,
|
|
sequence_id: sequenceId
|
|
},
|
|
success: function() {
|
|
parentList.splice($.inArray(vertexId, parentList), 1);
|
|
}
|
|
});
|
|
|
|
deletingVertex.push(deleteVertex);
|
|
});
|
|
|
|
$.when.apply($, deletingVertex).done(function() {
|
|
if (resourceId != 0) {
|
|
var params = decodeURIComponent(parentList);
|
|
|
|
var savingResource = $.ajax(url, {
|
|
data: {
|
|
a: 'save_resource',
|
|
id: resourceId,
|
|
parents: params,
|
|
type: type,
|
|
sequence_id: sequenceId
|
|
}
|
|
});
|
|
|
|
$.when(savingResource).done(function(response) {
|
|
$('#global-modal')
|
|
.find('.modal-dialog')
|
|
.removeClass('modal-lg')
|
|
.addClass('modal-sm');
|
|
$('#global-modal')
|
|
.find('.modal-body')
|
|
.html(response);
|
|
$('#global-modal').modal('show');
|
|
|
|
self.prop('disabled', false);
|
|
|
|
useAsReference(type, sequenceId);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
$('select#sequence_id').on('change', function() {
|
|
sequenceId = $(this).val();
|
|
});
|
|
});
|
|
</script>
|
|
<div class="panel panel-default">
|
|
<div class="panel-body">
|
|
<div class="section-title-sequence">{{ 'SequenceSelection' | get_lang }}</div>
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
{{ create_sequence }}
|
|
</div>
|
|
<div class="col-md-6">
|
|
{{ select_sequence }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default">
|
|
<div class="panel-body">
|
|
<div class="section-title-sequence">{{ 'SequenceConfiguration' | get_lang }}</div>
|
|
<div class="row">
|
|
|
|
{{ configure_sequence }}
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default">
|
|
<div class="panel-body">
|
|
<div class="section-title-sequence">{{ 'SequencePreview' | get_lang }}</div>
|
|
<div class="row">
|
|
<div class="col-md-9">
|
|
<h4 class="title-sequence">
|
|
{{ 'ItemsTheReferenceDependsOn' | get_lang }}
|
|
</h4>
|
|
<div id="parents">
|
|
</div>
|
|
<div class="border-sequence">
|
|
<div class="arrow-sequence"></div>
|
|
</div>
|
|
<h4 class="title-sequence">{{ 'Item' | get_lang }}</h4>
|
|
<div id="resource">
|
|
</div>
|
|
<div class="border-sequence">
|
|
<div class="arrow-sequence"></div>
|
|
</div>
|
|
<h4 class="title-sequence">{{ 'Dependencies' | get_lang }}</h4>
|
|
<div id="children">
|
|
</div>
|
|
|
|
</div>
|
|
<div class="col-md-3">
|
|
<h4 class="title-sequence">{{ 'GraphDependencyTree' | get_lang }}</h4>
|
|
<div id="show_graph"></div>
|
|
</div>
|
|
|
|
</div>
|
|
{{ save_sequence }}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|