74 lines
1.8 KiB
JavaScript
74 lines
1.8 KiB
JavaScript
|
OC.router_base_url = OC.webroot + '/index.php/',
|
||
|
OC.Router = {
|
||
|
routes_request: $.ajax(OC.router_base_url + 'core/routes.json', {
|
||
|
dataType: 'json',
|
||
|
success: function(jsondata) {
|
||
|
if (jsondata.status == 'success') {
|
||
|
OC.Router.routes = jsondata.data;
|
||
|
}
|
||
|
}
|
||
|
}),
|
||
|
generate:function(name, opt_params) {
|
||
|
if (!('routes' in this)) {
|
||
|
if(this.routes_request.state() != 'resolved') {
|
||
|
alert('wait');// wait
|
||
|
}
|
||
|
}
|
||
|
if (!(name in this.routes)) {
|
||
|
throw new Error('The route "' + name + '" does not exist.');
|
||
|
}
|
||
|
var route = this.routes[name];
|
||
|
var params = opt_params || {};
|
||
|
var unusedParams = $.extend(true, {}, params);
|
||
|
var url = '';
|
||
|
var optional = true;
|
||
|
$(route.tokens).each(function(i, token) {
|
||
|
if ('text' === token[0]) {
|
||
|
url = token[1] + url;
|
||
|
optional = false;
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ('variable' === token[0]) {
|
||
|
if (false === optional || !(token[3] in route.defaults)
|
||
|
|| ((token[3] in params) && params[token[3]] != route.defaults[token[3]])) {
|
||
|
var value;
|
||
|
if (token[3] in params) {
|
||
|
value = params[token[3]];
|
||
|
delete unusedParams[token[3]];
|
||
|
} else if (token[3] in route.defaults) {
|
||
|
value = route.defaults[token[3]];
|
||
|
} else if (optional) {
|
||
|
return;
|
||
|
} else {
|
||
|
throw new Error('The route "' + name + '" requires the parameter "' + token[3] + '".');
|
||
|
}
|
||
|
|
||
|
var empty = true === value || false === value || '' === value;
|
||
|
|
||
|
if (!empty || !optional) {
|
||
|
url = token[1] + encodeURIComponent(value).replace(/%2F/g, '/') + url;
|
||
|
}
|
||
|
|
||
|
optional = false;
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
throw new Error('The token type "' + token[0] + '" is not supported.');
|
||
|
});
|
||
|
if (url === '') {
|
||
|
url = '/';
|
||
|
}
|
||
|
|
||
|
unusedParams = $.param(unusedParams);
|
||
|
if (unusedParams.length > 0) {
|
||
|
url += '?'+unusedParams;
|
||
|
}
|
||
|
|
||
|
return OC.router_base_url + url;
|
||
|
}
|
||
|
};
|