@didask/scol-r
Version:
Shareable Cross-Origin Learning Resources
79 lines (78 loc) • 9.09 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ManifestGenerator = exports.Sco = void 0;
var Sco = /** @class */ (function () {
function Sco(props) {
this.scoID = props.scoID;
this.scoTitle = props.scoTitle;
this.author = props.author;
this.learningTime = props.learningTime;
this.resources = props.resources;
this.scoHref = props.scoHref;
}
return Sco;
}());
exports.Sco = Sco;
var formatLearningTime = function (learningTime) {
var intHours = Math.floor(learningTime / 60);
var hours = intHours > 10 ? intHours : "0".concat(intHours);
var intMinutes = intHours > 0 ? learningTime - intHours * 60 : learningTime;
var minutes = intMinutes > 10 ? intMinutes : "0".concat(intMinutes);
return "".concat(hours, ":").concat(minutes, ":00");
};
var removeSpecialChars = function (obj) {
return Object.entries(obj).reduce(function (acc, _a) {
var _b;
var key = _a[0], value = _a[1];
return (__assign(__assign({}, acc), (_b = {}, _b[key] = value.replace(/&/g, "-"), _b)));
}, {});
};
function ManifestGenerator(_a) {
var courseId = _a.courseId, _b = _a.scoList, scoList = _b === void 0 ? [] : _b, _c = _a.sharedResources, sharedResources = _c === void 0 ? [] : _c, _d = _a.totalLearningTime, totalLearningTime = _d === void 0 ? 0 : _d, dataFromLms = _a.dataFromLms, _e = _a.scormVersion, scormVersion = _e === void 0 ? "1.2" : _e, props = __rest(_a, ["courseId", "scoList", "sharedResources", "totalLearningTime", "dataFromLms", "scormVersion"]);
var _f = removeSpecialChars(props), courseTitle = _f.courseTitle, courseAuthor = _f.courseAuthor;
var courseGlobalLearningTime = scoList.length
? scoList.reduce(function (acc, sco) { return acc + sco.learningTime; }, 0)
: totalLearningTime;
return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n <manifest xmlns=\"http://www.imsproject.org/xsd/imscp_rootv1p1p2\" identifier=\"".concat(courseId, "\" version=\"1.0\" xmlns:imsmd=\"http://www.imsglobal.org/xsd/imsmd_rootv1p2p1\" xmlns:adlcp=\"http://www.adlnet.org/xsd/adlcp_rootv1p2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.imsproject.org/xsd/imscp_rootv1p1p2 imscp_rootv1p1p2.xsd http://www.imsglobal.org/xsd/imsmd_rootv1p2p1 imsmd_rootv1p2p1.xsd http://www.adlnet.org/xsd/adlcp_rootv1p2 adlcp_rootv1p2.xsd\">\n <metadata>\n <schema>ADL SCORM</schema>\n <schemaversion>").concat(scormVersion, "</schemaversion>\n <imsmd:lom xmlns=\"http://ltsc.ieee.org/xsd/LOM\">\n <imsmd:general>\n <imsmd:identifier>").concat(courseId, "</imsmd:identifier>\n <imsmd:title>\n <imsmd:langstring xml:lang=\"fr\">").concat(courseTitle, "</imsmd:langstring>\n </imsmd:title>\n </imsmd:general>\n <imsmd:lifecycle>\n <imsmd:contribute>\n <imsmd:role>\n <imsmd:source>\n <imsmd:langstring xml:lang=\"fr\">LOMv1.0</imsmd:langstring>\n </imsmd:source>\n <imsmd:value>\n <imsmd:langstring xml:lang=\"fr\">Author</imsmd:langstring>\n </imsmd:value>\n </imsmd:role>\n <imsmd:centity>\n <imsmd:vcard>\n begin:vcard\n fn:").concat(courseAuthor, "\n end:vcard\n </imsmd:vcard>\n </imsmd:centity>\n </imsmd:contribute>\n </imsmd:lifecycle>\n <imsmd:metametadata>\n <imsmd:metadatascheme>ADL SCORM 1.2</imsmd:metadatascheme>\n </imsmd:metametadata>\n <imsmd:rights>\n <imsmd:cost>\n <imsmd:source>\n <imsmd:langstring xml:lang=\"fr\">LOMv1.0</imsmd:langstring>\n </imsmd:source>\n <imsmd:value>\n <imsmd:langstring xml:lang=\"fr\">yes</imsmd:langstring>\n </imsmd:value>\n </imsmd:cost>\n <imsmd:copyrightandotherrestrictions>\n <imsmd:source>\n <imsmd:langstring xml:lang=\"fr\">LOMv1.0</imsmd:langstring>\n </imsmd:source>\n <imsmd:value>\n <imsmd:langstring xml:lang=\"fr\">yes</imsmd:langstring>\n </imsmd:value>\n </imsmd:copyrightandotherrestrictions>\n </imsmd:rights>\n <imsmd:educational>\n <imsmd:typicallearningtime>\n <imsmd:datetime>").concat(formatLearningTime(courseGlobalLearningTime), "</imsmd:datetime>\n </imsmd:typicallearningtime>\n </imsmd:educational>\n </imsmd:lom>\n </metadata>\n <organizations default=\"Org1\">\n <organization identifier=\"Org1\">\n <title>").concat(courseTitle, "</title>\n ").concat(scoList
.map(function (_a) {
var scoID = _a.scoID, learningTime = _a.learningTime, resources = _a.resources, props = __rest(_a, ["scoID", "learningTime", "resources"]);
var _b = removeSpecialChars(props), scoTitle = _b.scoTitle, author = _b.author;
return "<item identifier=\"".concat(scoTitle, "\" identifierref=\"resource_").concat(scoID, "\" isvisible=\"true\">\n <title>").concat(scoTitle, "</title>\n <adlcp:dataFromLMS>").concat(dataFromLms !== null && dataFromLms !== void 0 ? dataFromLms : courseId + ":" + scoID, "</adlcp:dataFromLMS>\n <metadata>\n <imsmd:lom xmlns=\"http://ltsc.ieee.org/xsd/LOM\">\n <imsmd:general>\n <imsmd:identifier>").concat(scoID, "</imsmd:identifier>\n </imsmd:general>\n <imsmd:lifecycle>\n <imsmd:contribute>\n <imsmd:role>\n <imsmd:source>\n <imsmd:langstring xml:lang=\"fr\">LOMv1.0</imsmd:langstring>\n </imsmd:source>\n <imsmd:value>\n <imsmd:langstring xml:lang=\"fr\">Author</imsmd:langstring>\n </imsmd:value>\n </imsmd:role>\n <imsmd:centity>\n <imsmd:vcard>\n begin:vcard\n fn:").concat(author, "\n end:vcard\n </imsmd:vcard>\n </imsmd:centity>\n </imsmd:contribute>\n </imsmd:lifecycle>\n <imsmd:educational>\n <imsmd:typicallearningtime>\n <imsmd:datetime>").concat(formatLearningTime(learningTime), "</imsmd:datetime>\n </imsmd:typicallearningtime>\n </imsmd:educational>\n </imsmd:lom>\n </metadata>\n </item>");
})
.join("\n"), "\n </organization>\n </organizations>\n <resources>\n ").concat((sharedResources === null || sharedResources === void 0 ? void 0 : sharedResources.length)
? "<resource adlcp:scormtype=\"asset\" type=\"webcontent\" identifier=\"shared_resources\">\n ".concat(sharedResources
.map(function (resource) { return "<file href=\"".concat(resource, "\"/>"); })
.join("\n"), "\n </resource>")
: "", "\n ").concat(scoList
.map(function (sco) {
return "<resource adlcp:scormtype=\"sco\" type=\"webcontent\" identifier=\"resource_".concat(sco.scoID, "\" href=\"").concat(sco.scoHref, "\">\n ").concat((sharedResources === null || sharedResources === void 0 ? void 0 : sharedResources.length)
? '<dependency identifierref="shared_resources"/>'
: "", "\n ").concat(sco.resources
.map(function (resource) { return "<file href=\"".concat(resource, "\"/>"); })
.join("\n"), "\n </resource>");
})
.join("\n"), "\n </resources>\n </manifest>");
}
exports.ManifestGenerator = ManifestGenerator;