path.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // from couch.js
  2. function encodeOptions(options, noJson) {
  3. var buf = []
  4. if (typeof(options) == "object" && options !== null) {
  5. for (var name in options) {
  6. if (!options.hasOwnProperty(name)) continue;
  7. var value = options[name];
  8. if (!noJson && (name == "key" || name == "startkey" || name == "endkey")) {
  9. value = toJSON(value);
  10. }
  11. buf.push(encodeURIComponent(name) + "=" + encodeURIComponent(value));
  12. }
  13. }
  14. if (!buf.length) {
  15. return "";
  16. }
  17. return "?" + buf.join("&");
  18. }
  19. function concatArgs(array, args) {
  20. for (var i=0; i < args.length; i++) {
  21. array.push(args[i]);
  22. };
  23. return array;
  24. };
  25. function makePath(array) {
  26. var options, path;
  27. if (typeof array[array.length - 1] != "string") {
  28. // it's a params hash
  29. options = array.pop();
  30. }
  31. path = array.map(function(item) {return encodeURIComponent(item)}).join('/');
  32. if (options) {
  33. return path + encodeOptions(options);
  34. } else {
  35. return path;
  36. }
  37. };
  38. function assetPath() {
  39. var p = req.path, parts = ['', p[0], p[1] , p[2]];
  40. return makePath(concatArgs(parts, arguments));
  41. };
  42. function showPath() {
  43. var p = req.path, parts = ['', p[0], p[1] , p[2], '_show'];
  44. return makePath(concatArgs(parts, arguments));
  45. };
  46. function listPath() {
  47. var p = req.path, parts = ['', p[0], p[1] , p[2], '_list'];
  48. return makePath(concatArgs(parts, arguments));
  49. };
  50. function olderPath(info) {
  51. if (!info) return null;
  52. var q = req.query;
  53. q.startkey = info.prev_key;
  54. q.skip=1;
  55. return listPath('index','recent-posts',q);
  56. }
  57. function makeAbsolute(req, path) {
  58. return 'http://' + req.headers.Host + path;
  59. }
  60. function currentPath() {
  61. path = req.path.map(function(item) {return encodeURIComponent(item)}).join('/');
  62. if (req.query) {
  63. return path + encodeOptions(req.query, true);
  64. } else {
  65. return path;
  66. }
  67. }