Replace OC.Router.generate() with OC.generateUrl()

This commit is contained in:
Thomas Müller 2014-03-02 22:30:24 +01:00
parent 88c9ae129e
commit 1291303c5a
14 changed files with 72 additions and 154 deletions

View File

@ -137,7 +137,9 @@ window.FileList={
var download_url = null; var download_url = null;
if (!param.download_url) { if (!param.download_url) {
download_url = OC.Router.generate('download', { file: $('#dir').val()+'/'+name }); download_url = OC.generateUrl(
'/download{file}',
{ file: $('#dir').val()+'/'+name });
} else { } else {
download_url = param.download_url; download_url = param.download_url;
} }

View File

@ -780,9 +780,9 @@ Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
if ( $('#isPublic').length ) { if ( $('#isPublic').length ) {
urlSpec.t = $('#dirToken').val(); urlSpec.t = $('#dirToken').val();
previewURL = OC.Router.generate('core_ajax_public_preview', urlSpec); previewURL = OC.generateUrl('/publicpreview.png?') + $.param(urlSpec);
} else { } else {
previewURL = OC.Router.generate('core_ajax_preview', urlSpec); previewURL = OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
} }
previewURL = previewURL.replace('(', '%28'); previewURL = previewURL.replace('(', '%28');
previewURL = previewURL.replace(')', '%29'); previewURL = previewURL.replace(')', '%29');

View File

@ -1,4 +1,5 @@
<?php <?php
/** @var $this OC_Router */
$this->create('core_ajax_public_preview', '/publicpreview.png')->action( $this->create('core_ajax_public_preview', '/publicpreview.png')->action(
function() { function() {
require_once __DIR__ . '/../ajax/publicpreview.php'; require_once __DIR__ . '/../ajax/publicpreview.php';

View File

@ -75,31 +75,32 @@
var $div = this; var $div = this;
OC.Router.registerLoadedCallback(function() { var url = OC.generateUrl(
var url = OC.Router.generate('core_avatar_get', {user: user, size: size})+'?requesttoken='+oc_requesttoken; '/avatar/{user}/{size}?requesttoken={requesttoken}',
$.get(url, function(result) { {user: user, size: size, requesttoken: oc_requesttoken});
if (typeof(result) === 'object') {
if (!hidedefault) { $.get(url, function(result) {
if (result.data && result.data.displayname) { if (typeof(result) === 'object') {
$div.imageplaceholder(user, result.data.displayname); if (!hidedefault) {
} else { if (result.data && result.data.displayname) {
$div.imageplaceholder(user); $div.imageplaceholder(user, result.data.displayname);
}
} else { } else {
$div.hide(); $div.imageplaceholder(user);
} }
} else { } else {
$div.show(); $div.hide();
if (ie8fix === true) {
$div.html('<img src="'+url+'#'+Math.floor(Math.random()*1000)+'">');
} else {
$div.html('<img src="'+url+'">');
}
} }
if(typeof callback === 'function') { } else {
callback(); $div.show();
if (ie8fix === true) {
$div.html('<img src="'+url+'#'+Math.floor(Math.random()*1000)+'">');
} else {
$div.html('<img src="'+url+'">');
} }
}); }
if(typeof callback === 'function') {
callback();
}
}); });
}; };
}(jQuery)); }(jQuery));

View File

@ -194,6 +194,27 @@ var OC={
linkToRemoteBase:function(service) { linkToRemoteBase:function(service) {
return OC.webroot + '/remote.php/' + service; return OC.webroot + '/remote.php/' + service;
}, },
generateUrl: function(url, params) {
var _build = function (text, vars) {
return text.replace(/{([^{}]*)}/g,
function (a, b) {
var r = vars[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
if (url.charAt(0) !== '/') {
url = '/' + url;
}
return OC.webroot + '/index.php' + _build(url, params);
},
linkToRoute:function(route) {
return OC.webroot + '/index.php/' + route;
},
/** /**
* @brief Creates an absolute url for remote use * @brief Creates an absolute url for remote use
* @param string $service id * @param string $service id
@ -791,12 +812,10 @@ function initCore() {
if (interval < 60) { if (interval < 60) {
interval = 60; interval = 60;
} }
OC.Router.registerLoadedCallback(function(){ var url = OC.linkToRoute('heartbeat');
var url = OC.Router.generate('heartbeat'); setInterval(function(){
setInterval(function(){ $.post(url);
$.post(url); }, interval * 1000);
}, interval * 1000);
});
} }
// session heartbeat (defaults to enabled) // session heartbeat (defaults to enabled)

View File

@ -1,81 +0,0 @@
OC.router_base_url = OC.webroot + '/index.php';
OC.Router = {
// register your ajax requests to load after the loading of the routes
// has finished. otherwise you face problems with race conditions
registerLoadedCallback: function(callback){
if (!this.routes_request){
return;
}
this.routes_request.done(callback);
},
routes_request: !window.TESTING && $.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') {
console.warn('To avoid race conditions, please register a callback');// 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;
}
}

View File

@ -69,7 +69,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_ids_for_tag', {type: type}); url = OC.generateUrl('/tags/{type}/ids', {type: type});
$.getJSON(url, {tag: tag}, function(response) { $.getJSON(url, {tag: tag}, function(response) {
if(response.status === 'success') { if(response.status === 'success') {
defer.resolve(response.ids); defer.resolve(response.ids);
@ -90,7 +90,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_favorites', {type: type}); url = OC.generateUrl('/tags/{type}/favorites', {type: type});
$.getJSON(url, function(response) { $.getJSON(url, function(response) {
if(response.status === 'success') { if(response.status === 'success') {
defer.resolve(response.ids); defer.resolve(response.ids);
@ -111,7 +111,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_tags', {type: type}); url = OC.generateUrl('/tags/{type}', {type: type});
$.getJSON(url, function(response) { $.getJSON(url, function(response) {
if(response.status === 'success') { if(response.status === 'success') {
defer.resolve(response.tags); defer.resolve(response.tags);
@ -133,7 +133,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_tag', {type: type, id: id}); url = OC.generateUrl('/tags/{type}/tag/{id}/', {type: type, id: id});
$.post(url, {tag: tag}, function(response) { $.post(url, {tag: tag}, function(response) {
if(response.status === 'success') { if(response.status === 'success') {
defer.resolve(response); defer.resolve(response);
@ -157,7 +157,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_untag', {type: type, id: id}); url = OC.generateUrl('/tags/{type}/untag/{id}/', {type: type, id: id});
$.post(url, {tag: tag}, function(response) { $.post(url, {tag: tag}, function(response) {
if(response.status === 'success') { if(response.status === 'success') {
defer.resolve(response); defer.resolve(response);
@ -181,7 +181,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_favorite', {type: type, id: id}); url = OC.generateUrl('/tags/{type}/favorite/{id}/', {type: type, id: id});
$.post(url, function(response) { $.post(url, function(response) {
if(response.status === 'success') { if(response.status === 'success') {
defer.resolve(response); defer.resolve(response);
@ -205,7 +205,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_unfavorite', {type: type, id: id}); url = OC.generateUrl('/tags/{type}/unfavorite/{id}/', {type: type, id: id});
$.post(url, function(response) { $.post(url, function(response) {
if(response.status === 'success') { if(response.status === 'success') {
defer.resolve(); defer.resolve();
@ -229,7 +229,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_add', {type: type}); url = OC.generateUrl('/tags/{type}/add', {type: type});
$.post(url,{tag:tag}, function(response) { $.post(url,{tag:tag}, function(response) {
if(typeof cb == 'function') { if(typeof cb == 'function') {
cb(response); cb(response);
@ -256,7 +256,7 @@ OC.Tags= {
type = type ? type : this.type; type = type ? type : this.type;
var defer = $.Deferred(), var defer = $.Deferred(),
self = this, self = this,
url = OC.Router.generate('core_tags_delete', {type: type}); url = OC.generateUrl('/tags/{type}/delete', {type: type});
if(!tags || !tags.length) { if(!tags || !tags.length) {
throw new Error(t('core', 'No tags selected for deletion.')); throw new Error(t('core', 'No tags selected for deletion.'));
} }

View File

@ -65,8 +65,6 @@ $this->create('core_tags_delete', '/tags/{type}/delete')
$this->create('js_config', '/core/js/oc.js') $this->create('js_config', '/core/js/oc.js')
->actionInclude('core/js/config.php'); ->actionInclude('core/js/config.php');
// Routing // Routing
$this->create('core_ajax_routes', '/core/routes.json')
->action('OC_Router', 'JSRoutes');
$this->create('core_ajax_preview', '/core/preview.png') $this->create('core_ajax_preview', '/core/preview.png')
->actionInclude('core/ajax/preview.php'); ->actionInclude('core/ajax/preview.php');
$this->create('core_lostpassword_index', '/lostpassword/') $this->create('core_lostpassword_index', '/lostpassword/')

View File

@ -316,7 +316,6 @@ class OC {
OC_Util::addScript("config"); OC_Util::addScript("config");
//OC_Util::addScript( "multiselect" ); //OC_Util::addScript( "multiselect" );
OC_Util::addScript('search', 'result'); OC_Util::addScript('search', 'result');
OC_Util::addScript('router');
OC_Util::addScript("oc-requesttoken"); OC_Util::addScript("oc-requesttoken");
// avatars // avatars

View File

@ -158,28 +158,4 @@ class OC_Router {
return $this->getGenerator()->generate($name, $parameters, $absolute); return $this->getGenerator()->generate($name, $parameters, $absolute);
} }
/**
* Generate JSON response for routing in javascript
*/
public static function JSRoutes()
{
$router = OC::getRouter();
$etag = $router->getCacheKey();
OC_Response::enableCaching();
OC_Response::setETagHeader($etag);
$root = $router->getCollection('root');
$routes = array();
foreach($root->all() as $name => $route) {
$compiled_route = $route->compile();
$defaults = $route->getDefaults();
unset($defaults['action']);
$routes[$name] = array(
'tokens' => $compiled_route->getTokens(),
'defaults' => $defaults,
);
}
OCP\JSON::success ( array( 'data' => $routes ) );
}
} }

View File

@ -64,7 +64,7 @@ $(document).ready(function(){
$('#mail_settings').change(function(){ $('#mail_settings').change(function(){
OC.msg.startSaving('#mail_settings .msg'); OC.msg.startSaving('#mail_settings .msg');
var post = $( "#mail_settings" ).serialize(); var post = $( "#mail_settings" ).serialize();
$.post(OC.Router.generate('settings_mail_settings'), post, function(data){ $.post(OC.generateUrl('/settings/admin/mailsettings'), post, function(data){
OC.msg.finishedSaving('#mail_settings .msg', data); OC.msg.finishedSaving('#mail_settings .msg', data);
}); });
}); });

View File

@ -67,7 +67,7 @@ function showAvatarCropper() {
$cropper.prepend("<img>"); $cropper.prepend("<img>");
$cropperImage = $('#cropper img'); $cropperImage = $('#cropper img');
$cropperImage.attr('src', OC.Router.generate('core_avatar_get_tmp')+'?requesttoken='+oc_requesttoken+'#'+Math.floor(Math.random()*1000)); $cropperImage.attr('src', OC.generateUrl('/avatar/tmp')+'?requesttoken='+oc_requesttoken+'#'+Math.floor(Math.random()*1000));
// Looks weird, but on('load', ...) doesn't work in IE8 // Looks weird, but on('load', ...) doesn't work in IE8
$cropperImage.ready(function(){ $cropperImage.ready(function(){
@ -95,7 +95,7 @@ function sendCropData() {
w: cropperdata.w, w: cropperdata.w,
h: cropperdata.h h: cropperdata.h
}; };
$.post(OC.Router.generate('core_avatar_post_cropped'), {crop: data}, avatarResponseHandler); $.post(OC.generateUrl('/avatar/cropped'), {crop: data}, avatarResponseHandler);
} }
function saveCoords(c) { function saveCoords(c) {
@ -132,7 +132,7 @@ $(document).ready(function(){
$('#passwordchanged').hide(); $('#passwordchanged').hide();
$('#passworderror').hide(); $('#passworderror').hide();
// Ajax foo // Ajax foo
$.post(OC.Router.generate('settings_personal_changepassword'), post, function(data){ $.post(OC.generateUrl('/settings/personal/changepassword'), post, function(data){
if( data.status === "success" ){ if( data.status === "success" ){
$('#pass1').val(''); $('#pass1').val('');
$('#pass2').val(''); $('#pass2').val('');
@ -243,7 +243,7 @@ $(document).ready(function(){
OC.dialogs.filepicker( OC.dialogs.filepicker(
t('settings', "Select a profile picture"), t('settings', "Select a profile picture"),
function(path){ function(path){
$.post(OC.Router.generate('core_avatar_post'), {path: path}, avatarResponseHandler); $.post(OC.generateUrl('/avatar/'), {path: path}, avatarResponseHandler);
}, },
false, false,
["image/png", "image/jpeg"] ["image/png", "image/jpeg"]
@ -253,7 +253,7 @@ $(document).ready(function(){
$('#removeavatar').click(function(){ $('#removeavatar').click(function(){
$.ajax({ $.ajax({
type: 'DELETE', type: 'DELETE',
url: OC.Router.generate('core_avatar_delete'), url: OC.generateUrl('/avatar/'),
success: function(msg) { success: function(msg) {
updateAvatar(true); updateAvatar(true);
} }

View File

@ -225,7 +225,8 @@ var UserList = {
} }
$('table+.loading').css('visibility', 'visible'); $('table+.loading').css('visibility', 'visible');
UserList.updating = true; UserList.updating = true;
$.get(OC.Router.generate('settings_ajax_userlist', { offset: UserList.offset, limit: UserList.usersToLoad }), function (result) { var query = $.param({ offset: UserList.offset, limit: UserList.usersToLoad });
$.get(OC.generateUrl('/settings/ajax/userlist') + query, function (result) {
var loadedUsers = 0; var loadedUsers = 0;
var trs = []; var trs = [];
if (result.status === 'success') { if (result.status === 'success') {
@ -401,7 +402,7 @@ $(document).ready(function () {
if ($(this).val().length > 0) { if ($(this).val().length > 0) {
var recoveryPasswordVal = $('input:password[id="recoveryPassword"]').val(); var recoveryPasswordVal = $('input:password[id="recoveryPassword"]').val();
$.post( $.post(
OC.Router.generate('settings_users_changepassword'), OC.generateUrl('/settings/users/changepassword'),
{username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal}, {username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal},
function (result) { function (result) {
if (result.status != 'success') { if (result.status != 'success') {

View File

@ -6,6 +6,8 @@
* See the COPYING-README file. * See the COPYING-README file.
*/ */
/** @var $this OC_Router */
// Settings pages // Settings pages
$this->create('settings_help', '/settings/help') $this->create('settings_help', '/settings/help')
->actionInclude('settings/help.php'); ->actionInclude('settings/help.php');