118 lines
3.2 KiB
JavaScript
118 lines
3.2 KiB
JavaScript
/**
|
|
* @defgroup js_pages_workflow
|
|
*/
|
|
/**
|
|
* @file js/pages/workflow/WorkflowHandler.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 WorkflowHandler
|
|
* @ingroup js_pages_workflow
|
|
*
|
|
* @brief Base handler for the workflow pages.
|
|
*
|
|
*/
|
|
(function($) {
|
|
|
|
/** @type {Object} */
|
|
$.pkp.pages.workflow = $.pkp.pages.workflow || {};
|
|
|
|
|
|
|
|
/**
|
|
* @constructor
|
|
*
|
|
* @extends $.pkp.classes.Handler
|
|
*
|
|
* @param {jQueryObject} $workflowElement The HTML element encapsulating
|
|
* the production page.
|
|
* @param {Object} options Handler options.
|
|
*/
|
|
$.pkp.pages.workflow.WorkflowHandler =
|
|
function($workflowElement, options) {
|
|
|
|
this.parent($workflowElement, options);
|
|
|
|
this.bind('stageParticipantsChanged', this.handleStageParticipantsChanged_);
|
|
this.bind('dataChanged', this.dataChangedHandler_);
|
|
};
|
|
$.pkp.classes.Helper.inherits(
|
|
$.pkp.pages.workflow.WorkflowHandler,
|
|
$.pkp.classes.Handler);
|
|
|
|
|
|
//
|
|
// Private functions
|
|
//
|
|
/**
|
|
* Potentially refresh workflow content on participant change.
|
|
*
|
|
* @param {jQueryObject} callingElement The calling element.
|
|
* that triggered the event.
|
|
* @param {Event} event The event.
|
|
* @private
|
|
*/
|
|
$.pkp.pages.workflow.WorkflowHandler.prototype.handleStageParticipantsChanged_ =
|
|
function(callingElement, event) {
|
|
// Find and reload editor decision action and progress bar.
|
|
var $elements, $stageTabs, matches, cssClass, stageId, sourceUrl,
|
|
$editorDecisionActions = this.getHtmlElement()
|
|
.find('.editorDecisionActions'),
|
|
$progressBar = this.getHtmlElement().find('#submissionProgressBarDiv'),
|
|
$stageTabContainer = this.getHtmlElement().find('#stageTabs');
|
|
|
|
$stageTabs = $stageTabContainer.find('li');
|
|
$stageTabs.each(function(index) {
|
|
if ($(this).hasClass('ui-state-active')) {
|
|
cssClass = $(this).find('a').attr('class');
|
|
matches = cssClass.match(/stageId(\d)/);
|
|
if (matches) {
|
|
stageId = matches[1];
|
|
var handler = $.pkp.classes.Handler.getHandler($progressBar);
|
|
sourceUrl = handler.getSourceUrl();
|
|
handler.setSourceUrl(sourceUrl.replace(/stageId=\d/, 'stageId=' +
|
|
stageId));
|
|
}
|
|
return false;
|
|
}
|
|
});
|
|
|
|
$elements = $editorDecisionActions.add($progressBar);
|
|
|
|
$elements.each(function() {
|
|
var handler = $.pkp.classes.Handler.getHandler($(this));
|
|
handler.reload();
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* Potentially refresh contained grid.
|
|
*
|
|
* @param {jQueryObject} callingElement The calling element.
|
|
* that triggered the event.
|
|
* @param {Event} event The event.
|
|
* @param {Object} eventData Event data.
|
|
* @private
|
|
*/
|
|
$.pkp.pages.workflow.WorkflowHandler.prototype.dataChangedHandler_ =
|
|
function(callingElement, event, eventData) {
|
|
|
|
var $childAnchors = $(event.target, this.getHtmlElement()).children('a'),
|
|
$formatsGrid;
|
|
|
|
if ($childAnchors.length &&
|
|
$childAnchors.attr('id').match(/submissionEntry/)) {
|
|
// Refresh the format grid on this page, if any.
|
|
$formatsGrid = $('[id^="formatsGridContainer"]',
|
|
this.getHtmlElement()).children('div');
|
|
$formatsGrid.trigger('dataChanged', [eventData]);
|
|
$formatsGrid.trigger('notifyUser', [$formatsGrid]);
|
|
}
|
|
};
|
|
|
|
|
|
}(jQuery));
|