/*globals jQuery, ajaxurl */ var WPML_TM = WPML_TM || {}; (function () { 'use strict'; WPML_TM.Custom_XML = function (element, codeMirror) { this.container = element; this.spinner = this.container.find('.spinner'); this.content = this.container.find('.wpml-tm-custom-xml-content'); this.messages = this.container.find('.js-wpml-tm-messages'); this.action = this.content.data('action'); this.nonceValidate = this.content.data('nonce-validate'); this.nonceSave = this.content.data('nonce-save'); this.saveButton = this.container.find('.button-primary'); this.editor = codeMirror; }; WPML_TM.Custom_XML.prototype = { init: function () { this.saveButton.on('click', jQuery.proxy(this.onSave, this)); if (this.editor) { this.editor.init(); this.editor.onSave = jQuery.proxy(function () {this.saveButton.trigger('click');}, this); } }, onSave: function (event) { event.preventDefault(); if (this.editor) { this.editor.prepareSave(); } var content = this.content.val(); this.messages.empty(); this.showSpinner(); this.validate(content); }, validate: function (content) { jQuery.ajax({ type: 'POST', url: ajaxurl, data: { action: this.action + '-validate', nonce: this.nonceValidate, content: content }, context: this, success: jQuery.proxy(this.validated, this), error: jQuery.proxy(this.onError, this) }); }, validated: function (response) { this.addMessage(response); if (response.success) { this.save(this.content.val()); } else { this.highlightErrors(response); this.hideSpinner(); } }, onError: function (response) { this.addMessage(response); this.highlightErrors(response); this.hideSpinner(); }, highlightErrors: function (response) { if (this.editor) { this.editor.highlightErrors(response.data); } }, save: function (content) { jQuery.ajax({ type: 'POST', url: ajaxurl, data: { action: this.action + '-save', nonce: this.nonceSave, content: content }, context: this, success: jQuery.proxy(this.saved, this), error: jQuery.proxy(this.onError, this), complete: jQuery.proxy(this.hideSpinner, this) }); }, saved: function (response) { this.addMessage(response); }, addMessage: function (response) { var message = ''; var type = ''; if ('undefined' !== response) { message = 'error'; type = 'error'; if (response.hasOwnProperty('success') && response.success) { type = 'info'; message = 'success'; } if (response.hasOwnProperty('data') && response.data) { if (typeof(response.data) === 'string' || response.data instanceof String) { message = response.data; } else if (response.data.constructor === Array) { message = this.convertArrayToUL(response.data); } else if (typeof response.data === 'object') { message = this.convertObjectToTable(response.data); } } } var messageContainer = jQuery('

'); messageContainer.addClass(type); messageContainer.html(message); this.messages.append(messageContainer); }, showSpinner: function () { this.spinner.addClass('is-active'); }, hideSpinner: function () { this.spinner.removeClass('is-active'); }, convertObjectToTable: function (data) { var html = ''; for (var property in data) { if (data.hasOwnProperty(property)) { html += ''; } } html += '
' + property + '' + data[property] + '
'; return html; }, convertArrayToUL: function (data) { var html = ''; return html; } }; jQuery(function () { var items = document.getElementsByClassName('js-wpml-tm-custom-xml'); var i; for (i = 0; i < items.length; i++) { var codeMirror; if (WPML_TM.Custom_XML_Editor) { codeMirror = new WPML_TM.Custom_XML_Editor(items[i]); } var customXML = new WPML_TM.Custom_XML(jQuery(items[i]), codeMirror); customXML.init(); } }); }());