UNPKG

3.04 kBJavaScriptView Raw
1var Segments = new Class({
2
3 inherits: Array
4
5 , init: function(parts){
6 parts = parts || [];
7 this.pushAll(parts);
8 }
9
10 , last: function(){
11 return this[this.length-1];
12 }
13
14 , first: function(){
15 return this[0];
16 }
17
18 , push: function(element){
19 if(!(element instanceof Segment)){
20 element = new Segment(element);
21 }
22 Array.prototype.push.call(this, element);
23 }
24
25 , pushAll: function(collection){
26 var len = collection.length;
27 for(var i=0; i<len;i++){
28 this.push(collection[i]);
29 }
30 }
31});
32
33var Segment = new Class({
34
35 _value: null
36
37 , value: {
38 get: function(){
39 return this._value;
40 }
41 }
42
43 , init: function(value){
44 this._value = value;
45 }
46
47 , isNumeric: function(){
48 return !isNaN(parseFloat(this.value)) && isFinite(this.value);
49 }
50
51 , toString: function(){
52 return this.value.toString();
53 }
54});
55
56var UrlObject = new Class({
57
58 _subdomains: null
59 , _segments: null
60
61 , PROTOCOL_PATTERN: /(\d*)\:\/\/.+/
62
63 , PATH_SEPARATOR: '/'
64 , DOMAIN_SEPARATOR: '.'
65
66 , subdomains: {
67 get: function(){
68 return this.getSubdomains();
69 }
70 }
71
72 , segments: {
73 get: function(){
74 return this.getSegments();
75 }
76 }
77
78 , init: function(urlstring){
79 urlstring = this._sanitizeUrl(urlstring);
80 var parsed = url.parse(urlstring, true);
81 for(var name in parsed){
82 this[name] = parsed[name];
83 }
84 //this._sanitize();
85 }
86 , _sanitizeUrl: function(urlstring){
87 return urlstring;
88 }
89 , _sanitize: function(){
90 if(this.protocol[this.protocol.length-1] == ':'){
91 this.protocol = this.protocol.substring(0, this.protocol.length-1);
92 }
93 }
94
95 , getSubdomains: function(){
96 this._subdomains = this._subdomains || this.host.split(this.DOMAIN_SEPARATOR);
97 return this._subdomains;
98 }
99
100 , getSubdomain: function(level){
101 var domains = this.getSubdomains()
102 return domains.length >= level ? domains[domains.length - level] : null;
103 }
104
105 , getTLD: function(){
106 return this.getSubdomains().slice(-1).shift();
107 }
108
109 , getSegments: function(){
110 this._segments = this._segments || new Segments(this.pathname.split(this.PATH_SEPARATOR));
111 return this._segments;
112 }
113
114 , getSegment: function(position){
115 return (this.getSegments().length < position) ? null : this.getSegments()[position];
116 }
117
118 , getQueryParam: function(key, option){
119 return this.query[key] || option;
120 }
121});
122
123var segments = new Segments();
124segments.pushAll([1, 2, 3]);
125log(segments.first().isNumeric());
126
127var parsed = new UrlObject('http://some.where.com/index.php/dings/bums?do=dont&id=10');
128log(parsed.getQueryParam('dodo', null));
129log(parsed.getTLD());
130log(parsed.getSubdomain(3));
131log(parsed.subdomains[0]);
132log(parsed.segments[2].toString());
\No newline at end of file