/
preset.js
67 lines (55 loc) 路 1.77 KB
/
preset.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
iD.presets.Preset = function(id, preset, fields) {
preset = _.clone(preset);
preset.id = id;
preset.fields = (preset.fields || []).map(getFields);
preset.additional = (preset.additional || []).map(getFields);
function getFields(f) {
return fields[f];
}
preset.matchGeometry = function(entity, resolver) {
return preset.geometry.indexOf(entity.geometry(resolver)) >= 0;
};
preset.matchTags = function(entity) {
var tags = preset.tags,
score = 0;
for (var t in tags) {
if (entity.tags[t] === tags[t]) {
score++;
} else if (tags[t] === '*' && t in entity.tags) {
score += 0.5;
} else {
return -1;
}
}
return score;
};
preset.t = function(scope, options) {
return t('presets.presets.' + id + '.' + scope, options);
};
preset.name = function() {
return preset.t('name', {'default': id});
};
preset.removeTags = function(tags, geometry) {
tags = _.omit(tags, _.keys(preset.tags));
for (var i in preset.fields) {
var field = preset.fields[i];
if (field.matchGeometry(geometry) && field['default'] === tags[field.key]) {
delete tags[field.key];
}
}
return tags;
};
preset.applyTags = function(tags, geometry) {
for (var k in preset.tags) {
if (preset.tags[k] !== '*') tags[k] = preset.tags[k];
}
for (var f in preset.fields) {
f = preset.fields[f];
if (f.matchGeometry(geometry) && f.key && !tags[f.key]) {
tags[f.key] = f['default'];
}
}
return tags;
};
return preset;
};