1 | var 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 |
|
33 | var 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 |
|
56 | var 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 |
|
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 |
|
123 | var segments = new Segments();
|
124 | segments.pushAll([1, 2, 3]);
|
125 | log(segments.first().isNumeric());
|
126 |
|
127 | var parsed = new UrlObject('http://some.where.com/index.php/dings/bums?do=dont&id=10');
|
128 | log(parsed.getQueryParam('dodo', null));
|
129 | log(parsed.getTLD());
|
130 | log(parsed.getSubdomain(3));
|
131 | log(parsed.subdomains[0]);
|
132 | log(parsed.segments[2].toString()); |
\ | No newline at end of file |