in client/client/app/shared/components/ngbGoldenLayout/ngbCoordinates/parse-coordinates.js [120:217]
export default async function parseCoordinates (
string,
projectContext,
currentChromosomeName,
searchResultsCache = [],
projectDataService,
referenceId
) {
if (!string) {
return [];
}
let rest = string.slice();
const coordinates = [];
let currentChromosome = getChromosome(currentChromosomeName, projectContext);
do {
const chrStartEnd = CHR_START_END_regExp.exec(rest);
const chrPosition = CHR_POSITION_regExp.exec(rest);
const chr = CHR_regExp.exec(rest);
const startEnd = START_END_regExp.exec(rest);
const position = POSITION_regExp.exec(rest);
const feature = FEATURE_regExp.exec(rest);
const matchedRegExp = chrStartEnd ||
chrPosition ||
chr ||
startEnd ||
position ||
feature;
if (chrStartEnd) {
const [, chrName, start, end] = chrStartEnd;
const chromosome = getChromosome(chrName, projectContext);
const viewport = {
start: correctPosition(chromosome, start),
end: correctPosition(chromosome, end)
};
if (chromosome && viewport.start && viewport.end) {
coordinates.push({chromosome, viewport});
currentChromosome = chromosome;
}
} else if (chrPosition) {
const [, chrName, _position] = chrPosition;
const chromosome = getChromosome(chrName, projectContext);
const positionPayload = correctPosition(chromosome, _position);
const viewport = getViewportByPosition(_position, chromosome);
if (chromosome && viewport.start && viewport.end) {
coordinates.push({chromosome, viewport});
currentChromosome = chromosome;
} else if (chromosome && positionPayload) {
coordinates.push({chromosome, position: positionPayload});
currentChromosome = chromosome;
}
} else if (chr) {
const [, chrName] = chr;
const chromosome = getChromosome(chrName, projectContext);
if (chromosome) {
const viewport = {
start: 1,
end: currentChromosome.size
};
coordinates.push({chromosome, viewport});
currentChromosome = chromosome;
}
} else if (startEnd && currentChromosome) {
const [, start, end] = startEnd;
const viewport = {
start: correctPosition(currentChromosome, start),
end: correctPosition(currentChromosome, end)
};
if (viewport.start && viewport.end) {
coordinates.push({chromosome: currentChromosome, viewport});
}
} else if (position && currentChromosome) {
const [, _position] = position;
const positionPayload = correctPosition(currentChromosome, _position);
const viewport = getViewportByPosition(_position, currentChromosome);
if (viewport.start && viewport.end) {
coordinates.push({chromosome: currentChromosome, viewport});
} else if (positionPayload) {
coordinates.push({chromosome: currentChromosome, position: positionPayload});
}
} else if (feature) {
const featureNavigation = await findFeature(
feature[1],
searchResultsCache,
projectDataService,
referenceId
);
if (featureNavigation) {
coordinates.push(featureNavigation);
}
}
if (matchedRegExp) {
rest = rest.slice(matchedRegExp.index + matchedRegExp[0].length);
} else {
rest = undefined;
}
} while (rest);
return coordinates;
}