/*jshint browser:true, devel:true */
/*globals jQuery, ajaxurl*/
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.activeService = jQuery( '.js-ts-active-service' );
self.init = function () {
var invalidateServiceLink;
var authenticateServiceLink;
var deactivateServiceLink;
var activateServiceLink;
var activateServiceImage;
var flushWebsiteDetailsCacheLink;
var header;
var tip;
header = self.activeService.find( '.active-service-header' ).val();
tip = self.activeService.find( '.active-service-tip' ).val();
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 enable = enableService;
var nonce = jQuery( '.translation_service_toggle' ).val();
if ('undefined' === typeof enableService) {
enable = 0;
}
button.attr('disabled', 'disabled');
button.after(self.ajaxSpinner);
ajaxData = {
'action': 'translation_service_toggle',
'nonce': nonce,
'service_id': serviceId,
'enable': enable
};
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: ajaxData,
dataType: 'json',
success: function (response) {
var data = response.data;
if (data.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: self.activeService.find( '.active-service-title' ).val(),
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, 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.js-submit:first').click();
}
});
},
buttons: [
{
text: "Cancel",
click: function () {
jQuery(this).dialog("close");
},
'class': 'button-secondary alignleft'
}, {
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 js-submit'
}
]
});
};
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 invalidate;
var nonce = jQuery( '.translation_service_authentication' ).val();
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': invalidate ? 'translation_service_invalidation' : 'translation_service_authentication',
'nonce': nonce,
'service_id': serviceId,
'invalidate': invalidate,
'custom_fields': self.customFieldsSerialized.val()
},
dataType: 'json',
success: function (response) {
var response_message = jQuery( '.tp_response_message' );
response = response.data;
if ( 0 === response.errors ) {
if (response.reload) {
location.reload(true);
} else {
if (button) {
button.removeAttr('disabled');
button.next().fadeOut();
}
}
}
response_message.html( response.message );
response_message.show();
setInterval(function () {
response_message.fadeOut();
}, 5000);
},
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-active');
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-active');
if (response.success) {
/** @namespace response.redirectTo */
location.reload(response.data.redirectTo);
}
}
});
}
};
};
jQuery(document).ready(function () {
"use strict";
var wpmlTranslationServicesDialog = new WPMLTranslationServicesDialog();
var current_url = location.href;
var search_section = jQuery( '.ts-admin-section-search' );
wpmlTranslationServicesDialog.init();
search_section.find('.search' ).click(function(){
var param = {
s: search_section.find('.search-string' ).val()
};
window.location.href = current_url + '&' + jQuery.param( param );
});
jQuery( '.tablenav .items_per_page select' ).change(function(){
var param = {
items_per_page: jQuery( this ).val()
};
var items_per_page_url = current_url.replace( /&paged=[^&]*/, '' );
window.location.href = items_per_page_url + '&' + jQuery.param( param );
});
search_section.find( '.search-string' ).keypress(function (e) {
if ( e.which === 13 ) {
search_section.find( '.search' ).click();
return false;
}
});
jQuery( '.ts-admin-section-inactive-services #current-page-selector-top' ).keypress(function (e) {
if ( e.which === 13 ) {
var param = {
paged: jQuery( this ).val()
};
window.location.href = current_url + '&' + jQuery.param( param );
}
});
});