/*jshint browser:true, devel:true */
/*globals jQuery, ajaxurl, tm_ts_data*/
var WPMLTranslationServicesDialog = function () {
"use strict";
var self = this;
self.preventEventDefault = function (event) {
if ('undefined' !== event && 'undefined' !== typeof(event.preventDefault)) {
event.preventDefault();
} else {
event.returnValue = false;
}
};
self.enterKey = 13;
self.ajaxSpinner = jQuery('');
self.init = function () {
/** @namespace tm_ts_data.nonce.translation_service_authentication */
/** @namespace tm_ts_data.nonce.translation_service_toggle */
var invalidateServiceLink;
var authenticateServiceLink;
var deactivateServiceLink;
var activateServiceLink;
var activateServiceImage;
var flushWebsiteDetailsCacheLink;
var header = tm_ts_data.strings.header;
var tip = tm_ts_data.strings.tip;
self.serviceDialog = jQuery('
' + header + '
' + tip + ' ');
self.customFieldsSerialized = jQuery('#custom_fields_serialized');
self.ajaxSpinner.addClass('is-active');
activateServiceImage = jQuery('.js-activate-service');
activateServiceLink = jQuery('.js-activate-service-id');
deactivateServiceLink = jQuery('.js-deactivate-service');
authenticateServiceLink = jQuery('.js-authenticate-service');
invalidateServiceLink = jQuery('.js-invalidate-service');
flushWebsiteDetailsCacheLink = jQuery('.js-flush-website-details-cache');
activateServiceImage.bind('click', function (event) {
var link;
self.preventEventDefault(event);
link = jQuery(this).closest('li').find('.js-activate-service-id');
link.trigger('click');
return false;
});
activateServiceLink.bind('click', function (event) {
var serviceId;
var button;
self.preventEventDefault(event);
button = jQuery(this);
serviceId = jQuery(this).data('id');
self.toggleService(serviceId, button, 1);
return false;
});
deactivateServiceLink.bind('click', function (event) {
var serviceId;
var button;
self.preventEventDefault(event);
button = jQuery(this);
serviceId = jQuery(this).data('id');
self.toggleService(serviceId, button, 0);
return false;
});
invalidateServiceLink.bind('click', function (event) {
var serviceId;
var button;
self.preventEventDefault(event);
button = jQuery(this);
serviceId = jQuery(this).data('id');
self.translationServiceAuthentication(serviceId, button, 1);
return false;
});
flushWebsiteDetailsCacheLink.on('click', function (event) {
var anchor = jQuery(this);
self.preventEventDefault(event);
self.flushWebsiteDetailsCache(anchor);
return false;
});
authenticateServiceLink.bind('click', function (event) {
var customFields;
var serviceId;
self.preventEventDefault(event);
serviceId = jQuery(this).data('id');
customFields = jQuery(this).data('custom-fields');
self.serviceAuthenticationDialog(customFields, serviceId);
return false;
});
};
self.toggleService = function (serviceId, button, enableService) {
var ajaxData;
var id;
var enable = enableService;
if ('undefined' === typeof enableService) {
enable = 0;
}
button.attr('disabled', 'disabled');
button.after(self.ajaxSpinner);
id = button.data('id');
ajaxData = {
'action': 'translation_service_toggle',
'nonce': tm_ts_data.nonce.translation_service_toggle,
'service_id': serviceId,
'enable': enable
};
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: ajaxData,
dataType: 'json',
success: function (msg) {
if ('undefined' !== msg.message && '' !== msg.message.trim()) {
alert(msg.message);
}
if (msg.reload) {
location.reload(true);
} else {
if (button) {
button.removeAttr('disabled');
button.next().fadeOut();
}
}
},
error: function (jqXHR, status, error) {
var parsedResponse = jqXHR.statusText || status || error;
alert(parsedResponse);
}
});
};
self.serviceAuthenticationDialog = function (customFields, serviceId) {
self.serviceDialog.dialog({
dialogClass: 'wpml-dialog otgs-ui-dialog',
width: 'auto',
title: "Translation Services",
modal: true,
open: function () {
var customFieldsList;
var customFieldsForm;
var customFieldsWrapper = self.serviceDialog.find('.custom_fields_wrapper');
var firstInput = false;
customFieldsWrapper.empty();
customFieldsForm = jQuery('');
customFieldsForm.appendTo(customFieldsWrapper);
customFieldsList = jQuery('');
customFieldsList.appendTo(customFieldsForm);
jQuery.each(customFields.custom_fields, function (i, item) {
var itemLabel, itemInput;
var itemId;
var customFieldsListItem = jQuery('');
customFieldsListItem.appendTo(customFieldsList);
itemId = 'custom_field_' + item.name;
if ('hidden' !== item.type) {
itemLabel = jQuery('');
itemLabel.appendTo(customFieldsListItem);
itemLabel.append(' ');
}
switch (item.type) {
case 'text':
itemInput = jQuery('');
break;
case 'checkbox':
itemInput = jQuery('');
break;
default:
itemInput = jQuery('');
break;
}
itemInput.appendTo(customFieldsListItem);
if (!firstInput) {
itemInput.focus();
}
});
jQuery(':input', this).keyup(function (event) {
if (self.enterKey === event.keyCode) {
jQuery(this).closest('.ui-dialog').find('.ui-dialog-buttonpane').find('button:first').click();
}
});
},
buttons: [
{
text: "Submit",
click: function () {
var customFieldsDataStringify;
var customFieldsData;
var customFieldsInput;
self.hideButtons();
customFieldsInput = jQuery('.custom_fields');
customFieldsData = {};
jQuery.each(customFieldsInput, function (i, item) {
customFieldsData[jQuery(item).attr('name')] = jQuery(item).val();
});
customFieldsDataStringify = JSON.stringify(customFieldsData, null, ' ');
self.customFieldsSerialized.val(customFieldsDataStringify);
self.translationServiceAuthentication(serviceId, false, 0, null, self.showButtons);
},
'class': 'button-primary'
}, {
text: "Cancel",
click: function () {
jQuery(this).dialog("close");
},
'class': 'button-secondary'
}
]
});
};
self.hideButtons = function () {
self.ajaxSpinner.appendTo(self.serviceDialog);
self.serviceDialog.parent().find('.ui-dialog-buttonpane').fadeOut();
};
self.showButtons = function () {
self.serviceDialog.find(self.ajaxSpinner).remove();
self.serviceDialog.parent().find('.ui-dialog-buttonpane').fadeIn();
};
self.translationServiceAuthentication = function (serviceId, button, invalidateService) {
var ajaxData;
var invalidate;
invalidate = invalidateService;
if ('undefined' === typeof invalidateService) {
invalidate = 0;
}
if (isNaN(serviceId)) {
alert('service_id isNAN');
} else if (isNaN(invalidate)) {
alert('invalidate isNAN');
}
if (button) {
button.attr('disabled', 'disabled');
button.after(self.ajaxSpinner);
}
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: {
'action': 'translation_service_authentication',
'nonce': tm_ts_data.nonce.translation_service_authentication,
'service_id': serviceId,
'invalidate': invalidate,
'custom_fields': self.customFieldsSerialized.val()
},
dataType: 'json',
success: function (msg) {
if (msg.success) {
msg = msg.data;
if ('undefined' !== msg.message && '' !== msg.message.trim()) {
alert(msg.message);
}
if (msg.reload) {
location.reload(true);
} else {
if (button) {
button.removeAttr('disabled');
button.next().fadeOut();
}
}
}
},
error: function (jqXHR, status, error) {
var parsedResponse = jqXHR.statusText || status || error;
alert(parsedResponse);
},
complete: function() {
self.showButtons();
}
});
};
self.flushWebsiteDetailsCache = function (anchor) {
var nonce = anchor.data('nonce');
self.ajaxSpinner.appendTo(anchor);
self.ajaxSpinner.addClass('is-activve');
if (nonce) {
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: {
'action': 'wpml-flush-website-details-cache',
'nonce': nonce
},
dataType: 'json',
success: function (response) {
self.ajaxSpinner.removeClass('is-activve');
if (response.success) {
/** @namespace response.redirectTo */
location.reload(response.data.redirectTo);
}
}
});
}
};
};
jQuery(document).ready(function () {
"use strict";
var wpmlTranslationServicesDialog = new WPMLTranslationServicesDialog();
wpmlTranslationServicesDialog.init();
});