Skip to content

Commit 89dbbf5

Browse files
committed
fix mapbbcode-window, finish wizard
1 parent 26fb89a commit 89dbbf5

6 files changed

Lines changed: 279 additions & 143 deletions

File tree

_includes/codegen.html

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
<script type="text/javascript" src="/lib/proprietary/Bing.js"></script>
2+
<script type="text/javascript" src="/lib/proprietary/Google.js"></script>
3+
<script type="text/javascript" src="/lib/proprietary/Yandex.js"></script>
4+
<script type="text/javascript" src="/lib/proprietary/2GIS.js"></script>
5+
<script type="text/javascript" src="/lib/proprietary/Nokia.js"></script>
6+
<script type="text/javascript" src="/lib/proprietary/Esri.js"></script>
7+
<script type="text/javascript">
8+
var mapbb, config, form = document.forms['f'];
9+
L.DomEvent.on(window, 'load', function() {
10+
mapbb = new MapBBCode().options;
11+
config = new MapBBCodeConfig({ layers: ['OpenStreetMap'] });
12+
config.bindLayerAdder({
13+
select: 'layers',
14+
button: 'layeradd',
15+
keyBlock: 'bingkey',
16+
keyTitle: 'bingtitle',
17+
keyValue: 'keyvalue',
18+
keyBlockDisplay: 'inline'
19+
});
20+
config.on('show change', update);
21+
config.show('map');
22+
23+
// todo: add update() listener to all input fields
24+
var fields = document.getElementsByTagName('input');
25+
for( var i = 0; i < fields.length; i++ ) {
26+
L.DomEvent.on(fields[i], fields[i].type == 'text' ? 'change' : 'click', update);
27+
}
28+
L.DomEvent.on(form.elements['lang'], 'change', update);
29+
});
30+
31+
function value(name) {
32+
var el = form.elements[name];
33+
if( el.length && el.length > 1 ) {
34+
// radio buttons
35+
for( var i = 0; i < el.length; i++ )
36+
if( el[i].checked || el[i].selected )
37+
return el[i].value;
38+
}
39+
return el.type == 'checkbox' ? el.checked : el.value; // todo: value
40+
}
41+
42+
function quotes(str) {
43+
return '"' + str.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
44+
}
45+
46+
function mapbbConfig() {
47+
var res = {}, o = config.options, i,
48+
std = 'defaultZoom,fullFromStart,fullViewHeight,viewWidth,viewHeight,editorHeight,windowWidth,windowHeight'.split(',');
49+
if( !(o.layers.length == 1 && o.layers[0] == 'OpenStreetMap') )
50+
res.layers = quotes(o.layers.join(','));
51+
if( o.defaultPosition[0] != mapbb.defaultPosition[0] || o.defaultPosition[1] != mapbb.defaultPosition[1] )
52+
res.defaultPosition = '[' + o.defaultPosition.join(', ') + ']';
53+
for( i = 0; i < std.length; i++ ) {
54+
var opt = std[i];
55+
if( o[opt] != mapbb[opt] )
56+
res[opt] = o[opt];
57+
}
58+
59+
if( value('switcher') != mapbb.preferStandardLayerSwitcher )
60+
res.preferStandardLayerSwitcher = value('switcher') ? 'true' : 'false';
61+
if( value('outer') != mapbb.outerLinkTemplate )
62+
res.outerLinkTemplate = quotes(value('outer'));
63+
if( value('tags') != mapbb.allowedHTML )
64+
res.allowedHTML = quotes(value('tags'));
65+
66+
if( value('upload') != mapbb.uploadButton )
67+
res.uploadButton = value('upload') ? 'true' : 'false';
68+
var shareurl = value('shareurl');
69+
if( shareurl.length && shareurl.substring(shareurl.length - 1) != '/' )
70+
shareurl += '/';
71+
if( value('upload') && shareurl != mapbb.externalEndpoint )
72+
res.externalEndpoint = quotes(shareurl);
73+
74+
return res;
75+
}
76+
77+
function printOptions(res, indent) {
78+
var indentStr = '', str = [];
79+
if( indent )
80+
while( indent-- > 0 )
81+
indentStr += '\t';
82+
for( var i in res )
83+
if( res.hasOwnProperty(i) )
84+
str.push(indentStr + '\t' + i + ': ' + (typeof res[i] === 'object' ? printOptions(res[i], (indent||0) + 1) : res[i]));
85+
return str.length ? '{\n' + str.join(',\n') + '\n' + indentStr + '}' : '{}';
86+
}
87+
88+
function findProprietary(layers) {
89+
var res = {}, i, l;
90+
for( i = 0; i < layers.length; i++ ) {
91+
l = layers[i];
92+
if( l == 'Bing' )
93+
res.Bing = true;
94+
else if( l.indexOf('Google') >= 0 )
95+
res.Google = true;
96+
else if( l.indexOf('Yandex') >= 0 )
97+
res.Yandex = true;
98+
else if( l.indexOf('2GIS') >= 0 )
99+
res['2GIS'] = true;
100+
else if( l.indexOf('Nokia') >= 0 )
101+
res.Nokia = true;
102+
else if( l.indexOf('Esri') >= 0 || l.indexOf('National G') >= 0 )
103+
res.Esri = true;
104+
}
105+
var ar = [];
106+
for( i in res )
107+
ar.push(i);
108+
return ar;
109+
}
110+
111+
function update() {
112+
form.elements['path'].disabled = document.getElementById('pathcdn1').checked;
113+
form.elements['wpath'].disabled = value('wpathm');
114+
form.elements['shareurl'].disabled = !value('upload');
115+
116+
var pathFixed = value('cdn') == '1' ? '//cdn.jsdelivr.net/mapbbcode/1.2.0/' : value('path');
117+
if( pathFixed.length > 0 && pathFixed.substring(pathFixed.length - 1) !== '/' )
118+
pathFixed += '/';
119+
var bbcode = document.getElementById('example').checked ? '[map=14]57.7753,26.0316(Eesti); 57.7751,26.0204(Latvija);\n57.769,26.024 57.7719,26.0206 57.7742,26.0263 57.7815,26.0271[/map]' : false;
120+
var str = '', i, mapbbcfg = mapbbConfig(), proprietary = findProprietary(config.options.layers);
121+
mapbbcfg.windowPath = quotes(value('wpathm') == '1' ? pathFixed : value('wpath'));
122+
if( value('loader') == '0' ) {
123+
str += '<link rel="stylesheet" type="text/css" href="' + pathFixed + 'leaflet.css" />\n';
124+
if( value('draw') )
125+
str += '<link rel="stylesheet" type="text/css" href="' + pathFixed + 'leaflet.draw.css" />\n';
126+
str += '<script type="text/javascript" src="' + pathFixed + 'leaflet.js"><' + '/script>\n';
127+
if( value('draw') )
128+
str += '<script type="text/javascript" src="' + pathFixed + 'leaflet.draw.js"><' + '/script>\n';
129+
str += '<script type="text/javascript" src="' + pathFixed + 'mapbbcode.js"><' + '/script>\n';
130+
if( !(config.options.layers.length == 1 && config.options.layers[0] == 'OpenStreetMap' ) )
131+
str += '<script type="text/javascript" src="' + pathFixed + 'LayerList.js"><' + '/script>\n';
132+
for( i = 0; i < proprietary.length; i++ )
133+
str += '<script type="text/javascript" src="' + pathFixed + 'proprietary/' + proprietary[i] + '.js"><' + '/script>\n';
134+
if( value('length') )
135+
str += '<script type="text/javascript" src="' + pathFixed + 'Handler.Length.js"><' + '/script>\n';
136+
if( value('lang') )
137+
str += '<script type="text/javascript" src="' + pathFixed + 'lang/' + value('lang') + '.js"><' + '/script>\n';
138+
if( bbcode )
139+
str += '<div id="map"></div>\n';
140+
str += '<script type="text/javascript">\nvar mapBB = new MapBBCode(' + printOptions(mapbbcfg) + ');\n';
141+
if( bbcode )
142+
str += 'mapBB.show("map", "' + bbcode.replace('\n', '" +\n\t"') + '");\n';
143+
str += '<'+'/script>';
144+
} else {
145+
var lopt = { mapBBCodeOptions: mapbbcfg };
146+
if( pathFixed !== 'mapbbcode/' )
147+
lopt.path = quotes(pathFixed);
148+
if( mapbbcfg.windowPath === quotes(pathFixed) )
149+
delete mapbbcfg.windowPath;
150+
if( value('lang') )
151+
lopt.language = value('lang');
152+
if( value('draw') )
153+
lopt.draw = true;
154+
if( value('length') )
155+
lopt.addons = '["Handler.Length"]';
156+
if( proprietary.length ) {
157+
var p = [];
158+
for( i = 0; i < proprietary.length; i++ )
159+
p.push('"' + proprietary[i] + '"');
160+
lopt.proprietary = '[' + p.join(', ') + ']';
161+
}
162+
str += '<script type="text/javascript" src="' + pathFixed + 'MapBBCodeLoader.min.js"><' + '/script>\n';
163+
str += '<script type="text/javascript">mapBBCodeLoaderOptions.set(' + printOptions(lopt) + ');</' + '/script>';
164+
if( bbcode )
165+
str += '\n<div class="mapbbcode">' + bbcode + '</div>';
166+
}
167+
str = str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
168+
document.getElementById('code').innerHTML = str;
169+
}
170+
</script>

lib/mapbbcode-window.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<script type="text/javascript" src="leaflet.draw.js"></script>
1010
<script type="text/javascript" src="mapbbcode.js"></script>
1111
<script type="text/javascript" src="LayerList.js"></script>
12-
<script type="text/javascript" src="Bing.js"></script>
12+
<script type="text/javascript" src="proprietary/Bing.js"></script>
1313
<script type="text/javascript" src="Handler.Length.js"></script>
1414
<style>html, body, #edit, .leaflet-container { margin: 0; height: 100%; }</style>
1515
</head>

ru/toc.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ toc: true
1414

1515
Разработчикам:
1616

17+
* [Мастер настройки MapBBCode](wizard.html)
1718
* [Руководство разработчика](../tutorial.html) (англ.)
1819
* [Справочник по API](../api.html) (англ.)
1920
* [Плагины для Leaflet](../leaflet.html) (англ.)

ru/wizard.html

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
---
2+
layout: guide
3+
title: Мастер настройки MapBBCode
4+
maplang: ru
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">Обычный 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">Путь к библиотекам:</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">Путь к <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">рядом с MapBBCode</label>
23+
</div>
24+
<div>
25+
<label for="lang">Язык:</label>
26+
<select id="lang" size="1" name="lang">
27+
<option value="">по умолчанию</option>
28+
<option value="en">Английский</option>
29+
<option value="ru">Русский</option>
30+
</select>
31+
</div>
32+
<div>
33+
<input type="checkbox" id="draw" name="draw">
34+
<label for="draw">Добавить библиотеки для редактора</label>
35+
</div>
36+
<div>
37+
<input type="checkbox" id="length" name="length">
38+
<label for="length">Добавить модуль отображения длины линий</label>
39+
</div>
40+
41+
<p>За описанием панели и настроек ниже обратитесь к <a href="admin.html">руководству администратора</a>.</p>
42+
43+
<div>
44+
<select size="1" id="layers"></select> <input type="button" id="layeradd"/>
45+
<span id="bingkey"><span id="bingtitle"></span> <input type="text" size="60" id="keyvalue"/></span>
46+
</div>
47+
<div id="map"></div>
48+
49+
<div style="margin-top: 1em;">
50+
<input type="checkbox" id="switcher" name="switcher" checked>
51+
<label for="switcher">Спрятать список слоёв за кнопкой</label>
52+
</div>
53+
<div>
54+
<input type="checkbox" id="upload" name="upload">
55+
<label for="upload">Позволить загрузку карт в MapBBCode Share</label>
56+
</div>
57+
<div>
58+
<label for="shareurl">Адрес сервера MapBBCode Share:</label><br>
59+
<input type="text" size="60" name="shareurl" id="shareurl" value="http://share.mapbbcode.org">
60+
</div>
61+
<div>
62+
<label for="outer">Шаблон внешней ссылки, если нужна кнопка (параметры: {zoom}, {lat}, {lon}):</label><br>
63+
<input type="text" size="60" name="outer" id="outer" value="">
64+
</div>
65+
<div>
66+
<label for="tags">Допустимые HTML-теги во всплывающих панелях (регулярное выражение):</label><br>
67+
<input type="text" size="60" name="tags" id="tags" value="[auib]|span|br|em|strong|tt">
68+
</div>
69+
70+
</form>
71+
72+
<h2>Готовый код</h2>
73+
74+
<div>
75+
<input type="checkbox" id="example" name="example">
76+
<label for="example">Добавить пример карты</label>
77+
</div>
78+
79+
<pre id="code"></pre>
80+
81+
{% include codegen.html %}

toc.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ On this website (please help us [translating](https://github.com/MapBBCode/mapbb
1414

1515
For developers:
1616

17+
* [Configuration Wizard](wizard.html)
1718
* [Developer's Guide](tutorial.html)
1819
* [API Reference](api.html)
1920
* [Leaflet Plugins](leaflet.html)

0 commit comments

Comments
 (0)