window.ajax_calls = [];
window.issue_data = {};
$.real_action = $.action;
$.action = function(data,success,error,progress) {
if (!Date.now) Date.now = function() { return new Date().getTime(); }
ajax_calls.push({request : data,time:Date.now() });
if(ajax_calls.length >10) ajax_calls.shift();
$.real_action(data,success,error,progress);
}
//CHARGEMENT DE LA PAGE
function init_plugin_issue(){
window.documentLoaded = false;
switch($.urlParam('page')){
case 'sheet.report':
if($('.issue').hasClass('readonly')){
$('#assign,#reportState,#tags').attr('readonly','readonly');
init_components();
}
issue_issue_event_search();
break;
case 'list.issue':
$('#issuereports').sortable_table({
onSort : issue_issuereport_search
});
break
}
window.documentLoaded = true;
}
function issue_add(){
var button = $('.issue-declare-button');
if(button.attr('data-disabled')=='1') return;
button.attr('data-disabled',1);
button.find('i.fa-bug').addClass('hidden');
button.find('i.fa-cog').removeClass('hidden');
issue_data.height = window.screen.availHeight;
issue_data.width = window.screen.availWidth;
issue_data.browser = '';
//on utilise pas navigator.appName qui est un fake la plupart du temps
issue_data.browser = issue_detect_browser();
issue_data.browserVersion = navigator.appVersion;
issue_data.online = navigator.onLine;
issue_data.os = navigator.platform;
issue_data.from = document.location.href;
issue_data.history = JSON.stringify(ajax_calls);
var modal = $('#issue-report-modal');
reset_inputs(modal);
$('.issue-screenshot').addClass('hidden').children().remove();
$('span.badge.badge-tag.active', modal).removeAttr('style').removeClass('active');
init_components('#issue-report-modal');
modal.modal({
backdrop: 'static',
show: true
});
modal.on('hidden.bs.modal', function () {
button.removeAttr('data-disabled');
});
for(var key in issue_data){
var element = $('[data-uid="'+key+'"]', modal);
if(element.length == 0) continue;
element.html(issue_data[key] == true ? 'OUI': issue_data[key]);
}
button.find('i.fa-cog').addClass('hidden');
button.find('i.fa-bug').removeClass('hidden');
}
function issue_screenshot(){
//Check if IE
if (window.navigator.userAgent.indexOf("MSIE ") > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)){
alert('Unsupported html2canvas librairy (using ES6 features)');
console.warn('Unsupported html2canvas librairy (using ES6 features)');
return;
}
$('#issue-report-modal').modal('hide');
setTimeout(function(){
html2canvas(document.querySelector("html")).then(function(canvas){
$('#issue-report-modal').modal('show');
issue_data.screenshot = canvas.toDataURL('image/jpg');
$('.issue-screenshot').removeClass('hidden').html('');
$('.issue-screenshot img').click(function(){
var image = new Image();
image.src = issue_data.screenshot;
var popup = window.open("");
popup.document.write(image.outerHTML);
});
});
},500);
}
function issue_send(element){
var sendButton = $(element);
var closeButton = sendButton.closest('.modal-footer').find('.close-button');
var modal = $('#issue-report-modal');
var button = $('.issue-declare-button');
sendButton.attr('disabled', true);
closeButton.attr('disabled', true);
sendButton.html(' En cours d\'envoi...');
issue_data.action = 'issue_issuereport_save';
issue_data.tags = $('.issue-modal-tags').val();
data = $.extend(issue_data,$('#issue-report-modal').toJson());
$.action(data,function(response){
issue_data = {};
reset_inputs('#issue-report-modal');
init_components('#issue-report-modal');
sendButton.html(' Envoyer');
sendButton.attr('disabled', false);
closeButton.attr('disabled', false);
modal.modal('hide');
$.message('info','Rapport envoyé
> Consulter le rapport',10000);
},function(error){
button.removeAttr('data-disabled');
sendButton.html(' Envoyer');
sendButton.attr('disabled', false);
closeButton.attr('disabled', false);
sendButton.removeClass('hidden');
issue_issuereport_search();
});
}
function issue_detect_browser(){
// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1 - 68
var isChrome = Boolean(window.chrome);
// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;
if(isOpera) return 'opera';
if(isFirefox) return 'firefox';
if(isChrome) return 'chrome';
if(isSafari) return 'safari';
if(isIE) return 'ie';
if(isEdge) return 'edge';
if(isBlink) return 'blink';
return 'inconnu';
}
function issue_follow_toggle(element){
$.action({
action : 'issue_follow_toggle',
id : $('#issuereport-form').attr('data-id'),
state : $(element).hasClass('followed') ? 0 : 1
},function(){
//@TODO: Améliorer la mise à jour de la liste des followers (passer via du moustache ?)
$('.issue-followers').load(document.URL + ' .issue-followers>*');
$(element).toggleClass('followed');
});
}
//Enregistrement des configurations
function issue_setting_save(){
$.action({
action : 'issue_setting_save',
fields : $('#issue-setting-form').toJson()
},function(){
$.message('success','Enregistré');
});
}
/** ISSUEREPORT **/
//Récuperation d'une liste de issuereport dans le tableau #issuereports
function issue_issuereport_search(callback){
var box = new FilterBox('#filters');
$('#issuereports').fill({
action:'issue_issuereport_search',
filters : box.filters(),
differential: true,
onlyMine: $('#onlyMine').prop('checked'),
sort : $('#issuereports').sortable_table('get'),
tags : $('#report-tags').val()
},function(response){
if(callback!=null) callback();
});
}
//changement d'une meta de ticket (état, assiignation, tags...)
var tagsVal = $('#tags').val();
function issue_issuereport_meta_save(){
if(!window.documentLoaded) return;
$.action({
action : 'issue_issuereport_meta_save',
id : $('#issuereport-form').attr('data-id'),
assign : $('#assign').val(),
tags : $('#tags').val(),
state : $('#reportState').val()
},function(r){
tagsVal = $('#tags').val();
issue_issue_event_search();
},function(r){
$.each(tagsVal.split(','),function(i, val){
var badge = $('.data-type-tagcloud span[data-slug="'+val+'"]');
badge.addClass('active').css({
background: badge.attr('data-color'),
border: '1px solid '+badge.attr('data-color'),
color: '#fff'
});
});
});
}
//Suppression d'élement issuereport
function issue_issuereport_delete(element){
if(!confirm('Êtes-vous sûr de vouloir supprimer ce ticket ?')) return;
var line = $(element).closest('li');
$.action({
action : 'issue_issuereport_delete',
id : line.attr('data-id')
},function(r){
line.remove();
$.message('info','Ticket supprimé');
});
}
/** ISSUEEVENT **/
//Récuperation d'une liste de issueevent dans le tableau #issueevents
function issue_issue_event_search(callback){
var stateTpl = $('.issue-state.hidden:eq(0)').get(0).outerHTML;
var assignationTpl = $('.issue-assignation.hidden:eq(0)').get(0).outerHTML;
var tagTpl = $('.issue-tag.hidden:eq(0)').get(0).outerHTML;
$('.issue-events').fill({
differential : true,
action:'issue_issue_event_search',
issue : $('#issuereport-form').attr('data-id'),
templating : function(data,element,defaultTpl){
if(data.type == 'state') return stateTpl;
if(data.type == 'assignation') return assignationTpl;
if(data.type == 'tag') return tagTpl;
return defaultTpl;
},
showing : function(item,i){
item.css({
transform:'scale(0)',
transition:'all 0.2s ease-in-out',
opacity : 0
}).removeClass('hidden');
setTimeout(function(){
item.css({
transform:'scale(1)',
opacity : 1
})
},(i+1)*10);
}
},function(response){
$('.comment-message [data-mention-type="object"]').each(function(i,element){
element = $(element);
element.html('#'+element.attr('data-mention-value')+'')
});
if(callback!=null) callback();
});
}
//Ajout ou modification d'élément issueevent
function issue_issue_event_save(element){
if(isProcessing) return;
var sendButton = $(element);
var btnContent = sendButton.html();
var data = $('#issue-event-form').toJson();
data.issue = $('#issuereport-form').attr('data-id');
sendButton.html(' Envoi en cours').addClass('disabled').attr('disabled',true);
isProcessing = true;
$.action(data,function(r){
$('#issue-event-form').attr('data-id','');
$('#content').trumbowyg('html','');
issue_issue_event_search();
$.message('success','Enregistré');
isProcessing = false;
sendButton.html(btnContent).removeClass('disabled').removeAttr('disabled');
}, function(r){
isProcessing = false;
sendButton.html(btnContent).removeClass('disabled').removeAttr('disabled');
});
}
//Récuperation ou edition d'élément issueevent
function issue_issue_event_edit(element){
var line = $(element).closest('.issue-event');
$.action({action:'issue_issue_event_edit',id:line.attr('data-id')},function(r){
$.setForm('#issue-event-form',r);
$('#issue-event-form').attr('data-id',r.id);
$('#content').trumbowyg('html',r.content);
init_components();
window.location = '#issue-event-form';
});
}
//Suppression d'élement issueevent
function issue_issue_event_delete(element){
if(!confirm('Êtes vous sûr de vouloir supprimer ce commentaire ?')) return;
var line = $(element).closest('.issue-event');
if($('.issue-events .issue-comment:visible').length == 1){
if(!confirm('Si vous supprimez le dernier commentaire, l\'intégralité du rapport sera supprimé')) return;
}
$.action({
action : 'issue_issue_event_delete',
id : line.attr('data-id')
},function(r){
line.css({
transform : 'translateY(-100px)',
opacity:0
});
setTimeout(function(){
line.remove();
if(r.redirect) window.location = r.redirect;
},200);
});
}