Skip to content

Commit 26fb89a

Browse files
committed
start working on a wizard harry
1 parent 06b4005 commit 26fb89a

1 file changed

Lines changed: 198 additions & 0 deletions

File tree

wizard.html

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
---
2+
layout: guide
3+
title: MapBBCode Configuration Wizard
4+
maplang: en
5+
---
6+
7+
<form action="#" name="f" onsubmit="javascript:return false;" style="margin-top: 1em;">
8+
<div>
9+
<input type="radio" name="loader" id="loader0" value="0" checked> <label for="loader0">Plain MapBBCode</label>
10+
<input type="radio" name="loader" id="loader1" value="1"> <label for="loader1">MapBBCode Loader</label>
11+
</div>
12+
<div>
13+
<label for="path">Path to libraries:</label>
14+
<input type="radio" name="cdn" value="0" checked>
15+
<input type="text" id="path" size="40" name="path" value="mapbbcode/">
16+
<input type="radio" name="cdn" id="pathcdn1" value="1">
17+
<label for="pathcdn1">CDN</label>
18+
</div>
19+
<div>
20+
<label for="wpath">Path to <code>mapbbcode-window.html</code>:</label>
21+
<input type="text" id="wpath" size="30" name="wpath" value="mapbbcode/" disabled>
22+
<input type="checkbox" id="wpathm" name="wpathm" checked> <label for="wpathm">with MapBBCode</label>
23+
</div>
24+
<div>
25+
<label for="lang">Language:</label>
26+
<select id="lang" size="1" name="lang">
27+
<option value="">Default</option>
28+
<option value="en">English</option>
29+
<option value="ru">Russian</option>
30+
</select>
31+
</div>
32+
<div>
33+
<input type="checkbox" id="draw" name="draw">
34+
<label for="draw">include editor dependencies</label>
35+
</div>
36+
<div>
37+
<input type="checkbox" id="length" name="length">
38+
<label for="length">include length measurement handler</label>
39+
</div>
40+
41+
<p>Please read <a href="admin.html">Administrator's Guide</a> for a description of the panel and options below.</p>
42+
43+
<!-- TODO: PROPRIETARY LAYERS -->
44+
<div>
45+
<select size="1" id="layers"></select> <input type="button" id="layeradd"/>
46+
<span id="bingkey"><span id="bingtitle"></span> <input type="text" size="60" id="keyvalue"/></span>
47+
</div>
48+
<div id="map"></div>
49+
50+
<div style="margin-top: 1em;">
51+
<input type="checkbox" id="upload" name="upload">
52+
<label for="upload">upload button</label>
53+
</div>
54+
55+
</form>
56+
57+
<h2>The Code</h2>
58+
59+
<pre id="code"></pre>
60+
61+
<script type="text/javascript" src="/lib/proprietary/Bing.js"></script>
62+
<script type="text/javascript" src="/lib/proprietary/Google.js"></script>
63+
<script type="text/javascript" src="/lib/proprietary/Yandex.js"></script>
64+
<script type="text/javascript" src="/lib/proprietary/2GIS.js"></script>
65+
<script type="text/javascript" src="/lib/proprietary/Nokia.js"></script>
66+
<script type="text/javascript" src="/lib/proprietary/Esri.js"></script>
67+
<script type="text/javascript">
68+
var mapbb, config, form = document.forms['f'];
69+
L.DomEvent.on(window, 'load', function() {
70+
mapbb = new MapBBCode().options;
71+
config = new MapBBCodeConfig({ layers: ['OpenStreetMap'] });
72+
config.bindLayerAdder({
73+
select: 'layers',
74+
button: 'layeradd',
75+
keyBlock: 'bingkey',
76+
keyTitle: 'bingtitle',
77+
keyValue: 'keyvalue',
78+
keyBlockDisplay: 'inline'
79+
});
80+
config.on('show change', update);
81+
config.show('map');
82+
83+
// todo: add update() listener to all input fields
84+
var fields = document.getElementsByTagName('input');
85+
for( var i = 0; i < fields.length; i++ ) {
86+
L.DomEvent.on(fields[i], 'click', update);
87+
}
88+
L.DomEvent.on(form.elements['lang'], 'change', update);
89+
});
90+
91+
function value(name) {
92+
var el = form.elements[name];
93+
if( el.length && el.length > 1 ) {
94+
// radio buttons
95+
for( var i = 0; i < el.length; i++ )
96+
if( el[i].checked || el[i].selected )
97+
return el[i].value;
98+
}
99+
return el.type == 'checkbox' ? el.checked : el.value; // todo: value
100+
}
101+
102+
function mapbbConfig() {
103+
var res = {}, o = config.options, i,
104+
std = 'defaultZoom,fullFromStart,fullViewHeight,viewWidth,viewHeight,editorHeight,windowWidth,windowHeight'.split(',');
105+
if( !(o.layers.length == 1 && o.layers[0] == 'OpenStreetMap') )
106+
res.layers = '"' + o.layers.join(',') + '"';
107+
if( o.defaultPosition[0] != mapbb.defaultPosition[0] || o.defaultPosition[1] != mapbb.defaultPosition[1] )
108+
res.defaultPosition = '[' + o.defaultPosition.join(', ') + ']';
109+
for( i = 0; i < std.length; i++ ) {
110+
var opt = std[i];
111+
if( o[opt] != mapbb[opt] )
112+
res[opt] = o[opt];
113+
}
114+
115+
if( value('upload') != mapbb.uploadButton )
116+
res.uploadButton = value('upload') ? 'true' : 'false';
117+
118+
return res;
119+
}
120+
121+
function printOptions(res, indent) {
122+
var indentStr = '', str = [];
123+
if( indent )
124+
while( indent-- > 0 )
125+
indentStr += '\t';
126+
for( var i in res )
127+
if( res.hasOwnProperty(i) )
128+
str.push(indentStr + '\t' + i + ': ' + (typeof res[i] === 'object' ? printOptions(res[i], (indent||0) + 1) : res[i]));
129+
return str.length ? '{\n' + str.join(',\n') + '\n' + indentStr + '}' : '{}';
130+
}
131+
132+
function findProprietary(layers) {
133+
var res = {}, i, l;
134+
for( i = 0; i < layers.length; i++ ) {
135+
l = layers[i];
136+
if( l == 'Bing' )
137+
res.Bing = true;
138+
else if( l.indexOf('Google') >= 0 )
139+
res.Google = true;
140+
else if( l.indexOf('Yandex') >= 0 )
141+
res.Yandex = true;
142+
else if( l.indexOf('2GIS') >= 0 )
143+
res['2GIS'] = true;
144+
else if( l.indexOf('Nokia') >= 0 )
145+
res.Nokia = true;
146+
else if( l.indexOf('Esri') >= 0 || l.indexOf('National G') >= 0 )
147+
res.Esri = true;
148+
}
149+
var ar = [];
150+
for( i in res )
151+
ar.push(i);
152+
return ar;
153+
}
154+
155+
function update() {
156+
var pathFixed = value('cdn') == '1' ? '//cdn.jsdelivr.net/mapbbcode/1.2.0/' : value('path');
157+
if( pathFixed.length > 0 && pathFixed.substring(pathFixed.length - 1) !== '/' )
158+
pathFixed += '/';
159+
var str = '', i, mapbbcfg = mapbbConfig(), proprietary = findProprietary(config.options.layers);
160+
if( value('loader') == '0' ) {
161+
str += '<link rel="stylesheet" type="text/css" href="' + pathFixed + 'leaflet.css" />\n';
162+
if( value('draw') )
163+
str += '<link rel="stylesheet" type="text/css" href="' + pathFixed + 'leaflet.draw.css" />\n';
164+
str += '<script type="text/javascript" src="' + pathFixed + 'leaflet.js"><' + '/script>\n';
165+
if( value('draw') )
166+
str += '<script type="text/javascript" src="' + pathFixed + 'leaflet.draw.js"><' + '/script>\n';
167+
if( !(config.options.layers.length == 1 && config.options.layers[0] == 'OpenStreetMap' ) )
168+
str += '<script type="text/javascript" src="' + pathFixed + 'LayerList.js"><' + '/script>\n';
169+
for( i = 0; i < proprietary.length; i++ )
170+
str += '<script type="text/javascript" src="' + pathFixed + 'proprietary/' + proprietary[i] + '.js"><' + '/script>\n';
171+
if( value('length') )
172+
str += '<script type="text/javascript" src="' + pathFixed + 'Handler.Length.js"><' + '/script>\n';
173+
if( value('lang') )
174+
str += '<script type="text/javascript" src="' + pathFixed + 'lang/' + value('lang') + '.js"><' + '/script>\n';
175+
mapbbcfg.windowPath = '"' + pathFixed + '"'; // todo: defaults, cdn
176+
str += 'var mapBB = new MapBBCode(' + printOptions(mapbbcfg) + ');';
177+
} else {
178+
var lopt = { mapBBCodeOptions: mapbbcfg };
179+
// todo: windowRelPath
180+
if( value('lang') )
181+
lopt.language = value('lang');
182+
if( value('draw') )
183+
lopt.draw = true;
184+
if( value('length') )
185+
lopt.addons = '["Handler.Length"]';
186+
if( proprietary.length ) {
187+
var p = [];
188+
for( i = 0; i < proprietary.length; i++ )
189+
p.push('"' + proprietary[i] + '"');
190+
lopt.proprietary = '[' + p.join(', ') + ']';
191+
}
192+
str += '<script type="text/javascript" src="' + pathFixed + 'MapBBCodeLoader.min.js"><' + '/script>\n';
193+
str += '<script type="text/javascript">mapBBCodeLoaderOptions.set(' + printOptions(lopt) + ');</' + '/script>';
194+
}
195+
str = str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
196+
document.getElementById('code').innerHTML = str;
197+
}
198+
</script>

0 commit comments

Comments
 (0)