@oat-sa/tao-item-runner-qti
Version:
TAO QTI Item Runner modules
83 lines (81 loc) • 3.36 kB
JavaScript
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2017-2021 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);
*
*/
import _ from 'lodash';
import containerHelper from 'taoQtiItem/qtiCommonRenderer/helpers/container';
import instanciator from 'taoQtiItem/qtiCommonRenderer/renderers/interactions/pci/instanciator';
export default function commonPciRenderer(runtime) {
return {
getRequiredModules: function getRequiredModules() {
var requireEntries = [];
//load hook if applicable
if (runtime.hook) {
requireEntries.push(runtime.hook.replace(/\.js$/, ''));
}
//load libs
_.forEach(runtime.libraries, function(lib) {
requireEntries.push(lib.replace(/\.js$/, ''));
});
//load stylesheets
_.forEach(runtime.stylesheets, function(stylesheet) {
requireEntries.push('css!' + stylesheet.replace(/\.css$/, ''));
});
return requireEntries;
},
createInstance: function(interaction, context) {
var id = interaction.attr('responseIdentifier');
var pci = instanciator.getPci(interaction);
var properties = _.clone(interaction.properties);
var assetManager = context.assetManager;
var pciAssetManager = {
resolve: function pciAssetResolve(url) {
var resolved = assetManager.resolveBy('portableElementLocation', url);
if (resolved === url || _.isUndefined(resolved)) {
return assetManager.resolve(url);
} else {
return resolved;
}
}
};
pci.initialize(
id,
containerHelper
.get(interaction)
.children()
.get(0),
properties,
pciAssetManager
);
return Promise.resolve(pci);
},
/**
*
* @param {Object }interaction
* @returns {Promise?} the interaction destroy step can be async and can return an optional Promise
*/
destroy: function destroy(interaction) {
return instanciator.getPci(interaction).destroy();
},
setState: function setState(interaction, state) {
instanciator.getPci(interaction).setSerializedState(state);
},
getState: function getState(interaction) {
return instanciator.getPci(interaction).getSerializedState();
}
};
}