mirror of
https://github.com/anidl/multi-downloader-nx.git
synced 2026-03-11 17:45:30 +00:00
81 lines
No EOL
2.5 KiB
JavaScript
81 lines
No EOL
2.5 KiB
JavaScript
/**
|
|
* @param {string} selectString
|
|
* @returns {{
|
|
* isSelected: (val: string) => boolean,
|
|
* values: string[]
|
|
* }}
|
|
*/
|
|
module.exports = (selectString) => {
|
|
if (!selectString)
|
|
return {
|
|
values: [],
|
|
isSelected: () => false
|
|
};
|
|
let parts = selectString.split(',');
|
|
let select = [];
|
|
|
|
|
|
parts.forEach(part => {
|
|
if (part.includes('-')) {
|
|
let splits = part.split('-');
|
|
if (splits.length !== 2) {
|
|
console.log(`[WARN] Unable to parse input "${part}"`);
|
|
return;
|
|
}
|
|
|
|
let firstPart = splits[0];
|
|
let match = firstPart.match(/[A-Za-z]+/);
|
|
if (match && match.length > 0) {
|
|
if (match.index && match.index !== 0) {
|
|
console.log(`[WARN] Unable to parse input "${part}"`);
|
|
return;
|
|
}
|
|
let letters = firstPart.substring(0, match[0].length);
|
|
let number = parseInt(firstPart.substring(match[0].length));
|
|
let b = parseInt(splits[1]);
|
|
if (isNaN(number) || isNaN(b)) {
|
|
console.log(`[WARN] Unable to parse input "${part}"`);
|
|
return;
|
|
}
|
|
for (let i = number; i <= b; i++) {
|
|
select.push(`${letters}${i}`);
|
|
}
|
|
|
|
} else {
|
|
let a = parseInt(firstPart);
|
|
let b = parseInt(splits[1]);
|
|
if (isNaN(a) || isNaN(b)) {
|
|
console.log(`[WARN] Unable to parse input "${part}"`);
|
|
return;
|
|
}
|
|
for (let i = a; i <= b; i++) {
|
|
select.push(`${i}`);
|
|
}
|
|
}
|
|
|
|
} else {
|
|
select.push(part);
|
|
}
|
|
});
|
|
|
|
return {
|
|
values: select,
|
|
isSelected: (st) => {
|
|
let match = st.match(/[A-Za-z]+/);
|
|
if (match && match.length > 0) {
|
|
if (match.index && match.index !== 0) {
|
|
return false;
|
|
}
|
|
let letter = st.substring(0, match[0].length);
|
|
let number = parseInt(st.substring(match[0].length));
|
|
if (isNaN(number)) {
|
|
return false;
|
|
}
|
|
|
|
return select.includes(`${letter}${number}`);
|
|
} else {
|
|
return select.includes(`${parseInt(st)}`);
|
|
}
|
|
}
|
|
};
|
|
}; |