63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
/**
|
|
* @file js/classes/VueRegistry.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 VueRegistry
|
|
* @ingroup js_classes
|
|
*
|
|
* @brief Registry and initialization class for Vue.js handlers
|
|
*/
|
|
export default {
|
|
/**
|
|
* Registry of all active vue instances
|
|
*/
|
|
_instances: {},
|
|
|
|
/**
|
|
* Initialize a Vue controller
|
|
*
|
|
* This method is often called directly from a <script> tag in a template
|
|
* file to spin up a Vue controller on-demand. This allows the Vue component
|
|
* lifecycle to be compatible with the legacy JS framework.
|
|
*
|
|
* @param string id Element ID to attach this controller to
|
|
* @param string type The type of controller to initialize
|
|
* @param object The data object to pass to the controller. Can include
|
|
* configuration parameters, translatable strings and initial data.
|
|
*/
|
|
init: function (id, type, data) {
|
|
if (pkp.controllers[type] === undefined) {
|
|
return;
|
|
}
|
|
|
|
var baseData = {};
|
|
if (typeof pkp.controllers[type].data === 'function') {
|
|
baseData = pkp.controllers[type].data();
|
|
}
|
|
|
|
var args = $.extend(true, {}, pkp.controllers[type], {
|
|
el: '#' + id,
|
|
data: $.extend(true, {}, baseData, data, {id: id}),
|
|
});
|
|
|
|
pkp.registry._instances[id] = new pkp.Vue(args);
|
|
|
|
pkp.eventBus.$emit('root:mounted', id, pkp.registry._instances[id]);
|
|
|
|
// Register with a parent handler from the legacy JS framework, so that
|
|
// those componments can destroy a Vue instance when removing HTML code
|
|
var $parents = $(pkp.registry._instances[id].$el).parents();
|
|
$parents.each(function (i) {
|
|
if ($.pkp.classes.Handler.hasHandler($($parents[i]))) {
|
|
$.pkp.classes.Handler.getHandler($($parents[i])).handlerChildren_.push(
|
|
pkp.registry._instances[id]
|
|
);
|
|
return false; // only attach to the closest parent handler
|
|
}
|
|
});
|
|
},
|
|
};
|