From 043d41fba87ca16a923303a132c93cd6e7e78bea Mon Sep 17 00:00:00 2001 From: mak001 Date: Fri, 17 Aug 2018 10:11:41 -0500 Subject: [PATCH] Separate API controller for base locator module --- client/dist/js/main.js | 2454 +- client/dist/js/main.js.map | 2 +- client/dist/js/map.js | 12 +- client/dist/js/vendor.js | 72762 +++++++++++++++- client/dist/js/vendor.js.map | 2 +- client/src/js/actions/locationActions.js | 4 +- client/src/js/components/search/SearchBar.jsx | 44 +- css/locator.css | 1026 +- src/Extensions/LocatorControllerExtension.php | 5 + src/Extensions/LocatorExtension.php | 8 - 10 files changed, 76227 insertions(+), 92 deletions(-) diff --git a/client/dist/js/main.js b/client/dist/js/main.js index 83583a1..d295141 100644 --- a/client/dist/js/main.js +++ b/client/dist/js/main.js @@ -1 +1,2453 @@ -webpackJsonp([0],{166:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e,t,r){var n=document.querySelector(r);n&&l.default.render(i.default.createElement(s.Provider,{store:t},e),n)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=a;var o=r(0),i=n(o),u=r(27),l=n(u),s=r(45)},167:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e){var t=window.location;return""===e.address&&delete e.address,-1===e.radius&&delete e.radius,""===e.category&&delete e.category,{type:l.default.FETCH_LOCATIONS,payload:i.default.get(t.protocol+"//"+t.host+t.pathname+"/json",{params:e})}}Object.defineProperty(t,"__esModule",{value:!0}),t.fetchLocations=a;var o=r(168),i=n(o),u=r(22),l=n(u)},185:function(e,t,r){"use strict";function n(e){return{type:i.default.MARKER_CLICK,payload:e}}function a(){return{type:i.default.MARKER_CLOSE}}Object.defineProperty(t,"__esModule",{value:!0}),t.openMarker=n,t.closeMarker=a;var o=r(22),i=function(e){return e&&e.__esModule?e:{default:e}}(o)},22:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={FETCH_LOCATIONS:"FETCH_LOCATIONS",FETCH_INFO_WINDOW:"FETCH_INFO_WINDOW",FETCH_LIST:"FETCH_LIST",FETCH_MAP_STYLE:"FETCH_MAP_STYLE",SEARCH:"SEARCH",MARKER_CLICK:"MARKER_CLICK",MARKER_CLOSE:"MARKER_CLOSE",PAGE_CHANGE:"PAGE_CHANGE"};n.FETCH_LOCATIONS_LOADING=n.FETCH_LOCATIONS+"_LOADING",n.FETCH_LOCATIONS_SUCCESS=n.FETCH_LOCATIONS+"_SUCCESS",n.FETCH_LOCATIONS_ERROR=n.FETCH_LOCATIONS+"_ERROR",n.FETCH_INFO_WINDOW_LOADING=n.FETCH_INFO_WINDOW+"_LOADING",n.FETCH_INFO_WINDOW_SUCCESS=n.FETCH_INFO_WINDOW+"_SUCCESS",n.FETCH_INFO_WINDOW_ERROR=n.FETCH_INFO_WINDOW+"_ERROR",n.FETCH_LIST_LOADING=n.FETCH_LIST+"_LOADING",n.FETCH_LIST_SUCCESS=n.FETCH_LIST+"_SUCCESS",n.FETCH_LIST_ERROR=n.FETCH_LIST+"_ERROR",n.FETCH_MAP_STYLE_LOADING=n.FETCH_MAP_STYLE+"_LOADING",n.FETCH_MAP_STYLE_SUCCESS=n.FETCH_MAP_STYLE+"_SUCCESS",n.FETCH_MAP_STYLE_ERROR=n.FETCH_MAP_STYLE+"_ERROR",t.default=n},271:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}var a=r(0),o=n(a),i=r(27),u=(n(i),r(96)),l=(r(45),r(313)),s=n(l),c=r(314),d=n(c),f=r(316),p=n(f),m=r(166),y=n(m),h=r(328),g=n(h),_=(0,u.createStore)(p.default,function(){return(0,u.compose)((0,u.applyMiddleware)((0,d.default)({promiseTypeSuffixes:["LOADING","SUCCESS","ERROR"]}),s.default),void 0!==window.__REDUX_DEVTOOLS_EXTENSION__?window.__REDUX_DEVTOOLS_EXTENSION__():function(e){return e})}());document.addEventListener("DOMContentLoaded",function(){(0,y.default)(o.default.createElement(g.default,{store:_}),_,".locator-loading")})},316:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var a=r(96),o=r(317),i=n(o),u=r(323),l=n(u),s=r(324),c=n(s),d=r(326),f=n(d),p=r(327),m=n(p),y=(0,a.combineReducers)({search:i.default,map:l.default,settings:c.default,locations:f.default,list:m.default});t.default=y},317:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c,t=arguments[1];switch(t.type){case u.default.SEARCH:return o({},e,{address:t.payload.address,radius:t.payload.radius,category:t.payload.category});default:return e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:u,t=arguments[1];switch(t.type){case i.default.MARKER_CLICK:return a({},e,{current:t.payload.ID,showCurrent:!0,center:{Lat:t.payload.Lat,Lng:t.payload.Lng}});case i.default.MARKER_CLOSE:return a({},e,{showCurrent:!1,center:u.center});case i.default.SEARCH:return a({},e,{current:-1,showCurrent:!1});case i.default.FETCH_LOCATIONS_LOADING:return a({},e,{isLoading:!0});case i.default.FETCH_LOCATIONS_SUCCESS:var r=void 0!==t.payload&&void 0!==t.payload.data.center?t.payload.data.center:u.center;return a({},e,{isLoading:!1,center:r});default:return e}}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:f,t=e.loadedListTemplate,r=e.loadedWindowTemplate,n=e.loadedMapStyle;return!0===t&&!0===r&&!0===n}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f,t=arguments[1];switch(t.type){case d.default.FETCH_INFO_WINDOW_SUCCESS:var r=t.payload.data,n=o(u({},e,{loadedWindowTemplate:!0}));return u({},e,a(),{loadedSettings:n,loadedWindowTemplate:!0,infoWindowTemplate:s.default.compile(r)});case d.default.FETCH_LIST_SUCCESS:var i=t.payload.data,l=o(u({},e,{loadedListTemplate:!0}));return u({},e,a(),{loadedSettings:l,loadedListTemplate:!0,listTemplate:s.default.compile(i)});case d.default.FETCH_MAP_STYLE_SUCCESS:var c=t.payload.data,p=o(u({},e,{loadedMapStyle:!0}));return u({},e,a(),{loadedSettings:p,loadedMapStyle:!0,mapStyle:c});case d.default.FETCH_MAP_STYLE_ERROR:if(t.payload===d.default.FETCH_MAP_STYLE_ERROR){var m=o(u({},e,{loadedMapStyle:!0}));return u({},e,a(),{loadedSettings:m,loadedMapStyle:!0})}return e;default:return e}}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:u,t=arguments[1];switch(t.type){case i.default.FETCH_LOCATIONS_SUCCESS:return a({},e,{locations:t.payload.data.locations});default:return e}}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:d,t=arguments[1];switch(t.type){case u.default.PAGE_CHANGE:return o({},e,{page:t.payload});default:return e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};return{type:o.default.SEARCH,payload:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.search=n;var a=r(22),o=function(e){return e&&e.__esModule?e:{default:e}}(a)},359:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var r=0;r-1?t:""}},{key:"render",value:function(){var e=this.props.radii;return void 0!==e&&0!==Object.keys(e).length?s.default.createElement("div",{className:"radius-dropdown form-group"},s.default.createElement("label",{htmlFor:"radius",className:"sr-only"},ss.i18n._t("Locator.RADIUS_FIELD","Radius")),s.default.createElement("select",{name:"radius",className:"form-control",defaultValue:this.defaultValue()},s.default.createElement("option",{value:""},ss.i18n._t("Locator.RADIUS_FIELD","Radius")),this.mappedRadii())):null}}]),t}(s.default.Component);f.propTypes={radius:d.default.number.isRequired,radii:d.default.oneOfType([d.default.object,d.default.array]).isRequired,unit:d.default.string.isRequired},t.default=f},360:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var r=0;r0,unit:u,websiteText:s,directionsText:d,emailText:l,onClick:e.handleLocationClick,template:f})})}},{key:"render",value:function(){var e=this.props,t=e.locations,r=(e.current,e.page),n=e.defaultLimit;return c.default.createElement(c.default.Fragment,null,c.default.createElement("div",{className:"loc-list-container",role:"list"},this.renderList()),c.default.createElement("ul",{className:"pagination"},c.default.createElement(E.default,{page:r,count:t.length,defaultLimit:n,goToPage:this.handlePaginateClick})))}}]),t}(s.Component);O.propTypes={locations:f.default.array,current:f.default.number,search:f.default.string,unit:f.default.string.isRequired,dispatch:f.default.func.isRequired,template:f.default.func.isRequired,defaultLimit:f.default.number.isRequired,page:f.default.number.isRequired,unitText:f.default.string.isRequired,directionsText:f.default.string.isRequired,emailText:f.default.string.isRequired,websiteText:f.default.string.isRequired},O.defaultProps={locations:[],current:-1,search:""},t.default=(0,p.connect)(u)(O)},706:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;tt&&(n=t,r=t-4,r=r<1?1:r),r<=1&&(r=1,n=Math.min(5,t)),Array(n-r+1).fill().map(function(e,t){return r+t})}},{key:"renderPageLinks",value:function(){var e=this.props,t=e.page,r=e.goToPage;return this.getPageNumbers().map(function(e){return t===e?s.default.createElement("li",{className:"page-item active",key:e},s.default.createElement("span",{className:"page-link"},e,s.default.createElement("span",{className:"sr-only"},"(",ss.i18n._t("Locator.CURRENT","Current"),")"))):s.default.createElement("li",{className:"page-item",key:e,onClick:function(){return r(e)}},s.default.createElement("a",{className:"page-link"},e))})}},{key:"render",value:function(){var e=this.props,t=(e.count,e.page),r=e.goToPage,n=t<=1?"page-item disabled":"page-item",a=t<=1?function(){}:function(){return r(t-1)},o=t>=this.getLastPage()?"page-item disabled":"page-item",i=t>=this.getLastPage()?function(){}:function(){return r(t+1)};return this.getPageNumbers().length>1?s.default.createElement(s.default.Fragment,null,s.default.createElement(p.default,{text:String.fromCharCode(171),label:ss.i18n._t("Locator.PREVIOUS_PAGE","Previous"),classes:n,action:a}),this.renderPageLinks(),s.default.createElement(p.default,{text:String.fromCharCode(187),label:ss.i18n._t("Locator.NEXT_PAGE","Next"),classes:o,action:i})):null}}]),t}(l.Component);m.propTypes={page:d.default.number.isRequired,count:d.default.number.isRequired,defaultLimit:d.default.number.isRequired,goToPage:d.default.func.isRequired},t.default=m},708:function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var r=0;r 0 && arguments[0] !== undefined ? arguments[0] : defaultState; + var action = arguments[1]; + + switch (action.type) { + case _ActionTypes2.default.SEARCH: + return _extends({}, state, { + address: action.payload.address, + radius: action.payload.radius, + category: action.payload.category + }); + + default: + return state; + } +} + +/***/ }), + +/***/ 329: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = reducer; + +var _ActionTypes = __webpack_require__(22); + +var _ActionTypes2 = _interopRequireDefault(_ActionTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var defaultState = { + current: -1, + showCurrent: false, + isLoading: true, + + center: { + Lat: 91.0, + Lng: 181.0 + } +}; + +function reducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; + var action = arguments[1]; + + switch (action.type) { + case _ActionTypes2.default.MARKER_CLICK: + return _extends({}, state, { + current: action.payload.ID, + showCurrent: true, + center: { + Lat: action.payload.Lat, + Lng: action.payload.Lng + } + }); + + case _ActionTypes2.default.MARKER_CLOSE: + return _extends({}, state, { + showCurrent: false, + center: defaultState.center + }); + + case _ActionTypes2.default.SEARCH: + return _extends({}, state, { + current: -1, + showCurrent: false + }); + + case _ActionTypes2.default.FETCH_LOCATIONS_LOADING: + return _extends({}, state, { + isLoading: true + }); + + case _ActionTypes2.default.FETCH_LOCATIONS_SUCCESS: + { + var center = action.payload !== undefined && action.payload.data.center !== undefined ? action.payload.data.center : defaultState.center; + return _extends({}, state, { + isLoading: false, + center: center + }); + } + + default: + return state; + } +} + +/***/ }), + +/***/ 330: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = reducer; + +var _handlebars = __webpack_require__(331); + +var _handlebars2 = _interopRequireDefault(_handlebars); + +var _ActionTypes = __webpack_require__(22); + +var _ActionTypes2 = _interopRequireDefault(_ActionTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var defaultState = { + loadedSettings: false, + loadedWindowTemplate: false, + loadedListTemplate: false, + loadedMapStyle: false, + + infoWindowTemplate: null, + listTemplate: null, + mapStyle: null, + markerImagePath: false, + + unit: 'm', + + defaultCenter: { + lat: 0, + lng: 0 + }, + autocomplete: false, + defaultLimit: 20, + + emailText: ss.i18n._t('Locator.EMAIL_TEXT', 'Email'), + + websiteText: ss.i18n._t('Locator.WEBSITE_TEXT', 'Website'), + + directionsText: ss.i18n._t('Locator.DIRECTIONS_TEXT', 'Directions') +}; + +defaultState.unitText = ss.i18n._t('Locator.UNIT.' + defaultState.unit, 'mi'); + +function settings() { + return { + unit: dynamic_locator.unit, + clusters: dynamic_locator.clusters, + limit: dynamic_locator.limit, + radii: dynamic_locator.radii, + categories: dynamic_locator.categories, + defaultCenter: { + lat: dynamic_locator.defaultCenter.lat, + lng: dynamic_locator.defaultCenter.lng + }, + autocomplete: dynamic_locator.autocomplete, + markerImagePath: dynamic_locator.markerImagePath + }; +} + +function didSettingsLoad() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; + var loadedListTemplate = state.loadedListTemplate, + loadedWindowTemplate = state.loadedWindowTemplate, + loadedMapStyle = state.loadedMapStyle; + + return loadedListTemplate === true && loadedWindowTemplate === true && loadedMapStyle === true; +} + +function reducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; + var action = arguments[1]; + + switch (action.type) { + case _ActionTypes2.default.FETCH_INFO_WINDOW_SUCCESS: + { + var data = action.payload.data; + + var loaded = didSettingsLoad(_extends({}, state, { + loadedWindowTemplate: true + })); + + return _extends({}, state, settings(), { + loadedSettings: loaded, + loadedWindowTemplate: true, + infoWindowTemplate: _handlebars2.default.compile(data) + }); + } + + case _ActionTypes2.default.FETCH_LIST_SUCCESS: + { + var _data = action.payload.data; + + var _loaded = didSettingsLoad(_extends({}, state, { + loadedListTemplate: true + })); + + return _extends({}, state, settings(), { + loadedSettings: _loaded, + loadedListTemplate: true, + listTemplate: _handlebars2.default.compile(_data) + }); + } + + case _ActionTypes2.default.FETCH_MAP_STYLE_SUCCESS: + { + var _data2 = action.payload.data; + + var _loaded2 = didSettingsLoad(_extends({}, state, { + loadedMapStyle: true + })); + + return _extends({}, state, settings(), { + loadedSettings: _loaded2, + loadedMapStyle: true, + mapStyle: _data2 + }); + } + + case _ActionTypes2.default.FETCH_MAP_STYLE_ERROR: + { + if (action.payload === _ActionTypes2.default.FETCH_MAP_STYLE_ERROR) { + var _loaded3 = didSettingsLoad(_extends({}, state, { + loadedMapStyle: true + })); + + return _extends({}, state, settings(), { + loadedSettings: _loaded3, + loadedMapStyle: true + }); + } + return state; + } + + default: + return state; + } +} + +/***/ }), + +/***/ 332: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = reducer; + +var _ActionTypes = __webpack_require__(22); + +var _ActionTypes2 = _interopRequireDefault(_ActionTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var defaultState = { + locations: [] +}; + +function reducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; + var action = arguments[1]; + + switch (action.type) { + case _ActionTypes2.default.FETCH_LOCATIONS_SUCCESS: + return _extends({}, state, { + locations: action.payload.data.locations + }); + + default: + return state; + } +} + +/***/ }), + +/***/ 333: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = reducer; + +var _ActionTypes = __webpack_require__(22); + +var _ActionTypes2 = _interopRequireDefault(_ActionTypes); + +var _url = __webpack_require__(168); + +var _url2 = _interopRequireDefault(_url); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var page = _url2.default.parse(window.location.href, true).query.page; + +var defaultState = { + page: Number.isNaN(Number(page)) ? 1 : Number(page) +}; + +function reducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; + var action = arguments[1]; + + switch (action.type) { + case _ActionTypes2.default.PAGE_CHANGE: + return _extends({}, state, { + page: action.payload + }); + + default: + return state; + } +} + +/***/ }), + +/***/ 334: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Loading = undefined; + +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; }; }(); + +exports.mapStateToProps = mapStateToProps; + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactRedux = __webpack_require__(45); + +var _renderComponent = __webpack_require__(169); + +var _renderComponent2 = _interopRequireDefault(_renderComponent); + +var _locationActions = __webpack_require__(170); + +var _settingsActions = __webpack_require__(354); + +var _SearchBar = __webpack_require__(355); + +var _SearchBar2 = _interopRequireDefault(_SearchBar); + +var _MapContainer = __webpack_require__(367); + +var _MapContainer2 = _interopRequireDefault(_MapContainer); + +var _List = __webpack_require__(620); + +var _List2 = _interopRequireDefault(_List); + +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 Loading = exports.Loading = function (_Component) { + _inherits(Loading, _Component); + + function Loading() { + _classCallCheck(this, Loading); + + return _possibleConstructorReturn(this, (Loading.__proto__ || Object.getPrototypeOf(Loading)).apply(this, arguments)); + } + + _createClass(Loading, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var dispatch = this.props.dispatch; + + dispatch((0, _settingsActions.fetchInfoWindow)()); + dispatch((0, _settingsActions.fetchList)()); + dispatch((0, _settingsActions.fetchMapStyle)()); + } + }, { + key: 'shouldComponentUpdate', + value: function shouldComponentUpdate(nextProps) { + var _props = this.props, + loadedSettings = _props.loadedSettings, + isLoading = _props.isLoading; + + return loadedSettings !== nextProps.loadedSettings || isLoading !== nextProps.isLoading; + } + }, { + key: 'componentDidUpdate', + value: function componentDidUpdate(nextProps) { + var _props2 = this.props, + loadedSettings = _props2.loadedSettings, + store = _props2.store; + + if (loadedSettings !== nextProps.loadedSettings) { + var dispatch = nextProps.dispatch, + unit = nextProps.unit, + address = nextProps.address, + radius = nextProps.radius, + category = nextProps.category; + + dispatch((0, _locationActions.fetchLocations)({ + unit: unit, + address: address, + radius: radius, + category: category + })); + } + + (0, _renderComponent2.default)(_react2.default.createElement(_SearchBar2.default, null), store, '.locator-search'); + (0, _renderComponent2.default)(_react2.default.createElement(_List2.default, null), store, '.locator-list'); + (0, _renderComponent2.default)(_react2.default.createElement(_MapContainer2.default, null), store, '.locator-map'); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props, + isLoading = _props3.isLoading, + loadedSettings = _props3.loadedSettings; + + if (isLoading || !loadedSettings) { + return _react2.default.createElement( + 'div', + { className: 'loading show' }, + _react2.default.createElement( + 'div', + { className: 'loading-content' }, + _react2.default.createElement('div', { className: 'spinner' }), + _react2.default.createElement( + 'span', + null, + 'Loading' + ) + ) + ); + } + return _react2.default.createElement('div', { className: 'loading' }); + } + }]); + + return Loading; +}(_react.Component); + +Loading.propTypes = { + isLoading: _propTypes2.default.bool.isRequired +}; + +function mapStateToProps(state) { + return { + isLoading: state.map.isLoading, + + loadedSettings: state.settings.loadedSettings, + unit: state.settings.unit, + address: state.search.address, + radius: state.search.radius, + category: state.search.category + }; +} + +exports.default = (0, _reactRedux.connect)(mapStateToProps)(Loading); + +/***/ }), + +/***/ 354: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.fetchInfoWindow = fetchInfoWindow; +exports.fetchList = fetchList; +exports.fetchMapStyle = fetchMapStyle; + +var _axios = __webpack_require__(171); + +var _axios2 = _interopRequireDefault(_axios); + +var _ActionTypes = __webpack_require__(22); + +var _ActionTypes2 = _interopRequireDefault(_ActionTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function fetchInfoWindow() { + var loc = window.location; + var path = dynamic_locator.infoWindowTemplatePath; + + return { + type: _ActionTypes2.default.FETCH_INFO_WINDOW, + payload: _axios2.default.get(loc.protocol + '//' + loc.host + path) + }; +} + +function fetchList() { + var loc = window.location; + var path = dynamic_locator.listTemplatePath; + + return { + type: _ActionTypes2.default.FETCH_LIST, + payload: _axios2.default.get(loc.protocol + '//' + loc.host + path) + }; +} + +function fetchMapStyle() { + var loc = window.location; + var path = dynamic_locator.mapStylePath; + + if (path === '') { + return { + type: _ActionTypes2.default.FETCH_MAP_STYLE_ERROR, + payload: _ActionTypes2.default.FETCH_MAP_STYLE_ERROR + }; + } + + return { + type: _ActionTypes2.default.FETCH_MAP_STYLE, + payload: _axios2.default.get(loc.protocol + '//' + loc.host + '/' + path) + }; +} + +/***/ }), + +/***/ 355: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SearchBar = undefined; + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +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; }; }(); + +exports.mapStateToProps = mapStateToProps; + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactRedux = __webpack_require__(45); + +var _reactFontawesome = __webpack_require__(356); + +var _reactFontawesome2 = _interopRequireDefault(_reactFontawesome); + +var _fontawesomeFreeSolid = __webpack_require__(358); + +var _reactPlacesAutocomplete = __webpack_require__(359); + +var _reactPlacesAutocomplete2 = _interopRequireDefault(_reactPlacesAutocomplete); + +var _locationActions = __webpack_require__(170); + +var _searchActions = __webpack_require__(364); + +var _listActions = __webpack_require__(102); + +var _RadiusDropDown = __webpack_require__(365); + +var _RadiusDropDown2 = _interopRequireDefault(_RadiusDropDown); + +var _CategoryDropDown = __webpack_require__(366); + +var _CategoryDropDown2 = _interopRequireDefault(_CategoryDropDown); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +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 SearchBar = exports.SearchBar = function (_Component) { + _inherits(SearchBar, _Component); + + _createClass(SearchBar, null, [{ + key: 'objToUrl', + value: function objToUrl(obj) { + var vars = ''; + + Object.keys(obj).forEach(function (key) { + var value = obj[key]; + + if (value !== undefined && value !== null && value !== '') { + vars += key + '=' + value + '&'; + } + }); + + return vars.replace(/([&\s]+$)/g, '').replace(/(\s)/g, '+'); + } + }, { + key: 'getDropdownValue', + value: function getDropdownValue(name) { + if (document.getElementsByName(name)[0] !== undefined) { + return document.getElementsByName(name)[0].value; + } + return ''; + } + }]); + + function SearchBar(props) { + _classCallCheck(this, SearchBar); + + var _this = _possibleConstructorReturn(this, (SearchBar.__proto__ || Object.getPrototypeOf(SearchBar)).call(this, props)); + + _this.searchAddress = props.address; + + _this.handleSubmit = _this.handleSubmit.bind(_this); + _this.handleAddressChange = _this.handleAddressChange.bind(_this); + return _this; + } + + _createClass(SearchBar, [{ + key: 'componentDidMount', + value: function componentDidMount() { + var _this2 = this; + + if (!navigator.geolocation) { + return; + } + + var success = function success(position) { + var _position$coords = position.coords, + latitude = _position$coords.latitude, + longitude = _position$coords.longitude; + + var geocoder = new google.maps.Geocoder(); + + geocoder.geocode({ + location: { + lat: latitude, + lng: longitude + } + }, function (results, status) { + if (status === 'OK') { + if (results[0]) { + _this2.handleSubmit(results[0].formatted_address); + } + } + }); + }; + + var error = function error() {}; + + navigator.geolocation.getCurrentPosition(success, error); + } + }, { + key: 'handleSubmit', + value: function handleSubmit(event) { + if (typeof event === 'string' || event instanceof String) { + this.searchAddress = event; + document.getElementsByName('address')[0].value = event; + } else { + event.preventDefault(); + } + + var address = document.getElementsByName('address')[0].value; + var radius = SearchBar.getDropdownValue('radius'); + var category = SearchBar.getDropdownValue('category'); + + var params = { + address: address, + radius: radius, + category: category + }; + + var _props = this.props, + dispatch = _props.dispatch, + unit = _props.unit; + + dispatch((0, _searchActions.search)({ + address: address, + radius: radius, + category: category + })); + + dispatch((0, _locationActions.fetchLocations)(_extends({}, params, { + unit: unit + }))); + + dispatch((0, _listActions.changePage)(1)); + + var loc = window.location; + var newurl = loc.protocol + '//' + loc.host + loc.pathname + '?' + SearchBar.objToUrl(params); + window.history.pushState({ + path: newurl + }, '', newurl); + } + }, { + key: 'handleAddressChange', + value: function handleAddressChange(searchAddress) { + this.searchAddress = searchAddress; + } + }, { + key: 'getAddressInput', + value: function getAddressInput() { + var _props2 = this.props, + address = _props2.address, + radii = _props2.radii, + center = _props2.center, + autocomplete = _props2.autocomplete; + + if (autocomplete === true) { + var inputProps = { + value: this.searchAddress, + onChange: this.handleAddressChange, + placeholder: ss.i18n._t('Locator.ADDRESS_FIELD', 'Address or zip code'), + name: 'address' + }; + var cssClasses = { + root: 'form-control autocomplete-root', + input: 'form-control' + }; + var options = { + location: new google.maps.LatLng(center.lat, center.lng), + radius: Math.max.apply(Math, _toConsumableArray(radii)) + }; + return _react2.default.createElement(_reactPlacesAutocomplete2.default, { + inputProps: inputProps, + classNames: cssClasses, + onSelect: this.handleSubmit, + onEnterKeyDown: this.handleSubmit, + options: options + }); + } + return _react2.default.createElement('input', { + type: 'text', + name: 'address', + className: 'form-control', + placeholder: ss.i18n._t('Locator.ADDRESS_FIELD', 'Address or zip code'), + defaultValue: address + }); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props, + address = _props3.address, + category = _props3.category, + radii = _props3.radii, + categories = _props3.categories, + unit = _props3.unit, + autocomplete = _props3.autocomplete; + var radius = this.props.radius; + + if (typeof radius === 'string') { + radius = Number(radius); + } + + return _react2.default.createElement( + 'form', + { onSubmit: this.handleSubmit, className: 'search' }, + _react2.default.createElement( + 'div', + { className: 'fieldset' }, + _react2.default.createElement( + 'div', + { className: 'address-input form-group' }, + _react2.default.createElement( + 'label', + { htmlFor: 'address', className: 'sr-only' }, + ss.i18n._t('Locator.ADDRESS_FIELD', 'Address or zip code') + ), + this.getAddressInput() + ), + _react2.default.createElement(_CategoryDropDown2.default, { categories: categories, category: category }), + _react2.default.createElement(_RadiusDropDown2.default, { radii: radii, radius: radius, unit: unit }), + _react2.default.createElement( + 'div', + { className: 'form-group input-group-btn' }, + _react2.default.createElement( + 'button', + _defineProperty({ + className: 'btn btn-secondary', + type: 'button' + }, 'type', 'submit'), + _react2.default.createElement(_reactFontawesome2.default, { icon: _fontawesomeFreeSolid.faSearch }), + _react2.default.createElement( + 'span', + { className: 'sr-only sr-only-focusable' }, + ss.i18n._t('Locator.SEARCH_BUTTON', 'Search') + ) + ) + ) + ) + ); + } + }]); + + return SearchBar; +}(_react.Component); + +SearchBar.propTypes = { + address: _propTypes2.default.string.isRequired, + radius: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]).isRequired, + category: _propTypes2.default.string.isRequired, + + radii: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.array]).isRequired, + + categories: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.array]).isRequired, + unit: _propTypes2.default.string.isRequired, + autocomplete: _propTypes2.default.bool.isRequired, + center: _propTypes2.default.shape({ + lat: _propTypes2.default.number.isRequired, + lng: _propTypes2.default.number.isRequired + }).isRequired, + dispatch: _propTypes2.default.func.isRequired +}; + +function mapStateToProps(state) { + return { + address: state.search.address, + radius: state.search.radius, + category: state.search.category, + + radii: state.settings.radii, + categories: state.settings.categories, + + unit: state.settings.unit, + autocomplete: state.settings.autocomplete, + center: state.settings.defaultCenter + }; +} + +exports.default = (0, _reactRedux.connect)(mapStateToProps)(SearchBar); + +/***/ }), + +/***/ 364: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.search = search; + +var _ActionTypes = __webpack_require__(22); + +var _ActionTypes2 = _interopRequireDefault(_ActionTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function search() { + var inputs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + return { + type: _ActionTypes2.default.SEARCH, + payload: inputs + }; +} + +/***/ }), + +/***/ 365: +/***/ (function(module, exports, __webpack_require__) { + +"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 _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +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 RadiusDropDown = function (_React$Component) { + _inherits(RadiusDropDown, _React$Component); + + function RadiusDropDown() { + _classCallCheck(this, RadiusDropDown); + + return _possibleConstructorReturn(this, (RadiusDropDown.__proto__ || Object.getPrototypeOf(RadiusDropDown)).apply(this, arguments)); + } + + _createClass(RadiusDropDown, [{ + key: 'mappedRadii', + value: function mappedRadii() { + var _props = this.props, + radii = _props.radii, + unit = _props.unit; + + + return Object.keys(radii).map(function (key) { + return _react2.default.createElement( + 'option', + { + value: radii[key], + key: key + }, + radii[key], + ' ', + unit + ); + }); + } + }, { + key: 'defaultValue', + value: function defaultValue() { + var _props2 = this.props, + radius = _props2.radius, + radii = _props2.radii; + + var values = Object.keys(radii).map(function (key) { + return radii[key]; + }); + if (values.indexOf(radius) > -1) { + return radius; + } + return ''; + } + }, { + key: 'render', + value: function render() { + var radii = this.props.radii; + + if (radii !== undefined && Object.keys(radii).length !== 0) { + return _react2.default.createElement( + 'div', + { className: 'radius-dropdown form-group' }, + _react2.default.createElement( + 'label', + { htmlFor: 'radius', className: 'sr-only' }, + ss.i18n._t('Locator.RADIUS_FIELD', 'Radius') + ), + _react2.default.createElement( + 'select', + { + name: 'radius', + className: 'form-control', + defaultValue: this.defaultValue() + }, + _react2.default.createElement( + 'option', + { value: '' }, + ss.i18n._t('Locator.RADIUS_FIELD', 'Radius') + ), + this.mappedRadii() + ) + ); + } + return null; + } + }]); + + return RadiusDropDown; +}(_react2.default.Component); + +RadiusDropDown.propTypes = { + radius: _propTypes2.default.number.isRequired, + + radii: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.array]).isRequired, + unit: _propTypes2.default.string.isRequired +}; + +exports.default = RadiusDropDown; + +/***/ }), + +/***/ 366: +/***/ (function(module, exports, __webpack_require__) { + +"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 _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +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 CategoryDropDown = function (_Component) { + _inherits(CategoryDropDown, _Component); + + function CategoryDropDown() { + _classCallCheck(this, CategoryDropDown); + + return _possibleConstructorReturn(this, (CategoryDropDown.__proto__ || Object.getPrototypeOf(CategoryDropDown)).apply(this, arguments)); + } + + _createClass(CategoryDropDown, [{ + key: 'mappedCategories', + value: function mappedCategories() { + var categories = this.props.categories; + + + return categories.map(function (category) { + return _react2.default.createElement( + 'option', + { + value: category.ID, + key: category.ID + }, + category.Name + ); + }); + } + }, { + key: 'defaultValue', + value: function defaultValue() { + var _props = this.props, + category = _props.category, + categories = _props.categories; + + if (categories.filter(function (cat) { + return cat.ID === Number(category); + }).length) { + return category.toString(); + } + return ''; + } + }, { + key: 'render', + value: function render() { + var categories = this.props.categories; + + if (categories !== undefined && Object.keys(categories).length !== 0) { + return _react2.default.createElement( + 'div', + { className: 'category-dropdown form-group' }, + _react2.default.createElement( + 'label', + { htmlFor: 'category', className: 'sr-only' }, + ss.i18n._t('Locator.CATEGORY_FIELD', 'Category') + ), + _react2.default.createElement( + 'select', + { + name: 'category', + className: 'form-control', + defaultValue: this.defaultValue() + }, + _react2.default.createElement( + 'option', + { value: '' }, + ss.i18n._t('Locator.CATEGORY_FIELD', 'Category') + ), + this.mappedCategories() + ) + ); + } + return null; + } + }]); + + return CategoryDropDown; +}(_react.Component); + +CategoryDropDown.propTypes = { + category: _propTypes2.default.string.isRequired, + + categories: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.array]).isRequired +}; + +exports.default = CategoryDropDown; + +/***/ }), + +/***/ 367: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.MapContainer = undefined; + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +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; }; }(); + +exports.mapStateToProps = mapStateToProps; + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactRedux = __webpack_require__(45); + +var _htmlToReact = __webpack_require__(177); + +var _animatedScrollTo = __webpack_require__(187); + +var _animatedScrollTo2 = _interopRequireDefault(_animatedScrollTo); + +var _mapActions = __webpack_require__(188); + +var _listActions = __webpack_require__(102); + +var _Map = __webpack_require__(417); + +var _Map2 = _interopRequireDefault(_Map); + +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 MapContainer = exports.MapContainer = function (_Component) { + _inherits(MapContainer, _Component); + + function MapContainer(props) { + _classCallCheck(this, MapContainer); + + var _this = _possibleConstructorReturn(this, (MapContainer.__proto__ || Object.getPrototypeOf(MapContainer)).call(this, props)); + + _this.handleMarkerClick = _this.handleMarkerClick.bind(_this); + _this.handleMarkerClose = _this.handleMarkerClose.bind(_this); + return _this; + } + + _createClass(MapContainer, [{ + key: 'getMarkers', + value: function getMarkers() { + var _props = this.props, + locations = _props.locations, + template = _props.template, + emailText = _props.emailText, + websiteText = _props.websiteText, + markerImagePath = _props.markerImagePath; + + var markers = []; + + var htmlToReactParser = new _htmlToReact.Parser(); + + var i = void 0; + + for (i = 0; i < locations.length; i++) { + var location = locations[i]; + var Lat = location.Lat, + Lng = location.Lng; + + var loc = _extends({}, location, { + EmailText: emailText, + WebsiteText: websiteText + }); + markers[markers.length] = { + position: { + lat: Number(Lat), + lng: Number(Lng) + }, + key: location.ID, + defaultAnimation: 2, + defaultIcon: markerImagePath, + infoContent: _react2.default.createElement( + 'div', + null, + htmlToReactParser.parse(template(loc)) + ) + }; + } + return markers; + } + }, { + key: 'handleMarkerClick', + value: function handleMarkerClick(target) { + var _props2 = this.props, + dispatch = _props2.dispatch, + locations = _props2.locations, + defaultLimit = _props2.defaultLimit; + + var location = locations.find(function (loc) { + return loc.ID === target.key; + }); + dispatch((0, _mapActions.openMarker)(location)); + + var index = locations.findIndex(function (l) { + return l.ID === target.key; + }) + 1; + var page = Math.ceil(index / defaultLimit); + + dispatch((0, _listActions.changePage)(page)); + + var element = document.getElementById('loc-' + target.key); + if (element !== null) { + var scrollContainer = document.getElementsByClassName('loc-list-container')[0]; + (0, _animatedScrollTo2.default)(element, { + element: scrollContainer, + minDuration: 500, + maxDuration: 750, + cancelOnUserAction: false + }); + } + } + }, { + key: 'handleMarkerClose', + value: function handleMarkerClose() { + var dispatch = this.props.dispatch; + + dispatch((0, _mapActions.closeMarker)()); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props, + current = _props3.current, + showCurrent = _props3.showCurrent, + clusters = _props3.clusters, + center = _props3.center, + defaultCenter = _props3.defaultCenter, + mapStyle = _props3.mapStyle; + + return _react2.default.createElement( + _react2.default.Fragment, + null, + _react2.default.createElement(_Map2.default, { + containerElement: _react2.default.createElement('div', { className: 'map' }), + mapElement: _react2.default.createElement('div', { style: { height: '100%' } }), + mapStyle: mapStyle, + markers: this.getMarkers(), + onMarkerClick: this.handleMarkerClick, + onMarkerClose: this.handleMarkerClose, + current: current, + showCurrent: showCurrent, + clusters: clusters, + center: center, + defaultCenter: defaultCenter + }) + ); + } + }]); + + return MapContainer; +}(_react.Component); + +MapContainer.propTypes = { + locations: _propTypes2.default.array, + dispatch: _propTypes2.default.func.isRequired, + current: _propTypes2.default.number.isRequired, + showCurrent: _propTypes2.default.bool.isRequired, + clusters: _propTypes2.default.bool.isRequired, + template: _propTypes2.default.func.isRequired, + mapStyle: _propTypes2.default.oneOfType([function () { + return null; + }, _propTypes2.default.object]), + markerImagePath: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.string]).isRequired, + center: _propTypes2.default.shape({ + Lat: _propTypes2.default.number.isRequired, + Lng: _propTypes2.default.number.isRequired + }).isRequired, + defaultCenter: _propTypes2.default.shape({ + lat: _propTypes2.default.number.isRequired, + lng: _propTypes2.default.number.isRequired + }).isRequired +}; + +MapContainer.defaultProps = { + locations: [], + mapStyle: null +}; + +function mapStateToProps(state) { + return { + current: state.map.current, + showCurrent: state.map.showCurrent, + clusters: state.settings.clusters, + template: state.settings.infoWindowTemplate, + mapStyle: state.settings.mapStyle, + markerImagePath: state.settings.markerImagePath, + locations: state.locations.locations, + center: state.map.center, + defaultCenter: state.settings.defaultCenter, + + defaultLimit: state.settings.defaultLimit, + emailText: state.settings.emailText, + websiteText: state.settings.websiteText + }; +} + +exports.default = (0, _reactRedux.connect)(mapStateToProps)(MapContainer); + +/***/ }), + +/***/ 417: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.markers = markers; +exports.Map = Map; + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactGoogleMaps = __webpack_require__(418); + +var _MarkerClusterer = __webpack_require__(616); + +var _MarkerClusterer2 = _interopRequireDefault(_MarkerClusterer); + +var _InfoBox = __webpack_require__(618); + +var _InfoBox2 = _interopRequireDefault(_InfoBox); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function markers(props) { + return props.markers.map(function (marker) { + return _react2.default.createElement( + _reactGoogleMaps.Marker, + { + key: marker.key, + position: marker.position, + defaultAnimation: marker.defaultAnimation, + defaultIcon: marker.defaultIcon, + onClick: function onClick() { + return props.onMarkerClick(marker); + } + }, + props.current === marker.key && props.showCurrent && _react2.default.createElement( + _InfoBox2.default, + { onCloseClick: function onCloseClick() { + return props.onMarkerClose(); + } }, + _react2.default.createElement( + 'div', + { className: 'marker-content' }, + marker.infoContent + ) + ) + ); + }); +} + +function Map(props) { + var opts = {}; + if (props.center.Lat !== 91 && props.center.Lng !== 181) { + opts.center = { + lat: props.center.Lat, + lng: props.center.Lng + }; + } + + var defaultOptions = {}; + if (props.mapStyle !== null) { + defaultOptions.styles = props.mapStyle; + } + + return _react2.default.createElement( + _reactGoogleMaps.GoogleMap, + _extends({ + defaultZoom: 9, + defaultCenter: { lat: props.defaultCenter.lat, lng: props.defaultCenter.lng }, + defaultOptions: defaultOptions + }, opts), + props.clusters === true ? _react2.default.createElement( + _MarkerClusterer2.default, + { + averageCenter: true, + enableRetinaIcons: true, + gridSize: 60 + }, + markers(props) + ) : markers(props) + ); +} + +Map.propTypes = { + clusters: _propTypes2.default.bool.isRequired, + mapStyle: _propTypes2.default.oneOfType([function () { + return null; + }, _propTypes2.default.object]), + center: _propTypes2.default.shape({ + Lat: _propTypes2.default.number.isRequired, + Lng: _propTypes2.default.number.isRequired + }).isRequired, + defaultCenter: _propTypes2.default.shape({ + lat: _propTypes2.default.number.isRequired, + lng: _propTypes2.default.number.isRequired + }).isRequired +}; + +Map.defaultProps = { + mapStyle: null +}; + +exports.default = (0, _reactGoogleMaps.withGoogleMap)(Map); + +/***/ }), + +/***/ 620: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.List = undefined; + +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; }; }(); + +exports.mapStateToProps = mapStateToProps; + +var _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactRedux = __webpack_require__(45); + +var _reactVirtualized = __webpack_require__(621); + +var _animatedScrollTo = __webpack_require__(187); + +var _animatedScrollTo2 = _interopRequireDefault(_animatedScrollTo); + +var _mapActions = __webpack_require__(188); + +var _listActions = __webpack_require__(102); + +var _Location = __webpack_require__(712); + +var _Location2 = _interopRequireDefault(_Location); + +var _Pagination = __webpack_require__(713); + +var _Pagination2 = _interopRequireDefault(_Pagination); + +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 List = exports.List = function (_Component) { + _inherits(List, _Component); + + function List(props) { + _classCallCheck(this, List); + + var _this = _possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).call(this, props)); + + _this.handleLocationClick = _this.handleLocationClick.bind(_this); + _this.handlePaginateClick = _this.handlePaginateClick.bind(_this); + return _this; + } + + _createClass(List, [{ + key: 'handleLocationClick', + value: function handleLocationClick(target) { + var _props = this.props, + dispatch = _props.dispatch, + locations = _props.locations; + + var location = locations.find(function (loc) { + return loc.ID === target; + }); + dispatch((0, _mapActions.openMarker)(location)); + + var element = document.getElementById('loc-' + target); + if (element !== null) { + var scrollContainer = document.getElementsByClassName('loc-list-container')[0]; + (0, _animatedScrollTo2.default)(element, { + element: scrollContainer, + minDuration: 500, + maxDuration: 750, + cancelOnUserAction: false + }); + } + } + }, { + key: 'handlePaginateClick', + value: function handlePaginateClick(page) { + var dispatch = this.props.dispatch; + + dispatch((0, _listActions.changePage)(page)); + } + }, { + key: 'renderList', + value: function renderList() { + var _this2 = this; + + var _props2 = this.props, + page = _props2.page, + defaultLimit = _props2.defaultLimit, + locations = _props2.locations, + current = _props2.current, + search = _props2.search, + unit = _props2.unit, + unitText = _props2.unitText, + emailText = _props2.emailText, + websiteText = _props2.websiteText, + directionsText = _props2.directionsText, + template = _props2.template; + + var realPage = page - 1 ? page - 1 : 0; + + var lim = defaultLimit; + + return locations.slice(realPage * lim, page * lim).map(function (location, index) { + return _react2.default.createElement(_Location2.default, { + key: location.ID, + location: location, + index: realPage * lim + index, + current: current === location.ID, + search: search.length > 0, + unit: unitText, + websiteText: websiteText, + directionsText: directionsText, + emailText: emailText, + onClick: _this2.handleLocationClick, + template: template + }); + }); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props, + locations = _props3.locations, + current = _props3.current, + page = _props3.page, + defaultLimit = _props3.defaultLimit; + + return _react2.default.createElement( + _react2.default.Fragment, + null, + _react2.default.createElement( + 'div', + { className: 'loc-list-container', role: 'list' }, + this.renderList() + ), + _react2.default.createElement( + 'ul', + { className: 'pagination' }, + _react2.default.createElement(_Pagination2.default, { + page: page, + count: locations.length, + defaultLimit: defaultLimit, + goToPage: this.handlePaginateClick + }) + ) + ); + } + }]); + + return List; +}(_react.Component); + +List.propTypes = { + locations: _propTypes2.default.array, + current: _propTypes2.default.number, + search: _propTypes2.default.string, + unit: _propTypes2.default.string.isRequired, + dispatch: _propTypes2.default.func.isRequired, + template: _propTypes2.default.func.isRequired, + defaultLimit: _propTypes2.default.number.isRequired, + page: _propTypes2.default.number.isRequired, + unitText: _propTypes2.default.string.isRequired, + directionsText: _propTypes2.default.string.isRequired, + emailText: _propTypes2.default.string.isRequired, + websiteText: _propTypes2.default.string.isRequired +}; + +List.defaultProps = { + locations: [], + current: -1, + search: '' +}; + +function mapStateToProps(state) { + return { + current: state.map.current, + search: state.search.address, + unit: state.settings.unit, + unitText: state.settings.unitText, + directionsText: state.settings.directionsText, + emailText: state.settings.emailText, + websiteText: state.settings.websiteText, + template: state.settings.listTemplate, + locations: state.locations.locations, + defaultLimit: state.settings.defaultLimit, + page: state.list.page + }; +} + +exports.default = (0, _reactRedux.connect)(mapStateToProps)(List); + +/***/ }), + +/***/ 712: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +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 _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _htmlToReact = __webpack_require__(177); + +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 Location = function (_Component) { + _inherits(Location, _Component); + + function Location() { + _classCallCheck(this, Location); + + return _possibleConstructorReturn(this, (Location.__proto__ || Object.getPrototypeOf(Location)).apply(this, arguments)); + } + + _createClass(Location, [{ + key: 'getDistance', + value: function getDistance() { + var location = this.props.location; + + var distance = location.Distance; + + if (distance === -1) { + return false; + } + + return distance.toFixed(2); + } + }, { + key: 'getDaddr', + value: function getDaddr() { + var location = this.props.location; + + var daddr = ''; + + if (location.Address) { + daddr += location.Address + '+'; + } + + if (location.Address2) { + daddr += location.Address2 + '+'; + } + + if (location.City) { + daddr += location.City + '+'; + } + + if (location.State) { + daddr += location.State + '+'; + } + + if (location.PostalCode) { + daddr += location.PostalCode; + } + + return Location.cleanAddress(daddr); + } + }, { + key: 'getClassName', + value: function getClassName() { + var _props = this.props, + index = _props.index, + current = _props.current; + + var className = 'list-location'; + + if (current) { + className += ' focus'; + } + + if (index % 2 === 0) { + className += ' even'; + } + + if (index === 0) { + className += ' first'; + } + return className; + } + }, { + key: 'render', + value: function render() { + var _props2 = this.props, + location = _props2.location, + index = _props2.index, + search = _props2.search, + template = _props2.template, + unit = _props2.unit, + directionsText = _props2.directionsText, + emailText = _props2.emailText, + websiteText = _props2.websiteText, + _onClick = _props2.onClick; + + var htmlToReactParser = new _htmlToReact.Parser(); + + var loc = _extends({}, location, { + Distance: this.getDistance(), + DirectionsLink: 'http://maps.google.com/maps?saddr=' + Location.cleanAddress(search) + '&daddr=' + this.getDaddr(), + DirectionsText: directionsText, + EmailText: emailText, + WebsiteText: websiteText, + Unit: unit, + Number: index + 1 + }); + + var id = 'loc-' + location.ID; + var className = this.getClassName(); + + return _react2.default.createElement( + 'div', + { + id: id, + 'data-markerid': index, + className: className, + onClick: function onClick() { + return _onClick(location.ID); + }, + role: 'listitem' + }, + htmlToReactParser.parse(template(loc)) + ); + } + }], [{ + key: 'cleanAddress', + value: function cleanAddress(address) { + if (address) { + if (typeof address === 'string') { + return address.replace(/([+\s]+$)/g, '').replace(/(\s)/g, '+'); + } + } + return ''; + } + }]); + + return Location; +}(_react.Component); + +Location.propTypes = { + location: _propTypes2.default.shape({ + Title: _propTypes2.default.string, + Address: _propTypes2.default.string, + Address2: _propTypes2.default.string, + City: _propTypes2.default.string, + State: _propTypes2.default.string, + PostalCode: _propTypes2.default.string, + Website: _propTypes2.default.string, + Phone: _propTypes2.default.string, + Email: _propTypes2.default.string, + Distance: _propTypes2.default.number + }).isRequired, + index: _propTypes2.default.number.isRequired, + current: _propTypes2.default.bool.isRequired, + search: _propTypes2.default.bool.isRequired, + unit: _propTypes2.default.string.isRequired, + onClick: _propTypes2.default.func.isRequired, + template: _propTypes2.default.func.isRequired +}; + +exports.default = Location; + +/***/ }), + +/***/ 713: +/***/ (function(module, exports, __webpack_require__) { + +"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 _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _PaginationEnd = __webpack_require__(714); + +var _PaginationEnd2 = _interopRequireDefault(_PaginationEnd); + +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 Pagination = function (_Component) { + _inherits(Pagination, _Component); + + function Pagination() { + _classCallCheck(this, Pagination); + + return _possibleConstructorReturn(this, (Pagination.__proto__ || Object.getPrototypeOf(Pagination)).apply(this, arguments)); + } + + _createClass(Pagination, [{ + key: 'getLastPage', + value: function getLastPage() { + var _props = this.props, + count = _props.count, + defaultLimit = _props.defaultLimit; + + var lim = defaultLimit; + + return Math.ceil(count / defaultLimit); + } + }, { + key: 'getPageNumbers', + value: function getPageNumbers() { + var page = this.props.page; + + var lastPage = this.getLastPage(); + var range = 2; + + var rangeStart = page - range; + var rangeEnd = page + range; + + if (rangeEnd > lastPage) { + rangeEnd = lastPage; + rangeStart = lastPage - range * 2; + rangeStart = rangeStart < 1 ? 1 : rangeStart; + } + + if (rangeStart <= 1) { + rangeStart = 1; + rangeEnd = Math.min(range * 2 + 1, lastPage); + } + + return Array(rangeEnd - rangeStart + 1).fill().map(function (_, index) { + return rangeStart + index; + }); + } + }, { + key: 'renderPageLinks', + value: function renderPageLinks() { + var _props2 = this.props, + page = _props2.page, + goToPage = _props2.goToPage; + + var numbers = this.getPageNumbers(); + + return numbers.map(function (num) { + if (page === num) { + return _react2.default.createElement( + 'li', + { className: 'page-item active', key: num }, + _react2.default.createElement( + 'span', + { className: 'page-link' }, + num, + _react2.default.createElement( + 'span', + { className: 'sr-only' }, + '(', + ss.i18n._t('Locator.CURRENT', 'Current'), + ')' + ) + ) + ); + } else { + return _react2.default.createElement( + 'li', + { className: 'page-item', key: num, onClick: function onClick() { + return goToPage(num); + } }, + _react2.default.createElement( + 'a', + { className: 'page-link' }, + num + ) + ); + } + }); + } + }, { + key: 'render', + value: function render() { + var _props3 = this.props, + count = _props3.count, + page = _props3.page, + goToPage = _props3.goToPage; + + var previousClasses = page <= 1 ? "page-item disabled" : "page-item"; + var previousAction = page <= 1 ? function () {} : function () { + return goToPage(page - 1); + }; + + var nextClasses = page >= this.getLastPage() ? "page-item disabled" : "page-item"; + var nextAction = page >= this.getLastPage() ? function () {} : function () { + return goToPage(page + 1); + }; + + if (this.getPageNumbers().length > 1) { + return _react2.default.createElement( + _react2.default.Fragment, + null, + _react2.default.createElement(_PaginationEnd2.default, { + text: String.fromCharCode(171), + label: ss.i18n._t('Locator.PREVIOUS_PAGE', 'Previous'), + classes: previousClasses, + action: previousAction + }), + this.renderPageLinks(), + _react2.default.createElement(_PaginationEnd2.default, { + text: String.fromCharCode(187), + label: ss.i18n._t('Locator.NEXT_PAGE', 'Next'), + classes: nextClasses, + action: nextAction + }) + ); + } + return null; + } + }]); + + return Pagination; +}(_react.Component); + +Pagination.propTypes = { + page: _propTypes2.default.number.isRequired, + count: _propTypes2.default.number.isRequired, + defaultLimit: _propTypes2.default.number.isRequired, + goToPage: _propTypes2.default.func.isRequired +}; + +exports.default = Pagination; + +/***/ }), + +/***/ 714: +/***/ (function(module, exports, __webpack_require__) { + +"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 _react = __webpack_require__(0); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(1); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +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 PaginationEnd = function (_Component) { + _inherits(PaginationEnd, _Component); + + function PaginationEnd() { + _classCallCheck(this, PaginationEnd); + + return _possibleConstructorReturn(this, (PaginationEnd.__proto__ || Object.getPrototypeOf(PaginationEnd)).apply(this, arguments)); + } + + _createClass(PaginationEnd, [{ + key: 'render', + value: function render() { + var _props = this.props, + text = _props.text, + label = _props.label, + classes = _props.classes, + action = _props.action; + + return _react2.default.createElement( + 'li', + { className: classes }, + _react2.default.createElement( + 'a', + { className: 'page-link', 'aria-label': label, onClick: action }, + _react2.default.createElement( + 'span', + { 'aria-hidden': 'true' }, + text + ), + _react2.default.createElement( + 'span', + { className: 'sr-only' }, + label + ) + ) + ); + } + }]); + + return PaginationEnd; +}(_react.Component); + +PaginationEnd.propTypes = { + text: _propTypes2.default.string.isRequired, + label: _propTypes2.default.string.isRequired, + classes: _propTypes2.default.string.isRequired, + action: _propTypes2.default.func.isRequired +}; + +exports.default = PaginationEnd; + +/***/ }) + +},[274]); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/client/dist/js/main.js.map b/client/dist/js/main.js.map index 86dc42c..451a774 100644 --- a/client/dist/js/main.js.map +++ b/client/dist/js/main.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./client/src/js/actions/listActions.js","webpack:///./client/src/js/renderComponent.jsx","webpack:///./client/src/js/actions/locationActions.js","webpack:///./client/src/js/actions/mapActions.js","webpack:///./client/src/js/actions/ActionTypes.js","webpack:///./client/src/js/boot/index.jsx","webpack:///./client/src/js/reducers/index.js","webpack:///./client/src/js/reducers/searchReducer.js","webpack:///./client/src/js/reducers/mapReducer.js","webpack:///./client/src/js/reducers/settingsReducer.js","webpack:///./client/src/js/reducers/locationReducer.js","webpack:///./client/src/js/reducers/listReducer.js","webpack:///./client/src/js/components/Loading.jsx","webpack:///./client/src/js/actions/settingsActions.js","webpack:///./client/src/js/components/search/SearchBar.jsx","webpack:///./client/src/js/actions/searchActions.js","webpack:///./client/src/js/components/search/RadiusDropDown.jsx","webpack:///./client/src/js/components/search/CategoryDropDown.jsx","webpack:///./client/src/js/components/map/MapContainer.jsx","webpack:///./client/src/js/components/map/Map.jsx","webpack:///./client/src/js/components/list/List.jsx","webpack:///./client/src/js/components/list/Location.jsx","webpack:///./client/src/js/components/list/Pagination.jsx","webpack:///./client/src/js/components/list/PaginationEnd.jsx"],"names":["changePage","page","type","ActionType","PAGE_CHANGE","payload","renderComponent","component","store","selector","element","document","querySelector","ReactDom","render","fetchLocations","params","loc","window","location","address","radius","category","FETCH_LOCATIONS","axios","get","protocol","host","pathname","openMarker","closeMarker","target","MARKER_CLICK","MARKER_CLOSE","ActionTypes","FETCH_INFO_WINDOW","FETCH_LIST","FETCH_MAP_STYLE","SEARCH","FETCH_LOCATIONS_LOADING","FETCH_LOCATIONS_SUCCESS","FETCH_LOCATIONS_ERROR","FETCH_INFO_WINDOW_LOADING","FETCH_INFO_WINDOW_SUCCESS","FETCH_INFO_WINDOW_ERROR","FETCH_LIST_LOADING","FETCH_LIST_SUCCESS","FETCH_LIST_ERROR","FETCH_MAP_STYLE_LOADING","FETCH_MAP_STYLE_SUCCESS","FETCH_MAP_STYLE_ERROR","composedMiddleware","promiseTypeSuffixes","thunk","__REDUX_DEVTOOLS_EXTENSION__","f","reducers","addEventListener","search","map","settings","locations","list","reducer","defaultState","Object","assign","url","parse","href","query","state","action","current","showCurrent","isLoading","center","Lat","Lng","ID","undefined","data","loadedSettings","loadedWindowTemplate","loadedListTemplate","loadedMapStyle","infoWindowTemplate","listTemplate","mapStyle","markerImagePath","unit","defaultCenter","lat","lng","autocomplete","defaultLimit","emailText","ss","i18n","_t","websiteText","directionsText","unitText","dynamic_locator","clusters","limit","radii","categories","didSettingsLoad","loaded","handlebars","compile","Number","isNaN","mapStateToProps","Loading","dispatch","props","nextProps","Component","propTypes","PropTypes","bool","isRequired","fetchInfoWindow","fetchList","fetchMapStyle","path","infoWindowTemplatePath","listTemplatePath","mapStylePath","SearchBar","obj","vars","keys","forEach","key","value","replace","name","getElementsByName","searchAddress","handleSubmit","bind","handleAddressChange","event","String","preventDefault","getDropdownValue","newurl","objToUrl","history","pushState","inputProps","onChange","placeholder","cssClasses","root","input","options","google","maps","LatLng","Math","max","getAddressInput","faSearch","string","oneOfType","number","object","array","shape","func","inputs","RadiusDropDown","values","indexOf","length","defaultValue","mappedRadii","React","CategoryDropDown","Name","filter","cat","toString","mappedCategories","MapContainer","handleMarkerClick","handleMarkerClose","template","markers","htmlToReactParser","HtmlToReactParser","i","EmailText","WebsiteText","position","defaultAnimation","defaultIcon","infoContent","find","index","findIndex","l","ceil","getElementById","scrollContainer","getElementsByClassName","minDuration","maxDuration","cancelOnUserAction","height","getMarkers","defaultProps","Map","marker","onMarkerClick","onMarkerClose","opts","defaultOptions","styles","List","handleLocationClick","handlePaginateClick","realPage","lim","slice","renderList","Location","distance","Distance","toFixed","daddr","Address","Address2","City","State","PostalCode","cleanAddress","className","onClick","getDistance","DirectionsLink","getDaddr","DirectionsText","Unit","id","getClassName","Title","Website","Phone","Email","Pagination","count","lastPage","getLastPage","range","rangeStart","rangeEnd","min","Array","fill","_","goToPage","numbers","getPageNumbers","num","previousClasses","previousAction","nextClasses","nextAction","fromCharCode","renderPageLinks","PaginationEnd","text","label","classes"],"mappings":"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","file":"client/dist/js/main.js","sourcesContent":["import ActionType from 'actions/ActionTypes';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function changePage(page) {\n return {\n type: ActionType.PAGE_CHANGE,\n payload: page,\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/listActions.js","/* global window, document */\nimport React from 'react';\nimport ReactDom from \"react-dom\";\nimport { Provider } from 'react-redux';\n\n// renders a component to a selector\nexport default function renderComponent(component, store, selector) {\n // only the first container is used, can change to querySelectorAll() for multiple instances\n const element = document.querySelector(selector);\n if (element) {\n ReactDom.render(\n \n {component}\n \n , element\n );\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/renderComponent.jsx","/* global window */\n/* eslint no-param-reassign: [\"error\", { \"props\": false }] */\nimport axios from 'axios';\n\nimport ActionType from 'actions/ActionTypes';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function fetchLocations(params) {\n const loc = window.location;\n\n // removed unused query variables\n if (params.address === '') {\n delete params.address;\n }\n\n if (params.radius === -1) {\n delete params.radius;\n }\n\n if (params.category === '') {\n delete params.category;\n }\n\n return {\n type: ActionType.FETCH_LOCATIONS,\n payload: axios.get(\n `${loc.protocol}//${loc.host}${loc.pathname}/json`,\n {\n // same as \"params: params\"\n params,\n },\n ),\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/locationActions.js","import ActionType from 'actions/ActionTypes';\n\nexport function openMarker(target) {\n return {\n type: ActionType.MARKER_CLICK,\n payload: target,\n };\n}\n\nexport function closeMarker() {\n return {\n type: ActionType.MARKER_CLOSE,\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/mapActions.js","/**\n * List of action types.\n * Could just be strings, but I feel better when referencing a constant that doesn't change without erroring.\n */\nconst ActionTypes = {\n // location fetching\n FETCH_LOCATIONS: 'FETCH_LOCATIONS',\n\n // settings fetching\n FETCH_INFO_WINDOW: 'FETCH_INFO_WINDOW',\n FETCH_LIST: 'FETCH_LIST',\n FETCH_MAP_STYLE: 'FETCH_MAP_STYLE',\n\n // Search action\n SEARCH: 'SEARCH',\n\n // Marker actions\n MARKER_CLICK: 'MARKER_CLICK',\n MARKER_CLOSE: 'MARKER_CLOSE',\n\n PAGE_CHANGE: 'PAGE_CHANGE',\n};\n\n// uses the base FETCH_LOCATIONS to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_LOCATIONS_LOADING = `${ActionTypes.FETCH_LOCATIONS}_LOADING`;\nActionTypes.FETCH_LOCATIONS_SUCCESS = `${ActionTypes.FETCH_LOCATIONS}_SUCCESS`;\nActionTypes.FETCH_LOCATIONS_ERROR = `${ActionTypes.FETCH_LOCATIONS}_ERROR`;\n\n// uses the base FETCH_INFO_WINDOW to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_INFO_WINDOW_LOADING = `${ActionTypes.FETCH_INFO_WINDOW}_LOADING`;\nActionTypes.FETCH_INFO_WINDOW_SUCCESS = `${ActionTypes.FETCH_INFO_WINDOW}_SUCCESS`;\nActionTypes.FETCH_INFO_WINDOW_ERROR = `${ActionTypes.FETCH_INFO_WINDOW}_ERROR`;\n\n// uses the base FETCH_LIST to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_LIST_LOADING = `${ActionTypes.FETCH_LIST}_LOADING`;\nActionTypes.FETCH_LIST_SUCCESS = `${ActionTypes.FETCH_LIST}_SUCCESS`;\nActionTypes.FETCH_LIST_ERROR = `${ActionTypes.FETCH_LIST}_ERROR`;\n\n// uses the base FETCH_MAP_STYLE to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_MAP_STYLE_LOADING = `${ActionTypes.FETCH_MAP_STYLE}_LOADING`;\nActionTypes.FETCH_MAP_STYLE_SUCCESS = `${ActionTypes.FETCH_MAP_STYLE}_SUCCESS`;\nActionTypes.FETCH_MAP_STYLE_ERROR = `${ActionTypes.FETCH_MAP_STYLE}_ERROR`;\n\nexport default ActionTypes;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/ActionTypes.js","/* global window, document */\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport {\n createStore,\n applyMiddleware,\n compose,\n} from 'redux';\nimport { Provider } from 'react-redux';\n\nimport thunk from 'redux-thunk';\nimport promise from 'redux-promise-middleware';\n\nimport reducers from 'reducers';\nimport renderComponent from 'renderComponent';\n\nimport Loading from 'components/Loading';\n\n/**\n * Writes deeply nested function transformations without the rightward drift of the code.\n * [redux compose]{@link http://redux.js.org/docs/api/compose.html}\n * @returns {Function}\n */\nfunction composedMiddleware() {\n return compose(\n applyMiddleware(promise({\n // new suffixes\n promiseTypeSuffixes: ['LOADING', 'SUCCESS', 'ERROR'],\n }), thunk),\n // eslint-disable-next-line no-underscore-dangle\n (typeof window.__REDUX_DEVTOOLS_EXTENSION__ !== 'undefined') ? window.__REDUX_DEVTOOLS_EXTENSION__() : f => f,\n );\n}\n\n// creates the redux store with reducers and middleware\nconst store = createStore(reducers, composedMiddleware());\n\n// defers rendering until after content is loaded (only needed for settings)\ndocument.addEventListener('DOMContentLoaded', () => {\n // renders the locator\n renderComponent(, store, '.locator-loading');\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/boot/index.jsx","import { combineReducers } from 'redux';\n\nimport search from 'reducers/searchReducer';\nimport map from 'reducers/mapReducer';\nimport settings from 'reducers/settingsReducer';\nimport locations from 'reducers/locationReducer';\nimport list from 'reducers/listReducer';\n\n/**\n * Combines the reducers.\n *\n * uses shorthand to set key/values\n * \"search\" is short for \"search: search\"\n *\n * @type {Reducer}\n */\nconst reducers = combineReducers({\n search,\n map,\n settings,\n locations,\n list,\n});\n\nexport default reducers;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/index.js","/* global window */\nimport ActionType from 'actions/ActionTypes';\nimport url from 'url';\n\nconst defaultState = Object.assign({\n address: '',\n radius: -1,\n category: '',\n}, url.parse(window.location.href, true).query);\n\ndelete defaultState.page;\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.SEARCH:\n return {\n ...state,\n address: action.payload.address,\n radius: action.payload.radius,\n category: action.payload.category,\n };\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/searchReducer.js","import ActionType from 'actions/ActionTypes';\n\nconst defaultState = {\n current: -1,\n showCurrent: false,\n isLoading: true,\n // center is invalid, can't be shown on map\n // see the Map component (Map.jsx)\n center: {\n Lat: 91.0,\n Lng: 181.0,\n },\n};\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.MARKER_CLICK:\n return {\n ...state,\n current: action.payload.ID,\n showCurrent: true,\n center: {\n Lat: action.payload.Lat,\n Lng: action.payload.Lng,\n },\n };\n\n case ActionType.MARKER_CLOSE:\n return {\n ...state,\n showCurrent: false,\n center: defaultState.center,\n };\n\n case ActionType.SEARCH:\n return {\n ...state,\n current: -1,\n showCurrent: false,\n };\n\n case ActionType.FETCH_LOCATIONS_LOADING:\n return {\n ...state,\n isLoading: true,\n };\n\n case ActionType.FETCH_LOCATIONS_SUCCESS: {\n const center = action.payload !== undefined && action.payload.data.center !== undefined ?\n action.payload.data.center :\n defaultState.center;\n return {\n ...state,\n isLoading: false,\n center,\n };\n }\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/mapReducer.js","/* global dynamic_locator, ss */\nimport handlebars from 'handlebars';\nimport ActionType from 'actions/ActionTypes';\n\nconst defaultState = {\n loadedSettings: false,\n loadedWindowTemplate: false,\n loadedListTemplate: false,\n loadedMapStyle: false,\n\n infoWindowTemplate: null,\n listTemplate: null,\n mapStyle: null,\n markerImagePath: false,\n\n unit: 'm',\n\n defaultCenter: {\n lat: 0,\n lng: 0,\n },\n autocomplete: false,\n defaultLimit: 20,\n\n // eslint-disable-next-line no-underscore-dangle\n emailText: ss.i18n._t('Locator.EMAIL_TEXT', 'Email'),\n // eslint-disable-next-line no-underscore-dangle\n websiteText: ss.i18n._t('Locator.WEBSITE_TEXT', 'Website'),\n // eslint-disable-next-line no-underscore-dangle\n directionsText: ss.i18n._t('Locator.DIRECTIONS_TEXT', 'Directions'),\n};\n\n// eslint-disable-next-line no-underscore-dangle\ndefaultState.unitText = ss.i18n._t(`Locator.UNIT.${defaultState.unit}`, 'mi');\n\n/**\n * Sets up settings\n * @return {{unit, clusters, limit, radii, categories}}\n */\nfunction settings() {\n return {\n unit: dynamic_locator.unit,\n clusters: dynamic_locator.clusters,\n limit: dynamic_locator.limit,\n radii: dynamic_locator.radii,\n categories: dynamic_locator.categories,\n defaultCenter: {\n lat: dynamic_locator.defaultCenter.lat,\n lng: dynamic_locator.defaultCenter.lng,\n },\n autocomplete: dynamic_locator.autocomplete,\n markerImagePath: dynamic_locator.markerImagePath,\n // defaultLimit: dynamic_locator.defaultLimit,\n };\n}\n\nfunction didSettingsLoad(state = defaultState) {\n const { loadedListTemplate, loadedWindowTemplate, loadedMapStyle } = state;\n return loadedListTemplate === true &&\n loadedWindowTemplate === true &&\n loadedMapStyle === true;\n}\n\n/**\n * The reducer for creating a part in the store for things like radius and categories\n */\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.FETCH_INFO_WINDOW_SUCCESS: {\n const { data } = action.payload;\n const loaded = didSettingsLoad({\n ...state,\n loadedWindowTemplate: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedWindowTemplate: true,\n infoWindowTemplate: handlebars.compile(data),\n };\n }\n\n case ActionType.FETCH_LIST_SUCCESS: {\n const { data } = action.payload;\n const loaded = didSettingsLoad({\n ...state,\n loadedListTemplate: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedListTemplate: true,\n listTemplate: handlebars.compile(data),\n };\n }\n\n case ActionType.FETCH_MAP_STYLE_SUCCESS: {\n const { data } = action.payload;\n const loaded = didSettingsLoad({\n ...state,\n loadedMapStyle: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedMapStyle: true,\n mapStyle: data,\n };\n }\n\n case ActionType.FETCH_MAP_STYLE_ERROR: {\n if (action.payload === ActionType.FETCH_MAP_STYLE_ERROR) {\n const loaded = didSettingsLoad({\n ...state,\n loadedMapStyle: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedMapStyle: true,\n };\n }\n return state;\n }\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/settingsReducer.js","import ActionType from 'actions/ActionTypes';\n\nconst defaultState = {\n locations: [],\n};\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.FETCH_LOCATIONS_SUCCESS:\n return {\n ...state,\n locations: action.payload.data.locations,\n };\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/locationReducer.js","/* global window */\nimport ActionType from 'actions/ActionTypes';\nimport url from 'url';\n\nconst { page } = url.parse(window.location.href, true).query;\nconst defaultState = {\n page: Number.isNaN(Number(page)) ? 1 : Number(page),\n};\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.PAGE_CHANGE:\n return {\n ...state,\n page: action.payload,\n };\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/listReducer.js","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nimport renderComponent from 'renderComponent';\nimport { fetchLocations } from 'actions/locationActions';\nimport { fetchInfoWindow, fetchList, fetchMapStyle } from 'actions/settingsActions';\n\nimport Search from 'components/search/SearchBar';\nimport MapContainer from 'components/map/MapContainer';\nimport List from 'components/list/List';\n\n// exported for tests\nexport class Loading extends Component {\n /**\n * Called after the component mounts\n */\n componentDidMount() {\n const { dispatch } = this.props;\n dispatch(fetchInfoWindow());\n dispatch(fetchList());\n dispatch(fetchMapStyle());\n }\n\n /**\n * Should this component update\n * @param nextProps\n * @return {boolean}\n */\n shouldComponentUpdate(nextProps) {\n const { loadedSettings, isLoading } = this.props;\n return (loadedSettings !== nextProps.loadedSettings || isLoading !== nextProps.isLoading);\n }\n\n /**\n * Called after the component updates\n * @param nextProps\n */\n componentDidUpdate(nextProps) {\n const { loadedSettings, store } = this.props;\n if (loadedSettings !== nextProps.loadedSettings) {\n const {dispatch, unit, address, radius, category} = nextProps;\n dispatch(fetchLocations({\n unit,\n address,\n radius,\n category,\n }));\n }\n\n renderComponent(, store, '.locator-search');\n renderComponent(, store, '.locator-list');\n renderComponent(, store, '.locator-map');\n }\n\n render() {\n const { isLoading, loadedSettings } = this.props;\n if (isLoading || !loadedSettings) {\n return (\n
\n
\n
\n Loading\n
\n
\n );\n }\n return (\n
\n );\n }\n}\n\nLoading.propTypes = {\n isLoading: PropTypes.bool.isRequired,\n};\n\nexport function mapStateToProps(state) {\n return {\n isLoading: state.map.isLoading,\n\n loadedSettings: state.settings.loadedSettings,\n unit: state.settings.unit,\n address: state.search.address,\n radius: state.search.radius,\n category: state.search.category,\n };\n}\n\nexport default connect(mapStateToProps)(Loading);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/Loading.jsx","/* global window, dynamic_locator */\nimport axios from 'axios';\n\nimport ActionType from 'actions/ActionTypes';\n\nexport function fetchInfoWindow() {\n const loc = window.location;\n const path = dynamic_locator.infoWindowTemplatePath;\n\n return {\n type: ActionType.FETCH_INFO_WINDOW,\n payload: axios.get(`${loc.protocol}//${loc.host}${path}`),\n };\n}\n\nexport function fetchList() {\n const loc = window.location;\n const path = dynamic_locator.listTemplatePath;\n\n return {\n type: ActionType.FETCH_LIST,\n payload: axios.get(`${loc.protocol}//${loc.host}${path}`),\n };\n}\n\nexport function fetchMapStyle() {\n const loc = window.location;\n const path = dynamic_locator.mapStylePath;\n\n // so we don't try to fetch the home page of the site\n if (path === '') {\n return {\n type: ActionType.FETCH_MAP_STYLE_ERROR,\n payload: ActionType.FETCH_MAP_STYLE_ERROR,\n };\n }\n\n return {\n type: ActionType.FETCH_MAP_STYLE,\n payload: axios.get(`${loc.protocol}//${loc.host}/${path}`),\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/settingsActions.js","/* global window, document */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport FontAwesomeIcon from '@fortawesome/react-fontawesome';\nimport { faSearch, faCheckCircle } from '@fortawesome/fontawesome-free-solid';\nimport PlacesAutocomplete from 'react-places-autocomplete';\n\nimport { fetchLocations } from 'actions/locationActions';\nimport { search } from 'actions/searchActions';\nimport { changePage } from 'actions/listActions';\nimport RadiusDropDown from 'components/search/RadiusDropDown';\nimport CategoryDropDown from 'components/search/CategoryDropDown';\n\nexport class SearchBar extends Component {\n /**\n * Turns a javascript object into url params.\n * Skips keys without values\n *\n * @param obj\n * @return {string}\n */\n static objToUrl(obj) {\n let vars = '';\n\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n\n // don't add it if its blank\n if (value !== undefined && value !== null && value !== '') {\n vars += `${key}=${value}&`;\n }\n });\n\n // replaces trailing spaces and '&' symbols then replaces spaces with +\n return vars.replace(/([&\\s]+$)/g, '').replace(/(\\s)/g, '+');\n }\n\n static getDropdownValue(name) {\n if (document.getElementsByName(name)[0] !== undefined) {\n return document.getElementsByName(name)[0].value;\n }\n return '';\n }\n\n /**\n * Used to create the SearchBar.\n * needed to allow use of this keyword in handler.\n * @param props\n */\n constructor(props) {\n super(props);\n\n this.searchAddress = props.address;\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleAddressChange = this.handleAddressChange.bind(this);\n }\n\n\n /**\n * 'Submits' form. Really just fires state change and changes the url.\n */\n handleSubmit(event) {\n if (typeof event === 'string' || event instanceof String) {\n this.searchAddress = event;\n document.getElementsByName('address')[0].value = event;\n } else {\n // stops the submit from reloading\n event.preventDefault();\n }\n\n const address = document.getElementsByName('address')[0].value;\n const radius = SearchBar.getDropdownValue('radius');\n const category = SearchBar.getDropdownValue('category');\n\n const params = {\n address,\n radius,\n category,\n };\n\n // selects dispatch and unit from this.props.\n // const dispatch = this.props.dispatch; const unit = this.props.unit;\n const { dispatch, unit } = this.props;\n\n // dispatches search (updates search values)\n dispatch(search({\n address,\n radius,\n category,\n }));\n\n // dispatches fetch locations (gets the locations)\n dispatch(fetchLocations({\n ...params,\n unit,\n }));\n\n dispatch(changePage(1));\n\n // changes the url for the window and adds it to the browser history(no redirect)\n const loc = window.location;\n const newurl = `${loc.protocol}//${loc.host}${loc.pathname}?${SearchBar.objToUrl(params)}`;\n window.history.pushState({\n path: newurl,\n }, '', newurl);\n }\n\n handleAddressChange(searchAddress) {\n this.searchAddress = searchAddress;\n }\n\n /**\n * Gets the address input.\n * @return {*}\n */\n getAddressInput() {\n const {address, radii, center, autocomplete} = this.props;\n if (autocomplete === true) {\n const inputProps = {\n value: this.searchAddress,\n onChange: this.handleAddressChange,\n placeholder: ss.i18n._t('Locator.ADDRESS_FIELD', 'Address or zip code'),\n name: 'address',\n };\n const cssClasses = {\n root: 'form-control autocomplete-root',\n input: 'form-control',\n };\n const options = {\n location: new google.maps.LatLng(center.lat, center.lng),\n radius: Math.max(...radii),\n };\n return ();\n }\n return ();\n }\n\n /**\n * Renders the component.\n * @returns {XML}\n */\n render() {\n const {\n address, category, radii, categories, unit, autocomplete\n } = this.props;\n let { radius } = this.props;\n if (typeof radius === 'string') {\n radius = Number(radius);\n }\n\n return (\n
\n {/* not a fieldset because no flexbox */}\n
\n
\n \n {this.getAddressInput()}\n
\n \n \n
\n \n \n {ss.i18n._t('Locator.SEARCH_BUTTON', 'Search')}\n \n
\n
\n
\n );\n }\n}\n\nSearchBar.propTypes = {\n address: PropTypes.string.isRequired,\n radius: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n ]).isRequired,\n category: PropTypes.string.isRequired,\n\n // eslint-disable-next-line react/forbid-prop-types\n radii: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n categories: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n unit: PropTypes.string.isRequired,\n autocomplete: PropTypes.bool.isRequired,\n center: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n dispatch: PropTypes.func.isRequired,\n};\n\n/**\n * Takes variables/functions from the state and assigns them to variables/functions in the components props.\n *\n * @param state\n * @returns {{address, radius}}\n */\nexport function mapStateToProps(state) {\n return {\n // the defaults - for when it gets loaded from the url\n address: state.search.address,\n radius: state.search.radius,\n category: state.search.category,\n\n // the options\n radii: state.settings.radii,\n categories: state.settings.categories,\n\n // other\n unit: state.settings.unit,\n autocomplete: state.settings.autocomplete,\n center: state.settings.defaultCenter,\n };\n}\n\nexport default connect(mapStateToProps)(SearchBar);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/search/SearchBar.jsx","import ActionType from 'actions/ActionTypes';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function search(inputs = {}) {\n return {\n type: ActionType.SEARCH,\n payload: inputs,\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/searchActions.js","import React from 'react';\nimport PropTypes from 'prop-types';\n\nclass RadiusDropDown extends React.Component {\n /**\n * Maps the radii into options for the drop down.\n * @returns {Array}\n */\n mappedRadii() {\n const { radii, unit } = this.props;\n\n return Object.keys(radii).map(key => (\n \n {radii[key]} {unit}\n \n ));\n }\n\n /**\n * Gets the default value for the dropdown\n * @return {*}\n */\n defaultValue() {\n const { radius, radii } = this.props;\n\n // if the radius exists in the dropdown\n const values = Object.keys(radii).map(key => radii[key]);\n if (values.indexOf(radius) > -1) {\n return radius;\n }\n return '';\n }\n\n /**\n * Outputs the radius drop down.\n * @returns {*}\n */\n render() {\n const { radii } = this.props;\n if (radii !== undefined && Object.keys(radii).length !== 0) {\n return (\n
\n \n \n \n {this.mappedRadii()}\n \n
\n );\n }\n return null;\n }\n}\n\nRadiusDropDown.propTypes = {\n radius: PropTypes.number.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n radii: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n unit: PropTypes.string.isRequired,\n};\n\nexport default RadiusDropDown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/search/RadiusDropDown.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass CategoryDropDown extends Component {\n /**\n * Maps the radii into options for the drop down.\n * @returns {Array}\n */\n mappedCategories() {\n const { categories } = this.props;\n\n return categories.map(category => (\n \n {category.Name}\n \n ));\n }\n\n /**\n * Gets the default value for the dropdown\n * @return {*}\n */\n defaultValue() {\n const { category, categories } = this.props;\n // if the category exists in the dropdown\n if (categories.filter(\n cat => cat.ID === Number(category),\n ).length) {\n return category.toString();\n }\n return '';\n }\n\n /**\n * Outputs the radius drop down.\n * @returns {*}\n */\n render() {\n const { categories } = this.props;\n if (categories !== undefined && Object.keys(categories).length !== 0) {\n return (\n
\n \n \n \n {this.mappedCategories()}\n \n
\n );\n }\n return null;\n }\n}\n\nCategoryDropDown.propTypes = {\n category: PropTypes.string.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n categories: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n};\n\nexport default CategoryDropDown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/search/CategoryDropDown.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Parser as HtmlToReactParser } from 'html-to-react';\nimport scrollToElement from 'animated-scroll-to';\n\nimport { openMarker, closeMarker } from 'actions/mapActions';\nimport { changePage } from 'actions/listActions';\nimport Map from 'components/map/Map';\n\n/**\n * The MapArea component.\n * Renders the map.\n */\nexport class MapContainer extends Component {\n /**\n * Used to create the Map.\n * needed to allow use of this keyword in handler.\n * @param props\n */\n constructor(props) {\n super(props);\n this.handleMarkerClick = this.handleMarkerClick.bind(this);\n this.handleMarkerClose = this.handleMarkerClose.bind(this);\n }\n\n /**\n * Generates an array of marker objects to use on the map\n */\n getMarkers() {\n const { locations, template, emailText, websiteText, markerImagePath } = this.props;\n const markers = [];\n\n const htmlToReactParser = new HtmlToReactParser();\n\n let i;\n // eslint-disable-next-line no-plusplus\n for (i = 0; i < locations.length; i++) {\n const location = locations[i];\n const { Lat, Lng } = location;\n const loc = {\n ...location,\n EmailText: emailText,\n WebsiteText: websiteText,\n }\n markers[markers.length] = {\n position: {\n lat: Number(Lat),\n lng: Number(Lng),\n },\n key: location.ID,\n defaultAnimation: 2,\n defaultIcon: markerImagePath,\n infoContent: (\n
\n {htmlToReactParser.parse(template(loc))}\n
\n ),\n };\n }\n return markers;\n }\n\n /**\n * Fires and event for clicking a marker\n * @param target The marker that was clicked\n */\n handleMarkerClick(target) {\n const { dispatch, locations, defaultLimit } = this.props;\n const location = locations.find(loc => loc.ID === target.key);\n dispatch(openMarker(location));\n\n // change the page\n const index = locations.findIndex(l => l.ID === target.key) + 1;\n const page = Math.ceil(index / defaultLimit);\n\n dispatch(changePage(page));\n\n // scroll to location in list\n const element = document.getElementById(`loc-${target.key}`);\n if (element !== null) {\n const scrollContainer = document.getElementsByClassName('loc-list-container')[0];\n scrollToElement(element, {\n element: scrollContainer,\n minDuration: 500,\n maxDuration: 750,\n cancelOnUserAction: false,\n });\n }\n }\n\n /**\n * Fires event for closing a marker info box\n * @param target The marker that had its info box closed\n */\n handleMarkerClose() {\n const { dispatch } = this.props;\n dispatch(closeMarker());\n }\n\n render() {\n const { current, showCurrent, clusters, center, defaultCenter, mapStyle } = this.props;\n return (\n \n \n }\n mapElement={\n
\n }\n mapStyle={mapStyle}\n markers={this.getMarkers()}\n onMarkerClick={this.handleMarkerClick}\n onMarkerClose={this.handleMarkerClose}\n current={current}\n showCurrent={showCurrent}\n clusters={clusters}\n center={center}\n defaultCenter={defaultCenter}\n />\n \n );\n }\n}\n\n/**\n * Defines the prop types\n * @type {{locations: shim, dispatch: *, current: *, showCurrent: *, clusters: *, template: *, mapStyle: shim, center: (shim|*), defaultCenter: (shim|*)}}\n */\nMapContainer.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n locations: PropTypes.array,\n dispatch: PropTypes.func.isRequired,\n current: PropTypes.number.isRequired,\n showCurrent: PropTypes.bool.isRequired,\n clusters: PropTypes.bool.isRequired,\n template: PropTypes.func.isRequired,\n mapStyle: PropTypes.oneOfType([\n () => {return null;},\n PropTypes.object,\n ]),\n markerImagePath: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.string,\n ]).isRequired,\n center: PropTypes.shape({\n Lat: PropTypes.number.isRequired,\n Lng: PropTypes.number.isRequired,\n }).isRequired,\n defaultCenter: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n};\n\n/**\n * Defines the default values of the props\n * @type {{locations: Array, mapStyle: null}}\n */\nMapContainer.defaultProps = {\n locations: [],\n mapStyle: null,\n};\n\n/**\n * Maps that state to props\n * @param state\n * @returns {{current}}\n */\nexport function mapStateToProps(state) {\n return {\n current: state.map.current,\n showCurrent: state.map.showCurrent,\n clusters: state.settings.clusters,\n template: state.settings.infoWindowTemplate,\n mapStyle: state.settings.mapStyle,\n markerImagePath: state.settings.markerImagePath,\n locations: state.locations.locations,\n center: state.map.center,\n defaultCenter: state.settings.defaultCenter,\n\n defaultLimit: state.settings.defaultLimit,\n emailText: state.settings.emailText,\n websiteText: state.settings.websiteText,\n };\n}\n\nexport default connect(mapStateToProps)(MapContainer);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/map/MapContainer.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withGoogleMap, GoogleMap, Marker } from 'react-google-maps';\nimport MarkerClusterer from 'react-google-maps/lib/components/addons/MarkerClusterer';\nimport InfoBox from 'react-google-maps/lib/components/addons/InfoBox';\n\n/**\n * Renders every marker\n *\n * @param props\n * @return {Array}\n */\nexport function markers(props) {\n return props.markers.map(marker => (\n props.onMarkerClick(marker)}\n >\n {props.current === marker.key && props.showCurrent && (\n props.onMarkerClose()}>\n
{marker.infoContent}
\n
\n )}\n \n ));\n}\n\n/**\n * Renders the map, with all the markers\n *\n * @param props\n * @return {XML}\n * @constructor\n */\nexport function Map(props) {\n // we don't want a center if it is invalid\n const opts = {};\n if (props.center.Lat !== 91 && props.center.Lng !== 181) {\n opts.center = {\n lat: props.center.Lat,\n lng: props.center.Lng,\n }\n }\n\n const defaultOptions = {};\n if (props.mapStyle !== null) {\n defaultOptions.styles = props.mapStyle;\n }\n\n return (\n \n {props.clusters === true ? \n {markers(props)}\n :\n markers(props)}\n \n );\n}\n\n/**\n *\n * @type {{clusters: *, mapStyle: shim, center: (shim|*), defaultCenter: (shim|*)}}\n */\nMap.propTypes = {\n clusters: PropTypes.bool.isRequired,\n mapStyle: PropTypes.oneOfType([\n () => {return null;},\n PropTypes.object\n ]),\n center: PropTypes.shape({\n Lat: PropTypes.number.isRequired,\n Lng: PropTypes.number.isRequired,\n }).isRequired,\n defaultCenter: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n};\n\n/**\n * Defines the default values of the props\n * @type {{mapStyle: null}}\n */\nMap.defaultProps = {\n mapStyle: null,\n};\n\nexport default withGoogleMap(Map);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/map/Map.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { AutoSizer } from 'react-virtualized';\nimport scrollToElement from 'animated-scroll-to';\n\nimport { openMarker } from 'actions/mapActions';\nimport { changePage } from 'actions/listActions';\nimport Location from 'components/list/Location';\nimport Pagination from 'components/list/Pagination';\n\n/**\n * The List component.\n * Renders the location list.\n */\nexport class List extends Component {\n /**\n * Used to create the Map.\n * needed to allow use of this keyword in handler.\n * @param props\n */\n constructor(props) {\n super(props);\n // bind actions/handlers\n this.handleLocationClick = this.handleLocationClick.bind(this);\n this.handlePaginateClick = this.handlePaginateClick.bind(this);\n }\n\n /**\n * Handles a list item click\n * @param target\n */\n handleLocationClick(target) {\n const { dispatch, locations } = this.props;\n const location = locations.find(loc => loc.ID === target);\n dispatch(openMarker(location));\n\n // scroll to location in list\n const element = document.getElementById(`loc-${target}`);\n if (element !== null) {\n const scrollContainer = document.getElementsByClassName('loc-list-container')[0];\n scrollToElement(element, {\n element: scrollContainer,\n minDuration: 500,\n maxDuration: 750,\n cancelOnUserAction: false,\n });\n }\n }\n\n /**\n * Handles a pagination item click\n * @param page\n */\n handlePaginateClick(page) {\n const { dispatch } = this.props;\n dispatch(changePage(page));\n }\n\n /**\n * Renders the list\n */\n renderList() {\n const {\n page,\n defaultLimit,\n locations,\n current,\n search,\n unit,\n unitText,\n emailText,\n websiteText,\n directionsText,\n template\n } = this.props;\n const realPage = page - 1 ? page - 1 : 0;\n // in case we want to implement a flexible limit\n const lim = defaultLimit;\n\n return locations.slice(realPage * lim, page * lim).map((location, index) => {\n return 0}\n unit={unitText}\n websiteText={websiteText}\n directionsText={directionsText}\n emailText={emailText}\n onClick={this.handleLocationClick}\n template={template}\n />\n });\n }\n\n /**\n * Renders the component\n * @returns {XML}\n */\n render() {\n const { locations, current, page, defaultLimit } = this.props;\n return (\n \n
\n {this.renderList()}\n
\n
    \n \n
\n
\n );\n }\n}\n\n/**\n * Defines the prop types\n * @type {{locations: *}}\n */\nList.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n locations: PropTypes.array,\n current: PropTypes.number,\n search: PropTypes.string,\n unit: PropTypes.string.isRequired,\n dispatch: PropTypes.func.isRequired,\n template: PropTypes.func.isRequired,\n defaultLimit: PropTypes.number.isRequired,\n page: PropTypes.number.isRequired,\n unitText: PropTypes.string.isRequired,\n directionsText: PropTypes.string.isRequired,\n emailText: PropTypes.string.isRequired,\n websiteText: PropTypes.string.isRequired,\n};\n\n/**\n * Defines the default values of the props\n * @type {{locations: {edges: Array}}}\n */\nList.defaultProps = {\n locations: [],\n current: -1,\n search: '',\n};\n\n/**\n * Maps that state to props\n * @param state\n * @returns {{current}}\n */\nexport function mapStateToProps(state) {\n return {\n current: state.map.current,\n search: state.search.address,\n unit: state.settings.unit,\n unitText: state.settings.unitText,\n directionsText: state.settings.directionsText,\n emailText: state.settings.emailText,\n websiteText: state.settings.websiteText,\n template: state.settings.listTemplate,\n locations: state.locations.locations,\n defaultLimit: state.settings.defaultLimit,\n page: state.list.page,\n };\n}\n\n\n/**\n * export the Map Component\n */\nexport default connect(mapStateToProps)(List);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/List.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Parser as HtmlToReactParser } from 'html-to-react';\n\n/**\n * The Location component.\n * Used in the location list.\n */\nclass Location extends Component {\n /**\n * Replaces any trailing '+' and whitespace and any spaces left with '+'\n *\n * @param address\n * @returns String\n */\n static cleanAddress(address) {\n if (address) {\n if (typeof address === 'string') {\n return address.replace(/([+\\s]+$)/g, '').replace(/(\\s)/g, '+');\n }\n }\n return '';\n }\n\n /**\n * Rounds the distance\n *\n * @return Boolean | String\n */\n getDistance() {\n const { location } = this.props;\n const distance = location.Distance;\n\n if (distance === -1) {\n return false;\n }\n\n return distance.toFixed(2);\n }\n\n /**\n * Gets the daddr string for google maps directions\n * @returns {string}\n */\n getDaddr() {\n const { location } = this.props;\n let daddr = '';\n\n if (location.Address) {\n daddr += `${location.Address}+`;\n }\n\n if (location.Address2) {\n daddr += `${location.Address2}+`;\n }\n\n if (location.City) {\n daddr += `${location.City}+`;\n }\n\n if (location.State) {\n daddr += `${location.State}+`;\n }\n\n if (location.PostalCode) {\n daddr += location.PostalCode;\n }\n\n return Location.cleanAddress(daddr);\n }\n\n /**\n * Gets the class for the rendered component\n * @return {string}\n */\n getClassName() {\n const {\n index, current,\n } = this.props;\n let className = 'list-location';\n // if it should be focused\n if (current) {\n className += ' focus';\n }\n // if it is even (needed because the list acts odd with :nth-child)\n if (index % 2 === 0) {\n className += ' even';\n }\n // if it is first (needed because the list acts odd with :nth-child)\n if (index === 0) {\n className += ' first';\n }\n return className;\n }\n\n /**\n * renders the component\n * @returns {XML}\n */\n render() {\n const {\n location, index, search, template, unit, directionsText, emailText, websiteText, onClick,\n } = this.props;\n const htmlToReactParser = new HtmlToReactParser();\n\n const loc = {\n ...location,\n Distance: this.getDistance(),\n DirectionsLink: `http://maps.google.com/maps?saddr=${Location.cleanAddress(search)}&daddr=${this.getDaddr()}`,\n DirectionsText: directionsText,\n EmailText: emailText,\n WebsiteText: websiteText,\n Unit: unit,\n Number: index + 1,\n };\n\n const id = `loc-${location.ID}`;\n const className = this.getClassName();\n\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events\n onClick(location.ID)}\n role=\"listitem\"\n >\n {htmlToReactParser.parse(template(loc))}\n
\n );\n }\n}\n\n/**\n * defines the prop types\n * @type {{location, index: *}}\n */\nLocation.propTypes = {\n location: PropTypes.shape({\n Title: PropTypes.string,\n Address: PropTypes.string,\n Address2: PropTypes.string,\n City: PropTypes.string,\n State: PropTypes.string,\n PostalCode: PropTypes.string,\n Website: PropTypes.string,\n Phone: PropTypes.string,\n Email: PropTypes.string,\n Distance: PropTypes.number,\n }).isRequired,\n index: PropTypes.number.isRequired,\n current: PropTypes.bool.isRequired,\n search: PropTypes.bool.isRequired,\n unit: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n template: PropTypes.func.isRequired,\n};\n\n/**\n * Exports the Location components\n */\nexport default Location;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/Location.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport PaginationEnd from 'components/list/PaginationEnd';\n\n/**\n * The Pagination component.\n * Renders the pagination for the location list.\n */\nclass Pagination extends Component {\n /**\n * Gets the last possible page. If there are 13 items with a page limit of 5 there will be 3 pages.\n * @return {number}\n */\n getLastPage() {\n const { count, defaultLimit } = this.props;\n const lim = defaultLimit;\n\n return Math.ceil(count / defaultLimit);\n }\n\n /**\n * Gets all the page numbers that should be shown\n * @return {number[]}\n */\n getPageNumbers() {\n const { page } = this.props;\n const lastPage = this.getLastPage();\n const range = 2;\n\n let rangeStart = page - range;\n let rangeEnd = page + range;\n\n if (rangeEnd > lastPage) {\n rangeEnd = lastPage;\n rangeStart = lastPage - range * 2;\n rangeStart = rangeStart < 1 ? 1 : rangeStart;\n }\n\n if (rangeStart <= 1) {\n rangeStart = 1;\n rangeEnd = Math.min(range * 2 + 1, lastPage);\n }\n\n // from https://stackoverflow.com/a/33457557\n return Array(rangeEnd - rangeStart + 1).fill().map((_, index) => rangeStart + index);\n }\n\n /**\n * Renders the page links\n */\n renderPageLinks() {\n const { page, goToPage } = this.props;\n const numbers = this.getPageNumbers();\n\n return numbers.map((num) => {\n if (page === num) {\n return (\n
  • \n \n {num}\n ({ss.i18n._t('Locator.CURRENT', 'Current')})\n \n
  • \n );\n } else {\n return (\n
  • goToPage(num)}>\n {num}\n
  • \n );\n }\n });\n }\n\n /**\n * Renders the Pagination component\n * @return {*}\n */\n render() {\n const { count, page, goToPage } = this.props;\n const previousClasses = page <= 1 ? \"page-item disabled\" : \"page-item\";\n const previousAction = page <= 1 ? () => {} : () => goToPage(page - 1);\n\n const nextClasses = page >= this.getLastPage() ? \"page-item disabled\" : \"page-item\";\n const nextAction = page >= this.getLastPage() ? () => {} : () => goToPage(page + 1);\n\n\n if (this.getPageNumbers().length > 1) {\n return (\n \n \n {this.renderPageLinks()}\n \n \n );\n }\n return null;\n }\n}\n\nPagination.propTypes = {\n page: PropTypes.number.isRequired,\n count: PropTypes.number.isRequired,\n defaultLimit: PropTypes.number.isRequired,\n goToPage: PropTypes.func.isRequired,\n};\n\nexport default Pagination;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/Pagination.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * The Pagination component.\n * Renders the pagination for the location list.\n */\nclass PaginationEnd extends Component {\n render() {\n const { text, label, classes, action } = this.props;\n return (\n
  • \n \n {text}\n {label}\n \n
  • \n );\n }\n}\n\nPaginationEnd.propTypes = {\n text: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n classes: PropTypes.string.isRequired,\n action: PropTypes.func.isRequired,\n}\n\nexport default PaginationEnd;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/PaginationEnd.jsx"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./client/src/js/actions/listActions.js","webpack:///./client/src/js/renderComponent.jsx","webpack:///./client/src/js/actions/locationActions.js","webpack:///./client/src/js/actions/mapActions.js","webpack:///./client/src/js/actions/ActionTypes.js","webpack:///./client/src/js/boot/index.jsx","webpack:///./client/src/js/reducers/index.js","webpack:///./client/src/js/reducers/searchReducer.js","webpack:///./client/src/js/reducers/mapReducer.js","webpack:///./client/src/js/reducers/settingsReducer.js","webpack:///./client/src/js/reducers/locationReducer.js","webpack:///./client/src/js/reducers/listReducer.js","webpack:///./client/src/js/components/Loading.jsx","webpack:///./client/src/js/actions/settingsActions.js","webpack:///./client/src/js/components/search/SearchBar.jsx","webpack:///./client/src/js/actions/searchActions.js","webpack:///./client/src/js/components/search/RadiusDropDown.jsx","webpack:///./client/src/js/components/search/CategoryDropDown.jsx","webpack:///./client/src/js/components/map/MapContainer.jsx","webpack:///./client/src/js/components/map/Map.jsx","webpack:///./client/src/js/components/list/List.jsx","webpack:///./client/src/js/components/list/Location.jsx","webpack:///./client/src/js/components/list/Pagination.jsx","webpack:///./client/src/js/components/list/PaginationEnd.jsx"],"names":["changePage","page","type","ActionType","PAGE_CHANGE","payload","renderComponent","component","store","selector","element","document","querySelector","ReactDom","render","fetchLocations","params","address","radius","category","FETCH_LOCATIONS","axios","get","window","dynamic_locator","dataLocation","openMarker","closeMarker","target","MARKER_CLICK","MARKER_CLOSE","ActionTypes","FETCH_INFO_WINDOW","FETCH_LIST","FETCH_MAP_STYLE","SEARCH","FETCH_LOCATIONS_LOADING","FETCH_LOCATIONS_SUCCESS","FETCH_LOCATIONS_ERROR","FETCH_INFO_WINDOW_LOADING","FETCH_INFO_WINDOW_SUCCESS","FETCH_INFO_WINDOW_ERROR","FETCH_LIST_LOADING","FETCH_LIST_SUCCESS","FETCH_LIST_ERROR","FETCH_MAP_STYLE_LOADING","FETCH_MAP_STYLE_SUCCESS","FETCH_MAP_STYLE_ERROR","composedMiddleware","promiseTypeSuffixes","thunk","__REDUX_DEVTOOLS_EXTENSION__","f","reducers","addEventListener","search","map","settings","locations","list","reducer","defaultState","Object","assign","url","parse","location","href","query","state","action","current","showCurrent","isLoading","center","Lat","Lng","ID","undefined","data","loadedSettings","loadedWindowTemplate","loadedListTemplate","loadedMapStyle","infoWindowTemplate","listTemplate","mapStyle","markerImagePath","unit","defaultCenter","lat","lng","autocomplete","defaultLimit","emailText","ss","i18n","_t","websiteText","directionsText","unitText","clusters","limit","radii","categories","didSettingsLoad","loaded","handlebars","compile","Number","isNaN","mapStateToProps","Loading","dispatch","props","nextProps","Component","propTypes","PropTypes","bool","isRequired","fetchInfoWindow","fetchList","fetchMapStyle","loc","path","infoWindowTemplatePath","protocol","host","listTemplatePath","mapStylePath","SearchBar","obj","vars","keys","forEach","key","value","replace","name","getElementsByName","searchAddress","handleSubmit","bind","handleAddressChange","navigator","geolocation","success","position","coords","latitude","longitude","geocoder","google","maps","Geocoder","geocode","results","status","formatted_address","error","getCurrentPosition","event","String","preventDefault","getDropdownValue","newurl","pathname","objToUrl","history","pushState","inputProps","onChange","placeholder","cssClasses","root","input","options","LatLng","Math","max","getAddressInput","faSearch","string","oneOfType","number","object","array","shape","func","inputs","RadiusDropDown","values","indexOf","length","defaultValue","mappedRadii","React","CategoryDropDown","Name","filter","cat","toString","mappedCategories","MapContainer","handleMarkerClick","handleMarkerClose","template","markers","htmlToReactParser","HtmlToReactParser","i","EmailText","WebsiteText","defaultAnimation","defaultIcon","infoContent","find","index","findIndex","l","ceil","getElementById","scrollContainer","getElementsByClassName","minDuration","maxDuration","cancelOnUserAction","height","getMarkers","defaultProps","Map","marker","onMarkerClick","onMarkerClose","opts","defaultOptions","styles","List","handleLocationClick","handlePaginateClick","realPage","lim","slice","renderList","Location","distance","Distance","toFixed","daddr","Address","Address2","City","State","PostalCode","cleanAddress","className","onClick","getDistance","DirectionsLink","getDaddr","DirectionsText","Unit","id","getClassName","Title","Website","Phone","Email","Pagination","count","lastPage","getLastPage","range","rangeStart","rangeEnd","min","Array","fill","_","goToPage","numbers","getPageNumbers","num","previousClasses","previousAction","nextClasses","nextAction","fromCharCode","renderPageLinks","PaginationEnd","text","label","classes"],"mappings":"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","file":"client/dist/js/main.js","sourcesContent":["import ActionType from 'actions/ActionTypes';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function changePage(page) {\n return {\n type: ActionType.PAGE_CHANGE,\n payload: page,\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/listActions.js","/* global window, document */\nimport React from 'react';\nimport ReactDom from \"react-dom\";\nimport { Provider } from 'react-redux';\n\n// renders a component to a selector\nexport default function renderComponent(component, store, selector) {\n // only the first container is used, can change to querySelectorAll() for multiple instances\n const element = document.querySelector(selector);\n if (element) {\n ReactDom.render(\n \n {component}\n \n , element\n );\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/renderComponent.jsx","/* global window */\n/* eslint no-param-reassign: [\"error\", { \"props\": false }] */\nimport axios from 'axios';\n\nimport ActionType from 'actions/ActionTypes';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function fetchLocations(params) {\n // removed unused query variables\n if (params.address === '') {\n delete params.address;\n }\n\n if (params.radius === -1) {\n delete params.radius;\n }\n\n if (params.category === '') {\n delete params.category;\n }\n\n return {\n type: ActionType.FETCH_LOCATIONS,\n payload: axios.get(\n `${window.dynamic_locator.dataLocation}`,\n {\n // same as \"params: params\"\n params,\n },\n ),\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/locationActions.js","import ActionType from 'actions/ActionTypes';\n\nexport function openMarker(target) {\n return {\n type: ActionType.MARKER_CLICK,\n payload: target,\n };\n}\n\nexport function closeMarker() {\n return {\n type: ActionType.MARKER_CLOSE,\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/mapActions.js","/**\n * List of action types.\n * Could just be strings, but I feel better when referencing a constant that doesn't change without erroring.\n */\nconst ActionTypes = {\n // location fetching\n FETCH_LOCATIONS: 'FETCH_LOCATIONS',\n\n // settings fetching\n FETCH_INFO_WINDOW: 'FETCH_INFO_WINDOW',\n FETCH_LIST: 'FETCH_LIST',\n FETCH_MAP_STYLE: 'FETCH_MAP_STYLE',\n\n // Search action\n SEARCH: 'SEARCH',\n\n // Marker actions\n MARKER_CLICK: 'MARKER_CLICK',\n MARKER_CLOSE: 'MARKER_CLOSE',\n\n PAGE_CHANGE: 'PAGE_CHANGE',\n};\n\n// uses the base FETCH_LOCATIONS to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_LOCATIONS_LOADING = `${ActionTypes.FETCH_LOCATIONS}_LOADING`;\nActionTypes.FETCH_LOCATIONS_SUCCESS = `${ActionTypes.FETCH_LOCATIONS}_SUCCESS`;\nActionTypes.FETCH_LOCATIONS_ERROR = `${ActionTypes.FETCH_LOCATIONS}_ERROR`;\n\n// uses the base FETCH_INFO_WINDOW to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_INFO_WINDOW_LOADING = `${ActionTypes.FETCH_INFO_WINDOW}_LOADING`;\nActionTypes.FETCH_INFO_WINDOW_SUCCESS = `${ActionTypes.FETCH_INFO_WINDOW}_SUCCESS`;\nActionTypes.FETCH_INFO_WINDOW_ERROR = `${ActionTypes.FETCH_INFO_WINDOW}_ERROR`;\n\n// uses the base FETCH_LIST to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_LIST_LOADING = `${ActionTypes.FETCH_LIST}_LOADING`;\nActionTypes.FETCH_LIST_SUCCESS = `${ActionTypes.FETCH_LIST}_SUCCESS`;\nActionTypes.FETCH_LIST_ERROR = `${ActionTypes.FETCH_LIST}_ERROR`;\n\n// uses the base FETCH_MAP_STYLE to construct resulting actions (can't do this in the actual const)\nActionTypes.FETCH_MAP_STYLE_LOADING = `${ActionTypes.FETCH_MAP_STYLE}_LOADING`;\nActionTypes.FETCH_MAP_STYLE_SUCCESS = `${ActionTypes.FETCH_MAP_STYLE}_SUCCESS`;\nActionTypes.FETCH_MAP_STYLE_ERROR = `${ActionTypes.FETCH_MAP_STYLE}_ERROR`;\n\nexport default ActionTypes;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/ActionTypes.js","/* global window, document */\nimport React from 'react';\nimport ReactDom from 'react-dom';\n\nimport {\n createStore,\n applyMiddleware,\n compose,\n} from 'redux';\nimport { Provider } from 'react-redux';\n\nimport thunk from 'redux-thunk';\nimport promise from 'redux-promise-middleware';\n\nimport reducers from 'reducers';\nimport renderComponent from 'renderComponent';\n\nimport Loading from 'components/Loading';\n\n/**\n * Writes deeply nested function transformations without the rightward drift of the code.\n * [redux compose]{@link http://redux.js.org/docs/api/compose.html}\n * @returns {Function}\n */\nfunction composedMiddleware() {\n return compose(\n applyMiddleware(promise({\n // new suffixes\n promiseTypeSuffixes: ['LOADING', 'SUCCESS', 'ERROR'],\n }), thunk),\n // eslint-disable-next-line no-underscore-dangle\n (typeof window.__REDUX_DEVTOOLS_EXTENSION__ !== 'undefined') ? window.__REDUX_DEVTOOLS_EXTENSION__() : f => f,\n );\n}\n\n// creates the redux store with reducers and middleware\nconst store = createStore(reducers, composedMiddleware());\n\n// defers rendering until after content is loaded (only needed for settings)\ndocument.addEventListener('DOMContentLoaded', () => {\n // renders the locator\n renderComponent(, store, '.locator-loading');\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/boot/index.jsx","import { combineReducers } from 'redux';\n\nimport search from 'reducers/searchReducer';\nimport map from 'reducers/mapReducer';\nimport settings from 'reducers/settingsReducer';\nimport locations from 'reducers/locationReducer';\nimport list from 'reducers/listReducer';\n\n/**\n * Combines the reducers.\n *\n * uses shorthand to set key/values\n * \"search\" is short for \"search: search\"\n *\n * @type {Reducer}\n */\nconst reducers = combineReducers({\n search,\n map,\n settings,\n locations,\n list,\n});\n\nexport default reducers;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/index.js","/* global window */\nimport ActionType from 'actions/ActionTypes';\nimport url from 'url';\n\nconst defaultState = Object.assign({\n address: '',\n radius: -1,\n category: '',\n}, url.parse(window.location.href, true).query);\n\ndelete defaultState.page;\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.SEARCH:\n return {\n ...state,\n address: action.payload.address,\n radius: action.payload.radius,\n category: action.payload.category,\n };\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/searchReducer.js","import ActionType from 'actions/ActionTypes';\n\nconst defaultState = {\n current: -1,\n showCurrent: false,\n isLoading: true,\n // center is invalid, can't be shown on map\n // see the Map component (Map.jsx)\n center: {\n Lat: 91.0,\n Lng: 181.0,\n },\n};\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.MARKER_CLICK:\n return {\n ...state,\n current: action.payload.ID,\n showCurrent: true,\n center: {\n Lat: action.payload.Lat,\n Lng: action.payload.Lng,\n },\n };\n\n case ActionType.MARKER_CLOSE:\n return {\n ...state,\n showCurrent: false,\n center: defaultState.center,\n };\n\n case ActionType.SEARCH:\n return {\n ...state,\n current: -1,\n showCurrent: false,\n };\n\n case ActionType.FETCH_LOCATIONS_LOADING:\n return {\n ...state,\n isLoading: true,\n };\n\n case ActionType.FETCH_LOCATIONS_SUCCESS: {\n const center = action.payload !== undefined && action.payload.data.center !== undefined ?\n action.payload.data.center :\n defaultState.center;\n return {\n ...state,\n isLoading: false,\n center,\n };\n }\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/mapReducer.js","/* global dynamic_locator, ss */\nimport handlebars from 'handlebars';\nimport ActionType from 'actions/ActionTypes';\n\nconst defaultState = {\n loadedSettings: false,\n loadedWindowTemplate: false,\n loadedListTemplate: false,\n loadedMapStyle: false,\n\n infoWindowTemplate: null,\n listTemplate: null,\n mapStyle: null,\n markerImagePath: false,\n\n unit: 'm',\n\n defaultCenter: {\n lat: 0,\n lng: 0,\n },\n autocomplete: false,\n defaultLimit: 20,\n\n // eslint-disable-next-line no-underscore-dangle\n emailText: ss.i18n._t('Locator.EMAIL_TEXT', 'Email'),\n // eslint-disable-next-line no-underscore-dangle\n websiteText: ss.i18n._t('Locator.WEBSITE_TEXT', 'Website'),\n // eslint-disable-next-line no-underscore-dangle\n directionsText: ss.i18n._t('Locator.DIRECTIONS_TEXT', 'Directions'),\n};\n\n// eslint-disable-next-line no-underscore-dangle\ndefaultState.unitText = ss.i18n._t(`Locator.UNIT.${defaultState.unit}`, 'mi');\n\n/**\n * Sets up settings\n * @return {{unit, clusters, limit, radii, categories}}\n */\nfunction settings() {\n return {\n unit: dynamic_locator.unit,\n clusters: dynamic_locator.clusters,\n limit: dynamic_locator.limit,\n radii: dynamic_locator.radii,\n categories: dynamic_locator.categories,\n defaultCenter: {\n lat: dynamic_locator.defaultCenter.lat,\n lng: dynamic_locator.defaultCenter.lng,\n },\n autocomplete: dynamic_locator.autocomplete,\n markerImagePath: dynamic_locator.markerImagePath,\n // defaultLimit: dynamic_locator.defaultLimit,\n };\n}\n\nfunction didSettingsLoad(state = defaultState) {\n const { loadedListTemplate, loadedWindowTemplate, loadedMapStyle } = state;\n return loadedListTemplate === true &&\n loadedWindowTemplate === true &&\n loadedMapStyle === true;\n}\n\n/**\n * The reducer for creating a part in the store for things like radius and categories\n */\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.FETCH_INFO_WINDOW_SUCCESS: {\n const { data } = action.payload;\n const loaded = didSettingsLoad({\n ...state,\n loadedWindowTemplate: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedWindowTemplate: true,\n infoWindowTemplate: handlebars.compile(data),\n };\n }\n\n case ActionType.FETCH_LIST_SUCCESS: {\n const { data } = action.payload;\n const loaded = didSettingsLoad({\n ...state,\n loadedListTemplate: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedListTemplate: true,\n listTemplate: handlebars.compile(data),\n };\n }\n\n case ActionType.FETCH_MAP_STYLE_SUCCESS: {\n const { data } = action.payload;\n const loaded = didSettingsLoad({\n ...state,\n loadedMapStyle: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedMapStyle: true,\n mapStyle: data,\n };\n }\n\n case ActionType.FETCH_MAP_STYLE_ERROR: {\n if (action.payload === ActionType.FETCH_MAP_STYLE_ERROR) {\n const loaded = didSettingsLoad({\n ...state,\n loadedMapStyle: true,\n });\n\n return {\n ...state,\n ...settings(),\n loadedSettings: loaded,\n loadedMapStyle: true,\n };\n }\n return state;\n }\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/settingsReducer.js","import ActionType from 'actions/ActionTypes';\n\nconst defaultState = {\n locations: [],\n};\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.FETCH_LOCATIONS_SUCCESS:\n return {\n ...state,\n locations: action.payload.data.locations,\n };\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/locationReducer.js","/* global window */\nimport ActionType from 'actions/ActionTypes';\nimport url from 'url';\n\nconst { page } = url.parse(window.location.href, true).query;\nconst defaultState = {\n page: Number.isNaN(Number(page)) ? 1 : Number(page),\n};\n\nexport default function reducer(state = defaultState, action) {\n switch (action.type) {\n case ActionType.PAGE_CHANGE:\n return {\n ...state,\n page: action.payload,\n };\n\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/reducers/listReducer.js","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nimport renderComponent from 'renderComponent';\nimport { fetchLocations } from 'actions/locationActions';\nimport { fetchInfoWindow, fetchList, fetchMapStyle } from 'actions/settingsActions';\n\nimport Search from 'components/search/SearchBar';\nimport MapContainer from 'components/map/MapContainer';\nimport List from 'components/list/List';\n\n// exported for tests\nexport class Loading extends Component {\n /**\n * Called after the component mounts\n */\n componentDidMount() {\n const { dispatch } = this.props;\n dispatch(fetchInfoWindow());\n dispatch(fetchList());\n dispatch(fetchMapStyle());\n }\n\n /**\n * Should this component update\n * @param nextProps\n * @return {boolean}\n */\n shouldComponentUpdate(nextProps) {\n const { loadedSettings, isLoading } = this.props;\n return (loadedSettings !== nextProps.loadedSettings || isLoading !== nextProps.isLoading);\n }\n\n /**\n * Called after the component updates\n * @param nextProps\n */\n componentDidUpdate(nextProps) {\n const { loadedSettings, store } = this.props;\n if (loadedSettings !== nextProps.loadedSettings) {\n const {dispatch, unit, address, radius, category} = nextProps;\n dispatch(fetchLocations({\n unit,\n address,\n radius,\n category,\n }));\n }\n\n renderComponent(, store, '.locator-search');\n renderComponent(, store, '.locator-list');\n renderComponent(, store, '.locator-map');\n }\n\n render() {\n const { isLoading, loadedSettings } = this.props;\n if (isLoading || !loadedSettings) {\n return (\n
    \n
    \n
    \n Loading\n
    \n
    \n );\n }\n return (\n
    \n );\n }\n}\n\nLoading.propTypes = {\n isLoading: PropTypes.bool.isRequired,\n};\n\nexport function mapStateToProps(state) {\n return {\n isLoading: state.map.isLoading,\n\n loadedSettings: state.settings.loadedSettings,\n unit: state.settings.unit,\n address: state.search.address,\n radius: state.search.radius,\n category: state.search.category,\n };\n}\n\nexport default connect(mapStateToProps)(Loading);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/Loading.jsx","/* global window, dynamic_locator */\nimport axios from 'axios';\n\nimport ActionType from 'actions/ActionTypes';\n\nexport function fetchInfoWindow() {\n const loc = window.location;\n const path = dynamic_locator.infoWindowTemplatePath;\n\n return {\n type: ActionType.FETCH_INFO_WINDOW,\n payload: axios.get(`${loc.protocol}//${loc.host}${path}`),\n };\n}\n\nexport function fetchList() {\n const loc = window.location;\n const path = dynamic_locator.listTemplatePath;\n\n return {\n type: ActionType.FETCH_LIST,\n payload: axios.get(`${loc.protocol}//${loc.host}${path}`),\n };\n}\n\nexport function fetchMapStyle() {\n const loc = window.location;\n const path = dynamic_locator.mapStylePath;\n\n // so we don't try to fetch the home page of the site\n if (path === '') {\n return {\n type: ActionType.FETCH_MAP_STYLE_ERROR,\n payload: ActionType.FETCH_MAP_STYLE_ERROR,\n };\n }\n\n return {\n type: ActionType.FETCH_MAP_STYLE,\n payload: axios.get(`${loc.protocol}//${loc.host}/${path}`),\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/settingsActions.js","/* global window, document */\nimport React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport FontAwesomeIcon from '@fortawesome/react-fontawesome';\nimport {faCheckCircle, faSearch} from '@fortawesome/fontawesome-free-solid';\nimport PlacesAutocomplete from 'react-places-autocomplete';\n\nimport {fetchLocations} from 'actions/locationActions';\nimport {search} from 'actions/searchActions';\nimport {changePage} from 'actions/listActions';\nimport RadiusDropDown from 'components/search/RadiusDropDown';\nimport CategoryDropDown from 'components/search/CategoryDropDown';\n\nexport class SearchBar extends Component {\n /**\n * Turns a javascript object into url params.\n * Skips keys without values\n *\n * @param obj\n * @return {string}\n */\n static objToUrl(obj) {\n let vars = '';\n\n Object.keys(obj).forEach((key) => {\n const value = obj[key];\n\n // don't add it if its blank\n if (value !== undefined && value !== null && value !== '') {\n vars += `${key}=${value}&`;\n }\n });\n\n // replaces trailing spaces and '&' symbols then replaces spaces with +\n return vars.replace(/([&\\s]+$)/g, '').replace(/(\\s)/g, '+');\n }\n\n static getDropdownValue(name) {\n if (document.getElementsByName(name)[0] !== undefined) {\n return document.getElementsByName(name)[0].value;\n }\n return '';\n }\n\n /**\n * Used to create the SearchBar.\n * needed to allow use of this keyword in handler.\n * @param props\n */\n constructor(props) {\n super(props);\n\n this.searchAddress = props.address;\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleAddressChange = this.handleAddressChange.bind(this);\n }\n\n componentDidMount() {\n if (!navigator.geolocation) {\n return;\n }\n\n const success = position => {\n const {latitude, longitude} = position.coords;\n const geocoder = new google.maps.Geocoder;\n\n geocoder.geocode({\n location: {\n lat: latitude,\n lng: longitude,\n }\n }, (results, status) => {\n if (status === 'OK') {\n if (results[0]) {\n this.handleSubmit(results[0].formatted_address);\n }\n }\n });\n };\n\n const error = () => {\n };\n\n navigator.geolocation.getCurrentPosition(success, error);\n }\n\n /**\n * 'Submits' form. Really just fires state change and changes the url.\n */\n handleSubmit(event) {\n if (typeof event === 'string' || event instanceof String) {\n this.searchAddress = event;\n document.getElementsByName('address')[0].value = event;\n } else {\n // stops the submit from reloading\n event.preventDefault();\n }\n\n const address = document.getElementsByName('address')[0].value;\n const radius = SearchBar.getDropdownValue('radius');\n const category = SearchBar.getDropdownValue('category');\n\n const params = {\n address,\n radius,\n category,\n };\n\n // selects dispatch and unit from this.props.\n // const dispatch = this.props.dispatch; const unit = this.props.unit;\n const {dispatch, unit} = this.props;\n\n // dispatches search (updates search values)\n dispatch(search({\n address,\n radius,\n category,\n }));\n\n // dispatches fetch locations (gets the locations)\n dispatch(fetchLocations({\n ...params,\n unit,\n }));\n\n dispatch(changePage(1));\n\n // changes the url for the window and adds it to the browser history(no redirect)\n const loc = window.location;\n const newurl = `${loc.protocol}//${loc.host}${loc.pathname}?${SearchBar.objToUrl(params)}`;\n window.history.pushState({\n path: newurl,\n }, '', newurl);\n }\n\n handleAddressChange(searchAddress) {\n this.searchAddress = searchAddress;\n }\n\n /**\n * Gets the address input.\n * @return {*}\n */\n getAddressInput() {\n const {address, radii, center, autocomplete} = this.props;\n if (autocomplete === true) {\n const inputProps = {\n value: this.searchAddress,\n onChange: this.handleAddressChange,\n placeholder: ss.i18n._t('Locator.ADDRESS_FIELD', 'Address or zip code'),\n name: 'address',\n };\n const cssClasses = {\n root: 'form-control autocomplete-root',\n input: 'form-control',\n };\n const options = {\n location: new google.maps.LatLng(center.lat, center.lng),\n radius: Math.max(...radii),\n };\n return ();\n }\n return ();\n }\n\n /**\n * Renders the component.\n * @returns {XML}\n */\n render() {\n const {\n address, category, radii, categories, unit, autocomplete\n } = this.props;\n let {radius} = this.props;\n if (typeof radius === 'string') {\n radius = Number(radius);\n }\n\n return (\n
    \n {/* not a fieldset because no flexbox */}\n
    \n
    \n \n {this.getAddressInput()}\n
    \n \n \n
    \n \n \n {ss.i18n._t('Locator.SEARCH_BUTTON', 'Search')}\n \n
    \n
    \n
    \n );\n }\n}\n\nSearchBar.propTypes = {\n address: PropTypes.string.isRequired,\n radius: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n ]).isRequired,\n category: PropTypes.string.isRequired,\n\n // eslint-disable-next-line react/forbid-prop-types\n radii: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n categories: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n unit: PropTypes.string.isRequired,\n autocomplete: PropTypes.bool.isRequired,\n center: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n dispatch: PropTypes.func.isRequired,\n};\n\n/**\n * Takes variables/functions from the state and assigns them to variables/functions in the components props.\n *\n * @param state\n * @returns {{address, radius}}\n */\nexport function mapStateToProps(state) {\n return {\n // the defaults - for when it gets loaded from the url\n address: state.search.address,\n radius: state.search.radius,\n category: state.search.category,\n\n // the options\n radii: state.settings.radii,\n categories: state.settings.categories,\n\n // other\n unit: state.settings.unit,\n autocomplete: state.settings.autocomplete,\n center: state.settings.defaultCenter,\n };\n}\n\nexport default connect(mapStateToProps)(SearchBar);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/search/SearchBar.jsx","import ActionType from 'actions/ActionTypes';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function search(inputs = {}) {\n return {\n type: ActionType.SEARCH,\n payload: inputs,\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/actions/searchActions.js","import React from 'react';\nimport PropTypes from 'prop-types';\n\nclass RadiusDropDown extends React.Component {\n /**\n * Maps the radii into options for the drop down.\n * @returns {Array}\n */\n mappedRadii() {\n const { radii, unit } = this.props;\n\n return Object.keys(radii).map(key => (\n \n {radii[key]} {unit}\n \n ));\n }\n\n /**\n * Gets the default value for the dropdown\n * @return {*}\n */\n defaultValue() {\n const { radius, radii } = this.props;\n\n // if the radius exists in the dropdown\n const values = Object.keys(radii).map(key => radii[key]);\n if (values.indexOf(radius) > -1) {\n return radius;\n }\n return '';\n }\n\n /**\n * Outputs the radius drop down.\n * @returns {*}\n */\n render() {\n const { radii } = this.props;\n if (radii !== undefined && Object.keys(radii).length !== 0) {\n return (\n
    \n \n \n \n {this.mappedRadii()}\n \n
    \n );\n }\n return null;\n }\n}\n\nRadiusDropDown.propTypes = {\n radius: PropTypes.number.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n radii: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n unit: PropTypes.string.isRequired,\n};\n\nexport default RadiusDropDown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/search/RadiusDropDown.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass CategoryDropDown extends Component {\n /**\n * Maps the radii into options for the drop down.\n * @returns {Array}\n */\n mappedCategories() {\n const { categories } = this.props;\n\n return categories.map(category => (\n \n {category.Name}\n \n ));\n }\n\n /**\n * Gets the default value for the dropdown\n * @return {*}\n */\n defaultValue() {\n const { category, categories } = this.props;\n // if the category exists in the dropdown\n if (categories.filter(\n cat => cat.ID === Number(category),\n ).length) {\n return category.toString();\n }\n return '';\n }\n\n /**\n * Outputs the radius drop down.\n * @returns {*}\n */\n render() {\n const { categories } = this.props;\n if (categories !== undefined && Object.keys(categories).length !== 0) {\n return (\n
    \n \n \n \n {this.mappedCategories()}\n \n
    \n );\n }\n return null;\n }\n}\n\nCategoryDropDown.propTypes = {\n category: PropTypes.string.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n categories: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.array,\n ]).isRequired,\n};\n\nexport default CategoryDropDown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/search/CategoryDropDown.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Parser as HtmlToReactParser } from 'html-to-react';\nimport scrollToElement from 'animated-scroll-to';\n\nimport { openMarker, closeMarker } from 'actions/mapActions';\nimport { changePage } from 'actions/listActions';\nimport Map from 'components/map/Map';\n\n/**\n * The MapArea component.\n * Renders the map.\n */\nexport class MapContainer extends Component {\n /**\n * Used to create the Map.\n * needed to allow use of this keyword in handler.\n * @param props\n */\n constructor(props) {\n super(props);\n this.handleMarkerClick = this.handleMarkerClick.bind(this);\n this.handleMarkerClose = this.handleMarkerClose.bind(this);\n }\n\n /**\n * Generates an array of marker objects to use on the map\n */\n getMarkers() {\n const { locations, template, emailText, websiteText, markerImagePath } = this.props;\n const markers = [];\n\n const htmlToReactParser = new HtmlToReactParser();\n\n let i;\n // eslint-disable-next-line no-plusplus\n for (i = 0; i < locations.length; i++) {\n const location = locations[i];\n const { Lat, Lng } = location;\n const loc = {\n ...location,\n EmailText: emailText,\n WebsiteText: websiteText,\n }\n markers[markers.length] = {\n position: {\n lat: Number(Lat),\n lng: Number(Lng),\n },\n key: location.ID,\n defaultAnimation: 2,\n defaultIcon: markerImagePath,\n infoContent: (\n
    \n {htmlToReactParser.parse(template(loc))}\n
    \n ),\n };\n }\n return markers;\n }\n\n /**\n * Fires and event for clicking a marker\n * @param target The marker that was clicked\n */\n handleMarkerClick(target) {\n const { dispatch, locations, defaultLimit } = this.props;\n const location = locations.find(loc => loc.ID === target.key);\n dispatch(openMarker(location));\n\n // change the page\n const index = locations.findIndex(l => l.ID === target.key) + 1;\n const page = Math.ceil(index / defaultLimit);\n\n dispatch(changePage(page));\n\n // scroll to location in list\n const element = document.getElementById(`loc-${target.key}`);\n if (element !== null) {\n const scrollContainer = document.getElementsByClassName('loc-list-container')[0];\n scrollToElement(element, {\n element: scrollContainer,\n minDuration: 500,\n maxDuration: 750,\n cancelOnUserAction: false,\n });\n }\n }\n\n /**\n * Fires event for closing a marker info box\n * @param target The marker that had its info box closed\n */\n handleMarkerClose() {\n const { dispatch } = this.props;\n dispatch(closeMarker());\n }\n\n render() {\n const { current, showCurrent, clusters, center, defaultCenter, mapStyle } = this.props;\n return (\n \n \n }\n mapElement={\n
    \n }\n mapStyle={mapStyle}\n markers={this.getMarkers()}\n onMarkerClick={this.handleMarkerClick}\n onMarkerClose={this.handleMarkerClose}\n current={current}\n showCurrent={showCurrent}\n clusters={clusters}\n center={center}\n defaultCenter={defaultCenter}\n />\n \n );\n }\n}\n\n/**\n * Defines the prop types\n * @type {{locations: shim, dispatch: *, current: *, showCurrent: *, clusters: *, template: *, mapStyle: shim, center: (shim|*), defaultCenter: (shim|*)}}\n */\nMapContainer.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n locations: PropTypes.array,\n dispatch: PropTypes.func.isRequired,\n current: PropTypes.number.isRequired,\n showCurrent: PropTypes.bool.isRequired,\n clusters: PropTypes.bool.isRequired,\n template: PropTypes.func.isRequired,\n mapStyle: PropTypes.oneOfType([\n () => {return null;},\n PropTypes.object,\n ]),\n markerImagePath: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.string,\n ]).isRequired,\n center: PropTypes.shape({\n Lat: PropTypes.number.isRequired,\n Lng: PropTypes.number.isRequired,\n }).isRequired,\n defaultCenter: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n};\n\n/**\n * Defines the default values of the props\n * @type {{locations: Array, mapStyle: null}}\n */\nMapContainer.defaultProps = {\n locations: [],\n mapStyle: null,\n};\n\n/**\n * Maps that state to props\n * @param state\n * @returns {{current}}\n */\nexport function mapStateToProps(state) {\n return {\n current: state.map.current,\n showCurrent: state.map.showCurrent,\n clusters: state.settings.clusters,\n template: state.settings.infoWindowTemplate,\n mapStyle: state.settings.mapStyle,\n markerImagePath: state.settings.markerImagePath,\n locations: state.locations.locations,\n center: state.map.center,\n defaultCenter: state.settings.defaultCenter,\n\n defaultLimit: state.settings.defaultLimit,\n emailText: state.settings.emailText,\n websiteText: state.settings.websiteText,\n };\n}\n\nexport default connect(mapStateToProps)(MapContainer);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/map/MapContainer.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withGoogleMap, GoogleMap, Marker } from 'react-google-maps';\nimport MarkerClusterer from 'react-google-maps/lib/components/addons/MarkerClusterer';\nimport InfoBox from 'react-google-maps/lib/components/addons/InfoBox';\n\n/**\n * Renders every marker\n *\n * @param props\n * @return {Array}\n */\nexport function markers(props) {\n return props.markers.map(marker => (\n props.onMarkerClick(marker)}\n >\n {props.current === marker.key && props.showCurrent && (\n props.onMarkerClose()}>\n
    {marker.infoContent}
    \n
    \n )}\n \n ));\n}\n\n/**\n * Renders the map, with all the markers\n *\n * @param props\n * @return {XML}\n * @constructor\n */\nexport function Map(props) {\n // we don't want a center if it is invalid\n const opts = {};\n if (props.center.Lat !== 91 && props.center.Lng !== 181) {\n opts.center = {\n lat: props.center.Lat,\n lng: props.center.Lng,\n }\n }\n\n const defaultOptions = {};\n if (props.mapStyle !== null) {\n defaultOptions.styles = props.mapStyle;\n }\n\n return (\n \n {props.clusters === true ? \n {markers(props)}\n :\n markers(props)}\n \n );\n}\n\n/**\n *\n * @type {{clusters: *, mapStyle: shim, center: (shim|*), defaultCenter: (shim|*)}}\n */\nMap.propTypes = {\n clusters: PropTypes.bool.isRequired,\n mapStyle: PropTypes.oneOfType([\n () => {return null;},\n PropTypes.object\n ]),\n center: PropTypes.shape({\n Lat: PropTypes.number.isRequired,\n Lng: PropTypes.number.isRequired,\n }).isRequired,\n defaultCenter: PropTypes.shape({\n lat: PropTypes.number.isRequired,\n lng: PropTypes.number.isRequired,\n }).isRequired,\n};\n\n/**\n * Defines the default values of the props\n * @type {{mapStyle: null}}\n */\nMap.defaultProps = {\n mapStyle: null,\n};\n\nexport default withGoogleMap(Map);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/map/Map.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { AutoSizer } from 'react-virtualized';\nimport scrollToElement from 'animated-scroll-to';\n\nimport { openMarker } from 'actions/mapActions';\nimport { changePage } from 'actions/listActions';\nimport Location from 'components/list/Location';\nimport Pagination from 'components/list/Pagination';\n\n/**\n * The List component.\n * Renders the location list.\n */\nexport class List extends Component {\n /**\n * Used to create the Map.\n * needed to allow use of this keyword in handler.\n * @param props\n */\n constructor(props) {\n super(props);\n // bind actions/handlers\n this.handleLocationClick = this.handleLocationClick.bind(this);\n this.handlePaginateClick = this.handlePaginateClick.bind(this);\n }\n\n /**\n * Handles a list item click\n * @param target\n */\n handleLocationClick(target) {\n const { dispatch, locations } = this.props;\n const location = locations.find(loc => loc.ID === target);\n dispatch(openMarker(location));\n\n // scroll to location in list\n const element = document.getElementById(`loc-${target}`);\n if (element !== null) {\n const scrollContainer = document.getElementsByClassName('loc-list-container')[0];\n scrollToElement(element, {\n element: scrollContainer,\n minDuration: 500,\n maxDuration: 750,\n cancelOnUserAction: false,\n });\n }\n }\n\n /**\n * Handles a pagination item click\n * @param page\n */\n handlePaginateClick(page) {\n const { dispatch } = this.props;\n dispatch(changePage(page));\n }\n\n /**\n * Renders the list\n */\n renderList() {\n const {\n page,\n defaultLimit,\n locations,\n current,\n search,\n unit,\n unitText,\n emailText,\n websiteText,\n directionsText,\n template\n } = this.props;\n const realPage = page - 1 ? page - 1 : 0;\n // in case we want to implement a flexible limit\n const lim = defaultLimit;\n\n return locations.slice(realPage * lim, page * lim).map((location, index) => {\n return 0}\n unit={unitText}\n websiteText={websiteText}\n directionsText={directionsText}\n emailText={emailText}\n onClick={this.handleLocationClick}\n template={template}\n />\n });\n }\n\n /**\n * Renders the component\n * @returns {XML}\n */\n render() {\n const { locations, current, page, defaultLimit } = this.props;\n return (\n \n
    \n {this.renderList()}\n
    \n
      \n \n
    \n
    \n );\n }\n}\n\n/**\n * Defines the prop types\n * @type {{locations: *}}\n */\nList.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n locations: PropTypes.array,\n current: PropTypes.number,\n search: PropTypes.string,\n unit: PropTypes.string.isRequired,\n dispatch: PropTypes.func.isRequired,\n template: PropTypes.func.isRequired,\n defaultLimit: PropTypes.number.isRequired,\n page: PropTypes.number.isRequired,\n unitText: PropTypes.string.isRequired,\n directionsText: PropTypes.string.isRequired,\n emailText: PropTypes.string.isRequired,\n websiteText: PropTypes.string.isRequired,\n};\n\n/**\n * Defines the default values of the props\n * @type {{locations: {edges: Array}}}\n */\nList.defaultProps = {\n locations: [],\n current: -1,\n search: '',\n};\n\n/**\n * Maps that state to props\n * @param state\n * @returns {{current}}\n */\nexport function mapStateToProps(state) {\n return {\n current: state.map.current,\n search: state.search.address,\n unit: state.settings.unit,\n unitText: state.settings.unitText,\n directionsText: state.settings.directionsText,\n emailText: state.settings.emailText,\n websiteText: state.settings.websiteText,\n template: state.settings.listTemplate,\n locations: state.locations.locations,\n defaultLimit: state.settings.defaultLimit,\n page: state.list.page,\n };\n}\n\n\n/**\n * export the Map Component\n */\nexport default connect(mapStateToProps)(List);\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/List.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Parser as HtmlToReactParser } from 'html-to-react';\n\n/**\n * The Location component.\n * Used in the location list.\n */\nclass Location extends Component {\n /**\n * Replaces any trailing '+' and whitespace and any spaces left with '+'\n *\n * @param address\n * @returns String\n */\n static cleanAddress(address) {\n if (address) {\n if (typeof address === 'string') {\n return address.replace(/([+\\s]+$)/g, '').replace(/(\\s)/g, '+');\n }\n }\n return '';\n }\n\n /**\n * Rounds the distance\n *\n * @return Boolean | String\n */\n getDistance() {\n const { location } = this.props;\n const distance = location.Distance;\n\n if (distance === -1) {\n return false;\n }\n\n return distance.toFixed(2);\n }\n\n /**\n * Gets the daddr string for google maps directions\n * @returns {string}\n */\n getDaddr() {\n const { location } = this.props;\n let daddr = '';\n\n if (location.Address) {\n daddr += `${location.Address}+`;\n }\n\n if (location.Address2) {\n daddr += `${location.Address2}+`;\n }\n\n if (location.City) {\n daddr += `${location.City}+`;\n }\n\n if (location.State) {\n daddr += `${location.State}+`;\n }\n\n if (location.PostalCode) {\n daddr += location.PostalCode;\n }\n\n return Location.cleanAddress(daddr);\n }\n\n /**\n * Gets the class for the rendered component\n * @return {string}\n */\n getClassName() {\n const {\n index, current,\n } = this.props;\n let className = 'list-location';\n // if it should be focused\n if (current) {\n className += ' focus';\n }\n // if it is even (needed because the list acts odd with :nth-child)\n if (index % 2 === 0) {\n className += ' even';\n }\n // if it is first (needed because the list acts odd with :nth-child)\n if (index === 0) {\n className += ' first';\n }\n return className;\n }\n\n /**\n * renders the component\n * @returns {XML}\n */\n render() {\n const {\n location, index, search, template, unit, directionsText, emailText, websiteText, onClick,\n } = this.props;\n const htmlToReactParser = new HtmlToReactParser();\n\n const loc = {\n ...location,\n Distance: this.getDistance(),\n DirectionsLink: `http://maps.google.com/maps?saddr=${Location.cleanAddress(search)}&daddr=${this.getDaddr()}`,\n DirectionsText: directionsText,\n EmailText: emailText,\n WebsiteText: websiteText,\n Unit: unit,\n Number: index + 1,\n };\n\n const id = `loc-${location.ID}`;\n const className = this.getClassName();\n\n return (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events\n onClick(location.ID)}\n role=\"listitem\"\n >\n {htmlToReactParser.parse(template(loc))}\n
    \n );\n }\n}\n\n/**\n * defines the prop types\n * @type {{location, index: *}}\n */\nLocation.propTypes = {\n location: PropTypes.shape({\n Title: PropTypes.string,\n Address: PropTypes.string,\n Address2: PropTypes.string,\n City: PropTypes.string,\n State: PropTypes.string,\n PostalCode: PropTypes.string,\n Website: PropTypes.string,\n Phone: PropTypes.string,\n Email: PropTypes.string,\n Distance: PropTypes.number,\n }).isRequired,\n index: PropTypes.number.isRequired,\n current: PropTypes.bool.isRequired,\n search: PropTypes.bool.isRequired,\n unit: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n template: PropTypes.func.isRequired,\n};\n\n/**\n * Exports the Location components\n */\nexport default Location;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/Location.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport PaginationEnd from 'components/list/PaginationEnd';\n\n/**\n * The Pagination component.\n * Renders the pagination for the location list.\n */\nclass Pagination extends Component {\n /**\n * Gets the last possible page. If there are 13 items with a page limit of 5 there will be 3 pages.\n * @return {number}\n */\n getLastPage() {\n const { count, defaultLimit } = this.props;\n const lim = defaultLimit;\n\n return Math.ceil(count / defaultLimit);\n }\n\n /**\n * Gets all the page numbers that should be shown\n * @return {number[]}\n */\n getPageNumbers() {\n const { page } = this.props;\n const lastPage = this.getLastPage();\n const range = 2;\n\n let rangeStart = page - range;\n let rangeEnd = page + range;\n\n if (rangeEnd > lastPage) {\n rangeEnd = lastPage;\n rangeStart = lastPage - range * 2;\n rangeStart = rangeStart < 1 ? 1 : rangeStart;\n }\n\n if (rangeStart <= 1) {\n rangeStart = 1;\n rangeEnd = Math.min(range * 2 + 1, lastPage);\n }\n\n // from https://stackoverflow.com/a/33457557\n return Array(rangeEnd - rangeStart + 1).fill().map((_, index) => rangeStart + index);\n }\n\n /**\n * Renders the page links\n */\n renderPageLinks() {\n const { page, goToPage } = this.props;\n const numbers = this.getPageNumbers();\n\n return numbers.map((num) => {\n if (page === num) {\n return (\n
  • \n \n {num}\n ({ss.i18n._t('Locator.CURRENT', 'Current')})\n \n
  • \n );\n } else {\n return (\n
  • goToPage(num)}>\n {num}\n
  • \n );\n }\n });\n }\n\n /**\n * Renders the Pagination component\n * @return {*}\n */\n render() {\n const { count, page, goToPage } = this.props;\n const previousClasses = page <= 1 ? \"page-item disabled\" : \"page-item\";\n const previousAction = page <= 1 ? () => {} : () => goToPage(page - 1);\n\n const nextClasses = page >= this.getLastPage() ? \"page-item disabled\" : \"page-item\";\n const nextAction = page >= this.getLastPage() ? () => {} : () => goToPage(page + 1);\n\n\n if (this.getPageNumbers().length > 1) {\n return (\n \n \n {this.renderPageLinks()}\n \n \n );\n }\n return null;\n }\n}\n\nPagination.propTypes = {\n page: PropTypes.number.isRequired,\n count: PropTypes.number.isRequired,\n defaultLimit: PropTypes.number.isRequired,\n goToPage: PropTypes.func.isRequired,\n};\n\nexport default Pagination;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/Pagination.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * The Pagination component.\n * Renders the pagination for the location list.\n */\nclass PaginationEnd extends Component {\n render() {\n const { text, label, classes, action } = this.props;\n return (\n
  • \n \n {text}\n {label}\n \n
  • \n );\n }\n}\n\nPaginationEnd.propTypes = {\n text: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n classes: PropTypes.string.isRequired,\n action: PropTypes.func.isRequired,\n}\n\nexport default PaginationEnd;\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/js/components/list/PaginationEnd.jsx"],"sourceRoot":""} \ No newline at end of file diff --git a/client/dist/js/map.js b/client/dist/js/map.js index 5270695..d3ef916 100644 --- a/client/dist/js/map.js +++ b/client/dist/js/map.js @@ -1 +1,11 @@ -webpackJsonp([1],{709:function(n,c){}},[709]); \ No newline at end of file +webpackJsonp([1],{ + +/***/ 715: +/***/ (function(module, exports) { + +// removed by extract-text-webpack-plugin + +/***/ }) + +},[715]); +//# sourceMappingURL=map.js.map \ No newline at end of file diff --git a/client/dist/js/vendor.js b/client/dist/js/vendor.js index 88b36a4..2432dcb 100644 --- a/client/dist/js/vendor.js +++ b/client/dist/js/vendor.js @@ -1,86 +1,72712 @@ -!function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(r,i,c){for(var a,s,l,u=0,f=[];u=t?e.call():i.id=Object(r.b)(o)},i={id:Object(r.b)(o)};return i}},function(e,t,n){"use strict";var r=n(1);n.n(r)},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){function n(e){return null!=e&&"object"==typeof e&&!0===e["@@functional/placeholder"]}e.exports=n},function(e,t,n){var r=n(106);e.exports=function(e){return Object(r(e))}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var r=n(120),o=n(459),i=n(125),c=n(77),a=r(function(e,t,n){var r=1;if(n.length){var s=c(n,i(a));r|=32}return o(e,r,t,n,s)});a.placeholder={},e.exports=a},function(e,t,n){function r(e){if(!i(e))return!1;var t=o(e);return t==a||t==s||t==c||t==l}var o=n(61),i=n(39),c="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",l="[object Proxy]";e.exports=r},function(e,t,n){var r=n(18),o=r.Symbol;e.exports=o},function(e,t,n){function r(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=o(e.prototype),r=e.apply(n,t);return i(r)?r:n}}var o=n(122),i=n(39);e.exports=r},function(e,t){function n(e,t){var n=typeof e;return!!(t=null==t?r:t)&&("number"==n||"symbol"!=n&&o.test(e))&&e>-1&&e%1==0&&e=200&&e<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},o.forEach(["delete","get","head"],function(e){a.headers[e]={}}),o.forEach(["post","put","patch"],function(e){a.headers[e]=o.merge(c)}),e.exports=a}).call(t,n(332))},,function(e,t,n){function r(e,t,n){return function(){if(0===arguments.length)return n();var r=Array.prototype.slice.call(arguments,0),c=r.pop();if(!o(c)){for(var a=0;a0?r:n)(e)}},function(e,t){e.exports=!0},function(e,t,n){var r=n(47),o=n(424),i=n(115),c=n(107)("IE_PROTO"),a=function(){},s=function(){var e,t=n(189)("iframe"),r=i.length;for(t.style.display="none",n(427).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("