UNPKG

rizzo-next

Version:

The next generation of Lonely Planet's style guide and pattern library.

237 lines (188 loc) 7.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _bane = require("../../../core/bane"); var _arkham = require("../../../core/arkham"); var _arkham2 = _interopRequireDefault(_arkham); var _actions = require("../actions"); var _actions2 = _interopRequireDefault(_actions); var _state = require("../state"); var _state2 = _interopRequireDefault(_state); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _pin = require("../views/pin.jsx"); var _pin2 = _interopRequireDefault(_pin); var _server = require("react-dom/server"); require("mapbox.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var L = window.L; var MarkerSet = function (_Component) { _inherits(MarkerSet, _Component); function MarkerSet() { _classCallCheck(this, MarkerSet); return _possibleConstructorReturn(this, (MarkerSet.__proto__ || Object.getPrototypeOf(MarkerSet)).apply(this, arguments)); } _createClass(MarkerSet, [{ key: "initialize", value: function initialize(_ref) { var pois = _ref.pois, map = _ref.map, layer = _ref.layer; this.events = { // "click.marker .poi": "_poiClick", doesn't work, because marker is z-indexed lower than popup-pane? "click.marker .pin": "_poiClick" }; this.pois = pois; this.map = map; this.layer = layer; this.listen(); this._createLayer(); this._clearMarkers(); this._createGeoJSON(); this._addIcons(); this.layer.addTo(this.map); this.map.fitBounds(this.layer.getBounds(), { padding: [50, 50], maxZoom: 14 }); } }, { key: "listen", value: function listen() { var _this = this; _arkham2.default.off("map.poihover"); _arkham2.default.on("map.poihover", function (data) { var layer = _this._findLayerByIndex(data.poiIndex); _this._poiHover(layer); }); _arkham2.default.off("map.poiunhover"); _arkham2.default.on("map.poiunhover", function (data) { var layer = _this._findLayerByIndex(data.poiIndex); _this._poiUnhover(layer); }); } }, { key: "_findLayerByIndex", value: function _findLayerByIndex(i) { var l = void 0; this.layer.eachLayer(function (layer) { if (layer.feature.properties.index === i) { l = layer; } }); return l; } }, { key: "_createGeoJSON", value: function _createGeoJSON() { var geojson = { type: "FeatureCollection", features: [] }; for (var i = 0, l = this.pois.length; i < l; i++) { var geo = this.pois[i].geo; if (geo.geometry.coordinates[0] === null || geo.geometry.coordinates[1] === null) { continue; } else { geo.properties.index = i; geojson.features.push(geo); } } this.layer.setGeoJSON(geojson); } }, { key: "_addIcons", value: function _addIcons() { this.layer.eachLayer(function (l) { var myIcon = L.divIcon({ className: "poi js-poi", iconSize: [14, 14] }); l.setIcon(myIcon); }); } }, { key: "_createIcon", value: function _createIcon(layer) { var state = _state2.default.getState(); // If there's no active set for the current view, use the first set var index = state.sets[state.activeSetIndex] ? state.activeSetIndex : state.lastActiveSetIndex; var set = state.sets[index || 0]; if (!set) { return; } var pin = set.items[layer.feature.properties.index]; var poi = { pin: pin }; var markup = (0, _server.renderToStaticMarkup)(_react2.default.createElement(_pin2.default, poi)); // let pin = PinTemplate(layer.feature.properties); return markup; } }, { key: "_clearMarkers", value: function _clearMarkers() { this.layer.setGeoJSON([]); } }, { key: "_createLayer", value: function _createLayer() { var _this3 = this; this.layer.off("mouseover").off("mouseout"); this.layer.on("mouseover", function (e) { _this3._poiHover(e.layer); }).on("mouseout", function (e) { _this3._poiUnhover(e.layer); }); this.layer.off("click"); this.layer.on("click", function (e) { _this3._poiClick(e); }); } }, { key: "_poiHover", value: function _poiHover(layer) { // this._fixzIndex(layer); Not needed since pop-ups moved off the markers? var template = this._createIcon(layer), lat = layer._latlng.lat, lng = layer._latlng.lng; this.activeLayer = layer; this.popup = L.popup({ closeButton: false, keepInView: true, offset: L.point(0, -25) }).setLatLng(L.latLng(lat, lng)).setContent(template).openOn(this.map); var poiIndex = layer.feature.properties.index; _actions2.default.itemHighlight(poiIndex); } // A layer argument is passed in, but it is not used // The defined argument has been removed to pass ESLint }, { key: "_poiUnhover", value: function _poiUnhover(layer) { // Use if needed this.activeLayer = layer; } }, { key: "_poiClick", value: function _poiClick(event) { var poiIndex = (event.layer || this.activeLayer).feature.properties.index, poi = this.pois[poiIndex]; if (poi.item_type === "Place") { _actions2.default.gotoPlace({ place: poi.slug, placeTitle: poi.title, breadcrumb: poi.subtitle }); } else { _actions2.default.poiOpen({ index: poiIndex, poi: poi }); } } }, { key: "_fixzIndex", value: function _fixzIndex(currentLayer) { this.layer.eachLayer(function (layer) { layer._icon.style.zIndex = layer._icon._leaflet_pos.y; }); currentLayer._icon.style.zIndex = currentLayer._icon._leaflet_pos.y + currentLayer.options.zIndexOffset + 60; } }]); return MarkerSet; }(_bane.Component); exports.default = MarkerSet;