- added new confirmation dialog for copy&paste signature updates, closed #366

This commit is contained in:
Exodus4D
2016-10-30 01:14:07 +02:00
parent 9f60f2c33f
commit f6638508b5
9 changed files with 189 additions and 103 deletions

View File

@@ -51,7 +51,6 @@ define([
headUserShipClass: 'pf-head-user-ship', // class for "user settings" link
userShipImageClass: 'pf-head-user-ship-image', // class for "current user ship image"
headActiveUserClass: 'pf-head-active-user', // class for "active user" link
headCurrentLocationClass: 'pf-head-current-location', // class for "show current location" link
headProgramStatusClass: 'pf-head-program-status', // class for "program status" notification
// footer
@@ -430,7 +429,7 @@ define([
});
// current location
$('.' + config.headCurrentLocationClass).find('a').on('click', function(){
$('#' + Util.config.headCurrentLocationId).find('a').on('click', function(){
Util.getMapModule().getActiveMap().triggerMenuEvent('SelectSystem', {systemId: $(this).data('systemId') });
});
@@ -886,7 +885,7 @@ define([
* @param locationData
*/
var updateHeaderCurrentLocation = function(locationData){
var currentLocationElement = $('.' + config.headCurrentLocationClass);
var currentLocationElement = $('#' + Util.config.headCurrentLocationId);
var linkElement = currentLocationElement.find('a');
var textElement = linkElement.find('span');

View File

@@ -454,6 +454,39 @@ define([
*/
$.fn.updateSignatureTableByClipboard = function(systemData, clipboard, options){
var requestData = function(){
// lock update function until request is finished
lockSignatureTable();
// lock copy during request (prevent spamming (ctrl + c )
disableCopyFromClipboard = true;
var requestData = {
signatures: signatureData,
deleteOld: (options.deleteOld) ? 1 : 0,
systemId: parseInt(systemData.id)
};
$.ajax({
type: 'POST',
url: Init.path.saveSignatureData,
data: requestData,
dataType: 'json'
}).done(function(responseData){
unlockSignatureTable(true);
// updates table with new/updated signature information
moduleElement.updateSignatureTable(responseData.signatures, false);
}).fail(function( jqXHR, status, error) {
var reason = status + ' ' + error;
Util.showNotify({title: jqXHR.status + ': Update signatures', text: reason, type: 'warning'});
$(document).setProgramStatus('problem');
}).always(function() {
unlockSignatureTable(true);
disableCopyFromClipboard = false;
});
};
// check if copy&paste is enabled
if( !disableCopyFromClipboard ){
var moduleElement = $(this);
@@ -462,38 +495,30 @@ define([
var signatureData = parseSignatureString(systemData, clipboard);
if(signatureData.length > 0){
// save signature data
// valid signature data parsed
// lock update function until request is finished
lockSignatureTable();
// check if signatures will be added to a system where character is currently in
// if user is not in any system -> id === undefined -> no "confirmation required
var currentLocationData = Util.getCurrentLocationData();
if(
currentLocationData.id &&
currentLocationData.id !== systemData.id
){
// lock copy during request (prevent spamming (ctrl + c )
disableCopyFromClipboard = true;
var systemNameStr = (systemData.name === systemData.alias) ? '"' + systemData.name + '"' : '"' + systemData.alias + '" (' + systemData.name + ')';
systemNameStr = '<span class="txt-color txt-color-warning">' + systemNameStr + '</span>';
var requestData = {
signatures: signatureData,
deleteOld: (options.deleteOld) ? 1 : 0,
systemId: parseInt(systemData.id)
};
$.ajax({
type: 'POST',
url: Init.path.saveSignatureData,
data: requestData,
dataType: 'json'
}).done(function(responseData){
unlockSignatureTable(true);
// updates table with new/updated signature information
moduleElement.updateSignatureTable(responseData.signatures, false);
}).fail(function( jqXHR, status, error) {
var reason = status + ' ' + error;
Util.showNotify({title: jqXHR.status + ': Update signatures', text: reason, type: 'warning'});
$(document).setProgramStatus('problem');
}).always(function() {
unlockSignatureTable(true);
disableCopyFromClipboard = false;
});
var msg = '';
msg += 'Update signatures in ' + systemNameStr + ' ? This not your current location, "' + currentLocationData.name + '" !';
bootbox.confirm(msg, function(result) {
if(result){
requestData();
}
});
}else{
// current system selected -> no "confirmation" required
requestData();
}
}
}
};
@@ -760,19 +785,6 @@ define([
};
Render.showModule(moduleConfig, moduleData);
// event listener for global "paste" signatures into the page -------------------------------------------------
$(document).off('paste').on('paste', function(e){
// do not read clipboard if pasting into form elements
if(
$(e.target).prop('tagName').toLowerCase() !== 'input' &&
$(e.target).prop('tagName').toLowerCase() !== 'textarea'
){
var clipboard = (e.originalEvent || e).clipboardData.getData('text/plain');
moduleElement.updateSignatureTableByClipboard(systemData, clipboard, {});
}
});
};
/**
@@ -1829,8 +1841,9 @@ define([
/**
* set module observer and look for relevant signature data to update
* @param moduleElement
* @param systemData
*/
var setModuleObserver = function(moduleElement){
var setModuleObserver = function(moduleElement, systemData){
var tablePrimaryElement = $('.' + config.sigTablePrimaryClass);
var dataTablePrimary = signatureTable.DataTable();
var signatureTableApi = signatureTable.api();
@@ -1857,6 +1870,20 @@ define([
// check delete button
checkDeleteSignaturesButton();
});
// event listener for global "paste" signatures into the page -------------------------------------------------
$(document).off('paste').on('paste', function(e){
// do not read clipboard if pasting into form elements
if(
$(e.target).prop('tagName').toLowerCase() !== 'input' &&
$(e.target).prop('tagName').toLowerCase() !== 'textarea'
){
var clipboard = (e.originalEvent || e).clipboardData.getData('text/plain');
moduleElement.updateSignatureTableByClipboard(systemData, clipboard, {});
}
});
};
/**
@@ -1965,16 +1992,19 @@ define([
type: 'POST',
url: Init.path.getSignatures,
data: requestData,
dataType: 'json'
dataType: 'json',
context: {
systemData: systemData
}
}).done(function(signatureData){
var signatureTableData = formatSignatureData(systemData, signatureData, fullSignatureOptions);
var signatureTableData = formatSignatureData(this.systemData, signatureData, fullSignatureOptions);
// draw signature table
moduleElement.drawSignatureTable(signatureTableData, systemData);
moduleElement.drawSignatureTable(signatureTableData, this.systemData);
// set module observer
setModuleObserver(moduleElement);
setModuleObserver(moduleElement, this.systemData);
}).fail(function( jqXHR, status, error) {
var reason = status + ' ' + error;
Util.showNotify({title: jqXHR.status + ': Get signatures', text: reason, type: 'warning'});

View File

@@ -34,6 +34,7 @@ define([
// head
headMapTrackingId: 'pf-head-map-tracking', // id for "map tracking" toggle (checkbox)
headCharacterSwitchId: 'pf-head-character-switch', // id for "character switch" popover
headCurrentLocationId: 'pf-head-current-location', // id for "show current location" element
// menu
menuButtonFullScreenId: 'pf-menu-button-fullscreen', // id for menu button "fullscreen"
@@ -1717,6 +1718,18 @@ define([
return Init.currentSystemData;
};
/**
* get current location data
* -> system data where current user is located
* @returns {{id: *, name: *}}
*/
var getCurrentLocationData = function(){
var currentLocationLink = $('#' + config.headCurrentLocationId).find('a');
return {
id: currentLocationLink.data('systemId'),
name: currentLocationLink.data('systemName')
};
};
/**
* get all "open" dialog elements
@@ -1881,6 +1894,7 @@ define([
getCurrentUserData: getCurrentUserData,
setCurrentSystemData: setCurrentSystemData,
getCurrentSystemData: getCurrentSystemData,
getCurrentLocationData: getCurrentLocationData,
getCurrentUserInfo: getCurrentUserInfo,
getCurrentCharacterLog: getCurrentCharacterLog,
setDestination: setDestination,

File diff suppressed because one or more lines are too long

View File

@@ -51,7 +51,6 @@ define([
headUserShipClass: 'pf-head-user-ship', // class for "user settings" link
userShipImageClass: 'pf-head-user-ship-image', // class for "current user ship image"
headActiveUserClass: 'pf-head-active-user', // class for "active user" link
headCurrentLocationClass: 'pf-head-current-location', // class for "show current location" link
headProgramStatusClass: 'pf-head-program-status', // class for "program status" notification
// footer
@@ -430,7 +429,7 @@ define([
});
// current location
$('.' + config.headCurrentLocationClass).find('a').on('click', function(){
$('#' + Util.config.headCurrentLocationId).find('a').on('click', function(){
Util.getMapModule().getActiveMap().triggerMenuEvent('SelectSystem', {systemId: $(this).data('systemId') });
});
@@ -886,7 +885,7 @@ define([
* @param locationData
*/
var updateHeaderCurrentLocation = function(locationData){
var currentLocationElement = $('.' + config.headCurrentLocationClass);
var currentLocationElement = $('#' + Util.config.headCurrentLocationId);
var linkElement = currentLocationElement.find('a');
var textElement = linkElement.find('span');

View File

@@ -454,6 +454,39 @@ define([
*/
$.fn.updateSignatureTableByClipboard = function(systemData, clipboard, options){
var requestData = function(){
// lock update function until request is finished
lockSignatureTable();
// lock copy during request (prevent spamming (ctrl + c )
disableCopyFromClipboard = true;
var requestData = {
signatures: signatureData,
deleteOld: (options.deleteOld) ? 1 : 0,
systemId: parseInt(systemData.id)
};
$.ajax({
type: 'POST',
url: Init.path.saveSignatureData,
data: requestData,
dataType: 'json'
}).done(function(responseData){
unlockSignatureTable(true);
// updates table with new/updated signature information
moduleElement.updateSignatureTable(responseData.signatures, false);
}).fail(function( jqXHR, status, error) {
var reason = status + ' ' + error;
Util.showNotify({title: jqXHR.status + ': Update signatures', text: reason, type: 'warning'});
$(document).setProgramStatus('problem');
}).always(function() {
unlockSignatureTable(true);
disableCopyFromClipboard = false;
});
};
// check if copy&paste is enabled
if( !disableCopyFromClipboard ){
var moduleElement = $(this);
@@ -462,38 +495,30 @@ define([
var signatureData = parseSignatureString(systemData, clipboard);
if(signatureData.length > 0){
// save signature data
// valid signature data parsed
// lock update function until request is finished
lockSignatureTable();
// check if signatures will be added to a system where character is currently in
// if user is not in any system -> id === undefined -> no "confirmation required
var currentLocationData = Util.getCurrentLocationData();
if(
currentLocationData.id &&
currentLocationData.id !== systemData.id
){
// lock copy during request (prevent spamming (ctrl + c )
disableCopyFromClipboard = true;
var systemNameStr = (systemData.name === systemData.alias) ? '"' + systemData.name + '"' : '"' + systemData.alias + '" (' + systemData.name + ')';
systemNameStr = '<span class="txt-color txt-color-warning">' + systemNameStr + '</span>';
var requestData = {
signatures: signatureData,
deleteOld: (options.deleteOld) ? 1 : 0,
systemId: parseInt(systemData.id)
};
$.ajax({
type: 'POST',
url: Init.path.saveSignatureData,
data: requestData,
dataType: 'json'
}).done(function(responseData){
unlockSignatureTable(true);
// updates table with new/updated signature information
moduleElement.updateSignatureTable(responseData.signatures, false);
}).fail(function( jqXHR, status, error) {
var reason = status + ' ' + error;
Util.showNotify({title: jqXHR.status + ': Update signatures', text: reason, type: 'warning'});
$(document).setProgramStatus('problem');
}).always(function() {
unlockSignatureTable(true);
disableCopyFromClipboard = false;
});
var msg = '';
msg += 'Update signatures in ' + systemNameStr + ' ? This not your current location, "' + currentLocationData.name + '" !';
bootbox.confirm(msg, function(result) {
if(result){
requestData();
}
});
}else{
// current system selected -> no "confirmation" required
requestData();
}
}
}
};
@@ -760,19 +785,6 @@ define([
};
Render.showModule(moduleConfig, moduleData);
// event listener for global "paste" signatures into the page -------------------------------------------------
$(document).off('paste').on('paste', function(e){
// do not read clipboard if pasting into form elements
if(
$(e.target).prop('tagName').toLowerCase() !== 'input' &&
$(e.target).prop('tagName').toLowerCase() !== 'textarea'
){
var clipboard = (e.originalEvent || e).clipboardData.getData('text/plain');
moduleElement.updateSignatureTableByClipboard(systemData, clipboard, {});
}
});
};
/**
@@ -1829,8 +1841,9 @@ define([
/**
* set module observer and look for relevant signature data to update
* @param moduleElement
* @param systemData
*/
var setModuleObserver = function(moduleElement){
var setModuleObserver = function(moduleElement, systemData){
var tablePrimaryElement = $('.' + config.sigTablePrimaryClass);
var dataTablePrimary = signatureTable.DataTable();
var signatureTableApi = signatureTable.api();
@@ -1857,6 +1870,20 @@ define([
// check delete button
checkDeleteSignaturesButton();
});
// event listener for global "paste" signatures into the page -------------------------------------------------
$(document).off('paste').on('paste', function(e){
// do not read clipboard if pasting into form elements
if(
$(e.target).prop('tagName').toLowerCase() !== 'input' &&
$(e.target).prop('tagName').toLowerCase() !== 'textarea'
){
var clipboard = (e.originalEvent || e).clipboardData.getData('text/plain');
moduleElement.updateSignatureTableByClipboard(systemData, clipboard, {});
}
});
};
/**
@@ -1965,16 +1992,19 @@ define([
type: 'POST',
url: Init.path.getSignatures,
data: requestData,
dataType: 'json'
dataType: 'json',
context: {
systemData: systemData
}
}).done(function(signatureData){
var signatureTableData = formatSignatureData(systemData, signatureData, fullSignatureOptions);
var signatureTableData = formatSignatureData(this.systemData, signatureData, fullSignatureOptions);
// draw signature table
moduleElement.drawSignatureTable(signatureTableData, systemData);
moduleElement.drawSignatureTable(signatureTableData, this.systemData);
// set module observer
setModuleObserver(moduleElement);
setModuleObserver(moduleElement, this.systemData);
}).fail(function( jqXHR, status, error) {
var reason = status + ' ' + error;
Util.showNotify({title: jqXHR.status + ': Get signatures', text: reason, type: 'warning'});

View File

@@ -34,6 +34,7 @@ define([
// head
headMapTrackingId: 'pf-head-map-tracking', // id for "map tracking" toggle (checkbox)
headCharacterSwitchId: 'pf-head-character-switch', // id for "character switch" popover
headCurrentLocationId: 'pf-head-current-location', // id for "show current location" element
// menu
menuButtonFullScreenId: 'pf-menu-button-fullscreen', // id for menu button "fullscreen"
@@ -1717,6 +1718,18 @@ define([
return Init.currentSystemData;
};
/**
* get current location data
* -> system data where current user is located
* @returns {{id: *, name: *}}
*/
var getCurrentLocationData = function(){
var currentLocationLink = $('#' + config.headCurrentLocationId).find('a');
return {
id: currentLocationLink.data('systemId'),
name: currentLocationLink.data('systemName')
};
};
/**
* get all "open" dialog elements
@@ -1881,6 +1894,7 @@ define([
getCurrentUserData: getCurrentUserData,
setCurrentSystemData: setCurrentSystemData,
getCurrentSystemData: getCurrentSystemData,
getCurrentLocationData: getCurrentLocationData,
getCurrentUserInfo: getCurrentUserInfo,
getCurrentCharacterLog: getCurrentCharacterLog,
setDestination: setDestination,

View File

@@ -31,7 +31,7 @@
</div>
<div class="navbar-header pull-right">
<p class="navbar-text hidden-xs pf-head-current-location" title="current location">
<p id="pf-head-current-location" class="navbar-text hidden-xs" title="current location">
<a href="javascript:void(0);">
<i class="fa fa-map-marker fa-fw"></i><span></span>
</a>

View File

@@ -1007,7 +1007,7 @@ td.pf-popover-trigger{
visibility: hidden;
}
.pf-head-active-user, .pf-head-current-location{
.pf-head-active-user, #pf-head-current-location{
display: none; // triggered by js
.badge{