env parameter added to several function calls

filtercondition-value now properly quotes strings
pull/2/head
Jan Marsch 10 years ago
parent a40a87cd39
commit 1ddefbe8eb

@ -201,7 +201,7 @@ CartoCSS.prototype = {
}); });
layer.frames = []; layer.frames = [];
layer.zoom = tree.Zoom.all; layer.zoom = tree.Zoom.all;
var props = def.toJS(); var props = def.toJS(parse_env);
console.log("props", props); console.log("props", props);
for(var v in props) { for(var v in props) {
var lyr = layer[v] = layer[v] || { var lyr = layer[v] = layer[v] || {

@ -208,14 +208,14 @@ tree.Definition.prototype.toXML = function(env, existing) {
return xml; return xml;
}; };
tree.Definition.prototype.toJS = function() { tree.Definition.prototype.toJS = function(env) {
var shaderAttrs = {}; var shaderAttrs = {};
// merge conditions from filters with zoom condition of the // merge conditions from filters with zoom condition of the
// definition // definition
var zoom = "(" + this.zoom + " & (1 << ctx.zoom))"; var zoom = "(" + this.zoom + " & (1 << ctx.zoom))";
var frame_offset = this.frame_offset; var frame_offset = this.frame_offset;
var _if = this.filters.toJS(); var _if = this.filters.toJS(env);
var filters = [zoom]; var filters = [zoom];
if(_if) filters.push(_if); if(_if) filters.push(_if);
if(frame_offset) filters.push('ctx["frame-offset"] === ' + frame_offset); if(frame_offset) filters.push('ctx["frame-offset"] === ' + frame_offset);
@ -230,19 +230,19 @@ tree.Definition.prototype.toJS = function() {
}; };
if (_if) { if (_if) {
r.js = "if(" + _if + "){" + rule.value.toJS() + "}" r.js = "if(" + _if + "){" + rule.value.toJS(env) + "}"
} else { } else {
r.js = rule.value.toJS(); r.js = rule.value.toJS(env);
} }
r.constant = rule.value.ev().is !== 'field'; r.constant = rule.value.ev(env).is !== 'field';
r.filtered = !!_if; r.filtered = !!_if;
shaderAttrs[rule.name].push(r); shaderAttrs[rule.name].push(r);
} else { } else {
throw new Error("Ruleset not supported"); throw new Error("Ruleset not supported");
//if (rule instanceof tree.Ruleset) { //if (rule instanceof tree.Ruleset) {
//var sh = rule.toJS(); //var sh = rule.toJS(env);
//for(var v in sh) { //for(var v in sh) {
//shaderAttrs[v] = shaderAttrs[v] || []; //shaderAttrs[v] = shaderAttrs[v] || [];
//for(var attr in sh[v]) { //for(var attr in sh[v]) {

@ -90,11 +90,10 @@ tree.Filterset.prototype.toJS = function(env) {
if(filter._val !== undefined) { if(filter._val !== undefined) {
val = filter._val.toString(true); val = filter._val.toString(true);
} }
var attrs = "data"; var attrs = "data";
return attrs + "." + filter.key.value + " " + op + " " + val; return attrs + "." + filter.key.value + " " + op + " " + (val.is === 'string' ? "'"+ val +"'" : val);
}).join(' && '); }).join(' && ');
} };
// Returns true when the new filter can be added, false otherwise. // Returns true when the new filter can be added, false otherwise.
// It can also return null, and on the other side we test for === true or // It can also return null, and on the other side we test for === true or

@ -28,9 +28,9 @@ tree.Value.prototype = {
return obj; return obj;
}, },
toJS: function() { toJS: function(env) {
//var v = this.value[0].value[0]; //var v = this.value[0].value[0];
var val = this.ev(); var val = this.ev(env);
var v = val.toString(); var v = val.toString();
if(val.is === "color" || val.is === 'uri' || val.is === 'string' || val.is === 'keyword') { if(val.is === "color" || val.is === 'uri' || val.is === 'string' || val.is === 'keyword') {
v = "'" + v + "'"; v = "'" + v + "'";

Loading…
Cancel
Save