2
2
3
3
var Crawler = require ( 'x-ray-crawler' ) ;
4
4
var Context = require ( 'http-context' ) ;
5
+ var cheerio = require ( 'cheerio' ) ;
5
6
var pj = require ( 'prettyjson' ) ;
7
+ var isUrl = require ( 'is-url' ) ;
6
8
var chalk = require ( 'chalk' ) ;
7
9
var repl = require ( 'repl' ) ;
8
10
var Xray = require ( '../' ) ;
11
+ var fs = require ( 'fs' ) ;
9
12
var slice = [ ] . slice ;
10
13
var actions = { } ;
11
14
15
+ /**
16
+ * Locals
17
+ */
18
+
19
+ var highlight = require ( '../lib/highlight' ) ;
20
+ var isHTML = require ( '../lib/is-html' ) ;
21
+ var pretty = require ( '../lib/pretty' ) ;
22
+ var params = require ( '../lib/params' ) ;
23
+
12
24
/**
13
25
* Default state
14
26
*/
@@ -25,9 +37,10 @@ var help = [
25
37
'' ,
26
38
' usage: ' ,
27
39
'' ,
28
- ' load <url>' ,
29
- ' paginate <attr>' ,
30
- ' select ($) <attr>' ,
40
+ ' load <url|selector|html>' ,
41
+ ' paginate <attribute>' ,
42
+ ' select [scope] <selector>' ,
43
+ ' html' ,
31
44
''
32
45
] . join ( '\n' ) ;
33
46
@@ -80,38 +93,60 @@ actions.load = function load(url, fn) {
80
93
return fn ( null , help ) ;
81
94
}
82
95
83
- request ( url , function ( err , res ) {
84
- if ( err ) return fn ( err ) ;
85
- ctx . status = res . status ;
86
- ctx . body = res . body ;
87
- success ( 'loaded: %s' , res . url ) ;
96
+ if ( isUrl ( url ) ) {
97
+ success ( 'loading: %s' , url ) ;
98
+ request ( url , function ( err , res ) {
99
+ if ( err ) return fn ( err ) ;
100
+ ctx . status = res . status ;
101
+ ctx . body = res . body ;
102
+ success ( 'loaded: %s' , res . url ) ;
103
+ console . log ( pretty ( res . url ) ) ;
104
+ fn ( null ) ;
105
+ } )
106
+ } else if ( isHTML ( url ) ) {
107
+ success ( 'loading: <html string>' ) ;
108
+ ctx . status = 200 ;
109
+ ctx . body = url ;
110
+ success ( 'loaded: <html string>' ) ;
111
+ console . log ( pretty ( url ) ) ;
88
112
fn ( null ) ;
89
- } )
113
+ } else {
114
+ success ( 'loading: %s' , url ) ;
115
+ fs . readFile ( url , 'utf8' , function ( err , str ) {
116
+ if ( err ) return fn ( err ) ;
117
+ ctx . status = 200 ;
118
+ ctx . body = str ;
119
+ success ( 'loaded: %s' , url ) ;
120
+ response ( pretty ( str ) ) ;
121
+ fn ( null ) ;
122
+ } )
123
+ }
90
124
}
91
125
92
126
/**
93
127
* Select
94
128
*/
95
129
96
130
actions . select =
97
- actions . $ = function select ( selector , fn ) {
131
+ actions . $ = function select ( scope , selector , fn ) {
98
132
if ( arguments . length == 1 ) {
99
- fn = url ;
100
- return fn ( null , help ) ;
101
- } else if ( ! ctx . body ) {
102
- error ( 'nothing to select, try load <url> first' ) ;
103
- return fn ( null ) ;
133
+ response ( ctx . body ) ;
134
+ fn ( null ) ;
135
+ return ;
136
+ } else if ( arguments . length == 2 ) {
137
+ fn = selector ;
138
+ selector = coerce ( scope ) ;
139
+ scope = null ;
104
140
} else {
105
- xray ( ctx . body , selector ) ( function ( err , obj ) {
106
- if ( err ) {
107
- error ( err . toString ( ) )
108
- return fn ( err ) ;
109
- }
110
-
111
- console . log ( unstring ( JSON . stringify ( obj , true , 2 ) ) ) ;
112
- fn ( null ) ;
113
- } ) ;
141
+ scope = coerce ( scope ) ;
142
+ selector = coerce ( selector ) ;
114
143
}
144
+
145
+ var $ = cheerio . load ( ctx . body ) ;
146
+ $ = highlight ( $ , scope , selector ) ;
147
+ var html = $ . html ( ) ;
148
+ response ( html ) ;
149
+ fn ( null ) ;
115
150
}
116
151
117
152
/**
@@ -131,6 +166,16 @@ function unstring(str) {
131
166
return str . replace ( / ^ [ ' " ] | [ ' " ] $ / g, '' ) ;
132
167
}
133
168
169
+ /**
170
+ * coerce
171
+ */
172
+
173
+ function coerce ( str ) {
174
+ return '[' == str [ 0 ] && ']' == str [ str . length - 1 ]
175
+ ? [ str . slice ( 1 , - 1 ) ]
176
+ : str ;
177
+ }
178
+
134
179
/**
135
180
* Success
136
181
*/
@@ -140,6 +185,11 @@ function success(str) {
140
185
console . error . apply ( console . error , [ chalk . green ( ' ' + str ) ] . concat ( args ) ) ;
141
186
}
142
187
188
+ function response ( str ) {
189
+ var args = slice . call ( arguments ) . slice ( 1 ) ;
190
+ console . error . apply ( console . error , [ chalk . gray ( ' ' + str ) ] . concat ( args ) ) ;
191
+ }
192
+
143
193
/**
144
194
* Error
145
195
*/
0 commit comments