Files
FHC-Core/public/js/helpers/LegacyLinkReplaceHelper.js
T
2025-01-31 12:08:40 +01:00

94 lines
2.6 KiB
JavaScript

// collection of relative and absolute regex to replace legacy links
const GROUP_REPLACEMENT_STRATEGIES = {
QUERY_PARAMETERS:'QUERY_PARAMETERS',
PATH_SEGMENTS:'PATH_SEGMENTS',
}
const regexList = {
relative:[
{
priority: 1,
regex: new RegExp(/^\.\.\/cms\/content\.php\?content_id=([0-9]+)/),
replacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content',
group_replacement_strategy:GROUP_REPLACEMENT_STRATEGIES.PATH_SEGMENTS,
},
{
priority: 2,
regex: new RegExp(/^\.\.\/cms\/news\.php/),
replacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news',
},
{
priority: 3,
regex: new RegExp(/^\.\.\/index\.ci\.php/),
replacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router,
},
{
priority: 10,
regex: new RegExp(/^\.\.\//),
replacement: FHC_JS_DATA_STORAGE_OBJECT.app_root,
},
],
absolute:[
{}
]
};
// sorts the relative regex array by priority ascending
const relative_regex = regexList.relative
.sort((a, b) => {
return a.priority - b.priority;
})
.map(regex => {
return {
regex: regex.regex,
replacement: regex.replacement,
group_replacement_strategy: regex.group_replacement_strategy,
}
});
// sorts the absolute regex array by priority ascending
const absolute_regex = regexList.absolute
.sort((a, b) => {
return a.priority - b.priority;
})
.map(regex => {
return {
regex: regex.regex,
replacement: regex.replacement,
group_replacement_strategy: regex.group_replacement_strategy,
}
})
export function replaceRelativeLegacyLink(relativeLegacyLink){
for (let {regex,replacement,group_replacement_strategy} of relative_regex){
// if any of the regex matches the relativeLegacyLink, replace the matched part with the new app_root path
let match = relativeLegacyLink.match(regex);
if (match) {
let new_link = relativeLegacyLink.replace(regex, replacement);
switch (group_replacement_strategy){
case 'QUERY_PARAMETERS':
//TODO: this doesn't really work yet because the query parameter are key/value pairs
new_link = new_link.concat(`?${match[1]}`);
for (let query_parameter of match.slice(2)) {
new_link = new_link.concat(`&${query_parameter}`);
}
break;
case 'PATH_SEGMENTS':
for (let query_parameter of match.slice(1)) {
new_link = new_link.concat(`/${query_parameter}`);
}
break;
default:
break;
}
return new_link;
}
}
// if none of the regex matched with the string return the original path
return relativeLegacyLink;
}