| 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/ |
Upload File : |
/**
* @file js/controllers/PageHandler.js
*
* Copyright (c) 2014-2020 Simon Fraser University
* Copyright (c) 2000-2020 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class PageHandler
* @ingroup js_controllers
*
* @brief Handle the page widget.
*/
(function($) {
/**
* @constructor
*
* @extends $.pkp.classes.Handler
*
* @param {jQueryObject} $page the wrapped page element.
* @param {Object} options handler options.
*/
$.pkp.controllers.PageHandler = function($page, options) {
this.parent($page, options);
this.bind('redirectRequested', this.redirectToUrl);
this.bind('notifyUser', this.redirectNotifyUserEventHandler_);
// Listen to this event to be able to redirect to the
// correpondent grid a dataChanged event that comes from
// a link action that is outside of any grid.
this.bind('redirectDataChangedToGrid', this.redirectDataChangedEventHandler_);
};
$.pkp.classes.Helper.inherits(
$.pkp.controllers.PageHandler, $.pkp.classes.Handler);
//
// Public methods
//
/**
* Callback that is triggered when the page should redirect.
*
* @param {HTMLElement} sourceElement The element that issued the
* "redirectRequested" event.
* @param {Event} event The "redirect requested" event.
* @param {string} url The URL to redirect to.
*/
$.pkp.controllers.PageHandler.prototype.redirectToUrl =
function(sourceElement, event, url) {
window.location = url;
};
//
// Private methods.
//
/**
* Handler to redirect to the correct notification widget the
* notify user event.
* @param {HTMLElement} sourceElement The element that issued the
* "notifyUser" event.
* @param {Event} event The "notify user" event.
* @param {Object} params The event parameters. Can be the element
* that triggered the event or the notification content.
* @private
*/
$.pkp.controllers.PageHandler.prototype.redirectNotifyUserEventHandler_ =
function(sourceElement, event, params) {
if (params.status === true) {
this.getHtmlElement().parent().trigger('notifyUser', [params]);
} else {
// Use the notification helper to redirect the notify user event.
$.pkp.classes.notification.NotificationHelper.
redirectNotifyUserEvent(this, params);
}
};
/**
* Handler to redirect to the correct grid the dataChanged event.
* @param {HTMLElement} sourceElement The element that issued the
* "dataChanged" event.
* @param {Event} event The "redirect data changed" event.
* @param {Object} eventData The data changed event data.
* @private
*/
$.pkp.controllers.PageHandler.prototype.redirectDataChangedEventHandler_ =
function(sourceElement, event, eventData) {
// Get the link action element (that is outside of any grid)
// that triggered the redirect event.
var $sourceLinkElement = $('a', event.target),
linkActionHandler = $.pkp.classes.Handler.getHandler($sourceLinkElement),
linkUrl = linkActionHandler.getUrl(),
$grids;
// Get all grids inside this widget that have a
// link action with the same url of the sourceLinkElement.
// (Not using "has" due to potential escaping issues; see
// http://stackoverflow.com/questions/739695/jquery-selector-value-escaping
$grids = $('.pkp_controllers_grid', this.getHtmlElement())
.filter(function() {
var matches = 0;
$(this).find('a').each(function() {
if ($(this).attr('href') == linkUrl) {
matches++;
}
});
return matches > 0;
});
// Trigger the dataChanged event on found grids,
// so they can refresh themselves.
if ($grids.length > 0) {
$grids.each(function() {
// Keyword "this" is being used here in the
// context of the grid html element.
$(this).trigger('dataChanged', [eventData]);
});
}
};
}(jQuery));