Use svg for maki also

This commit is contained in:
Bryan Housel
2015-11-03 16:43:22 -05:00
parent 3853c0d993
commit d729795049
20 changed files with 4494 additions and 239 deletions
+18 -18
View File
@@ -1,31 +1,30 @@
# See the README for installation instructions.
all: \
$(MAKI_TARGETS) \
$(BUILDJS_TARGETS) \
dist/iD.css \
dist/iD.js \
dist/iD.min.js \
dist/img/iD-sprite.svg
dist/img/iD-sprite.svg \
dist/img/maki-sprite.svg
MAKI_TARGETS = \
css/feature-icons.css \
data/feature-icons.json
MAKI_SOURCES = \
node_modules/maki/www/maki-sprite.json \
dist/img/maki-sprite.png
$(MAKI_TARGETS): $(MAKI_SOURCES) data/maki_sprite.js
node data/maki_sprite.js
MAKI_SOURCES = node_modules/maki/src/*.svg
MAKI_SPRITE = svg/maki-sprite.src.svg
$(MAKI_SOURCES): node_modules/.install
dist/img/maki-sprite.png: node_modules/maki/www/images/maki-sprite.png
cp $< $@
$(MAKI_SPRITE): $(MAKI_SOURCES) Makefile
svg-sprite --symbol --symbol-inline --symbol-dest . --symbol-sprite $(MAKI_SPRITE) $(MAKI_SOURCES)
dist/img/iD-sprite.svg: svg/iD-sprite.svg svg/iD-sprite.json
node svg/spriteify.js --svg svg/iD-sprite.svg --json svg/iD-sprite.json > dist/img/iD-sprite.svg
data/feature-icons.json: $(MAKI_SOURCES)
cp -f node_modules/maki/www/maki-sprite.json $@
dist/img/maki-sprite.svg: $(MAKI_SPRITE) $(MAKI_SOURCES)
node svg/spriteify.js --svg $(MAKI_SPRITE) > $@
dist/img/iD-sprite.svg: svg/iD-sprite.src.svg svg/iD-sprite.json
node svg/spriteify.js --svg svg/iD-sprite.src.svg --json svg/iD-sprite.json > $@
BUILDJS_TARGETS = \
data/presets/categories.json \
@@ -40,6 +39,7 @@ BUILDJS_TARGETS = \
BUILDJS_SOURCES = \
$(filter-out $(BUILDJS_TARGETS), $(shell find data -type f -name '*.json')) \
data/feature-icons.json \
data/core.yaml
$(BUILDJS_TARGETS): $(BUILDJS_SOURCES) build.js
@@ -107,14 +107,14 @@ dist/iD.min.js: dist/iD.js Makefile
@rm -f $@
node_modules/.bin/uglifyjs $< -c -m -o $@
dist/iD.css: $(MAKI_TARGETS) css/*.css
cat css/reset.css css/map.css css/app.css css/feature-icons.css > $@
dist/iD.css: css/*.css
cat css/reset.css css/map.css css/app.css > $@
node_modules/.install: package.json
npm install && touch node_modules/.install
clean:
rm -f $(MAKI_TARGETS) $(BUILDJS_TARGETS) dist/iD*.js dist/iD.css
rm -f $(BUILDJS_TARGETS) $(MAKI_SPRITE) data/feature-icons.json dist/iD*.js dist/iD.css dist/img/*.svg
translations:
node data/update_locales
+27 -13
View File
@@ -801,17 +801,10 @@ button.save.has-count .count::before {
background: #ececec;
}
.preset-icon {
position: absolute;
top: 0px;
left: 0px;
margin: auto;
}
.preset-icon-fill-area {
cursor: inherit;
height: 39px;
width: 39px;
height: 40px;
width: 40px;
margin: auto;
position: absolute;
left: 10px;
@@ -822,17 +815,38 @@ button.save.has-count .count::before {
position: absolute;
top: 7px;
left: 7px;
height: 42px;
width: 42px;
margin: auto;
}
.preset-icon .icon {
.preset-icon-frame .icon {
width: 46px;
height: 46px;
}
.preset-icon-60 {
position: absolute;
top: 0px;
left: 0px;
margin: auto;
}
.preset-icon-60 .icon {
width: 60px;
height: 60px;
}
.preset-icon-frame .icon {
width: 45px;
height: 45px;
.preset-icon-32 {
position: absolute;
top: 14px;
left: 14px;
margin: auto;
}
.preset-icon-32 .icon {
width: 32px;
height: 32px;
}
.preset-list-button .label {
-118
View File
@@ -1,118 +0,0 @@
/* This file is generated by make. Do NOT edit manually. */
.feature-circle-stroked{background-position:-0px -0px;}
.feature-circle{background-position:-54px -0px;}
.feature-square-stroked{background-position:-108px -0px;}
.feature-square{background-position:-162px -0px;}
.feature-triangle-stroked{background-position:-216px -0px;}
.feature-triangle{background-position:-0px -24px;}
.feature-star-stroked{background-position:-54px -24px;}
.feature-star{background-position:-108px -24px;}
.feature-cross{background-position:-162px -24px;}
.feature-marker-stroked{background-position:-216px -24px;}
.feature-marker{background-position:-0px -48px;}
.feature-religious-jewish{background-position:-54px -48px;}
.feature-religious-christian{background-position:-108px -48px;}
.feature-religious-muslim{background-position:-162px -48px;}
.feature-cemetery{background-position:-216px -48px;}
.feature-rocket{background-position:-0px -72px;}
.feature-airport{background-position:-54px -72px;}
.feature-heliport{background-position:-108px -72px;}
.feature-rail{background-position:-162px -72px;}
.feature-rail-metro{background-position:-216px -72px;}
.feature-rail-light{background-position:-0px -96px;}
.feature-bus{background-position:-54px -96px;}
.feature-fuel{background-position:-108px -96px;}
.feature-parking{background-position:-162px -96px;}
.feature-parking-garage{background-position:-216px -96px;}
.feature-airfield{background-position:-0px -120px;}
.feature-roadblock{background-position:-54px -120px;}
.feature-ferry{background-position:-108px -120px;}
.feature-harbor{background-position:-162px -120px;}
.feature-bicycle{background-position:-216px -120px;}
.feature-park{background-position:-0px -144px;}
.feature-park2{background-position:-54px -144px;}
.feature-museum{background-position:-108px -144px;}
.feature-lodging{background-position:-162px -144px;}
.feature-monument{background-position:-216px -144px;}
.feature-zoo{background-position:-0px -168px;}
.feature-garden{background-position:-54px -168px;}
.feature-campsite{background-position:-108px -168px;}
.feature-theatre{background-position:-162px -168px;}
.feature-art-gallery{background-position:-216px -168px;}
.feature-pitch{background-position:-0px -192px;}
.feature-soccer{background-position:-54px -192px;}
.feature-america-football{background-position:-108px -192px;}
.feature-tennis{background-position:-162px -192px;}
.feature-basketball{background-position:-216px -192px;}
.feature-baseball{background-position:-0px -216px;}
.feature-golf{background-position:-54px -216px;}
.feature-swimming{background-position:-108px -216px;}
.feature-cricket{background-position:-162px -216px;}
.feature-skiing{background-position:-216px -216px;}
.feature-school{background-position:-0px -240px;}
.feature-college{background-position:-54px -240px;}
.feature-library{background-position:-108px -240px;}
.feature-post{background-position:-162px -240px;}
.feature-fire-station{background-position:-216px -240px;}
.feature-town-hall{background-position:-0px -264px;}
.feature-police{background-position:-54px -264px;}
.feature-prison{background-position:-108px -264px;}
.feature-embassy{background-position:-162px -264px;}
.feature-beer{background-position:-216px -264px;}
.feature-restaurant{background-position:-0px -288px;}
.feature-cafe{background-position:-54px -288px;}
.feature-shop{background-position:-108px -288px;}
.feature-fast-food{background-position:-162px -288px;}
.feature-bar{background-position:-216px -288px;}
.feature-bank{background-position:-0px -312px;}
.feature-grocery{background-position:-54px -312px;}
.feature-cinema{background-position:-108px -312px;}
.feature-pharmacy{background-position:-162px -312px;}
.feature-hospital{background-position:-216px -312px;}
.feature-danger{background-position:-0px -336px;}
.feature-industrial{background-position:-54px -336px;}
.feature-warehouse{background-position:-108px -336px;}
.feature-commercial{background-position:-162px -336px;}
.feature-building{background-position:-216px -336px;}
.feature-place-of-worship{background-position:-0px -360px;}
.feature-alcohol-shop{background-position:-54px -360px;}
.feature-logging{background-position:-108px -360px;}
.feature-oil-well{background-position:-162px -360px;}
.feature-slaughterhouse{background-position:-216px -360px;}
.feature-dam{background-position:-0px -384px;}
.feature-water{background-position:-54px -384px;}
.feature-wetland{background-position:-108px -384px;}
.feature-disability{background-position:-162px -384px;}
.feature-telephone{background-position:-216px -384px;}
.feature-emergency-telephone{background-position:-0px -408px;}
.feature-toilets{background-position:-54px -408px;}
.feature-waste-basket{background-position:-108px -408px;}
.feature-music{background-position:-162px -408px;}
.feature-land-use{background-position:-216px -408px;}
.feature-city{background-position:-0px -432px;}
.feature-town{background-position:-54px -432px;}
.feature-village{background-position:-108px -432px;}
.feature-farm{background-position:-162px -432px;}
.feature-bakery{background-position:-216px -432px;}
.feature-dog-park{background-position:-0px -456px;}
.feature-lighthouse{background-position:-54px -456px;}
.feature-clothing-store{background-position:-108px -456px;}
.feature-polling-place{background-position:-162px -456px;}
.feature-playground{background-position:-216px -456px;}
.feature-entrance{background-position:-0px -480px;}
.feature-heart{background-position:-54px -480px;}
.feature-london-underground{background-position:-108px -480px;}
.feature-minefield{background-position:-162px -480px;}
.feature-rail-underground{background-position:-216px -480px;}
.feature-rail-above{background-position:-0px -504px;}
.feature-camera{background-position:-54px -504px;}
.feature-laundry{background-position:-108px -504px;}
.feature-car{background-position:-162px -504px;}
.feature-suitcase{background-position:-216px -504px;}
.feature-hairdresser{background-position:-0px -528px;}
.feature-chemist{background-position:-54px -528px;}
.feature-mobilephone{background-position:-108px -528px;}
.feature-scooter{background-position:-162px -528px;}
.feature-gift{background-position:-216px -528px;}
.feature-ice-cream{background-position:-0px -552px;}
+349 -1
View File
File diff suppressed because one or more lines are too long
-26
View File
@@ -1,26 +0,0 @@
var fs = require('fs');
var _ = require('../js/lib/lodash');
var maki = require('maki/www/maki-sprite.json');
// Generate CSS
var template = '.feature-{name}{background-position:-{x}px -{y}px;}\n';
var css = "/* This file is generated by make. Do NOT edit manually. */\n\n";
var images = {};
_.forEach(maki, function(dimensions, name) {
var match = name.match(/(.*)-(12|18|24)/),
name = match[1],
size = match[2],
group = images[name] = images[name] || {};
group[size] = [dimensions.x, dimensions.y];
if (dimensions.width === 24) {
css += template.replace('{name}', name.replace('-24', ''))
.replace('{x}', dimensions.x)
.replace('{y}', dimensions.y);
}
});
fs.writeFileSync('./css/feature-icons.css', css);
fs.writeFileSync('./data/feature-icons.json', JSON.stringify(images));
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

+4063
View File
File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 526 KiB

-1
View File
@@ -7,7 +7,6 @@
<link rel='stylesheet' href='css/reset.css'>
<link rel='stylesheet' href='css/map.css'>
<link rel='stylesheet' href='css/app.css'>
<link rel='stylesheet' href='css/feature-icons.css'>
<!-- mobile devices -->
<meta name='viewport' content='initial-scale=1.0 maximum-scale=1.0'>
+2 -39
View File
@@ -3,16 +3,6 @@
used once globally, since defs IDs must be unique within a document.
*/
iD.svg.Defs = function(context) {
function autosize(image) {
var img = document.createElement('img');
img.src = image.attr('xlink:href');
img.onload = function() {
image.attr({
width: img.width,
height: img.height
});
};
}
function SVGSpriteDefinition(id, href) {
return function(defs) {
@@ -25,22 +15,6 @@ iD.svg.Defs = function(context) {
};
}
function ImageSpriteDefinition(id, href, data) {
return function(defs) {
defs.append('image')
.attr('id', id)
.attr('xlink:href', href)
.call(autosize);
defs.selectAll()
.data(data)
.enter().append('use')
.attr('id', function(d) { return d.key; })
.attr('transform', function(d) { return 'translate(-' + d.value[0] + ',-' + d.value[1] + ')'; })
.attr('xlink:href', '#' + id);
};
}
return function (selection) {
var defs = selection.append('defs');
@@ -121,23 +95,12 @@ iD.svg.Defs = function(context) {
return d;
});
// maki
var maki = [];
_.forEach(iD.data.featureIcons, function (dimensions, name) {
if (dimensions['12'] && dimensions['18'] && dimensions['24']) {
maki.push({key: 'maki-' + name + '-12', value: dimensions['12']});
maki.push({key: 'maki-' + name + '-18', value: dimensions['18']});
maki.push({key: 'maki-' + name + '-24', value: dimensions['24']});
}
});
defs.call(SVGSpriteDefinition(
'iD-sprite',
context.imagePath('iD-sprite.svg')));
defs.call(ImageSpriteDefinition(
defs.call(SVGSpriteDefinition(
'maki-sprite',
context.imagePath('maki-sprite.png'),
maki));
context.imagePath('maki-sprite.svg')));
};
};
+1 -1
View File
@@ -4,7 +4,7 @@ iD.svg.Icon = function(name, svgklass, useklass) {
.data([0])
.enter()
.append('svg')
.attr('class', 'icon ' + svgklass)
.attr('class', 'icon ' + (svgklass || ''))
.append('use')
.attr('xlink:href', name)
.attr('class', useklass);
+3 -4
View File
@@ -161,19 +161,18 @@ iD.svg.Labels = function(projection, context) {
}
function drawAreaIcons(group, entities, filter, classes, labels) {
var icons = group.selectAll('use')
.filter(filter)
.data(entities, iD.Entity.key);
icons.enter()
.append('use')
.attr('clip-path', 'url(#clip-square-18)')
.attr('class', 'icon');
.attr('width', '18px')
.attr('height', '18px');
icons.attr('transform', get(labels, 'transform'))
.attr('xlink:href', function(d) {
return '#maki-' + context.presets().match(d, context.graph()).icon + '-18';
return '#' + context.presets().match(d, context.graph()).icon + '-18';
});
+4 -3
View File
@@ -35,9 +35,10 @@ iD.svg.Points = function(projection, context) {
.call(markerPath, 'stroke');
group.append('use')
.attr('class', 'icon')
.attr('transform', 'translate(-6, -20)')
.attr('clip-path', 'url(#clip-square-12)');
.attr('class', 'icon')
.attr('width', '12px')
.attr('height', '12px');
groups.attr('transform', iD.svg.PointTransform(projection))
.call(iD.svg.TagClasses());
@@ -49,7 +50,7 @@ iD.svg.Points = function(projection, context) {
groups.select('.icon')
.attr('xlink:href', function(entity) {
var preset = context.presets().match(entity, context.graph());
return preset.icon ? '#maki-' + preset.icon + '-12' : '';
return preset.icon ? '#' + preset.icon + '-12' : '';
});
groups.exit()
+3 -2
View File
@@ -119,8 +119,9 @@ iD.svg.Vertices = function(projection, context) {
enter.filter(function(d) { return icon(d); })
.append('use')
.attr('transform', 'translate(-6, -6)')
.attr('clip-path', 'url(#clip-square-12)')
.attr('xlink:href', function(d) { return '#maki-' + icon(d) + '-12'; });
.attr('xlink:href', function(d) { return '#' + icon(d) + '-12'; })
.attr('width', '12px')
.attr('height', '12px');
// Vertices with tags get a fill.
enter.filter(function(d) { return d.hasInterestingTags(); })
+8 -5
View File
@@ -8,7 +8,9 @@ iD.ui.PresetIcon = function() {
function setup() {
var selection = d3.select(this),
p = preset.apply(this, arguments),
geom = geometry.apply(this, arguments);
geom = geometry.apply(this, arguments),
icon = p.icon || (geom === 'line' ? 'other-line' : 'marker-stroked'),
isMaki = iD.data.featureIcons.hasOwnProperty(icon + '-24');
var $fill = selection.selectAll('.preset-icon-fill')
.data([0]);
@@ -43,11 +45,12 @@ iD.ui.PresetIcon = function() {
.attr('class', 'preset-icon')
.call(iD.svg.Icon(''));
$icon
.classed('preset-icon-60', !isMaki)
.classed('preset-icon-32', isMaki);
$icon.selectAll('use')
.attr('href', function() {
var icon = p.icon || (geom === 'line' ? 'other-line' : 'marker-stroked');
return '#' + icon;
});
.attr('href', function() { return '#' + icon + (isMaki ? '-24' : ''); });
}
presetIcon.preset = function(_) {
+3 -2
View File
@@ -24,7 +24,7 @@
"smash": "0.0",
"lodash-cli": "3.9.3",
"uglify-js": "~2.4.16",
"maki": "0.4.5",
"maki": "0.5.0",
"eslint": "~1.2.1",
"mocha": "~1.21.5",
"mocha-phantomjs": "~3.5.3",
@@ -40,7 +40,8 @@
"name-suggestion-index": "0.0.1",
"minimist": "~1.2.0",
"xml2js": "~0.4.13",
"xmlbuilder": "~3.1.0"
"xmlbuilder": "~3.1.0",
"svg-sprite": "~1.2.12"
},
"engines": {
"node": ">=0.10.0"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 217 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 500 KiB

+12 -5
View File
@@ -3,12 +3,12 @@
'use strict';
var argv = require('minimist')(process.argv.slice(2));
if (argv.help || argv.h || !argv.svg || !argv.json) {
if (argv.help || argv.h || !argv.svg) {
return help();
}
var fs = require('fs');
var json = JSON.parse(fs.readFileSync(argv.json));
var json = (argv.json ? JSON.parse(fs.readFileSync(argv.json)) : {});
var _ = require('../js/lib/lodash.js');
var xml2js = require('xml2js');
@@ -43,14 +43,14 @@ function xmlToJs(filename, cb) {
function jsToXml(obj, cb) {
var json = transform(obj.svg);
var src = transform(obj.svg);
var builder = require('xmlbuilder');
var doc = builder.create('svg',
{ version: '1.0', encoding: 'UTF-8' },
{ pubID: '-//W3C//DTD SVG 1.1//EN', sysID: 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'}
);
doc = build(doc, json);
doc = build(doc, src);
process.stdout.write(doc.end({ pretty: true }), 'utf8', cb);
}
@@ -101,7 +101,14 @@ function build(doc, source) {
doc = build(doc, source['#child'][i]);
}
}
if (!isRoot) {
if (isRoot) {
doc = doc.att({
'version': "1.1",
'xmlns': "http://www.w3.org/2000/svg",
'xmlns:xlink': "http://www.w3.org/1999/xlink"
});
} else {
doc = doc.up();
}
}
-1
View File
@@ -4,7 +4,6 @@
<meta charset='utf-8'>
<title>Rendering Tests</title>
<link rel="stylesheet" href="../css/map.css">
<link rel="stylesheet" href="../css/feature-icons.css">
</head>
<body>
<!-- include source files here... -->