diff --git a/package.json b/package.json
index 90d191b..4d2712c 100644
--- a/package.json
+++ b/package.json
@@ -35,8 +35,8 @@
"mapbox-gl": "^0.47.0",
"mapbox-gl-inspect": "^1.3.1",
"maputnik-design": "github:maputnik/design",
- "ol-mapbox-style": "^2.10.1",
- "ol": "^4.6.5",
+ "ol-mapbox-style": "^3.0.1",
+ "ol": "^5.0.0",
"prop-types": "^15.6.0",
"react": "^16.3.2",
"react-aria-menubutton": "^5.1.1",
diff --git a/src/components/App.jsx b/src/components/App.jsx
index 8c9eae4..877d5ed 100644
--- a/src/components/App.jsx
+++ b/src/components/App.jsx
@@ -6,6 +6,7 @@ import {arrayMove} from 'react-sortable-hoc'
import url from 'url'
import MapboxGlMap from './map/MapboxGlMap'
+import OpenLayersMap from './map/OpenLayersMap'
import LayerList from './layers/LayerList'
import LayerEditor from './layers/LayerEditor'
import Toolbar from './Toolbar'
@@ -442,8 +443,10 @@ export default class App extends React.Component {
let mapElement;
// Check if OL3 code has been loaded?
- if(renderer === 'ol3') {
- mapElement =
TODO
+ if(renderer === 'ol') {
+ mapElement =
} else {
mapElement = {},
- onDataChange: () => {},
- }
-
- constructor(props) {
- super(props)
- this.map = null
- }
-
- updateStyle(newMapStyle) {
- const olms = require('ol-mapbox-style');
- const styleFunc = olms.apply(this.map, newMapStyle)
- }
-
- componentDidUpdate() {
- require.ensure(["ol", "ol-mapbox-style"], () => {
- if(!this.map) return
- this.updateStyle(this.props.mapStyle)
- })
- }
-
- componentDidMount() {
- //Load OpenLayers dynamically once we need it
- //TODO: Make this more convenient
- require.ensure(["ol", "ol/map", "ol/view", "ol/control/zoom", "ol-mapbox-style"], ()=> {
- console.log('Loaded OpenLayers3 renderer')
-
- const olMap = require('ol/map').default
- const olView = require('ol/view').default
- const olZoom = require('ol/control/zoom').default
-
- const map = new olMap({
- target: this.container,
- layers: [],
- view: new olView({
- zoom: 2,
- center: [52.5, -78.4]
- })
- })
- map.addControl(new olZoom())
- this.map = map
- this.updateStyle(this.props.mapStyle)
- })
- }
-
- render() {
- return this.container = x}
- style={{
- position: "fixed",
- top: 40,
- right: 0,
- bottom: 0,
- height: 'calc(100% - 40px)',
- width: "75%",
- backgroundColor: '#fff',
- ...this.props.style,
- }}>
-
- }
-}
-
-export default OpenLayers3Map
diff --git a/src/components/map/OpenLayersMap.jsx b/src/components/map/OpenLayersMap.jsx
new file mode 100644
index 0000000..faa5606
--- /dev/null
+++ b/src/components/map/OpenLayersMap.jsx
@@ -0,0 +1,66 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+import { loadJSON } from '../../libs/urlopen'
+
+import 'ol/ol.css'
+import {apply} from 'ol-mapbox-style';
+import {Map, View} from 'ol';
+
+
+export default class OpenLayersMap extends React.Component {
+ static propTypes = {
+ onDataChange: PropTypes.func,
+ mapStyle: PropTypes.object.isRequired,
+ accessToken: PropTypes.string,
+ style: PropTypes.object,
+ }
+
+ static defaultProps = {
+ onMapLoaded: () => {},
+ onDataChange: () => {},
+ }
+
+ constructor(props) {
+ super(props);
+ }
+
+ updateStyle(newMapStyle) {
+ if(!this.map) return;
+ apply(this.map, newMapStyle);
+ }
+
+ componentDidUpdate() {
+ this.updateStyle(this.props.mapStyle);
+ }
+
+ componentDidMount() {
+ this.updateStyle(this.props.mapStyle);
+
+ const map = new Map({
+ target: this.container,
+ layers: [],
+ view: new View({
+ zoom: 2,
+ center: [52.5, -78.4]
+ })
+ })
+ this.map = map;
+ }
+
+ render() {
+ return this.container = x}
+ style={{
+ position: "fixed",
+ top: 40,
+ right: 0,
+ bottom: 0,
+ height: 'calc(100% - 40px)',
+ width: "75%",
+ backgroundColor: '#fff',
+ ...this.props.style,
+ }}>
+
+ }
+}
+
diff --git a/src/components/modals/SettingsModal.jsx b/src/components/modals/SettingsModal.jsx
index a79d8ee..d3f906f 100644
--- a/src/components/modals/SettingsModal.jsx
+++ b/src/components/modals/SettingsModal.jsx
@@ -103,7 +103,7 @@ class SettingsModal extends React.Component {
data-wd-key="modal-settings.maputnik:renderer"
options={[
['mbgljs', 'MapboxGL JS'],
- // ['ol3', 'Open Layers 3'],
+ ['ol', 'Open Layers 3 (experimental)'],
]}
value={metadata['maputnik:renderer'] || 'mbgljs'}
onChange={this.changeMetadataProperty.bind(this, 'maputnik:renderer')}