diff options
| author | Jakub Hampl <kopomir@gmail.com> | 2018-06-21 15:49:00 +0100 | 
|---|---|---|
| committer | Jakub Hampl <kopomir@gmail.com> | 2018-06-21 15:49:00 +0100 | 
| commit | 5b7ca1d3a6b608b1c31d6b06096771a1585bcbc8 (patch) | |
| tree | 30dc4d82d2ad9df9ce62da24f845fdc406171c3d /src/js | |
| parent | ebed6c06da9efa5b21a45432dfab7f2611b3882a (diff) | |
Add Mapbox 0.46 compatibility and features
Diffstat (limited to 'src/js')
| -rw-r--r-- | src/js/main.js | 48 | 
1 files changed, 47 insertions, 1 deletions
| diff --git a/src/js/main.js b/src/js/main.js index d105d3e..b1ec6fb 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -103,6 +103,50 @@ function wrapElmApplication(elmApp, settings = {}) {          this._pitch = value;        } +      get featureState() { +        return this._featureState; +      } +      set featureState(value) { +        // TODO: Clean this up +        function makeId({id, source, sourceLayer}) { +          return `${id}::${source}::${sourceLayer}`; +        } +        if (this._map) { +          const map = new Map(this._featureState.map(([feature, state]) => [makeId(feature), {feature, state}])); +          value.forEach(([feature, state]) => { +            const id = makeId(feature); +            if (map.has(id)) { +              const prevValue = map.get(id).state; +              const keys = Object.keys(prevValue); +              let newValue = {}; +              keys.forEach(k => { +                if (state[k] === undefined) { +                  newValue[k] = undefined; +                } +              }); +              this._map.setFeatureState( +                feature, +                Object.assign(newValue, state) +              ); +            } else { +              this._map.setFeatureState(feature, state); +            } +            map.delete(id); +          }); + +          map.forEach(({feature, state}) => { +            const keys = Object.keys(state); +            let newValue = {}; +            keys.forEach(k => { +              newValue[k] = undefined; +            }); +            this._map.setFeatureState(feature, newValue); +          }); +        } + +        this._featureState = value; +      } +        addEventListener(type, fn, ...args) {          if (this._map) {            var wrapped; @@ -236,7 +280,9 @@ function wrapElmApplication(elmApp, settings = {}) {    if (elmApp.ports && elmApp.ports.elmMapboxOutgoing) {      function processOptions(opts) {        if (opts.easing) { -        return Object.assign({}, opts, {easing: options.easingFunctions[opts.easing]}); +        return Object.assign({}, opts, { +          easing: options.easingFunctions[opts.easing] +        });        }        return opts;      } | 
