first commit
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
/**
|
||||
* @file js/controllers/form/UserFormHandler.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 UserFormHandler
|
||||
* @ingroup js_controllers_form
|
||||
*
|
||||
* @brief Add tools to the AjaxFormHandler facilitating user creation/editing.
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
*
|
||||
* @extends $.pkp.controllers.form.AjaxFormHandler
|
||||
*
|
||||
* @param {jQueryObject} $form the wrapped HTML form element.
|
||||
* @param {{
|
||||
* fetchUsernameSuggestionUrl: string,
|
||||
* usernameSuggestionTextAlert: string,
|
||||
* hideNonReviewerInterests: boolean
|
||||
* }} options options to configure the form handler.
|
||||
*/
|
||||
$.pkp.controllers.form.UserFormHandler = function($form, options) {
|
||||
this.parent($form, options);
|
||||
|
||||
// Set data for suggesting usernames. Both keys should be present.
|
||||
if (options.fetchUsernameSuggestionUrl &&
|
||||
options.usernameSuggestionTextAlert) {
|
||||
this.fetchUsernameSuggestionUrl_ = options.fetchUsernameSuggestionUrl;
|
||||
this.usernameSuggestionTextAlert_ = options.usernameSuggestionTextAlert;
|
||||
}
|
||||
|
||||
// Attach handler to suggest username button (if present)
|
||||
$('[id^="suggestUsernameButton"]', $form).click(
|
||||
this.callbackWrapper(this.generateUsername));
|
||||
|
||||
if (options.hideNonReviewerInterests) {
|
||||
$('[id^="reviewerGroup-"]', $form).click(
|
||||
this.callbackWrapper(this.setInterestsVisibility_));
|
||||
this.setInterestsVisibility_();
|
||||
}
|
||||
};
|
||||
$.pkp.classes.Helper.inherits(
|
||||
$.pkp.controllers.form.UserFormHandler,
|
||||
$.pkp.controllers.form.AjaxFormHandler);
|
||||
|
||||
|
||||
//
|
||||
// Private properties
|
||||
//
|
||||
/**
|
||||
* The URL to be called to fetch a username suggestion.
|
||||
* @private
|
||||
* @type {string}
|
||||
*/
|
||||
$.pkp.controllers.form.UserFormHandler.
|
||||
prototype.fetchUsernameSuggestionUrl_ = '';
|
||||
|
||||
|
||||
/**
|
||||
* The message that will be displayed if users click on suggest
|
||||
* username button with no data in family name.
|
||||
* @private
|
||||
* @type {string}
|
||||
*/
|
||||
$.pkp.controllers.form.UserFormHandler.
|
||||
prototype.usernameSuggestionTextAlert_ = '';
|
||||
|
||||
|
||||
//
|
||||
// Protected methods
|
||||
//
|
||||
/**
|
||||
* Event handler that is called when the suggest username button is clicked.
|
||||
*
|
||||
* @param {HTMLElement} el clicked by this event
|
||||
* @param {Event} e triggered
|
||||
*/
|
||||
$.pkp.controllers.form.UserFormHandler.prototype.
|
||||
generateUsername = function(el, e) {
|
||||
|
||||
// Don't submit the form!
|
||||
e.preventDefault();
|
||||
|
||||
var $form = this.getHtmlElement(),
|
||||
givenName, familyName, fetchUrl, sitePrimaryLocale;
|
||||
|
||||
// Fetch entered names
|
||||
sitePrimaryLocale =
|
||||
/** @type {string} */ ($('[name="sitePrimaryLocale"]', $form).val());
|
||||
givenName = /** @type {string} */ ($('[name="givenName[' +
|
||||
sitePrimaryLocale + ']"]', $form).val());
|
||||
familyName = /** @type {string} */ ($('[name="familyName[' +
|
||||
sitePrimaryLocale + ']"]', $form).val());
|
||||
|
||||
// Replace dummy values in the URL with entered values
|
||||
fetchUrl = this.fetchUsernameSuggestionUrl_.
|
||||
replace('GIVEN_NAME_PLACEHOLDER', givenName).
|
||||
replace('FAMILY_NAME_PLACEHOLDER', familyName);
|
||||
|
||||
$.get(fetchUrl, this.callbackWrapper(this.setUsername), 'json');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Check JSON message and set it to username, back on form.
|
||||
* @param {HTMLElement} formElement The Form HTML element.
|
||||
* @param {JSONType} jsonData The jsonData response.
|
||||
*/
|
||||
$.pkp.controllers.form.UserFormHandler.prototype.
|
||||
setUsername = function(formElement, jsonData) {
|
||||
|
||||
var processedJsonData = this.handleJson(jsonData),
|
||||
$form = this.getHtmlElement();
|
||||
|
||||
if (processedJsonData === false) {
|
||||
throw new Error('JSON response must be set to true!');
|
||||
}
|
||||
|
||||
// Re-validate the field
|
||||
$('[id^="username"]', $form).val(processedJsonData.content)
|
||||
.trigger('blur');
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Private methods
|
||||
//
|
||||
/**
|
||||
* Event handler that is called when a reviewer role checkbox is clicked.
|
||||
* @private
|
||||
*/
|
||||
$.pkp.controllers.form.UserFormHandler.prototype.
|
||||
setInterestsVisibility_ = function() {
|
||||
var $form = this.getHtmlElement(), $interestsElement = $('#interests', $form);
|
||||
if ($('[id^="reviewerGroup-"]:checked', $form).size()) {
|
||||
// At least one checked reviewer role was found; show interests
|
||||
$interestsElement.show(300);
|
||||
} else {
|
||||
// No checked reviewer roles found; hide interests
|
||||
$interestsElement.hide(300);
|
||||
}
|
||||
};
|
||||
}(jQuery));
|
||||
Reference in New Issue
Block a user