Making sure to sort interactions properly

This commit is contained in:
Jonathan Putney
2020-07-30 11:48:56 -04:00
parent 9bb735bf59
commit e4e9f87f18
4 changed files with 68 additions and 35 deletions

50
dist/scorm-again.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -860,26 +860,43 @@ export default class BaseAPI {
// CMI interactions need to have id and type loaded before any other fields
result.sort(function([a, b], [c, d]) {
/**
* Test match pattern.
*
* @param {string} a
* @param {string} c
* @param {RegExp} a_pattern
* @param {RegExp} c_pattern
* @return {number}
*/
function testPattern(a, c, a_pattern, c_pattern) {
if (a.match(a_pattern) && c.match(c_pattern)) {
if (Number(a.match(a_pattern)[1]) <
Number(c.match(c_pattern)[1])) return -1;
if (Number(a.match(a_pattern)[1]) >
Number(c.match(c_pattern)[1])) return 1;
return -1;
} else if (a.match(c_pattern) && c.match(a_pattern)) {
if (Number(a.match(c_pattern)[1]) <
Number(c.match(a_pattern)[1])) return -1;
if (Number(a.match(c_pattern)[1]) >
Number(c.match(a_pattern)[1])) return 1;
return 1;
}
return 0;
}
const id_pattern = /^cmi\.interactions\.(\d+)\.id$/;
const type_pattern = /^cmi\.interactions\.(\d+)\.type$/;
const pattern = /^cmi\.interactions\.(\d+)/;
if (a.match(id_pattern) && c.match(pattern)) {
if (a.match(id_pattern)[1] < c.match(pattern)[1]) return -1;
if (a.match(id_pattern)[1] > c.match(pattern)[1]) return 1;
return -1;
} else if (a.match(pattern) && c.match(id_pattern)) {
if (a.match(pattern)[1] < c.match(id_pattern)[1]) return -1;
if (a.match(pattern)[1] > c.match(id_pattern)[1]) return 1;
return 1;
} else if (a.match(type_pattern) && c.match(pattern)) {
if (a.match(type_pattern)[1] < c.match(pattern)[1]) return -1;
if (a.match(type_pattern)[1] > c.match(pattern)[1]) return 1;
return -1;
} else if (a.match(pattern) && c.match(type_pattern)) {
if (a.match(pattern)[1] < c.match(type_pattern)[1]) return -1;
if (a.match(pattern)[1] > c.match(type_pattern)[1]) return 1;
return 1;
let id_test = testPattern(a, c, id_pattern, pattern);
if (id_test !== 0) {
return id_test;
}
id_test = testPattern(a, c, type_pattern, pattern);
if (id_test !== 0) {
return id_test;
}
if (a < c) return -1;