UNPKG

@didask/scol-r

Version:

Shareable Cross-Origin Learning Resources

79 lines (78 loc) 9.09 kB
"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;