MapBBCodeUI.js and MapBBCodeUI.Editor.js contain only 6 public methods combined. Note that when built separately, UI scripts require MapBBCode.js, EditorSprites.js (base64 contents of a PNG image with button icons) and FunctionButton.js (see below). They also support all other modules described in the Leaflet plugins page, but can work without them.
setStrings( <Object> strings ): replaces strings with provided translations. See strings/English.js for default values.show( <HTMLElement/String> div, <String/HTMLElement> bbcode ): creates a map inside a given element (can be referenced by id) for given bbcode. can be extracted from an HTML element: it can be in bbcode or value attributes, or inside it.showExternal( <HTMLElement/String> div, <String> id, <Function> callback, context ): download a map from a map sharing service and display it, along with an export button and a link to the service. The callback function receives the control object (see below) after a successful initialization.editor( <HTMLElement/String> div, <String/HTMLTextArea> bbcode, <Function> callback, context ): creates an editor in the given panel, possibly pre-initialized with bbcode. The latter is either a string or a textarea, in latter case caret position is taken into account, and the code is replaced after applying changes.
Calls callback when “Apply” or “Cancel” buttons are clicked, with a single parameter of new bbcode.editorWindow( <String/HTMLTextArea> bbcode, callback, context ): opens a new window with an editor for given bbcode (see editor()). Does not return anything.For custom bbcode processing two methods used internally were made public:
objectToLayer( <Object> obj ): converts an object that MapBBCodeProcessor produces into a Leaflet layer, applying all modifications by handlers.layerToObject( <ILayer> layer ): converts a Leaflet layer into an object for feeding to MapBBCodeProcessor. Note that some parameters processed by handlers may be lost or determined incorrectly due to extra initialization code in handlers.Methods show and editor return a control object with those properties and methods:
map: a reference to Leaflet map object.editor: boolean flag for UI type.close(): removes all elements, “closes” the panel.zoomToData(): zooms and pans the map view to the data.getBBCode(): returns BBCode string for objects currently displayed.updateBBCode( <String> bbcode, <Boolean> noZoom ): removes all objects in a panel and replaces them with those defined in the given bbcode. If noZoom is true, doesn’t zoom and pan to new objects.eachLayer( <Function> callback, context ): iterates over map objects, which are Leaflet layers.Usually configurable by a forum administrator:
| Option | Type | Default | Description |
|---|---|---|---|
defaultPosition |
Number[] | [22, 11] |
Coordinates of the center of a map when opened with empty bbcode. |
defaultZoom |
Number | 2 |
Default zoom of a map when bbcode is empty. |
viewWidth |
Number | 600 |
Width of a map panel when displaying a bbcode. Here and below 0 means 100%. |
viewHeight |
Number | 300 |
Height of a map panel when displaying a bbcode. |
fullViewHeight |
Number | 600 |
Height of an expanded map panel. Width is always 100%. |
fullFromStart |
Boolean | false |
Whether the map panel is opened already in expanded state. The button is hidden in this case. |
fullScreenButton |
Boolean | true |
Whether to show a button for expanding the map panel. |
editorHeight |
Number | 400 |
Height of an editor panel, if editor() method is used. |
windowWidth |
Number | 800 |
Width of an editor window, if editorWindow() method is used. |
windowHeight |
Number | 500 |
Height of an editor window, if editorWindow() method is used. |
preferStandardLayerSwitcher |
Boolean | true |
If this option is false and L.StaticLayerSwitcher class is present, it will be used instead of a standard Leaflet layers control. |
allowedHTML |
String | see source code | Regular expression that matches all HTML tags allowed in object titles. |
outerLinkTemplate |
String | '' |
Template for outer link for displayed map center and zoom. Example: 'http://openstreetmap.org/#map={zoom}/{lat}/{lon}'. If not specified, outer link button is not shown. |
Map layers are specified by any of those options. If none are included, an OpenStreetMap default layer is used.
| Option | Type | Description |
|---|---|---|
layers |
String[] | Array of layer identifiers. See window.layerList below. |
createLayers |
Function(L) | Function that receives Leaflet object as a parameter and returns an array of Leaflet layers. |
Other options:
| Option | Type | Default | Description |
|---|---|---|---|
maxInitialZoom |
Number | 15 |
Maximum zoom level for displayed features. Prevents zooming too close for single markers. |
letterIconLength |
Number | 2 |
Maximum title length for using L.LetterIcon for markers. |
popupIconLength |
Number | 30 |
Maximum title length for using L.PopupIcon for markers. |
externalEndpoint |
String | see source code | URL of a map sharing server, for showExternal() and the upload button. |
uploadButton |
Boolean | false |
Whether to allow uploading maps to a sharing server from editor. |
polygonOpacity |
Number | 0.1 |
Fill opacity for polygons. |
leafletOptions |
Object | {} |
Additional options passed to L.Map constructor. |
hideInsideClasses |
String[] | [] |
List of classes inside which map panel will not be displayed (useful for disabling maps in signatures). |
watchResize |
Boolean | false |
Whether to watch the map panel for resizing (otherwise map may become buggy). |
enablePolygons |
Boolean | true |
Whether to show polygon drawing button in the editing toolbar. |
helpButton |
Boolean | true |
Whether to show help button in the editor. |
editorCloseButtons |
Boolean | true |
Whether to show “Apply” and “Cancel” buttons in the editor. |
confirmFormSubmit |
Boolean | true |
If the editor is opened inside a form, inform a user of losing changes when the form is submitted. |
windowFeatures |
String | ‘resizable,status,dialog’ | Parameters for window.open() used for opening an editor window. |
windowPath |
String | ‘lib/mapbbcode-window.html’ | Path (relative or absolute) to the editor window page (file name can be omitted). |
panelHook |
Function | null |
A function that receives a control object (see above) right after the UI has been initialized. Can be used to alter UI behaviour both in a viewing panel and in a window. |
MapBBCode UI functionality can be extended with handlers. Usually they process bbcode parameters: the BBCode specification states that the only customizable part of [map] bbcode is object parameter set. But it is possible to do virtually anything with handlers, like add an extra buttons or a layer to the map, or create a useful control, like the length measurement handler does. Text and Color handlers are mandatory for MapBBCode (though it can work without them), others are optional.
To create a new handler, you have to push to window.mapBBCodeHandlers array an object with the following properties and methods (only applicableTo is mandatory):
<RegExp> reKeys: regular expression that matches parameters processed by this module.<Boolean> applicableTo( <ILayer> layer ): tests that given layer can contain module’s properties.<String[]> layerToObject( <ILayer> layer, <String[]> lastParams, <MapBBCode> ui ): reads properties off the layer and returns them in a string array. lastParams array contains properties that the object had before it was edited.<HTMLElement> createEditorPanel( <ILayer>layer, <MapBBCode> ui ): creates a panel that will be included in an object popup. It should read and allow editing the property that’s processed by the module.MapBBCode.js is a reference implementation of parsing and generating map bbcode. It contains complete regular expressions for the code and following methods:
isValid( <String> bbcode ): tests that the string is a valid map bbcode.stringToObjects( <String> bbcode ) parses a bbcode string into an object:
{
objs: [{
coords: [<coordinate>, ...],
text: <string>,
params: [<string>, ...]
}, ...],
zoom: <number>,
pos: <coordinate>
}
Format of <coordinate> depends of whether you have Leaflet
library included: it will be either L.LatLng object or an array of two numbers:
[latitude, longitude].
objectsToString( <Object> objs ) takes an object in the same format as the stringToObjects produces and returns a bbcode string.setOptions( <Object> options ): changes option values (see below).| Option | Type | Default | Description |
|---|---|---|---|
decimalDigits |
Number | 5 | Number of decimal digits in coordinates in generated bbcode. |
brackets |
String | [] |
Brackets for bbcode. Can be replaced with <> or (). |
tagParams |
Boolean | false |
If set to true, opening tag should be specified with parameters: [map z="1" ll="2,3"]. Together with brackets option this allows for HTML-like tags. |
shareTag |
String | 'mapid' |
A bbcode tag for external map id. |
Since brackets can be modified, there are some extra methods for getting opening and closing tags. All of them return strings.
getOpenTagSubstring(): returns an opening bracket and map, useful for finding where a bbcode starts.getOpenTag( <Number> zoom, <String> coords ): constructs an opening tag.getOpenTagWithPart( <String> extra ): constructs an opening tag using a whole extra part after map.getCloseTag(): returns a closing bbcode tag.To simplify configuring map panel dimensions and a list of available layers, there is a separate javascript module that can be easily integrated in an administration panel.
It requires window.layerList and L.StaticLayerSwitcher for easier editing of layers. Also see a guide on integration.
The MapBBCodeConfig class includes all options listed above in “configurable by a forum administrator” table, except the last three (preferStandardLayerSwitcher, allowedHTML and outerLinkTemplate). Instead there are additional options for configuring the configuration panel:
| Option | Type | Default | Description |
|---|---|---|---|
editorInWindow |
Boolean | true |
Whether the editor is opened in a window or in an inline panel. |
editorTypeFixed |
Boolean | false |
Whether an administrator can change the above option, or the type is hard-coded into a template. |
maxLayers |
Number | 5 |
Maximum number of layers on a map. |
setStrings( <Object> strings ): replaces strings with provided translations. See strings/English.Config.js for default values.addLayer( <String> id ): adds a layer to the list. See window.layerList.show( <HTMLElement/String> div ): shows a map panel with controls inside a given element (can be specified by its id).bindLayerAdder( <Object> elements ): adds listeners and labels to several input elements for adding layers:| bindLayerAdder option | What does it reference |
|---|---|
select |
<select size="1"> for a layer list |
button |
<input type="button"> for adding a selected layer |
keyBlock |
an initially hidden block for entering a key for layers that require it |
keyBlockDisplay |
display CSS value for that block |
keyTitle |
<span> where a title for key input field will be inserted |
keyValue |
<input type="text"> for entering a key |
There are a number of Leaflet events that the panel emits.
| Event | Data | When fired |
|---|---|---|
show |
options object | Configuration panel has been created. |
change |
options object | Any of the options were changed. |
layerselected |
{ <String> id } |
A user selected another layer (does not affect options). |