{"version":3,"sources":["resources/assets/general/js/routes.js"],"names":["laroute","getHtmlLink","url","title","attributes","attrs","key","hasOwnProperty","push","join","getLinkAttributes","routes","absolute","rootUrl","prefix","route","name","parameters","this","getByName","toRoute","uri","getCorrectUrl","replaceNamedParameters","qs","getRouteQueryString","replace","match","value","length","getByAction","action","link_to","link_to_route","link_to_action","set_absolute","set_root_url","set_routes","json","set_prefix","call","define","amd","module","exports","window"],"mappings":"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","file":"routes.min.js","sourcesContent":["(function () {\n\n var laroute = (function () {\n\n var routes = {\n\n absolute: false,\n rootUrl: '',\n routes : [],\n prefix: '',\n\n route : function (name, parameters, route) {\n route = route || this.getByName(name);\n\n if ( ! route ) {\n return undefined;\n }\n\n return this.toRoute(route, parameters);\n },\n\n url: function (url, parameters) {\n parameters = parameters || [];\n\n var uri = url + '/' + parameters.join('/');\n\n return this.getCorrectUrl(uri);\n },\n\n toRoute : function (route, parameters) {\n var uri = this.replaceNamedParameters(route.uri, parameters);\n var qs = this.getRouteQueryString(parameters);\n\n return this.getCorrectUrl(uri + qs);\n },\n\n replaceNamedParameters : function (uri, parameters) {\n uri = uri.replace(/\\{(.*?)\\??\\}/g, function(match, key) {\n if (parameters.hasOwnProperty(key)) {\n var value = parameters[key];\n delete parameters[key];\n return value;\n } else {\n return match;\n }\n });\n\n // Strip out any optional parameters that were not given\n uri = uri.replace(/\\/\\{.*?\\?\\}/g, '');\n\n return uri;\n },\n\n getRouteQueryString : function (parameters) {\n var qs = [];\n for (var key in parameters) {\n if (parameters.hasOwnProperty(key)) {\n qs.push(key + '=' + parameters[key]);\n }\n }\n\n if (qs.length < 1) {\n return '';\n }\n\n return '?' + qs.join('&');\n },\n\n getByName : function (name) {\n for (var key in this.routes) {\n if (this.routes.hasOwnProperty(key) && this.routes[key].name === name) {\n return this.routes[key];\n }\n }\n },\n\n getByAction : function(action) {\n for (var key in this.routes) {\n if (this.routes.hasOwnProperty(key) && this.routes[key].action === action) {\n return this.routes[key];\n }\n }\n },\n\n getCorrectUrl: function (uri) {\n var url = this.prefix + '/' + uri.replace(/^\\/?/, '');\n\n if(!this.absolute)\n return url;\n\n return this.rootUrl.replace('/\\/?$/', '') + url;\n }\n };\n\n var getLinkAttributes = function(attributes) {\n if ( ! attributes) {\n return '';\n }\n\n var attrs = [];\n for (var key in attributes) {\n if (attributes.hasOwnProperty(key)) {\n attrs.push(key + '=\"' + attributes[key] + '\"');\n }\n }\n\n return attrs.join(' ');\n };\n\n var getHtmlLink = function (url, title, attributes) {\n title = title || url;\n attributes = getLinkAttributes(attributes);\n\n return '' + title + '';\n };\n\n return {\n // Generate a url for a given controller action.\n // laroute.action('HomeController@getIndex', [params = {}])\n action : function (name, parameters) {\n parameters = parameters || {};\n\n return routes.route(name, parameters, routes.getByAction(name));\n },\n\n // Generate a url for a given named route.\n // laroute.route('routeName', [params = {}])\n route : function (route, parameters) {\n parameters = parameters || {};\n\n return routes.route(route, parameters);\n },\n\n // Generate a fully qualified URL to the given path.\n // laroute.route('url', [params = {}])\n url : function (route, parameters) {\n parameters = parameters || {};\n\n return routes.url(route, parameters);\n },\n\n // Generate a html link to the given url.\n // laroute.link_to('foo/bar', [title = url], [attributes = {}])\n link_to : function (url, title, attributes) {\n url = this.url(url);\n\n return getHtmlLink(url, title, attributes);\n },\n\n // Generate a html link to the given route.\n // laroute.link_to_route('route.name', [title=url], [parameters = {}], [attributes = {}])\n link_to_route : function (route, title, parameters, attributes) {\n var url = this.route(route, parameters);\n\n return getHtmlLink(url, title, attributes);\n },\n\n // Generate a html link to the given controller action.\n // laroute.link_to_action('HomeController@getIndex', [title=url], [parameters = {}], [attributes = {}])\n link_to_action : function(action, title, parameters, attributes) {\n var url = this.action(action, parameters);\n\n return getHtmlLink(url, title, attributes);\n },\n\n // Whether we're using absolute URLs or not.\n // laroute.set_absolute(true)\n set_absolute : function (absolute) {\n routes.absolute = absolute;\n },\n\n // Set a base url for all routes.\n // laroute.set_root_url('http://localhost')\n set_root_url : function (url) {\n routes.rootUrl = url;\n },\n\n // JSON encoded route collection.\n // laroute.set_routes([])\n set_routes : function (json) {\n routes.routes = json;\n },\n\n // Add a prefix to all URLs.\n // $NAMEPSACE$.set_prefix('my-prefix')\n set_prefix : function (prefix) {\n routes.prefix = prefix;\n }\n\n };\n\n }).call(this);\n\n /**\n * Expose the class either via AMD, CommonJS or the global object\n */\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return laroute;\n });\n }\n else if (typeof module === 'object' && module.exports){\n module.exports = laroute;\n }\n else {\n window.laroute = laroute;\n }\n\n}).call(this);\n\n"]}