1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/rocketchat_ynh.git synced 2024-09-03 20:16:25 +02:00
rocketchat_ynh/sources/programs/server/packages/kadira_flow-router.js
2016-04-29 16:32:48 +02:00

372 lines
26 KiB
JavaScript

(function () {
/* Imports */
var Meteor = Package.meteor.Meteor;
var _ = Package.underscore._;
var Tracker = Package.tracker.Tracker;
var Deps = Package.tracker.Deps;
var ReactiveDict = Package['reactive-dict'].ReactiveDict;
var ReactiveVar = Package['reactive-var'].ReactiveVar;
var EJSON = Package.ejson.EJSON;
/* Package-scope variables */
var Router, Group, Route, FlowRouter, FastRender;
(function(){
//////////////////////////////////////////////////////////////////////////////////////
// //
// packages/kadira_flow-router/server/router.js //
// //
//////////////////////////////////////////////////////////////////////////////////////
//
var Qs = Npm.require('qs'); // 1
// 2
Router = function () { // 3
this._routes = []; // 4
this._routesMap = {}; // 5
this.subscriptions = Function.prototype; // 6
// 7
// holds onRoute callbacks // 8
this._onRouteCallbacks = []; // 9
}; // 10
// 11
Router.prototype.route = function(pathDef, options) { // 12
if (!/^\/.*/.test(pathDef)) { // 13
var message = "route's path must start with '/'"; // 14
throw new Error(message); // 15
} // 16
// 17
options = options || {}; // 18
var route = new Route(this, pathDef, options); // 19
this._routes.push(route); // 20
// 21
if (options.name) { // 22
this._routesMap[options.name] = route; // 23
} // 24
// 25
this._triggerRouteRegister(route); // 26
return route; // 27
}; // 28
// 29
Router.prototype.group = function(options) { // 30
return new Group(this, options); // 31
}; // 32
// 33
Router.prototype.path = function(pathDef, fields, queryParams) { // 34
if (this._routesMap[pathDef]) { // 35
pathDef = this._routesMap[pathDef].path; // 36
} // 37
// 38
fields = fields || {}; // 39
var regExp = /(:[\w\(\)\\\+\*\.\?]+)+/g; // 40
var path = pathDef.replace(regExp, function(key) { // 41
var firstRegexpChar = key.indexOf("("); // 42
// get the content behind : and (\\d+/) // 43
key = key.substring(1, (firstRegexpChar > 0)? firstRegexpChar: undefined); // 44
// remove +?* // 45
key = key.replace(/[\+\*\?]+/g, ""); // 46
// 47
return fields[key] || ""; // 48
}); // 49
// 50
path = path.replace(/\/\/+/g, "/"); // Replace multiple slashes with single slash
// 52
// remove trailing slash // 53
// but keep the root slash if it's the only one // 54
path = path.match(/^\/{1}$/) ? path: path.replace(/\/$/, ""); // 55
// 56
var strQueryParams = Qs.stringify(queryParams || {}); // 57
if(strQueryParams) { // 58
path += "?" + strQueryParams; // 59
} // 60
// 61
return path; // 62
}; // 63
// 64
Router.prototype.onRouteRegister = function(cb) { // 65
this._onRouteCallbacks.push(cb); // 66
}; // 67
// 68
Router.prototype._triggerRouteRegister = function(currentRoute) { // 69
// We should only need to send a safe set of fields on the route // 70
// object. // 71
// This is not to hide what's inside the route object, but to show // 72
// these are the public APIs // 73
var routePublicApi = _.pick(currentRoute, 'name', 'pathDef', 'path'); // 74
var omittingOptionFields = [ // 75
'triggersEnter', 'triggersExit', 'action', 'subscriptions', 'name' // 76
]; // 77
routePublicApi.options = _.omit(currentRoute.options, omittingOptionFields); // 78
// 79
_.each(this._onRouteCallbacks, function(cb) { // 80
cb(routePublicApi); // 81
}); // 82
}; // 83
// 84
// 85
Router.prototype.go = function() { // 86
// client only // 87
}; // 88
// 89
// 90
Router.prototype.current = function() { // 91
// client only // 92
}; // 93
// 94
// 95
Router.prototype.triggers = { // 96
enter: function() { // 97
// client only // 98
}, // 99
exit: function() { // 100
// client only // 101
} // 102
}; // 103
// 104
Router.prototype.middleware = function() { // 105
// client only // 106
}; // 107
// 108
// 109
Router.prototype.getState = function() { // 110
// client only // 111
}; // 112
// 113
// 114
Router.prototype.getAllStates = function() { // 115
// client only // 116
}; // 117
// 118
// 119
Router.prototype.setState = function() { // 120
// client only // 121
}; // 122
// 123
// 124
Router.prototype.removeState = function() { // 125
// client only // 126
}; // 127
// 128
// 129
Router.prototype.clearStates = function() { // 130
// client only // 131
}; // 132
// 133
// 134
Router.prototype.ready = function() { // 135
// client only // 136
}; // 137
// 138
// 139
Router.prototype.initialize = function() { // 140
// client only // 141
}; // 142
// 143
Router.prototype.wait = function() { // 144
// client only // 145
}; // 146
// 147
//////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function(){
//////////////////////////////////////////////////////////////////////////////////////
// //
// packages/kadira_flow-router/server/group.js //
// //
//////////////////////////////////////////////////////////////////////////////////////
//
Group = function(router, options) { // 1
options = options || {}; // 2
this.prefix = options.prefix || ''; // 3
this.options = options; // 4
this._router = router; // 5
}; // 6
// 7
Group.prototype.route = function(pathDef, options) { // 8
pathDef = this.prefix + pathDef; // 9
return this._router.route(pathDef, options); // 10
}; // 11
// 12
Group.prototype.group = function(options) { // 13
var group = new Group(this._router, options); // 14
group.parent = this; // 15
// 16
return group; // 17
}; // 18
// 19
//////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function(){
//////////////////////////////////////////////////////////////////////////////////////
// //
// packages/kadira_flow-router/server/route.js //
// //
//////////////////////////////////////////////////////////////////////////////////////
//
Route = function(router, pathDef, options) { // 1
options = options || {}; // 2
this.options = options; // 3
this.name = options.name; // 4
this.pathDef = pathDef; // 5
// 6
// Route.path is deprecated and will be removed in 3.0 // 7
this.path = pathDef; // 8
// 9
this.action = options.action || Function.prototype; // 10
this.subscriptions = options.subscriptions || Function.prototype; // 11
this._subsMap = {}; // 12
}; // 13
// 14
// 15
Route.prototype.register = function(name, sub, options) { // 16
this._subsMap[name] = sub; // 17
}; // 18
// 19
// 20
Route.prototype.subscription = function(name) { // 21
return this._subsMap[name]; // 22
}; // 23
// 24
// 25
Route.prototype.middleware = function(middleware) { // 26
// 27
}; // 28
// 29
//////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function(){
//////////////////////////////////////////////////////////////////////////////////////
// //
// packages/kadira_flow-router/server/_init.js //
// //
//////////////////////////////////////////////////////////////////////////////////////
//
// Export Router Instance // 1
FlowRouter = new Router(); // 2
FlowRouter.Router = Router; // 3
FlowRouter.Route = Route; // 4
// 5
//////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function(){
//////////////////////////////////////////////////////////////////////////////////////
// //
// packages/kadira_flow-router/server/plugins/fast_render.js //
// //
//////////////////////////////////////////////////////////////////////////////////////
//
if(!Package['meteorhacks:fast-render']) { // 1
return; // 2
} // 3
// 4
FastRender = Package['meteorhacks:fast-render'].FastRender; // 5
// 6
// hack to run after eveything else on startup // 7
Meteor.startup(function () { // 8
Meteor.startup(function () { // 9
setupFastRender(); // 10
}); // 11
}); // 12
// 13
function setupFastRender () { // 14
_.each(FlowRouter._routes, function (route) { // 15
FastRender.route(route.pathDef, function (routeParams, path) { // 16
var self = this; // 17
// 18
// anyone using Meteor.subscribe for something else? // 19
var original = Meteor.subscribe; // 20
Meteor.subscribe = function () { // 21
return _.toArray(arguments); // 22
}; // 23
// 24
route._subsMap = {}; // 25
FlowRouter.subscriptions.call(route, path); // 26
if(route.subscriptions) { // 27
var queryParams = routeParams.query; // 28
var params = _.omit(routeParams, 'query'); // 29
route.subscriptions(params, queryParams); // 30
} // 31
_.each(route._subsMap, function (args) { // 32
self.subscribe.apply(self, args); // 33
}); // 34
// 35
// restore Meteor.subscribe, ... on server side // 36
Meteor.subscribe = original; // 37
}); // 38
}); // 39
} // 40
// 41
//////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function(){
//////////////////////////////////////////////////////////////////////////////////////
// //
// packages/kadira_flow-router/lib/router.js //
// //
//////////////////////////////////////////////////////////////////////////////////////
//
Router.prototype.url = function() { // 1
// We need to remove the leading base path, or "/", as it will be inserted // 2
// automatically by `Meteor.absoluteUrl` as documented in: // 3
// http://docs.meteor.com/#/full/meteor_absoluteurl // 4
var completePath = this.path.apply(this, arguments); // 5
var basePath = this._basePath || '/'; // 6
var pathWithoutBase = completePath.replace(new RegExp('^' + basePath), ''); // 7
return Meteor.absoluteUrl(pathWithoutBase); // 8
}; // 9
// 10
//////////////////////////////////////////////////////////////////////////////////////
}).call(this);
/* Exports */
if (typeof Package === 'undefined') Package = {};
Package['kadira:flow-router'] = {
FlowRouter: FlowRouter
};
})();
//# sourceMappingURL=kadira_flow-router.js.map