github.com/sym3tri/etcd@v0.2.1-0.20140422215517-a563d82f95d6/mod/dashboard/app/module/path.js (about) 1 'use strict'; 2 3 angular.module('etcd.module') 4 .factory('pathSvc', function() { 5 6 var keyPrefix = '/v2/keys/', 7 statsPrefix = '/v2/stats/'; 8 9 return { 10 11 clean: function(path) { 12 var parts = this.explode(path); 13 if (parts.length === 0) { 14 return ''; 15 } 16 return parts.join('/'); 17 }, 18 19 make: function(arr) { 20 return '/' + arr.join('/'); 21 }, 22 23 explode: function(str) { 24 var parts = str.split('/'); 25 parts = parts.filter(function(v) { 26 return v !== ''; 27 }); 28 return parts; 29 }, 30 31 /** 32 * Get the last segment of a path. 33 */ 34 tail: function(path) { 35 var parts = this.explode(path); 36 if (parts.length) { 37 return parts[parts.length-1]; 38 } 39 return '/'; 40 }, 41 42 truncate: function(path, maxlen) { 43 var prefix = '/..'; 44 maxlen = maxlen || 10; 45 if (!path || !path.length) { 46 return ''; 47 } 48 if (path.length <= maxlen) { 49 return path; 50 } 51 return prefix + 52 path.substring(path.length - maxlen + prefix.length, path.length); 53 }, 54 55 getFullKeyPath: function(key) { 56 var path = '/' + this.clean(keyPrefix + key); 57 if (path === keyPrefix.substring(0, keyPrefix.length - 1)) { 58 return keyPrefix; 59 } 60 return path; 61 }, 62 63 getStatFullKeyPath: function(name) { 64 return '/' + this.clean(statsPrefix + name); 65 }, 66 67 getParent: function(path) { 68 var parts = path.split('/'); 69 if (parts.length === 0) { 70 return '/'; 71 } 72 parts.pop(); 73 return '/' + parts.join('/'); 74 } 75 76 }; 77 78 });