1
- ' use strict' ;
2
-
3
- var q = require ( 'q' ) ;
4
- var isCss = require ( ' is-css' ) ;
5
- var isPresent = require ( ' is-present' ) ;
6
- var isBlank = require ( ' is-blank' ) ;
7
- var isUrl = require ( ' is-url-superb' ) ;
8
- var request = require ( ' request' ) ;
9
- var cheerio = require ( ' cheerio' ) ;
10
- var normalizeUrl = require ( ' normalize-url' ) ;
11
- var stripHtmlComments = require ( ' strip-html-comments' ) ;
12
- var resolveCssImportUrls = require ( ' resolve-css-import-urls' ) ;
13
- var ua = require ( ' ua-string' ) ;
14
-
15
- var getLinkContents = require ( ' ./utils/get-link-contents' ) ;
16
- var createLink = require ( ' ./utils/create-link' ) ;
17
-
18
- module . exports = function ( url , options ) {
1
+ " use strict" ;
2
+
3
+ var q = require ( "q" ) ;
4
+ var isCss = require ( " is-css" ) ;
5
+ var isPresent = require ( " is-present" ) ;
6
+ var isBlank = require ( " is-blank" ) ;
7
+ var isUrl = require ( " is-url-superb" ) ;
8
+ var request = require ( " request" ) ;
9
+ var cheerio = require ( " cheerio" ) ;
10
+ var normalizeUrl = require ( " normalize-url" ) ;
11
+ var stripHtmlComments = require ( " strip-html-comments" ) ;
12
+ var resolveCssImportUrls = require ( " resolve-css-import-urls" ) ;
13
+ var ua = require ( " ua-string" ) ;
14
+
15
+ var getLinkContents = require ( " ./utils/get-link-contents" ) ;
16
+ var createLink = require ( " ./utils/create-link" ) ;
17
+
18
+ module . exports = function ( url , options , html ) {
19
19
var deferred = q . defer ( ) ;
20
20
var options = options || { } ;
21
21
options . headers = options . headers || { } ;
22
- options . headers [ ' User-Agent' ] = options . headers [ ' User-Agent' ] || ua ;
22
+ options . headers [ " User-Agent" ] = options . headers [ " User-Agent" ] || ua ;
23
23
options . timeout = options . timeout || 5000 ;
24
24
options . gzip = true ;
25
25
26
- if ( typeof url !== ' string' || isBlank ( url ) || ! isUrl ( url ) ) {
27
- throw new TypeError ( ' get-css expected a url as a string' )
26
+ if ( typeof url !== " string" || isBlank ( url ) || ! isUrl ( url ) ) {
27
+ throw new TypeError ( " get-css expected a url as a string" ) ;
28
28
}
29
29
30
30
url = normalizeUrl ( url , { stripWWW : false } ) ;
31
31
options . url = url ;
32
32
33
33
if ( options . ignoreCerts ) {
34
- process . env . NODE_TLS_REJECT_UNAUTHORIZED = '0' ;
34
+ process . env . NODE_TLS_REJECT_UNAUTHORIZED = "0" ;
35
35
}
36
36
37
37
var status = {
@@ -42,7 +42,7 @@ module.exports = function(url, options){
42
42
var result = {
43
43
links : [ ] ,
44
44
styles : [ ] ,
45
- css : ''
45
+ css : ""
46
46
} ;
47
47
48
48
function handleResolve ( ) {
@@ -53,18 +53,18 @@ module.exports = function(url, options){
53
53
54
54
function parseHtml ( html ) {
55
55
var $ = cheerio . load ( html ) ;
56
- result . pageTitle = $ ( ' head > title' ) . text ( ) ;
57
-
58
- $ ( ' [rel=stylesheet]' ) . each ( function ( ) {
59
- var link = $ ( this ) . attr ( ' href' ) ;
60
- if ( isPresent ( link ) ) {
61
- result . links . push ( createLink ( link , url ) ) ;
62
- } else {
63
- result . styles . push ( stripHtmlComments ( $ ( this ) . text ( ) ) ) ;
64
- }
56
+ result . pageTitle = $ ( " head > title" ) . text ( ) ;
57
+
58
+ $ ( " [rel=stylesheet]" ) . each ( function ( ) {
59
+ var link = $ ( this ) . attr ( " href" ) ;
60
+ if ( isPresent ( link ) ) {
61
+ result . links . push ( createLink ( link , url ) ) ;
62
+ } else {
63
+ result . styles . push ( stripHtmlComments ( $ ( this ) . text ( ) ) ) ;
64
+ }
65
65
} ) ;
66
66
67
- $ ( ' style' ) . each ( function ( ) {
67
+ $ ( " style" ) . each ( function ( ) {
68
68
result . styles . push ( stripHtmlComments ( $ ( this ) . text ( ) ) ) ;
69
69
} ) ;
70
70
@@ -123,27 +123,36 @@ module.exports = function(url, options){
123
123
} ) ;
124
124
}
125
125
126
- request ( options , function ( error , response , body ) {
127
- if ( error ) {
128
- if ( options . verbose ) console . log ( 'Error from ' + url + ' ' + error ) ;
129
- deferred . reject ( error ) ;
130
- return ;
131
- }
132
-
133
- if ( response && response . statusCode != 200 ) {
134
- if ( options . verbose ) console . log ( 'Received a ' + response . statusCode + ' from: ' + url ) ;
135
- deferred . reject ( { url : url , statusCode : response . code } ) ;
136
- return ;
137
- }
138
-
126
+ function handleBody ( body ) {
139
127
if ( isCss ( url ) ) {
140
128
var link = createLink ( url , url ) ;
141
129
result . links . push ( link ) ;
142
130
handleCssFromLink ( link , body ) ;
143
131
} else {
144
132
parseHtml ( body ) ;
145
133
}
146
- } ) ;
134
+ }
135
+
136
+ if ( html ) {
137
+ handleBody ( html ) ;
138
+ } else {
139
+ request ( options , function ( error , response , body ) {
140
+ if ( error ) {
141
+ if ( options . verbose ) console . log ( "Error from " + url + " " + error ) ;
142
+ deferred . reject ( error ) ;
143
+ return ;
144
+ }
145
+
146
+ if ( response && response . statusCode != 200 ) {
147
+ if ( options . verbose )
148
+ console . log ( "Received a " + response . statusCode + " from: " + url ) ;
149
+ deferred . reject ( { url : url , statusCode : response . code } ) ;
150
+ return ;
151
+ }
152
+
153
+ handleBody ( body ) ;
154
+ } ) ;
155
+ }
147
156
148
157
return deferred . promise ;
149
158
} ;
0 commit comments