Skip to content

Instantly share code, notes, and snippets.

@kpdecker
Created February 10, 2015 06:47
Show Gist options
  • Save kpdecker/7d9fbe212a11ec2efd9f to your computer and use it in GitHub Desktop.
Save kpdecker/7d9fbe212a11ec2efd9f to your computer and use it in GitHub Desktop.
resolver.diff
diff --git a/lib/resolver.js b/lib/resolver.js
index c4cb078..0bbeec5 100644
--- a/lib/resolver.js
+++ b/lib/resolver.js
@@ -1,42 +1,15 @@
-// This implementation of the url resolver adds awareness for webpack loaders
-/*
-
-Modified from the stylus implementation:
-
-(The MIT License)
-
-Copyright (c) 2010–2014 LearnBoost <dev@learnboost.com>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+/**
+ * Module dependencies.
*/
-/*jshint laxcomma:true */
-var Stylus = require('stylus')
- , Compiler = Stylus.Compiler
- , nodes = Stylus.nodes
- , utils = Stylus.utils
+var Compiler = require('../visitor/compiler')
+ , nodes = require('../nodes')
, parse = require('url').parse
, relative = require('path').relative
, dirname = require('path').dirname
, extname = require('path').extname
- , sep = require('path').sep;
+ , sep = require('path').sep
+ , utils = require('../utils');
/**
* Return a url() function with the given `options`.
@@ -63,49 +36,41 @@ module.exports = function(options) {
var _paths = options.paths || [];
function url(url) {
- var paths = _paths.concat(this.paths),
- filename = this.filename;
-
// Compile the url
var compiler = new Compiler(url);
compiler.isURL = true;
- url = url.nodes.map(function(node){
+ var url = url.nodes.map(function(node){
return compiler.visit(node);
}).join('');
- function resolveComponent(url) {
- if (!url) {
- return url;
- }
+ // Parse literal
+ var url = parse(url)
+ , literal = new nodes.Literal('url("' + url.href + '")')
+ , paths = _paths.concat(this.paths)
+ , tail = ''
+ , res
+ , found;
- url = parse(url);
- if (url.protocol) {
- return url.href;
- }
+ // Absolute or hash
+ if (url.protocol || !url.pathname) return literal;
// Lookup
- var found = utils.lookup(url.pathname, paths, '', true);
- if (!found) {
- return url.href;
- }
+ found = utils.lookup(url.pathname, paths, '', true);
- var tail = '';
- if (url.search) {
- tail += url.search;
- }
- if (url.hash) {
- tail += url.hash;
- }
+ // Failed to lookup
+ if (!found) return literal;
- var res = relative(dirname(filename), found) + tail;
- if ('\\' == sep) res = res.replace(/\\/g, '/');
- return res;
- }
+ if (url.search) tail += url.search;
+ if (url.hash) tail += url.hash;
- var components = url.split(/!/g);
- components = components.map(resolveComponent);
- return new nodes.Literal('url("' + components.join('!') + '")');
+ if (this.includeCSS && extname(found) == '.css') {
+ return new nodes.Literal(found + tail);
+ } else {
+ res = relative(dirname(this.filename), found) + tail;
+ if ('\\' == sep) res = res.replace(/\\/g, '/');
+ return new nodes.Literal('url("' + res + '")');
}
+ };
url.raw = true;
return url;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment