| Server IP : 127.0.1.1 / Your IP : 216.73.216.83 Web Server : Apache/2.4.58 (Ubuntu) System : Linux nepub 6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.2.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/public_html/lib/pkp/js/controllers/form/ |
Upload File : |
/**
* @file js/controllers/form/AjaxFormHandler.js
*
* Copyright (c) 2014-2021 Simon Fraser University
* Copyright (c) 2000-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class AjaxFormHandler
* @ingroup js_controllers_form
*
* @brief Form handler that submits the form to the server via AJAX and
* either replaces the form if it is re-rendered by the server or
* triggers the "formSubmitted" event after the server confirmed
* form submission.
*/
(function($) {
/**
* @constructor
*
* @extends $.pkp.controllers.form.FormHandler
*
* @param {jQueryObject} $form the wrapped HTML form element.
* @param {Object} options options to configure the AJAX form handler.
*/
$.pkp.controllers.form.AjaxFormHandler = function($form, options) {
options.submitHandler = this.submitForm;
this.parent($form, options);
if (typeof options.confirmText !== 'undefined') {
this.confirmText = options.confirmText;
}
this.bind('refreshForm', this.refreshFormHandler_);
};
$.pkp.classes.Helper.inherits(
$.pkp.controllers.form.AjaxFormHandler,
$.pkp.controllers.form.FormHandler);
/**
* Overridden default from FormHandler -- disable form controls
* on AJAX forms by default.
* @protected
* @type {boolean}
*/
$.pkp.controllers.form.AjaxFormHandler.prototype.
disableControlsOnSubmit = true;
/**
* A confirmation message to display before submitting the form
* @protected
* @type {string}
*/
$.pkp.controllers.form.AjaxFormHandler.prototype.
confirmText = '';
//
// Public methods
//
/**
* Internal callback called after form validation to handle form
* submission.
*
* @param {Object} validator The validator plug-in.
* @param {HTMLElement} formElement The wrapped HTML form.
*/
$.pkp.controllers.form.AjaxFormHandler.prototype.submitForm =
function(validator, formElement) {
// This form implementation will post the form,
// and act depending on the returned JSON message.
var $form = this.getHtmlElement();
this.disableFormControls();
if (!this.confirmText.length || confirm(this.confirmText)) {
$.post($form.attr('action'), $form.serialize(),
this.callbackWrapper(this.handleResponse), 'json');
}
};
/**
* Callback to replace the element's content.
*
* @private
*
* @param {jQueryObject} sourceElement The containing element.
* @param {Event} event The calling event.
* @param {string} content The content to replace with.
*/
$.pkp.controllers.form.AjaxFormHandler.prototype.refreshFormHandler_ =
function(sourceElement, event, content) {
if (content) {
this.replaceWith(content);
}
};
/**
* Internal callback called after form validation to handle the
* response to a form submission.
*
* You can override this handler if you want to do custom handling
* of a form response.
*
* @param {HTMLElement} formElement The wrapped HTML form.
* @param {Object} jsonData The data returned from the server.
* @return {boolean} The response status.
*/
$.pkp.controllers.form.AjaxFormHandler.prototype.handleResponse =
function(formElement, jsonData) {
var $form, formSubmittedEvent, processedJsonData;
processedJsonData = this.handleJson(jsonData);
if (processedJsonData !== false) {
if (processedJsonData.content === '') {
// Notify any nested formWidgets of form submitted event.
formSubmittedEvent = new $.Event('formSubmitted');
$(this.getHtmlElement()).find('.formWidget').trigger(formSubmittedEvent);
// Trigger the "form submitted" event.
this.trigger('formSubmitted');
// Fire off any other optional events.
this.publishChangeEvents();
// re-enable the form control if it was disabled previously.
if (this.disableControlsOnSubmit) {
this.enableFormControls();
}
} else {
// Redisplay the form.
this.replaceWith(processedJsonData.content);
}
} else {
// data was false -- assume errors, re-enable form controls.
this.enableFormControls();
}
// Trigger the notify user event, passing this
// html element as data.
this.trigger('notifyUser');
// Hide the form spinner.
this.hideSpinner();
return processedJsonData.status;
};
}(jQuery));