src/lib/urlHelper.js
import url from 'url';
function getUrl(url, direct) {
return `${ direct ? '/#' : '' }${ url }`;
}
export function getCollectionUrl(collectionName, direct) {
return getUrl(`/collections/${ collectionName }`, direct);
}
export function getNewEntryUrl(collectionName, direct) {
return getUrl(`/collections/${ collectionName }/entries/new`, direct);
}
export function urlize(string) {
const sanitized = makePathSanitized(string);
const parsedURL = url.parse(sanitized);
return url.format(parsedURL);
}
function makePathSanitized(string) {
return makePath(string.toLowerCase());
}
function makePath(string) {
return unicodeSanitize(string).trim().replace(/[\s]/g, '-').replace(/-+/g, '-');
}
function unicodeSanitize(string) {
let target = [];
const runes = string.split('');
for (let i=0; i < string.length; i++) {
const r = runes[i];
if (r == '%' && i+2 < string.length && string.substr(i+1, 2).match(/^[0-9a-f]+$/)) {
target = target.concat([r, runes[i+1], runes[i+2]]);
} else if (r.match(/[\w .\/\\_#\+-]/u)) {
target.push(r);
}
}
return target.join('');
}