Merge branch 'normalized-urls' of https://github.com/rjgotten/less.js into 1.5.0-wip

Conflicts:
	test/css/static-urls/urls.css
	test/css/urls.css
This commit is contained in:
Luke Page
2013-09-01 18:17:32 +01:00
6 changed files with 50 additions and 11 deletions

5
bower.json Normal file
View File

@@ -0,0 +1,5 @@
{
"name": "less",
"version": "1.4.2",
"main": ["./lib/less/index"]
}

View File

@@ -87,6 +87,33 @@
return !/^(?:[a-z-]+:|\/)/.test(path); return !/^(?:[a-z-]+:|\/)/.test(path);
}; };
tree.evalEnv.prototype.normalizePath = function( path ) {
var
segments = path.split("/").reverse(),
segment;
path = [];
while (segments.length !== 0 ) {
segment = segments.pop();
switch( segment ) {
case ".":
break;
case "..":
if ((path.length === 0) || (path[path.length - 1] === "..")) {
path.push( segment );
} else {
path.pop();
}
break;
default:
path.push( segment );
break;
}
}
return path.join("/");
};
//todo - do the same for the toCSS env //todo - do the same for the toCSS env
//tree.toCSSEnv = function (options) { //tree.toCSSEnv = function (options) {
//}; //};

View File

@@ -73,13 +73,18 @@ tree.Import.prototype = {
evalPath: function (env) { evalPath: function (env) {
var path = this.path.eval(env); var path = this.path.eval(env);
var rootpath = this.currentFileInfo && this.currentFileInfo.rootpath; var rootpath = this.currentFileInfo && this.currentFileInfo.rootpath;
if (rootpath && !(path instanceof tree.URL)) {
var pathValue = path.value; if (!(path instanceof tree.URL)) {
// Add the base path if the import is relative if (rootpath) {
if (pathValue && env.isPathRelative(pathValue)) { var pathValue = path.value;
path.value = rootpath + pathValue; // Add the base path if the import is relative
if (pathValue && env.isPathRelative(pathValue)) {
path.value = rootpath + pathValue;
}
} }
path.value = env.normalizePath(path.value);
} }
return path; return path;
}, },
eval: function (env) { eval: function (env) {

View File

@@ -27,6 +27,8 @@ tree.URL.prototype = {
val.value = rootpath + val.value; val.value = rootpath + val.value;
} }
val.value = ctx.normalizePath(val.value);
return new(tree.URL)(val, null); return new(tree.URL)(val, null);
} }
}; };

View File

@@ -1,4 +1,4 @@
@import "folder (1)/../css/background.css"; @import "css/background.css";
@import "folder (1)/import-test-d.css"; @import "folder (1)/import-test-d.css";
@font-face { @font-face {
src: url("/fonts/garamond-pro.ttf"); src: url("/fonts/garamond-pro.ttf");
@@ -30,11 +30,11 @@
#logo { #logo {
width: 100px; width: 100px;
height: 100px; height: 100px;
background: url('folder (1)/../assets/logo.png'); background: url('assets/logo.png');
} }
@font-face { @font-face {
font-family: xecret; font-family: xecret;
src: url('folder (1)/../assets/xecret.ttf'); src: url('assets/xecret.ttf');
} }
#secret { #secret {
font-family: xecret, sans-serif; font-family: xecret, sans-serif;

View File

@@ -1,4 +1,4 @@
@import "import/../css/background.css"; @import "css/background.css";
@import "import/import-test-d.css"; @import "import/import-test-d.css";
@import "file.css"; @import "file.css";
@font-face { @font-face {
@@ -33,11 +33,11 @@
#logo { #logo {
width: 100px; width: 100px;
height: 100px; height: 100px;
background: url('import/imports/../assets/logo.png'); background: url('import/assets/logo.png');
} }
@font-face { @font-face {
font-family: xecret; font-family: xecret;
src: url('import/imports/../assets/xecret.ttf'); src: url('import/assets/xecret.ttf');
} }
#secret { #secret {
font-family: xecret, sans-serif; font-family: xecret, sans-serif;