66 lines
No EOL
2.1 KiB
JavaScript
66 lines
No EOL
2.1 KiB
JavaScript
Misuzu.Urls = {};
|
|
Misuzu.Urls.registry = [];
|
|
Misuzu.Urls.loadFromDocument = function() {
|
|
var elem = document.getElementById('js-urls-list');
|
|
if(!elem)
|
|
return;
|
|
Misuzu.Urls.registry = JSON.parse(elem.textContent);
|
|
};
|
|
Misuzu.Urls.handleVariable = function(value, vars) {
|
|
if(value[0] === '<' && value.slice(-1) === '>')
|
|
return (vars.find(function(x) { return x.name == value.slice(1, -1); }) || {}).value || '';
|
|
if(value[0] === '[' && value.slice(-1) === ']')
|
|
return ''; // not sure if there's a proper substitute for this, should probably resolve these in url_list
|
|
if(value[0] === '{' && value.slice(-1) === '}')
|
|
return Misuzu.CSRF.getToken();
|
|
|
|
// Allow file extensions
|
|
var split = value.split('.'),
|
|
extension = split[split.length - 1],
|
|
fileName = split.slice(0, -1).join('.');
|
|
if(value !== fileName) {
|
|
var fallback = Misuzu.Urls.handleVariable(fileName, vars);
|
|
if(fallback !== fileName)
|
|
return fallback + '.' + extension;
|
|
}
|
|
|
|
return value;
|
|
};
|
|
Misuzu.Urls.v = function(name, value) {
|
|
if(typeof value === 'undefined' || value === null)
|
|
value = '';
|
|
return { name: name.toString(), value: value.toString() };
|
|
};
|
|
Misuzu.Urls.format = function(name, vars) {
|
|
vars = vars || [];
|
|
var entry = Misuzu.Urls.registry.find(function(x) { return x.name == name; });
|
|
if(!entry || !entry.path)
|
|
return '';
|
|
|
|
var split = entry.path.split('/');
|
|
for(var i = 0; i < split.length; ++i)
|
|
split[i] = Misuzu.Urls.handleVariable(split[i], vars);
|
|
|
|
var url = split.join('/');
|
|
|
|
if(entry.query) {
|
|
url += '?';
|
|
|
|
for(var i = 0; i < entry.query.length; ++i) {
|
|
var query = entry.query[i],
|
|
value = Misuzu.Urls.handleVariable(query.value, vars);
|
|
|
|
if(!value || (query.name === 'page' && parseInt(value) < 2))
|
|
continue;
|
|
|
|
url += query.name + '=' + value.toString() + '&';
|
|
}
|
|
|
|
url = url.replace(/^[\?\&]+|[\?\&]+$/g, '');
|
|
}
|
|
|
|
if(entry.fragment)
|
|
url += ('#' + Misuzu.Urls.handleVariable(entry.fragment, vars)).replace(/[\#]+$/g, '');
|
|
|
|
return url;
|
|
}; |