66 lines
2.8 KiB
JavaScript
66 lines
2.8 KiB
JavaScript
function encodeRoutePart(value = '') {
|
|
return encodeURIComponent(String(value || '').trim());
|
|
}
|
|
|
|
function decodeRoutePart(value = '') {
|
|
try {
|
|
return decodeURIComponent(String(value || ''));
|
|
} catch {
|
|
return String(value || '');
|
|
}
|
|
}
|
|
|
|
export function normalizeLogin(value = '') {
|
|
return String(value || '').trim().replace(/^@+/, '');
|
|
}
|
|
|
|
export function extractLoginFromBlockchainName(value = '') {
|
|
const raw = String(value || '').trim();
|
|
const match = raw.match(/^(.+)-\d+$/);
|
|
if (!match) return normalizeLogin(raw);
|
|
return normalizeLogin(String(match[1] || ''));
|
|
}
|
|
|
|
export function makeProfileRoute(login = '') {
|
|
const clean = normalizeLogin(login);
|
|
return clean ? `shine.${encodeRoutePart(clean)}` : 'profile-view';
|
|
}
|
|
|
|
export function makeProfileLinksRoute(login = '') {
|
|
const clean = normalizeLogin(login);
|
|
return clean ? `shine.${encodeRoutePart(clean)}/links` : 'network-view/keep-history';
|
|
}
|
|
|
|
export function makeProfileChannelsRoute(login = '', scope = 'all') {
|
|
const clean = normalizeLogin(login);
|
|
if (!clean) return 'channels-list/feed';
|
|
const normalizedScope = String(scope || '').trim().toLowerCase();
|
|
if (normalizedScope === 'owned') return `shine.${encodeRoutePart(clean)}/channels/owned`;
|
|
if (normalizedScope === 'following') return `shine.${encodeRoutePart(clean)}/channels/following`;
|
|
return `shine.${encodeRoutePart(clean)}/channels`;
|
|
}
|
|
|
|
export function makeShineChannelRoute({ ownerLogin = '', ownerBlockchainName = '', channelName = '', messageBlockNumber = '' }) {
|
|
const cleanOwnerLogin = normalizeLogin(ownerLogin) || extractLoginFromBlockchainName(ownerBlockchainName);
|
|
const ownerBch = String(ownerBlockchainName || '').trim();
|
|
const chName = String(channelName || '').trim();
|
|
const msgNo = String(messageBlockNumber || '').trim();
|
|
if (!cleanOwnerLogin || !ownerBch || !chName) return '';
|
|
if (msgNo) return `shine.${encodeRoutePart(cleanOwnerLogin)}/channel/${encodeRoutePart(ownerBch)}/${encodeRoutePart(chName)}/${encodeRoutePart(msgNo)}`;
|
|
return `shine.${encodeRoutePart(cleanOwnerLogin)}/channel/${encodeRoutePart(ownerBch)}/${encodeRoutePart(chName)}`;
|
|
}
|
|
|
|
export function makeShineMessageRoute({ ownerLogin = '', messageBlockchainName = '', messageBlockNumber = '' }) {
|
|
const cleanOwnerLogin = normalizeLogin(ownerLogin);
|
|
const msgBch = String(messageBlockchainName || '').trim();
|
|
const msgNo = String(messageBlockNumber || '').trim();
|
|
if (!cleanOwnerLogin || !msgBch || !msgNo) return '';
|
|
return `shine.${encodeRoutePart(cleanOwnerLogin)}/msg/${encodeRoutePart(msgBch)}/${encodeRoutePart(msgNo)}`;
|
|
}
|
|
|
|
export function parseShineRootSegment(segment = '') {
|
|
const raw = String(segment || '').trim();
|
|
if (!raw.toLowerCase().startsWith('shine.')) return '';
|
|
return normalizeLogin(decodeRoutePart(raw.slice('shine.'.length)));
|
|
}
|