Variable in url(..) not possible #190

Closed
tristanlins opened this Issue Feb 2, 2011 · 8 comments

Projects

None yet

9 participants

@tristanlins

I tried to make a function, that using an argument as url(..) value.

e.a.

.give-a-background(@bg) {
    background: url(@bg) no-repeat left center, ...;
}

.css-class {
    .give-a-background("images/foo.png");
}

i got a "could not call charAt of undefined" from line 2183 (v 1.0.41), because val.value is undefined.

currently its only possible this way

.give-a-background(@bg) {
    background: @bg no-repeat left center, ...;
}

.css-class {
    .give-a-background(url("images/foo.png"));
}
@funkatron

Running into this myself. Would be extremely handy for setting base paths.

@jiggliemon

Try This:

@base: "//";
.background(@image:'', @left:0, @top:0,@repeat:no-repeat){
    @url: %('%s%s',@base, @image);
    background: url(@url) @left @top @repeat;
}
@cloudhead
Less member

That's odd, it works just fine here.

@jiggliemon

@cloudhead I was pointing out to funkatron & trilin how I got it to work.

@neonstalwart

for anyone else who comes across this issue i found i couldn't get @jiggliemon's solution to work (less 1.1.4) but based on http://lesscss.org/#-string-interpolation this worked for me

.background-image (@url) {
    background-image: url("@{url}");
}

i suppose this ticket could be closed?

@csnover

This only happens in browser environments and is caused by the relative path “fixing” code in the tree.URL ctor. It does not check that val.value actually exists before trying to operate on it.

@csnover csnover added a commit to csnover/less.js that referenced this issue Jan 10, 2012
@csnover csnover Don't try to use variable values that do not exist on the browser. Fi…
…xes #190.
b4db074
@jsdalton

This is an issue when trying to use Twitter Bootstrap 2.0 with less.js in the browser environment.

Bootstrap uses the url(@url) format to pull sprite images in in sprites.less. less.js chokes on the undefined val.value that's passed to tree.URL() and an error is thrown, causing bootstrap not to load.

@csnover 's change resolves the issue for me.

I have updated my local copy of less.js so it's smooth sailing for me, but since this issue prevents Twitter Bootstrap 2.0 from running in the browser environment I hope it will get resolved soon, since others are probably having the same problem. E.g. I'm guessing this SO question might be related: http://stackoverflow.com/questions/8095499/twitter-bootstrap-wont-work-with-less-js

@ghost Unknown pushed a commit that referenced this issue Feb 27, 2012
@queeathe queeathe Fix for issue #190: Variable in url(..) not possible 281a93a
@ghost Unknown pushed a commit that referenced this issue Feb 27, 2012
@queeathe queeathe Fix for issue #190: Variable in url(..) not possible bfb1156
@Meligy

Is the fix available in current release? (asking as I see the bug is still open).

@lukeapage lukeapage closed this in 2c75e4f Aug 18, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment