/**
* @defgroup js_classes_linkAction
*/
/**
* @file js/classes/linkAction/LinkActionRequest.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 LinkActionRequest
* @ingroup js_classes_linkAction
*
* @brief Base class for all link action requests.
*/
(function($) {
/** @type {Object} */
$.pkp.classes.linkAction = $.pkp.classes.linkAction || {};
/**
* @constructor
*
* @extends $.pkp.classes.ObjectProxy
*
* @param {jQueryObject} $linkActionElement The element the link
* action was attached to.
* @param {Object} options Configuration of the link action
* request.
*/
$.pkp.classes.linkAction.LinkActionRequest =
function($linkActionElement, options) {
// Save the reference to the link action element.
this.$linkActionElement = $linkActionElement;
// Save the link action request options.
this.options = options;
// If the link action element is an actual link
// and we find a URL in the options then set the
// link of the link action for better documentation
// and easier debugging in the DOM and for other
// JS to easily access the target if required.
if ($linkActionElement.is('a') && options.url) {
$linkActionElement.attr('href', options.url);
}
};
//
// Protected properties
//
/**
* The element the link action was attached to.
* @protected
* @type {jQueryObject}
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.
$linkActionElement = null;
/**
* The link action request options.
* @protected
* @type {Object}
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.options = null;
//
// Public methods
//
/**
* Callback that will be bound to the link action element.
* @param {HTMLElement} element The element that triggered the link
* action activation event.
* @param {Event} event The event that activated the link action.
* @return {boolean} Should return false to stop event propagation.
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.activate =
function(element, event) {
this.getLinkActionElement().trigger('actionStart');
return false;
};
/**
* Callback that will be bound to the 'action finished' event of the
* link action.
*
* @return {boolean} Should return false to stop event propagation.
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.finish =
function() {
// Execute the finish callback if there is one.
if (this.options.finishCallback) {
this.options.finishCallback();
}
this.getLinkActionElement().trigger('actionStop');
return false;
};
/**
* Get the link action request url.
* @return {?string} The link action request url.
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.getUrl =
function() {
if (this.options.url) {
return this.options.url;
} else {
return null;
}
};
//
// Protected methods
//
/**
* Retrieve the link action request options.
* @return {Object} The link action request options.
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.getOptions = function() {
return this.options;
};
/**
* Retrieve the element the link action was attached to.
* @return {jQueryObject} The element the link action was attached to.
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.
getLinkActionElement = function() {
return this.$linkActionElement;
};
/**
* Determine whether or not the link action should be debounced.
* @return {boolean} Whether or not to debounce the link action.
*/
$.pkp.classes.linkAction.LinkActionRequest.prototype.
shouldDebounce = function() {
return true;
};
}(jQuery));
|