@@ -33,6 +33,8 @@ export function uiSectionDataLayers(context) {
3333 . append ( 'div' )
3434 . attr ( 'class' , 'data-layer-container' )
3535 . merge ( container )
36+ . call ( drawOsmItems )
37+ . call ( drawQAItems )
3638 . call ( drawCustomDataItems )
3739 . call ( drawVectorItems ) // Beta - Detroit mapping challenge
3840 . call ( drawPanelItems ) ;
@@ -65,6 +67,117 @@ export function uiSectionDataLayers(context) {
6567 setLayer ( which , ! showsLayer ( which ) ) ;
6668 }
6769
70+ function drawOsmItems ( selection ) {
71+ var osmKeys = [ 'osm' , 'notes' ] ;
72+ var osmLayers = layers . all ( ) . filter ( function ( obj ) { return osmKeys . indexOf ( obj . id ) !== - 1 ; } ) ;
73+
74+ var ul = selection
75+ . selectAll ( '.layer-list-osm' )
76+ . data ( [ 0 ] ) ;
77+
78+ ul = ul . enter ( )
79+ . append ( 'ul' )
80+ . attr ( 'class' , 'layer-list layer-list-osm' )
81+ . merge ( ul ) ;
82+
83+ var li = ul . selectAll ( '.list-item' )
84+ . data ( osmLayers ) ;
85+
86+ li . exit ( )
87+ . remove ( ) ;
88+
89+ var liEnter = li . enter ( )
90+ . append ( 'li' )
91+ . attr ( 'class' , function ( d ) { return 'list-item list-item-' + d . id ; } ) ;
92+
93+ var labelEnter = liEnter
94+ . append ( 'label' )
95+ . each ( function ( d ) {
96+ if ( d . id === 'osm' ) {
97+ d3_select ( this )
98+ . call ( uiTooltip ( )
99+ . title ( ( ) => t . append ( 'map_data.layers.' + d . id + '.tooltip' ) )
100+ . keys ( [ uiCmd ( '⌥' + t ( 'area_fill.wireframe.key' ) ) ] )
101+ . placement ( 'bottom' )
102+ ) ;
103+ } else {
104+ d3_select ( this )
105+ . call ( uiTooltip ( )
106+ . title ( ( ) => t . append ( 'map_data.layers.' + d . id + '.tooltip' ) )
107+ . placement ( 'bottom' )
108+ ) ;
109+ }
110+ } ) ;
111+
112+ labelEnter
113+ . append ( 'input' )
114+ . attr ( 'type' , 'checkbox' )
115+ . on ( 'change' , function ( d3_event , d ) { toggleLayer ( d . id ) ; } ) ;
116+
117+ labelEnter
118+ . append ( 'span' )
119+ . html ( function ( d ) { return t . html ( 'map_data.layers.' + d . id + '.title' ) ; } ) ;
120+
121+
122+ // Update
123+ li
124+ . merge ( liEnter )
125+ . classed ( 'active' , function ( d ) { return d . layer . enabled ( ) ; } )
126+ . selectAll ( 'input' )
127+ . property ( 'checked' , function ( d ) { return d . layer . enabled ( ) ; } ) ;
128+ }
129+
130+ function drawQAItems ( selection ) {
131+ var qaKeys = [ 'keepRight' , 'improveOSM' , 'osmose' ] ;
132+ var qaLayers = layers . all ( ) . filter ( function ( obj ) { return qaKeys . indexOf ( obj . id ) !== - 1 ; } ) ;
133+
134+ var ul = selection
135+ . selectAll ( '.layer-list-qa' )
136+ . data ( [ 0 ] ) ;
137+
138+ ul = ul . enter ( )
139+ . append ( 'ul' )
140+ . attr ( 'class' , 'layer-list layer-list-qa' )
141+ . merge ( ul ) ;
142+
143+ var li = ul . selectAll ( '.list-item' )
144+ . data ( qaLayers ) ;
145+
146+ li . exit ( )
147+ . remove ( ) ;
148+
149+ var liEnter = li . enter ( )
150+ . append ( 'li' )
151+ . attr ( 'class' , function ( d ) { return 'list-item list-item-' + d . id ; } ) ;
152+
153+ var labelEnter = liEnter
154+ . append ( 'label' )
155+ . each ( function ( d ) {
156+ d3_select ( this )
157+ . call ( uiTooltip ( )
158+ . title ( ( ) => t . append ( 'map_data.layers.' + d . id + '.tooltip' ) )
159+ . placement ( 'bottom' )
160+ ) ;
161+ } ) ;
162+
163+ labelEnter
164+ . append ( 'input' )
165+ . attr ( 'type' , 'checkbox' )
166+ . on ( 'change' , function ( d3_event , d ) { toggleLayer ( d . id ) ; } ) ;
167+
168+ labelEnter
169+ . append ( 'span' )
170+ . each ( function ( d ) { t . append ( 'map_data.layers.' + d . id + '.title' ) ( d3_select ( this ) ) ; } ) ;
171+
172+
173+ // Update
174+ li
175+ . merge ( liEnter )
176+ . classed ( 'active' , function ( d ) { return d . layer . enabled ( ) ; } )
177+ . selectAll ( 'input' )
178+ . property ( 'checked' , function ( d ) { return d . layer . enabled ( ) ; } ) ;
179+ }
180+
68181 // Beta feature - sample vector layers to support Detroit Mapping Challenge
69182 // https://github.com/osmus/detroit-mapping-challenge
70183 function drawVectorItems ( selection ) {
0 commit comments