diff --git a/deployment/ansible/group_vars/all b/deployment/ansible/group_vars/all index be0b7725f..82d64e30b 100644 --- a/deployment/ansible/group_vars/all +++ b/deployment/ansible/group_vars/all @@ -3,15 +3,12 @@ app_username: "vagrant" packer_version: "0.7.5" -nodejs_version: 6.11.0 +nodejs_version: 6.11.4 virtualenv_version: 15.1.0 otp_router: "default" -otp_version: "1.2.0" -otp_jar_sha1: "a7f659a63a54e894457bab6fc162fb0f47586057" - # used by nginx and gunicorn to set timeouts; OTP defaults to 30s otp_session_timeout_s: 30 diff --git a/deployment/ansible/roles.yml b/deployment/ansible/roles.yml index 0635a1680..450e41fb1 100644 --- a/deployment/ansible/roles.yml +++ b/deployment/ansible/roles.yml @@ -5,7 +5,7 @@ version: 0.2.6 - src: azavea.opentripplanner - version: 1.0.6 + version: 1.0.7 - src: azavea.nginx version: 0.2.2 diff --git a/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml b/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml index fd71bf799..08a202b8e 100644 --- a/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml +++ b/deployment/ansible/roles/cac-tripplanner.app/defaults/main.yml @@ -24,10 +24,10 @@ cac_python_dependencies: - { name: 'boto', version: '2.48.0' } - { name: 'django', version: '1.8.18' } - { name: 'django-ckeditor', version: '5.3.0' } - - { name: 'django-extensions', version: '1.9.0' } - - { name: 'django-storages-redux', version: '1.3.3' } + - { name: 'django-extensions', version: '1.9.1' } + - { name: 'django-storages', version: '1.6.5' } - { name: 'gunicorn', version: '19.7.1' } - - { name: 'pillow', version: '4.2.1' } + - { name: 'pillow', version: '4.3.0' } - { name: 'psycopg2', version: '2.7.3' } - { name: 'pytz', version: '2017.2' } - { name: 'pyyaml', version: '3.12' } diff --git a/python/cac_tripplanner/cac_tripplanner/tests.py b/python/cac_tripplanner/cac_tripplanner/tests.py index d93475562..6378e9b81 100644 --- a/python/cac_tripplanner/cac_tripplanner/tests.py +++ b/python/cac_tripplanner/cac_tripplanner/tests.py @@ -59,7 +59,7 @@ def test_isochrone_partitioning(self): # use current date for query dt = datetime.now() day_str = str(dt.date()) - isochrone_start = '/map/reachable?fromPlace=39.954688%2C-75.204677&mode%5B%5D=WALK%2DTRANSIT&time=7%3A30am&cutoffSec=5000&maxWalkDistance=5000' + isochrone_start = '/map/reachable?fromPlace=39.954688%2C-75.204677&mode%5B%5D=WALK%2DTRANSIT&time=7%3A30am&cutoffSec=3600&maxWalkDistance=5000' isochrone_url = ('{start}&date={day_str}').format(start=isochrone_start, day_str=day_str) response = self.client.get(isochrone_url) json_response = json.loads(response.content) @@ -80,7 +80,7 @@ def test_empty_isochrone(self): dt = datetime.now() day_str = str(dt.date()) - isochrone_start = '/map/reachable?fromPlace=79.954688%2D-45.204677&mode%5B%5D=WALK%2DTRANSIT&time=7%3A30am&cutoffSec=5000&maxWalkDistance=5000' + isochrone_start = '/map/reachable?fromPlace=79.954688%2D-45.204677&mode%5B%5D=WALK%2DTRANSIT&time=7%3A30am&cutoffSec=2000&maxWalkDistance=5000' isochrone_url = ('{start}&date={day_str}').format(start=isochrone_start, day_str=day_str) response = self.client.get(isochrone_url) @@ -89,3 +89,16 @@ def test_empty_isochrone(self): self.assertEqual(0, len(matched)) isochrone = json_response['isochrone'] self.assertEqual({}, isochrone) + + def test_isochrone_outside_range(self): + """Return error if cutoffSec parameter is outside allowed range""" + + # use current date for query + dt = datetime.now() + day_str = str(dt.date()) + + isochrone_start = '/map/reachable?fromPlace=79.954688%2D-45.204677&mode%5B%5D=WALK%2DTRANSIT&time=7%3A30am&cutoffSec=9000&maxWalkDistance=5000' + isochrone_url = ('{start}&date={day_str}').format(start=isochrone_start, day_str=day_str) + + response = self.client.get(isochrone_url) + self.assertEqual(400, response.status_code) diff --git a/python/cac_tripplanner/destinations/views.py b/python/cac_tripplanner/destinations/views.py index 70de5dcee..0c7e26519 100644 --- a/python/cac_tripplanner/destinations/views.py +++ b/python/cac_tripplanner/destinations/views.py @@ -132,9 +132,33 @@ def image_to_url(dest_dict, field_name): return image.url if image else '' +def set_destination_properties(destination): + """Helper for adding and converting properties in serializing destinations as JSON + + :param destination: Destination model object + :returns: Dictionary representation of object, with added properties + """ + obj = model_to_dict(destination) + obj['address'] = obj['name'] + obj['image'] = image_to_url(obj, 'image') + obj['wide_image'] = image_to_url(obj, 'wide_image') + obj['point'] = json.loads(obj['point'].json) + # convert to format like properties on ESRI geocoder results + x = obj['point']['coordinates'][0] + y = obj['point']['coordinates'][1] + obj['extent'] = {'xmax': x, 'xmin': x, 'ymax': y, 'ymin': y} + obj['location'] = {'x': x, 'y': y} + obj['attributes'] = { + 'City': obj['city'], + 'Postal': obj['zip'], + 'Region': obj['state'], + 'StAddr': obj['address'] + } + return obj + + class FindReachableDestinations(View): """Class based view for fetching isochrone and finding destinations of interest within it""" - # TODO: make decisions on acceptable ranges of values that this endpoint will support otp_router = 'default' isochrone_url = settings.ISOCHRONE_URL @@ -166,6 +190,12 @@ def get(self, request, *args, **kwargs): Return both the isochrone GeoJSON and the list of matched destinations.""" params = request.GET.copy() # make mutable + # allow a max travelshed size of 60 minutes in a query + cutoff_sec = int(params.get('cutoffSec', -1)) + if not cutoff_sec or cutoff_sec < 0 or cutoff_sec > 3600: + return HttpResponse(status=400, + reason='cutoffSec must be greater than 0 and less than 360') + json_poly = self.isochrone(params) # Have a FeatureCollection of MultiPolygons @@ -174,18 +204,14 @@ def get(self, request, *args, **kwargs): for poly in json_poly['features']: geom_str = json.dumps(poly['geometry']) geom = GEOSGeometry(geom_str) - matched_objects = (Destination.objects.filter(published=True) + matched_objects = (Destination.objects.filter(published=True, point__within=geom) .distance(geom) .order_by('distance')) else: matched_objects = [] # make locations JSON serializable - matched_objects = [model_to_dict(x) for x in matched_objects] - for obj in matched_objects: - obj['point'] = json.loads(obj['point'].json) - obj['image'] = image_to_url(obj, 'image') - obj['wide_image'] = image_to_url(obj, 'wide_image') + matched_objects = [set_destination_properties(x) for x in matched_objects] response = {'matched': matched_objects, 'isochrone': json_poly} return HttpResponse(json.dumps(response), 'application/json') @@ -239,31 +265,7 @@ def get(self, request, *args, **kwargs): return HttpResponse(error, 'application/json') results = results[:limit_int] - data = [model_to_dict(x) for x in results] - for obj in data: - obj['address'] = obj['name'] - obj['point'] = json.loads(obj['point'].json) - obj['image'] = image_to_url(obj, 'image') - obj['wide_image'] = image_to_url(obj, 'wide_image') - # convert to format like properties on ESRI geocoder results - extent = { - 'xmax': obj['point']['coordinates'][0], - 'xmin': obj['point']['coordinates'][0], - 'ymax': obj['point']['coordinates'][1], - 'ymin': obj['point']['coordinates'][1] - } - obj['extent'] = extent - obj['attributes'] = { - 'City': obj['city'], - 'Postal': obj['zip'], - 'Region': obj['state'], - 'StAddr': obj['address'] - } - - obj['location'] = { - 'x': obj['point']['coordinates'][0], - 'y': obj['point']['coordinates'][1] - } + data = [set_destination_properties(x) for x in results] response = {'destinations': data} return HttpResponse(json.dumps(response), 'application/json') diff --git a/python/cac_tripplanner/templates/base.html b/python/cac_tripplanner/templates/base.html index 24a68169c..b694fb97c 100644 --- a/python/cac_tripplanner/templates/base.html +++ b/python/cac_tripplanner/templates/base.html @@ -81,7 +81,7 @@ {% block jsimports %} - + diff --git a/python/cac_tripplanner/templates/service-worker.js b/python/cac_tripplanner/templates/service-worker.js index 9b2337496..e27f74932 100644 --- a/python/cac_tripplanner/templates/service-worker.js +++ b/python/cac_tripplanner/templates/service-worker.js @@ -1,7 +1,7 @@ // Service Worker to support functioning as a PWA // https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers -var CACHE_NAME = 'cac_tripplanner_v2'; +var CACHE_NAME = 'cac_tripplanner_v3'; var cacheFiles = {{ cache_files | safe }}; diff --git a/scripts/lint.sh b/scripts/lint.sh index 9bd70c8d3..fd2f60129 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -1,16 +1,18 @@ #!/bin/bash function mark_unstable { - java -jar jenkins-cli.jar -s $JENKINS_URI set-build-result unstable + java -jar jenkins-cli.jar -s "$JENKINS_URI set-build-result unstable" } set -x trap 'mark_unstable' ERR # Python linting -vagrant ssh app -c "flake8 /opt/app/python --exclude=migrations" -# run twice to get console output and to write to file -vagrant ssh app -c "flake8 /opt/app/python --exclude=migrations --output-file=/opt/app/python/violations.txt" +# first remove contents of violations file, as it will not get overwritten if there are no warnings +vagrant ssh app -c "touch /opt/app/python/violations.txt" +# get console output and to write to file +vagrant ssh app -c "flake8 /opt/app/python --exclude=migrations \ + --output-file=/opt/app/python/violations.txt --exit-zero --tee" # Run JS linting vagrant ssh app -c "cd /opt/app/src && npm run gulp-lint" diff --git a/src/app/scripts/cac/control/cac-control-directions.js b/src/app/scripts/cac/control/cac-control-directions.js index 42abbfca6..a4cef905d 100644 --- a/src/app/scripts/cac/control/cac-control-directions.js +++ b/src/app/scripts/cac/control/cac-control-directions.js @@ -12,10 +12,13 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te var defaults = { selectors: { + directions: '.directions-results', hiddenClass: 'hidden', itineraryBlock: '.route-summary', + places: '.places', selectedItineraryClass: 'selected', - spinner: '.directions-results > .sk-spinner' + spinner: '.directions-results > .sk-spinner', + visible: ':visible' } }; var options = {}; @@ -29,6 +32,7 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te var mapControl = null; var itineraryControl = null; + var exploreControl = null; var tabControl = null; var urlRouter = null; var directionsFormControl = null; @@ -39,6 +43,7 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te options = $.extend({}, defaults, params); mapControl = options.mapControl; tabControl = options.tabControl; + exploreControl = options.exploreControl; itineraryControl = mapControl.itineraryControl; urlRouter = options.urlRouter; directionsFormControl = options.directionsFormControl; @@ -96,6 +101,7 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te * Throttled to cut down on requests. */ var planTrip = _.throttle(function() { // jshint ignore:line + showPlaces(false); if (!(directions.origin && directions.destination)) { directionsFormControl.setError('origin'); directionsFormControl.setError('destination'); @@ -172,6 +178,7 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te setFromUserPreferences(); } else { clearDirections(); + showPlaces(true); } } @@ -188,11 +195,23 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te } function showSpinner() { + showPlaces(false); itineraryListControl.hide(); directionsListControl.hide(); $(options.selectors.spinner).removeClass(options.selectors.hiddenClass); } + // helper to call plan trip if a destination is set, or show places list if no destination + function planTripOrShowPlaces() { + if (directions.destination) { + showPlaces(false); + planTrip(); + } else { + showPlaces(true); + exploreControl.getNearbyPlaces(); + } + } + /** * Get parameters to pass to OpenTripPlanner, based on current settings * @@ -234,6 +253,8 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te } function onDirectionsBackClicked() { + // show directions list again + showPlaces(false); // show the other itineraries again itineraryListControl.showItineraries(true); currentItinerary.highlight(true); @@ -246,6 +267,9 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te * Handles click events to select a given itinerary */ function onItineraryClicked(event, itinerary) { + // hide both the directions list and the places list + $(options.selectors.directions).hide(); + $(options.selectors.places).hide(); if (itinerary) { // hide all other itineraries itineraryListControl.showItineraries(false); @@ -301,13 +325,14 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te */ function queryWithWaypoints(event, points) { UserPreferences.setPreference('waypoints', points.waypoints); + showPlaces(false); planTrip(); } // trigger re-query when trip options update function setOptions() { if (tabControl.isTabShowing(tabControl.TABS.DIRECTIONS)) { - planTrip(); + planTripOrShowPlaces(); } } @@ -326,7 +351,7 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te } // update the directions for the reverse trip - planTrip(); + planTripOrShowPlaces(); } function onTypeaheadCleared(event, key) { @@ -335,6 +360,8 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te if (tabControl.isTabShowing(tabControl.TABS.DIRECTIONS)) { mapControl.clearDirectionsMarker(key); + showPlaces(true); + exploreControl.getNearbyPlaces(); } } @@ -345,7 +372,7 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te } setDirections(key, [result.location.y, result.location.x]); if (tabControl.isTabShowing(tabControl.TABS.DIRECTIONS)) { - planTrip(); + planTripOrShowPlaces(); } } @@ -381,6 +408,17 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te } } + // toggles between showing directions tab content or places list (explore mode content) + function showPlaces(doShowPlaces) { + if (doShowPlaces) { + $(options.selectors.directions).hide(); + $(options.selectors.places).show(); + } else { + $(options.selectors.directions).show(); + $(options.selectors.places).hide(); + } + } + // Updates the URL to match the currently-selected options function updateUrl() { urlRouter.updateUrl(urlRouter.buildDirectionsUrlFromPrefs()); @@ -402,8 +440,12 @@ CAC.Control.Directions = (function (_, $, moment, Control, Geocoder, Routing, Te directions.destination = [destination.location.y, destination.location.x ]; } - if (tabControl.isTabShowing(tabControl.TABS.DIRECTIONS) && (origin || destination)) { - planTrip(); + if (tabControl.isTabShowing(tabControl.TABS.DIRECTIONS)) { + // get nearby places if no destination has been set yet + planTripOrShowPlaces(); + } else { + // explore tab visible + showPlaces(true); } } diff --git a/src/app/scripts/cac/control/cac-control-explore.js b/src/app/scripts/cac/control/cac-control-explore.js index d92bd4c94..251637f60 100644 --- a/src/app/scripts/cac/control/cac-control-explore.js +++ b/src/app/scripts/cac/control/cac-control-explore.js @@ -37,6 +37,8 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro var exploreLatLng = null; var fetchingIsochrone = false; + var allDestinations = []; // cache full list of destinations + function ExploreControl(params) { options = $.extend({}, defaults, params); mapControl = options.mapControl; @@ -57,6 +59,8 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro directionsFormControl.events.on(directionsFormControl.eventNames.geocodeError, onGeocodeError); + showSpinner(); + if (tabControl.isTabShowing(tabControl.TABS.EXPLORE)) { setFromUserPreferences(); clickedExplore(); @@ -71,7 +75,7 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro showPlacesContent(); } - var debouncedFetchIsochrone = _.debounce(fetchIsochrone, ISOCHRONE_DEBOUNCE_MILLIS); + var fetchIsochrone = _.debounce(_fetchIsochrone, ISOCHRONE_DEBOUNCE_MILLIS); var getNearbyPlaces = _.debounce(_getNearbyPlaces, ISOCHRONE_DEBOUNCE_MILLIS); @@ -86,11 +90,12 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro return ExploreControl; - // When the explore tab is activated, do the thing. If some other tab is activated, clear the - // isochrone and destination markers. + // When the explore tab is activated, load destinations and isochrone, if origin set. + // If some other tab is activated, clear the isochrone and destination markers. function onTabShown(event, tabId) { + // always show spinner on tab change, to avoid stale destinations list flashing + showSpinner(); if (tabId === tabControl.TABS.EXPLORE) { - showSpinner(); UserPreferences.setPreference('method', 'explore'); setFromUserPreferences(); $(options.selectors.isochroneSliderContainer).removeClass(options.selectors.hiddenClass); @@ -162,17 +167,17 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro mapControl.isochroneControl.clearIsochrone(); if (exploreLatLng) { - debouncedFetchIsochrone(); + fetchIsochrone(); + } else { + getNearbyPlaces(); } - - getNearbyPlaces(); } /** * Load options and compose OTP params, fetch travelshed from OpenTripPlanner, * then populate side bar with featured locations found within the travelshed. */ - function fetchIsochrone() { + function _fetchIsochrone() { showSpinner(); // do not hide spinner until isochrone fetch resolves @@ -200,9 +205,9 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro mapControl.isochroneControl.fetchIsochrone(exploreLatLng, date, exploreMinutes, otpOptions, true).then( - function () { + function (data) { fetchingIsochrone = false; - showPlacesContent(); + listIsochronePlaces(data); }, function (error) { console.error(error); fetchingIsochrone = false; @@ -258,9 +263,10 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro function onTypeaheadCleared(event, key) { if (key === 'origin') { exploreLatLng = null; - // selectedPlaceId = null; $(options.selectors.alert).remove(); mapControl.isochroneControl.clearIsochrone(); + // get all places in sidebar when no origin set + getNearbyPlaces(); } } @@ -327,14 +333,86 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro } } - function _getNearbyPlaces() { + /** + * Helper to build and show templated place cards + * + * @param destinations {Array} Detination objects to load into template cards + * @Param exploreMinutes {String} String representation of integer number of travel minutes + the travelshed encompasses; -1 if not in travelshed mode + */ + function displayPlaces(destinations, exploreMinutes) { + exploreMinutes = exploreMinutes || '-1'; + var isTransit = UserPreferences.getPreference('mode').indexOf('TRANSIT') > -1; + var isMax = (exploreMinutes === $(options.selectors.isochroneSlider).prop('max')); + + // alternate text string to display if there are no destinations found + var text = null; + if (!destinations || !destinations.length) { + if (exploreMinutes === '-1') { + // if not in travel mode, should fetch all destinations; should always have some + console.error('No destinations in the app!'); + text = 'No featured destinations found. Please check back later'; + } else if (!isTransit && !isMax) { + text = 'No featured destinations within ' + exploreMinutes + + ' minutes. Try including transit or allowing for more time.'; + } else if (!isTransit && isMax) { + text = 'No featured destinations within ' + exploreMinutes + + ' minutes. Try including transit, or removing the travel time limit ' + + '(click \"within\" above).'; + } else if (isTransit && !isMax) { + text = 'No featured destinations within ' + exploreMinutes + + ' minutes. Try allowing for more time.'; + } else { + text = 'No featured destinations within ' + exploreMinutes + + ' minutes. Try removing the travel time limit (click \"within\" above).'; + } + } + + var newPlaces = HomeTemplates.destinations(destinations, text); + $(options.selectors.placesContent).html(newPlaces); + + // also draw all destinations on explore map (not just those in the isochrone) + if (tabControl.isTabShowing(tabControl.TABS.EXPLORE) && mapControl.isLoaded()) { + if (allDestinations.length > 0) { + mapControl.isochroneControl.drawDestinations(allDestinations, destinations); + } else { + // if destinations not cached already, go fetch them + getAllPlaces().then(function(fullDestinationsList) { + allDestinations = fullDestinationsList; + mapControl.isochroneControl.drawDestinations(allDestinations, destinations); + }).fail(function(error) { + console.error('error fetching destinations to map:'); + console.error(error); + allDestinations = []; + }); + } + } + + showPlacesContent(); + + // now places list has been updated, go fetch the travel time + // from the new origin to each place + getTimesToPlaces(); + } + + // Given desintations from the FindReachableDestinations app endpoint, + // display the returned list of places within the travelshed in the sidebar cards. + function listIsochronePlaces(destinations) { showSpinner(); var $placeCards = $(options.selectors.placeCard); // hide existing times to places now showing (if any) $placeCards.addClass(options.selectors.noOriginClass); + displayPlaces(destinations, $(options.selectors.isochroneSlider).val()); + } + /** + * Query Django app for all destinations. If origin set, will order by distance. + * + * @return {promise} Promise which resolves to list of destinations + */ + function getAllPlaces() { + var dfd = $.Deferred(); var searchUrl = '/api/destinations/search'; - var params = { url: searchUrl, type: 'GET' @@ -355,28 +433,37 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro if (!data || !data.destinations) { console.error('no places found'); console.error(data); - showPlacesContent(); - return; - } - - var newPlaces = HomeTemplates.destinations(data.destinations); - $(options.selectors.placesContent).html(newPlaces); - - // also draw on explore map - if (tabControl.isTabShowing(tabControl.TABS.EXPLORE) && mapControl.isLoaded()) { - mapControl.isochroneControl.drawDestinations(data.destinations); + dfd.resolve([]); + } else { + dfd.resolve(data.destinations); } + }).fail(function(error) { + console.error('error fetching destinations:'); + console.error(error); + dfd.reject(); + }); + return dfd.promise(); + } - showPlacesContent(); + function _getNearbyPlaces() { + showSpinner(); + var $placeCards = $(options.selectors.placeCard); + // hide existing times to places now showing (if any) + $placeCards.addClass(options.selectors.noOriginClass); - // now places list has been updated, go fetch the travel time - // from the new origin to each place - getTimesToPlaces(); + // use cached results + if (allDestinations.length > 0) { + displayPlaces(allDestinations, '-1'); + return; + } + getAllPlaces().then(function(destinations) { + allDestinations = destinations; + displayPlaces(destinations, '-1'); }).fail(function(error) { console.error('error fetching destinations:'); console.error(error); - + allDestinations = []; showPlacesContent(); }); } @@ -421,6 +508,9 @@ CAC.Control.Explore = (function (_, $, Geocoder, MapTemplates, HomeTemplates, Ro .text(originLabel); $card.removeClass(options.selectors.noOriginClass); } + }).fail(function(error) { + console.error('error finding travel time to a place'); + console.error(error); }); }); } diff --git a/src/app/scripts/cac/home/cac-home-templates.js b/src/app/scripts/cac/home/cac-home-templates.js index 54e23efd6..0a663787f 100644 --- a/src/app/scripts/cac/home/cac-home-templates.js +++ b/src/app/scripts/cac/home/cac-home-templates.js @@ -11,10 +11,12 @@ CAC.Home.Templates = (function (Handlebars) { * Take list of destination objects and return templated HTML snippet for sidebar. * * @param useDestinations {Array} Collection of JSON destinations from /api/destinations/search + * @param alternateMessage {String} Text to display if there are no destinations * @return html {String} Snippets for boxes to display on home page for each destination */ - function destinations(useDestinations) { + function destinations(useDestinations, alternateMessage) { var source = [ + '{{#unless alternateMessage}}', '
', '

Places we love

', 'Map View', @@ -47,10 +49,19 @@ CAC.Home.Templates = (function (Handlebars) { '', '', '{{/each}}', - '' + '', + '{{/unless}}', + '{{#if alternateMessage}}', + '
', + '

{{alternateMessage}}

', + 'Map View', + '
', + '{{/if}}', ].join(''); var template = Handlebars.compile(source); - var html = template({destinations: useDestinations}); + var html = template({destinations: useDestinations, + alternateMessage:alternateMessage}, + {data: {level: Handlebars.logger.WARN}}); return html; } diff --git a/src/app/scripts/cac/map/cac-map-control.js b/src/app/scripts/cac/map/cac-map-control.js index f77de57c1..4609afce4 100644 --- a/src/app/scripts/cac/map/cac-map-control.js +++ b/src/app/scripts/cac/map/cac-map-control.js @@ -17,7 +17,6 @@ CAC.Map.Control = (function ($, Handlebars, cartodb, L, turf, _) { var map = null; var currentLocationMarker = null; - var currentLocationMarkerHalo = null; var geocodeMarker = null; var directionsMarkers = { origin: null, diff --git a/src/app/scripts/cac/map/cac-map-isochrone.js b/src/app/scripts/cac/map/cac-map-isochrone.js index 0a69ceb9a..5b634a759 100644 --- a/src/app/scripts/cac/map/cac-map-isochrone.js +++ b/src/app/scripts/cac/map/cac-map-isochrone.js @@ -1,4 +1,4 @@ -CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settings) { +CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _) { 'use strict'; var defaults = { @@ -26,6 +26,13 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin prefix: 'icon', markerColor: 'orange' }); + var destinationOutsideTravelshedIcon = L.AwesomeMarkers.icon({ + icon: 'default', + prefix: 'icon', + // modified by styles to actually be orange, with reduced opacity + markerColor: 'darkred', + extraClasses: 'outside' + }); var highlightIcon = L.AwesomeMarkers.icon({ icon: 'default', prefix: 'icon', @@ -96,12 +103,12 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin } /** - * Fetch an isochrone (travelshed). + * Fetch an isochrone (travelshed) and the places within it. * - * @return {Object} Promise resolving to JSON with isochrone + * @return {Object} Promise resolving to JSON with isochrone and destinations */ function _fetchIsochrone(payload) { - var isochroneUrl = Settings.isochroneUrl; + var isochroneUrl = '/map/reachable'; var deferred = $.Deferred(); $.ajax({ type: 'GET', @@ -117,10 +124,12 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin * Makes an isochrone request. Only allows one isochrone request at a time. * If another request comes in while one is active, the results of the active * request will be discarded upon completion, and the new query issued. + * Draws isochrone on query completion, and resolves with the destinations. * * @param {Deferred} A jQuery Deferred object used for resolution * @param {Object} Parameters to be sent along with the request * @param {boolean} Whether to pan/zoom map to fit returned isochrone + * @return {Object} Promise resolving to JSON with destinations */ function getIsochrone(deferred, params, zoomToFit) { // Check if there's already an active request. If there is one, @@ -154,8 +163,8 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin deferred.resolve(); return; } - drawIsochrone(data, zoomToFit); - deferred.resolve(); + drawIsochrone(data.isochrone, zoomToFit); + deferred.resolve(data.matched); }, function(error) { activeIsochroneRequest = null; pendingIsochroneRequest = null; @@ -178,9 +187,7 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin var params = { time: formattedTime, date: formattedDate, - cutoffSec: exploreMinutes * 60, // API expects seconds - routerId: 'default', - algorithm: 'accSampling' + cutoffSec: exploreMinutes * 60 // API expects seconds }; // Default precision of 200m; 100m seems good for improving response times on non-transit @@ -201,15 +208,25 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin /** * Draw an array of geojson destination points onto the map + * + * @param {Array} all All destinations to draw + * @param {Array} matched Destinations witin the travelshed; styles differ for the markers */ - function drawDestinations(matched) { + function drawDestinations(all, matched) { // put destination details onto point geojson object's properties // build map of unconverted destination objects var destinations = {}; - var locationGeoJSON = _.map(matched, function(destination) { + clearDestinations(); + + var locationGeoJSON = _.map(all, function(destination) { destinations[destination.id] = destination; var point = _.property('point')(destination); point.properties = _.omit(destination, 'point'); + + // set matched property to true if destination is within isochrone + point.properties.matched = _.findIndex(matched, function(match) { + return match.id === destination.id; + }) > -1; return point; }); destinationMarkers = {}; @@ -229,7 +246,11 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin var template = Handlebars.compile(popupTemplate); var popupContent = template({geojson: geojson}); var markerId = geojson.properties.id; - var marker = new cartodb.L.marker(latLng, {icon: destinationIcon}) + + // use a different icon for places outside of the travel than those within it + var useIcon = geojson.properties.matched ? destinationIcon: + destinationOutsideTravelshedIcon; + var marker = new cartodb.L.marker(latLng, {icon: useIcon}) .bindPopup(popupContent, {className: options.selectors.poiPopupClassName}); destinationMarkers[markerId] = { marker: marker, @@ -283,4 +304,4 @@ CAC.Map.IsochroneControl = (function ($, Handlebars, cartodb, L, turf, _, Settin } } -})(jQuery, Handlebars, cartodb, L, turf, _, CAC.Settings); +})(jQuery, Handlebars, cartodb, L, turf, _); diff --git a/src/app/scripts/cac/pages/cac-pages-home.js b/src/app/scripts/cac/pages/cac-pages-home.js index 10d171ee6..aa534230c 100644 --- a/src/app/scripts/cac/pages/cac-pages-home.js +++ b/src/app/scripts/cac/pages/cac-pages-home.js @@ -68,16 +68,17 @@ CAC.Pages.Home = (function ($, ModeOptions, MapControl, TripOptions, SearchPara directionsFormControl = new CAC.Control.DirectionsFormControl({}); - directionsControl = new CAC.Control.Directions({ + exploreControl = new CAC.Control.Explore({ mapControl: mapControl, directionsFormControl: directionsFormControl, tabControl: tabControl, urlRouter: urlRouter }); - exploreControl = new CAC.Control.Explore({ + directionsControl = new CAC.Control.Directions({ mapControl: mapControl, directionsFormControl: directionsFormControl, + exploreControl: exploreControl, tabControl: tabControl, urlRouter: urlRouter }); diff --git a/src/app/scripts/cac/routing/cac-routing-itinerary.js b/src/app/scripts/cac/routing/cac-routing-itinerary.js index 6d25e9755..97f988cc6 100644 --- a/src/app/scripts/cac/routing/cac-routing-itinerary.js +++ b/src/app/scripts/cac/routing/cac-routing-itinerary.js @@ -171,11 +171,13 @@ CAC.Routing.Itinerary = (function ($, cartodb, L, _, moment, Geocoder, Utils) { function getFormattedDistance(distanceMeters) { // less than ~0.2 miles if (distanceMeters < 322) { - return Math.round(distanceMeters * 3.28084).toString() + ' feet'; + var feet = Math.round(distanceMeters * 3.28084).toString(); + return feet === '1' ? feet + ' foot' : feet + ' feet'; } // return miles - return (Math.round(((distanceMeters / 1000) * 0.621371) * 10) / 10).toString() + ' miles'; + var miles = (Math.round(((distanceMeters / 1000) * 0.621371) * 10) / 10).toString(); + return miles === '1' ? miles + ' mile' : miles + ' miles'; } /** diff --git a/src/app/scripts/cac/user/cac-user-preferences.js b/src/app/scripts/cac/user/cac-user-preferences.js index 9ddd0a6dd..6023e5400 100644 --- a/src/app/scripts/cac/user/cac-user-preferences.js +++ b/src/app/scripts/cac/user/cac-user-preferences.js @@ -107,7 +107,7 @@ CAC.User.Preferences = (function(Storages, _) { } /** - * Convenience method to avoid having to manually set both preferences for 'origin' and + * Convenience method to avoid having to manually set both preferences for origin and * destination. * * 'text' is optional and defaults to location.address if omitted diff --git a/src/app/styles/components/_map-marker.scss b/src/app/styles/components/_map-marker.scss index e6dd1da99..20f0cf044 100644 --- a/src/app/styles/components/_map-marker.scss +++ b/src/app/styles/components/_map-marker.scss @@ -2,3 +2,8 @@ margin-top: 4px; font-size: 18px; } + +.awesome-marker-icon-darkred { + background-position: -36px 0; // override to orange + opacity: .3; +} diff --git a/src/app/styles/components/_place-list.scss b/src/app/styles/components/_place-list.scss index 037a9d84e..0213b6d4f 100644 --- a/src/app/styles/components/_place-list.scss +++ b/src/app/styles/components/_place-list.scss @@ -72,6 +72,14 @@ } } + .no-places { + margin: 1em; + color: $gray; + font-size: 1.6rem; + line-height: 1.7; + text-align: center; + } + a.map-view-btn { @include delinkify($gophillygo-blue); display: block; diff --git a/src/bower.json b/src/bower.json index f41f09b48..f1b98bdac 100644 --- a/src/bower.json +++ b/src/bower.json @@ -2,20 +2,20 @@ "name": "src", "private": true, "dependencies": { - "navigo": "~4.7.2", + "navigo": "~5.3.0", "console-polyfill": "~0.3.0", - "handlebars": "~4.0.5", + "handlebars": "~4.0.10", "jquery": "~3.2.1", "leaflet": "~0.7.7", - "cartodb.js": "~3.15.9", + "cartodb.js": "~3.15.10", "js-storage": "~1.0.1", "Leaflet.awesome-markers": "~2.0.2", "Leaflet.encoded": "~0.0.8", - "moment": "~2.18.1", + "moment": "~2.19.0", "moment-duration-format": "~1.3.0", - "lodash": "~4.17.2", + "lodash": "~4.17.4", "spinkit": "~1.2.5", "typeahead.js": "~0.10.5", - "slick-carousel": "~1.6.0" + "slick-carousel": "~1.8.1" } } diff --git a/src/gulpfile.js b/src/gulpfile.js index 57ff10ad0..87357a8ef 100644 --- a/src/gulpfile.js +++ b/src/gulpfile.js @@ -28,6 +28,11 @@ var uglifyLib = require('uglify-es'); var uglifyComposer = require('gulp-uglify/composer'); var uglify = uglifyComposer(uglifyLib, console); +var pkg = require('./package'); +var jshintConfig = pkg.jshintConfig; + +jshintConfig.lookup = false; + var $ = require('gulp-load-plugins')(); var staticRoot = '/srv/cac'; @@ -210,14 +215,14 @@ gulp.task('copy:vendor-scripts', function() { gulp.task('jshint', function () { return gulp.src('app/scripts/cac/**/*.js') - .pipe($.jshint()) + .pipe($.jshint(jshintConfig)) .pipe($.jshint.reporter('jshint-stylish')) .pipe($.jshint.reporter('fail')); }); gulp.task('jshint:jenkins', function () { return gulp.src('app/scripts/cac/**/*.js') - .pipe($.jshint()) + .pipe($.jshint(jshintConfig)) .pipe($.jshint.reporter(jshintXMLReporter)) .on('end', jshintXMLReporter.writeFile({ alwaysReport: true, diff --git a/src/package.json b/src/package.json index d53790630..7db67507c 100644 --- a/src/package.json +++ b/src/package.json @@ -4,15 +4,15 @@ "node": ">=0.12.0" }, "dependencies": { - "@turf/point-on-line": "~4.4.0" + "@turf/point-on-line": "~5.0.3" }, "devDependencies": { "aliasify": "^2.0.0", "apache-server-configs": "~2.14.0", - "bower": "~1.8.0", + "bower": "~1.8.2", "browserify": "~14.4.0", - "chai": "~4.0.2", - "connect": "~3.6.2", + "chai": "~4.1.2", + "connect": "~3.6.5", "connect-livereload": "~0.6.0", "del": "~3.0.0", "gulp": "~3.9.1", @@ -22,11 +22,11 @@ "gulp-concat": "~2.6.1", "gulp-csso": "~3.0.0", "gulp-debug": "~3.1.0", - "gulp-filter": "~5.0.0", + "gulp-filter": "~5.0.1", "gulp-flatten": "~0.3.1", - "gulp-if": "~2.0.1", - "gulp-imagemin": "~3.3.0", - "gulp-jshint": "~2.0.1", + "gulp-if": "~2.0.2", + "gulp-imagemin": "~3.4.0", + "gulp-jshint": "~2.0.4", "gulp-jshint-xml-file-reporter": "~0.5.1", "gulp-load-plugins": "~1.5.0", "gulp-order": "~1.1.1", @@ -40,10 +40,10 @@ "gulp-uglify": "~3.0.0", "gulp-useref": "~3.1.2", "istanbul": "~0.4.5", - "jasmine-core": "~2.6.4", + "jasmine-core": "~2.8.0", "jshint": "~2.9.3", "jshint-stylish": "~2.2.1", - "karma": "~1.7.0", + "karma": "~1.7.1", "karma-chai": "~0.1.0", "karma-coverage": "~1.1.1", "karma-jasmine": "~1.1.0", @@ -52,14 +52,14 @@ "lazypipe": "~1.0.1", "main-bower-files": "~2.13.1", "merge-stream": "~1.0.0", - "mocha": "~3.4.2", + "mocha": "~4.0.1", "opn": "~5.1.0", - "phantomjs-prebuilt": "^2.1.14", - "pump": "~1.0.1", - "requirejs": "~2.3.2", - "serve-index": "~1.9.0", - "serve-static": "~1.12.3", - "uglify-es": "^3.0.20", + "phantomjs-prebuilt": "^2.1.15", + "pump": "~1.0.2", + "requirejs": "~2.3.5", + "serve-index": "~1.9.1", + "serve-static": "~1.13.1", + "uglify-es": "^3.1.3", "vinyl-buffer": "~1.0.0", "vinyl-source-stream": "~1.1.0", "wiredep": "~4.0.0" @@ -77,5 +77,9 @@ "gulp-lint": "gulp jshint", "gulp-lint-jenkins": "gulp jshint:jenkins", "gulp-watch": "gulp watch" + }, + "jshintConfig": { + "esversion": 5, + "validthis": true } } diff --git a/src/prototype/.gitignore b/src/prototype/.gitignore deleted file mode 100644 index aa794f2d2..000000000 --- a/src/prototype/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -# MacOS -.DS_Store - -# SASS -.sass-cache/ - -#npm -node_modules/ - -# generated CSS -app/css/main.css diff --git a/src/prototype/Gruntfile.js b/src/prototype/Gruntfile.js deleted file mode 100644 index b4261d59e..000000000 --- a/src/prototype/Gruntfile.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = function(grunt) { - - // measures the time each task takes - require('time-grunt')(grunt); - - // load grunt config - require('load-grunt-config')(grunt); - -}; \ No newline at end of file diff --git a/src/prototype/LICENSE b/src/prototype/LICENSE deleted file mode 100644 index 45af2f917..000000000 --- a/src/prototype/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Azavea - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/prototype/Readme.md b/src/prototype/Readme.md deleted file mode 100644 index 27b8232f2..000000000 --- a/src/prototype/Readme.md +++ /dev/null @@ -1,19 +0,0 @@ -# Go Philly Go v2 Prototype -Mostly HTML and SASS. Plus a bit of JS to demonstrate moving between states of the app. - ---- - -## Installation -Run `npm install` in the project directory to install required packages. - ---- - -## Use -Run `grunt` to watch for file changes and automatically open your browser to `localhost:3000`. - ---- - -## What's in the prototype - - -## What's next diff --git a/src/prototype/app/about.html b/src/prototype/app/about.html deleted file mode 100644 index a7c39dbf1..000000000 --- a/src/prototype/app/about.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - GoPhillyGo | Trip Planning for Bikes, Public Transit, and Walking | Clean Air Council - - - -
-
-
- Walk. Ride. Pedal. Discover. -
- -
- Next time bring your bike onboard. -
-
- -
- -
-

About GoPhillyGo

- -
-
-
-
The online mapping tool for the greater philadelphia area
-
Developed with state-of-the-art mapping technology, GoPhillyGo makes it easy to plan multimodal travel — combining biking + walking + public transportation within one trip — to go anywhere within the greater Philadelphia area without the use of a car. It even provides details on pedestrian and bike routes, letting users customize their trips.
- -
Steep hills not for you?
-
Our easy-to-use options help you customize your route specifically to your needs. If you want to get a workout in, we can help. If you're looking for a more leisurely trip, we have you covered.
- -
Do you have a travel preference?
-
GoPhillyGo lets you choose your preferred mode of transportation, including mass transit. Travel by bus, train, or trolley, hop on your bike, and even take longer walking routes. Combine methods to plan your trip.
- -
Visit philadelphia’s hidden gems
-
Use GoPhillyGo to plan your trip to featured “Places We Love”.
- -
Subscribe to stay updated
-
Stay up to date on all things GoPhillyGo. Enter your information below for updates on GoPhillyGo events, featured profiles, and featured content from the site.
-
-

- Questions? Email us at info@gophillygo.org -

-
-
-
- - - - - - - diff --git a/src/prototype/app/css/main.css.map b/src/prototype/app/css/main.css.map deleted file mode 100644 index 96dd01d8e..000000000 --- a/src/prototype/app/css/main.css.map +++ /dev/null @@ -1,33 +0,0 @@ -{ - "version": 3, - "file": "main.css", - "sources": [ - "../sass/main.scss", - "../sass/vendors/_inputrange.scss", - "../sass/utils/_color.scss", - "../sass/utils/_variables.scss", - "../sass/utils/_functions.scss", - "../sass/utils/_mixins.scss", - "../sass/utils/_breakpoints.scss", - "../sass/base/_normalize.scss", - "../sass/base/_typography.scss", - "../sass/base/_base.scss", - "../sass/components/_app-header.scss", - "../sass/components/_app-footer.scss", - "../sass/components/_map.scss", - "../sass/components/_directions-form.scss", - "../sass/components/_place-card.scss", - "../sass/components/_place-list.scss", - "../sass/components/_preview-card.scss", - "../sass/components/_directions-results.scss", - "../sass/components/_directions-step-by-step.scss", - "../sass/components/_sidebar-banner.scss", - "../sass/components/_modal.scss", - "../sass/layouts/_info.scss", - "../sass/pages/_home.scss", - "../sass/pages/_map.scss", - "../sass/pages/_PROTOTYPE.scss" - ], - "mappings": "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", - "names": [] -} \ No newline at end of file diff --git a/src/prototype/app/explore-detail.html b/src/prototype/app/explore-detail.html deleted file mode 100644 index c52feec8b..000000000 --- a/src/prototype/app/explore-detail.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - GoPhillyGo | Trip Planning for Bikes, Public Transit, and Walking | Clean Air Council - - - -
-
-
- Walk. Ride. Pedal. Discover. -
- -
- Next time bring your bike onboard. -
-
- -
- -
-

Places We Love

- -
-
-
-

Independence Seaport Museum

-
-
-

- Independence Seaport Museum maintains one of the largest maritime collections in North America, combining more than 25,000 artifacts with hands-on exhibits and large-scale ship models. The Museum is currently constructing a full-size waterline model of an American topsail schooner of the late 18th century period. During construction, visitors can experience the atmosphere at one of Philadelphia’s first shipyards while getting hands-on and trying out traditional boatbuilding techniques. Additionally, the Museum features a traditional wooden boat shop, the J. Welles Henderson Archives and Library and a 530-seat concert hall, home to the Penn’s Landing Playhouse. The Museum also includes two National Historic Landmark ships—the Spanish-American War cruiser, Olympia, and the World War II submarine Becuna. -

-

- Admission is $15.00 for Adults, $10 for children 3-12 and Seniors, Museum members and children 2 and under are free. -

-

- Event Calendar -

-

- www.phillyseaport.org -

-
-
- - -
- - - - - - - diff --git a/src/prototype/app/extras.html b/src/prototype/app/extras.html deleted file mode 100644 index 019dada6c..000000000 --- a/src/prototype/app/extras.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - GoPhillyGo - - - - -

- - - -

- - - - - - - - - - - - -

- - - - - - - - -

- -
-
- -

Directions

- -
-
-
-
-
Depart 135 S 19th St
-
at 9:47a
-
-
-
-
-
Walk north on S 19th St
-
78 feet
-
-
-
Arrive Indego station, 6th & Race
-
-
-
-
-
Bike southeast on Tasker St
-
98 feet
-
-
-
Turn left on S Marston St
-
0.13 miles
-
-
-
Turn right on S Marston St
-
0.13 miles
-
-
-
Turn left on S Marston St
-
0.13 miles
-
-
-
Arrive 19th & Moravian St
-
-
-
-
-
Board SEPTA 17 (20th & Johnston)
-
at 9:48a
-
1.35 miles
-
-
-
Disembark 19th St & Tasker St
-
-
-
-
-
Bike southeast on Tasker St
-
98 feet
-
-
-
Turn left on S Marston St
-
0.13 miles
-
-
-
Turn right on S Marston St
-
0.13 miles
-
-
-
Turn left on S Marston St
-
0.13 miles
-
-
-
Turn right on S Marston St
-
0.13 miles
-
-
-
Arrive Indego station, 23rd & Fairmount
-
-
-
-
-
Walk east on Tasker St
-
105 feet
-
-
-
Turn left on S Marston St
-
0.13 miles
-
-
-
-
-
Arrive S Marston St & Reed St
-
at 10:07a
-
-
-
-
- - - - - - diff --git a/src/prototype/app/font/fontello/LICENSE.txt b/src/prototype/app/font/fontello/LICENSE.txt deleted file mode 100755 index 8fa3da363..000000000 --- a/src/prototype/app/font/fontello/LICENSE.txt +++ /dev/null @@ -1,12 +0,0 @@ -Font license info - - -## Font Awesome - - Copyright (C) 2016 by Dave Gandy - - Author: Dave Gandy - License: SIL () - Homepage: http://fortawesome.github.com/Font-Awesome/ - - diff --git a/src/prototype/app/font/fontello/README.txt b/src/prototype/app/font/fontello/README.txt deleted file mode 100755 index beaab3366..000000000 --- a/src/prototype/app/font/fontello/README.txt +++ /dev/null @@ -1,75 +0,0 @@ -This webfont is generated by http://fontello.com open source project. - - -================================================================================ -Please, note, that you should obey original font licenses, used to make this -webfont pack. Details available in LICENSE.txt file. - -- Usually, it's enough to publish content of LICENSE.txt file somewhere on your - site in "About" section. - -- If your project is open-source, usually, it will be ok to make LICENSE.txt - file publicly available in your repository. - -- Fonts, used in Fontello, don't require a clickable link on your site. - But any kind of additional authors crediting is welcome. -================================================================================ - - -Comments on archive content ---------------------------- - -- /font/* - fonts in different formats - -- /css/* - different kinds of css, for all situations. Should be ok with - twitter bootstrap. Also, you can skip style and assign icon classes - directly to text elements, if you don't mind about IE7. - -- demo.html - demo file, to show your webfont content - -- LICENSE.txt - license info about source fonts, used to build your one. - -- config.json - keeps your settings. You can import it back into fontello - anytime, to continue your work - - -Why so many CSS files ? ------------------------ - -Because we like to fit all your needs :) - -- basic file, .css - is usually enough, it contains @font-face - and character code definitions - -- *-ie7.css - if you need IE7 support, but still don't wish to put char codes - directly into html - -- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face - rules, but still wish to benefit from css generation. That can be very - convenient for automated asset build systems. When you need to update font - - no need to manually edit files, just override old version with archive - content. See fontello source code for examples. - -- *-embedded.css - basic css file, but with embedded WOFF font, to avoid - CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. - We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` - server headers. But if you ok with dirty hack - this file is for you. Note, - that data url moved to separate @font-face to avoid problems with - - - - - - - -
-

- gpg - font demo -

- -
-
-
-
icon-plus0xe800
-
icon-bike0xe801
-
icon-transit0xe802
-
icon-walk0xe803
-
-
-
icon-reverse0xe804
-
icon-transit-off0xe805
-
icon-transit-on0xe806
-
icon-left-big0xe807
-
-
-
icon-turn-right0xe808
-
icon-turn-left0xe809
-
icon-location0xe80a
-
icon-cancel0xe80b
-
-
-
icon-link0xe80c
-
icon-road0xe80d
-
icon-clock0xe80e
-
icon-indego0xe80f
-
-
-
icon-check0xe810
-
icon-twitter0xf099
-
icon-gplus0xf0d5
-
icon-email0xf0e0
-
-
-
icon-geolocate0xf124
-
icon-youtube0xf16a
-
icon-instagram0xf16d
-
icon-wheelchair0xf193
-
-
-
icon-sliders0xf1de
-
icon-share0xf1e0
-
icon-facebook0xf230
-
icon-train0xf238
-
-
- - - \ No newline at end of file diff --git a/src/prototype/app/font/fontello/font/gpg.eot b/src/prototype/app/font/fontello/font/gpg.eot deleted file mode 100755 index 01c6f4324..000000000 Binary files a/src/prototype/app/font/fontello/font/gpg.eot and /dev/null differ diff --git a/src/prototype/app/font/fontello/font/gpg.svg b/src/prototype/app/font/fontello/font/gpg.svg deleted file mode 100755 index 74957a268..000000000 --- a/src/prototype/app/font/fontello/font/gpg.svg +++ /dev/null @@ -1,66 +0,0 @@ - - - -Copyright (C) 2016 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/prototype/app/font/fontello/font/gpg.ttf b/src/prototype/app/font/fontello/font/gpg.ttf deleted file mode 100755 index 0ac391b63..000000000 Binary files a/src/prototype/app/font/fontello/font/gpg.ttf and /dev/null differ diff --git a/src/prototype/app/font/fontello/font/gpg.woff b/src/prototype/app/font/fontello/font/gpg.woff deleted file mode 100755 index fdeaa6458..000000000 Binary files a/src/prototype/app/font/fontello/font/gpg.woff and /dev/null differ diff --git a/src/prototype/app/font/fontello/font/gpg.woff2 b/src/prototype/app/font/fontello/font/gpg.woff2 deleted file mode 100755 index 0b537996b..000000000 Binary files a/src/prototype/app/font/fontello/font/gpg.woff2 and /dev/null differ diff --git a/src/prototype/app/images/.gitkeep b/src/prototype/app/images/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/prototype/app/images/logo-blue.png b/src/prototype/app/images/logo-blue.png deleted file mode 100644 index 3231d8f96..000000000 Binary files a/src/prototype/app/images/logo-blue.png and /dev/null differ diff --git a/src/prototype/app/images/logo-blue@2x.png b/src/prototype/app/images/logo-blue@2x.png deleted file mode 100644 index 99f0dfbd6..000000000 Binary files a/src/prototype/app/images/logo-blue@2x.png and /dev/null differ diff --git a/src/prototype/app/images/logo.png b/src/prototype/app/images/logo.png deleted file mode 100644 index 9a9d02355..000000000 Binary files a/src/prototype/app/images/logo.png and /dev/null differ diff --git a/src/prototype/app/images/logo@2x.png b/src/prototype/app/images/logo@2x.png deleted file mode 100644 index bef1f5412..000000000 Binary files a/src/prototype/app/images/logo@2x.png and /dev/null differ diff --git a/src/prototype/app/images/places/bartrams-garden.png b/src/prototype/app/images/places/bartrams-garden.png deleted file mode 100644 index d22866ef1..000000000 Binary files a/src/prototype/app/images/places/bartrams-garden.png and /dev/null differ diff --git a/src/prototype/app/images/places/bristol-marsh.png b/src/prototype/app/images/places/bristol-marsh.png deleted file mode 100644 index f6f6c60f3..000000000 Binary files a/src/prototype/app/images/places/bristol-marsh.png and /dev/null differ diff --git a/src/prototype/app/images/places/independence-seaport-lg.jpg b/src/prototype/app/images/places/independence-seaport-lg.jpg deleted file mode 100644 index edf9bf76e..000000000 Binary files a/src/prototype/app/images/places/independence-seaport-lg.jpg and /dev/null differ diff --git a/src/prototype/app/images/places/john-heinz.png b/src/prototype/app/images/places/john-heinz.png deleted file mode 100644 index fa6d71b75..000000000 Binary files a/src/prototype/app/images/places/john-heinz.png and /dev/null differ diff --git a/src/prototype/app/images/places/schuylkill-center.png b/src/prototype/app/images/places/schuylkill-center.png deleted file mode 100644 index cfb280ac4..000000000 Binary files a/src/prototype/app/images/places/schuylkill-center.png and /dev/null differ diff --git a/src/prototype/app/images/posts/palmyra-cove-summary.png b/src/prototype/app/images/posts/palmyra-cove-summary.png deleted file mode 100644 index d7a1788da..000000000 Binary files a/src/prototype/app/images/posts/palmyra-cove-summary.png and /dev/null differ diff --git a/src/prototype/app/images/posts/winterize-hero.png b/src/prototype/app/images/posts/winterize-hero.png deleted file mode 100644 index 920a746f1..000000000 Binary files a/src/prototype/app/images/posts/winterize-hero.png and /dev/null differ diff --git a/src/prototype/app/images/posts/winterize-inline-01.png b/src/prototype/app/images/posts/winterize-inline-01.png deleted file mode 100644 index 7988d9c60..000000000 Binary files a/src/prototype/app/images/posts/winterize-inline-01.png and /dev/null differ diff --git a/src/prototype/app/index.html b/src/prototype/app/index.html deleted file mode 100644 index 90071b664..000000000 --- a/src/prototype/app/index.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - - GoPhillyGo | Trip Planning for Bikes, Public Transit, and Walking | Clean Air Council - - - - - -
- -
-
-
- Walk. Ride. Pedal. Discover. -
- -
- Next time bring your bike onboard. -
-
- -
- -
-
-
-
-
- Walk -
-
- Bike -
- -
-
- Transit - -
-
- -
-
-
- - - -
-
- - - -
-
- - - -
-
-
- - - -
-

Places we love

-
    -
  • - John Heinz National Wildlife Refuge -

    John Heinz National Wildlife Refuge

    -
    - N min from origin -
    - -
  • -
  • - Schuylkill Center for Environmental Education -

    Schuylkill Center for Environmental Education

    -
    - N min from origin -
    - -
  • -
  • - Bristol Marsh Nature Preserve -

    Bristol Marsh Nature Preserve

    -
    - N min from origin -
    - -
  • -
  • - Bartram's Garden -

    Bartram's Garden

    -
    - N min from origin -
    - -
  • -
-
- - -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

- -
-
-
- -
-

Choose a route

-
-
- - - -
-
-
33 min
-
9.1 miles
-
via N 10th St
-
-
-
3:14pm – 3:48pm
-
-
-
-
-
- - - -
-
-
37 min
-
9.6 miles
-
via N 8th St
-
-
-
3:23pm – 4:00pm
-
-
-
-
-
-
- -
-
- -

Directions

- -
-
-
-
-
Depart 135 S 19th St
-
at 9:47a
-
-
-
-
-
Walk north on S 19th St
-
78 feet
-
-
-
Arrive 19th & Moravian St
-
-
-
-
-
Board SEPTA 17 (20th & Johnston)
-
at 9:48a
-
1.35 miles
-
-
-
Disembark 19th St & Tasker St
-
-
-
-
-
Walk southeast on Tasker St
-
98 feet
-
-
-
Arrive Tasker St & 19th St
-
-
-
-
-
Board SEPTA 1297 (33rd & Dickinson)
-
at 10:00a
-
0.8 miles
-
-
-
Disembark Tasker St & 28th St
-
-
-
-
-
Walk east on Tasker St
-
105 feet
-
-
-
Turn left on S Marston St
-
0.13 miles
-
-
-
-
-
Arrive S Marston St & Reed St
-
at 10:07a
-
-
-
-
- - - - - - - - - - diff --git a/src/prototype/app/js/main.js b/src/prototype/app/js/main.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/prototype/app/js/prototype.js b/src/prototype/app/js/prototype.js deleted file mode 100644 index a9a48e5e1..000000000 --- a/src/prototype/app/js/prototype.js +++ /dev/null @@ -1,100 +0,0 @@ -var map = L.map('map', { - center: [40.000, -75.1639], - zoom: 12, - zoomControl: false -}); -var CartoDB_Positron = L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', { - attribution: '© OpenStreetMap © CartoDB', - subdomains: 'abcd', - maxZoom: 19 -}).addTo(map); - -$(function() { - $('html').on('click', 'a, button', function(e) { - if ($(e.target).attr('href') == '#') { - e.preventDefault(); - } - }); - - $('html').on('click', '.body-home .directions-destination input', function(e) { - e.preventDefault(); - this.blur(); - $('body').removeClass('body-home').addClass('body-map body-has-sidebar-banner'); - }); - - $('body').on('click', '.route-summary', function(e) { - $('body').addClass('body-step-by-step').removeClass('body-has-sidebar-banner'); - e.preventDefault(); - }); - - $('body').on('click', '.back-to-directions-results', function(e) { - e.preventDefault(); - this.blur(); - $('body').removeClass('body-step-by-step').addClass('body-has-sidebar-banner'); - }); - - $('html').on('click', '.logo a', function(e) { - e.preventDefault(); - $('body').removeClass('body-map body-step-by-step body-has-sidebar-banner').addClass('body-home'); - }); - - $('.mode-toggle').on('click', '.mode-option', function(e) { - $(this).toggleClass('on') - .siblings('.mode-option').toggleClass('on'); - e.preventDefault(); - }); - - $('body').on('click', '.mode-option.transit', function(e) { - $(this).toggleClass('on off') - .find('i').toggleClass('icon-transit-on icon-transit-off'); - e.preventDefault(); - }); - - $('body').on('click', '.btn-options', function(e) { - $('body').addClass('body-modal body-modal-options'); - e.preventDefault(); - }); - - $('body').on('click', '.modal-panel', function(e) { - e.stopPropagation(); - }); - - $('body').on('click', '.btn-close-modal, .modal-overlay', function(e) { - $('body').removeClass('body-modal body-modal-options body-modal-share'); - e.preventDefault(); - }); - - $('body').on('click', '.share-directions', function(e) { - $('body').addClass('body-modal body-modal-share'); - e.preventDefault(); - }); - - $('body').on('click', '.btn-dismiss-sidebar-banner', function(e) { - $('body').removeClass('body-has-sidebar-banner'); - e.preventDefault(); - }); - - $('body').on('click', '.directions-input.directions-destination label', function(e) { - e.preventDefault(); - $('#output-directions-within').val($('#input-directions-within').val()); - $('.directions-form').toggleClass('directions-destination-mode-to directions-destination-mode-within'); - }); - - $('body').on('input', '#input-directions-within', function(e) { - $('#output-directions-within').val(e.target.value); - }); - - // The "post card" on the home page is a link to that post, - // but also has a nested link to the learn page. - // We can't nest elements, so the nested element is a - - - - - - - - - - - diff --git a/src/prototype/app/learn-index.html b/src/prototype/app/learn-index.html deleted file mode 100644 index 6b22b7df3..000000000 --- a/src/prototype/app/learn-index.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - GoPhillyGo | Trip Planning for Bikes, Public Transit, and Walking | Clean Air Council - - - -
-
-
- Walk. Ride. Pedal. Discover. -
- -
- Next time bring your bike onboard. -
-
- -
- -
-

Tips, Posts, and Announcements

- -
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
- -
- Video trip to Palmyra Cove -
-
- Community Profile -
-

Video trip to Palmyra Cove

-

- GoPhillyGo student ambassadors, Tykee James and Stephanie Mason, used GoPhillyGo.org to plan a trip to one of our featured destinations, Palmyra Cove Nature Park. Tykee and Stephanie began their journey on bike -

-
-
-
-
-
- - - - - - - diff --git a/src/prototype/app/sass/base/_base.scss b/src/prototype/app/sass/base/_base.scss deleted file mode 100644 index 96ba73ffc..000000000 --- a/src/prototype/app/sass/base/_base.scss +++ /dev/null @@ -1,19 +0,0 @@ -html { - width: 100%; - height: 100%; - font-size: 62.5%; - overflow: hidden; - box-sizing: border-box; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -body { - position: relative; - background-color: $body-color; - -webkit-overflow-scrolling: touch; -} diff --git a/src/prototype/app/sass/base/_normalize.scss b/src/prototype/app/sass/base/_normalize.scss deleted file mode 100644 index b350333f0..000000000 --- a/src/prototype/app/sass/base/_normalize.scss +++ /dev/null @@ -1,419 +0,0 @@ -/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ - -/** -* 1. Change the default font family in all browsers (opinionated). -* 2. Prevent adjustments of font size after orientation changes in IE and iOS. -*/ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** -* Remove the margin in all browsers (opinionated). -*/ - -body { - margin: 0; -} - -/* HTML5 display definitions -========================================================================== */ - -/** -* Add the correct display in IE 9-. -* 1. Add the correct display in Edge, IE, and Firefox. -* 2. Add the correct display in IE. -*/ - -article, -aside, -details, /* 1 */ -figcaption, -figure, -footer, -header, -main, /* 2 */ -menu, -nav, -section, -summary { /* 1 */ - display: block; -} - -/** -* Add the correct display in IE 9-. -*/ - -audio, -canvas, -progress, -video { - display: inline-block; -} - -/** -* Add the correct display in iOS 4-7. -*/ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** -* Add the correct vertical alignment in Chrome, Firefox, and Opera. -*/ - -progress { - vertical-align: baseline; -} - -/** -* Add the correct display in IE 10-. -* 1. Add the correct display in IE. -*/ - -template, /* 1 */ -[hidden] { - display: none; -} - -/* Links -========================================================================== */ - -/** -* 1. Remove the gray background on active links in IE 10. -* 2. Remove gaps in links underline in iOS 8+ and Safari 8+. -*/ - -a { - background-color: transparent; /* 1 */ - -webkit-text-decoration-skip: objects; /* 2 */ -} - -/** -* Remove the outline on focused links when they are also active or hovered -* in all browsers (opinionated). -*/ - -a:active, -a:hover { - outline-width: 0; -} - -/* Text-level semantics -========================================================================== */ - -/** -* 1. Remove the bottom border in Firefox 39-. -* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. -*/ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** -* Prevent the duplicate application of `bolder` by the next rule in Safari 6. -*/ - -b, -strong { - font-weight: inherit; -} - -/** -* Add the correct font weight in Chrome, Edge, and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/** -* Add the correct font style in Android 4.3-. -*/ - -dfn { - font-style: italic; -} - -/** -* Correct the font size and margin on `h1` elements within `section` and -* `article` contexts in Chrome, Firefox, and Safari. -*/ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** -* Add the correct background and color in IE 9-. -*/ - -mark { - background-color: #ff0; - color: #000; -} - -/** -* Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/** -* Prevent `sub` and `sup` elements from affecting the line height in -* all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content -========================================================================== */ - -/** -* Remove the border on images inside links in IE 10-. -*/ - -img { - border-style: none; -} - -/** -* Hide the overflow in IE. -*/ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content -========================================================================== */ - -/** -* 1. Correct the inheritance and scaling of font size in all browsers. -* 2. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** -* Add the correct margin in IE 8. -*/ - -figure { - margin: 1em 40px; -} - -/** -* 1. Add the correct box sizing in Firefox. -* 2. Show the overflow in Edge and IE. -*/ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/* Forms -========================================================================== */ - -/** -* 1. Change font properties to `inherit` in all browsers (opinionated). -* 2. Remove the margin in Firefox and Safari. -*/ - -button, -input, -select, -textarea { - font: inherit; /* 1 */ - margin: 0; /* 2 */ -} - -/** -* Restore the font weight unset by the previous rule. -*/ - -optgroup { - font-weight: bold; -} - -/** -* Show the overflow in IE. -* 1. Show the overflow in Edge. -*/ - -button, -input { /* 1 */ - overflow: visible; -} - -/** -* Remove the inheritance of text transform in Edge, Firefox, and IE. -* 1. Remove the inheritance of text transform in Firefox. -*/ - -button, -select { /* 1 */ - text-transform: none; -} - -/** -* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` -* controls in Android 4. -* 2. Correct the inability to style clickable types in iOS and Safari. -*/ - -button, -html [type="button"], /* 1 */ -[type="reset"], -[type="submit"] { - -webkit-appearance: button; /* 2 */ -} - -/** -* Remove the inner border and padding in Firefox. -*/ - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** -* Restore the focus styles unset by the previous rule. -*/ - -button:-moz-focusring, -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** -* Change the border, margin, and padding in all browsers (opinionated). -*/ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** -* 1. Correct the text wrapping in Edge and IE. -* 2. Correct the color inheritance from `fieldset` elements in IE. -* 3. Remove the padding so developers are not caught out when they zero out -* `fieldset` elements in all browsers. -*/ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** -* Remove the default vertical scrollbar in IE. -*/ - -textarea { - overflow: auto; -} - -/** -* 1. Add the correct box sizing in IE 10-. -* 2. Remove the padding in IE 10-. -*/ - -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** -* Correct the cursor style of increment and decrement buttons in Chrome. -*/ - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** -* 1. Correct the odd appearance in Chrome and Safari. -* 2. Correct the outline style in Safari. -*/ - -[type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** -* Remove the inner padding and cancel buttons in Chrome and Safari on OS X. -*/ - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** -* Correct the text style of placeholders in Chrome, Edge, and Safari. -*/ - -::-webkit-input-placeholder { - color: inherit; - opacity: 0.54; -} - -/** -* 1. Correct the inability to style clickable types in iOS and Safari. -* 2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} diff --git a/src/prototype/app/sass/base/_typography.scss b/src/prototype/app/sass/base/_typography.scss deleted file mode 100644 index 99a538121..000000000 --- a/src/prototype/app/sass/base/_typography.scss +++ /dev/null @@ -1,23 +0,0 @@ -@import url("https://fonts.googleapis.com/css?family=Cabin:500,600,700,700i"); -@import url("../font/fontello/css/gpg.css"); - -$font-size-base: 1.5rem; - -$font-weight-medium: 500; -$font-weight-semibold: 600; -$font-weight-bold: 700; - -body { - color: $font-color; - font-family: 'Cabin', sans-serif; - font-size: $font-size-base; - font-weight: $font-weight-medium; - line-height: 1.5; -} - - -.units { - font-size: smaller; - font-variant: small-caps; - font-weight: $font-weight-medium; -} diff --git a/src/prototype/app/sass/components/_app-footer.scss b/src/prototype/app/sass/components/_app-footer.scss deleted file mode 100644 index 91f7be658..000000000 --- a/src/prototype/app/sass/components/_app-footer.scss +++ /dev/null @@ -1,165 +0,0 @@ -.app-footer { - display: flex; - position: relative; - flex: 0 0 auto; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; - width: 100%; - max-width: $home-main-max-width; - margin-right: auto; - margin-left: auto; - padding: $home-section-padding $home-section-padding 10px; - background-color: $home-section-bg-color; - text-align: center; - - @include respond-to('xs') { - width: 100%; - max-width: 100%; - } - - @include respond-to('xxs') { - padding-right: calc((100vw - #{$place-card-width}) / 2); - padding-left: calc((100vw - #{$place-card-width}) / 2); - background-color: $gophillygo-blue; - color: rgba(255, 255, 255, .9); - } - - .body-map & { - width: $sidebar-width; - max-width: $sidebar-width; - margin: 0; - padding: 0; - - @include respond-to('xxs') { - display: none; - } - } - - h2 { - margin: 0 0 10px; - font-size: 1.6rem; - font-weight: $font-weight-bold; - line-height: 1.5; - text-transform: uppercase; - } - - p { - margin: 0 0 20px; - font-size: 1.3rem; - font-weight: $font-weight-medium; - - @include respond-to('xxs') { - font-size: 1.2rem; - } - } -} - -.footer-subscribe { - display: flex; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; - margin-bottom: $home-section-margin * 1.5; - - .subscribe-form { - display: flex; - flex: 0 0 40px; - flex-flow: row nowrap; - align-items: stretch; - justify-content: space-between; - width: 100%; - max-width: 480px; - margin-right: auto; - margin-left: auto; - } - - .subscribe-input { - flex: 1; - margin-right: 10px; - padding: 0 1em; - font-size: 1.3rem; - } - - .subscribe-btn { - flex: 0 0 auto; - border: 1px solid $gophillygo-green; - padding: 0 1em; - background-color: $gophillygo-green; - color: $white; - font-size: 1.2rem; - font-weight: $font-weight-semibold; - line-height: 2.5; - text-align: center; - text-transform: uppercase; - } - - .body-map & { - display: none; - } -} - -.footer-follow { - margin-right: auto; - margin-bottom: $home-section-margin; - margin-left: auto; - - .social-sites { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - margin: 10px 0; - padding: 0; - list-style: none; - } - - li { - margin: 0 20px; - font-size: 3rem; - } - - a { - @include delinkify; - } - - .body-map & { - display: none; - } -} - -.footer-about { - width: 100%; - max-width: 480px; - margin-right: auto; - margin-left: auto; - line-height: 1.65; - - .goto-about { - @include delinkify; - } - - .body-map & { - display: none; - } -} - -.footer-compact { - display: none; - background-color: $gophillygo-blue; - color: $white; - - .body-map & { - display: flex; - flex: 0 0 $footer-sidebar-height; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - } - - a { - @include delinkify; - padding: 0 2em; - text-transform: uppercase; - } -} diff --git a/src/prototype/app/sass/components/_app-header.scss b/src/prototype/app/sass/components/_app-header.scss deleted file mode 100644 index 54521164e..000000000 --- a/src/prototype/app/sass/components/_app-header.scss +++ /dev/null @@ -1,158 +0,0 @@ -.app-header { - display: flex; - position: relative; - flex: 0 0 auto; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; -} - -.brand { - display: flex; - flex: 0 0 90px; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - background-color: $gophillygo-blue; - color: $header-brand-text-color; - font-size: 1.5rem; - font-weight: $font-weight-medium; - - @include respond-to('xs') { - font-size: 1.3rem; - } - - @include respond-to('xxs') { - display: block; - position: absolute; - top: 10px; - left: 10px; - background-color: inherit; - } - - .body-map & { - display: block; - position: absolute; - top: 5px; - left: 10px; - background-color: inherit; - z-index: 10; - } - - .logo { - display: flex; - flex: 0 0 66px; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - height: 66px; - margin-right: 24px; - margin-left: 24px; - background-image: url('../images/logo.png'); - background-repeat: no-repeat; - background-size: contain; - - a { - display: block; - width: 100%; - height: 100%; - } - - @include retina { - background-image: url('../images/logo@2x.png'); - } - - @include respond-to('xs') { - margin-right: 12px; - margin-left: 12px; - } - - @include respond-to('xxs') { - width: 50px; - max-width: 50px; - height: 50px; - margin: 0; - background-image: url('../images/logo-blue.png'); - - @include retina { - background-image: url('../images/logo-blue@2x.png'); - } - } - - .body-map & { - width: 46px; - max-width: 46px; - height: 46px; - margin: 0; - background-image: url('../images/logo.png'); - - @include retina { - background-image: url('../images/logo@2x.png'); - } - } - } - - .slogan-start, .slogan-end { - min-width: 250px; - - @include respond-to('xxs') { - display: none; - } - - .body-map & { - display: none; - } - } - - .slogan-start { - text-align: right; - } -} - -.primary-nav { - display: flex; - flex: 0 0 60px; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - background-color: $primary-nav-bg-color; - - @include respond-to('xxs') { - justify-content: space-around; - margin-left: 70px; - padding-top: 5px; - padding-right: 5px; - background-color: inherit; - } - - .body-map & { - display: none; - } - - .nav-item { - @include delinkify; - margin-right: 25px; - margin-left: 25px; - border-top: 3px solid transparent; - border-bottom: 3px solid transparent; - color: $primary-nav-link-color; - font-size: 1.5rem; - font-weight: $font-weight-semibold; - line-height: 2; - text-decoration: none; - text-transform: uppercase; - cursor: pointer; - - @include respond-to('xxs') { - margin-right: 0; - margin-left: 0; - border-width: 2px 0; - font-size: 1.4rem; - } - - &.on { - border-bottom-color: $primary-nav-link-color; - font-weight: $font-weight-bold; - } - } -} diff --git a/src/prototype/app/sass/components/_directions-form.scss b/src/prototype/app/sass/components/_directions-form.scss deleted file mode 100644 index 8350f794f..000000000 --- a/src/prototype/app/sass/components/_directions-form.scss +++ /dev/null @@ -1,361 +0,0 @@ -.directions-form-element { - width: 100%; - max-width: $home-main-max-width; - margin: $home-section-margin auto; - - @include respond-to('xs') { - margin-bottom: ($home-section-margin - 10px); - } - - @include respond-to('xxs') { - margin: ($home-section-margin - 10px) auto; - } - - .body-map & { - max-width: $sidebar-width; - margin: 0; - - @include respond-to('xxs') { - width: 100%; - max-width: 100%; - } - } -} - -.directions-form { - display: flex; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; - max-width: $home-main-max-width; - padding: 0 20px 10px; - background-color: $gophillygo-blue; - box-shadow: $place-card-drop-shadow; - - @include respond-to('xs') { - padding: 0 10px; - } - - @include respond-to('xxs') { - padding: 0 10px; - } - - .body-map & { - width: $sidebar-width; - max-width: $sidebar-width; - height: $directions-form-sidebar-height; - margin: 0; - padding: 0 5px 10px; - - @include respond-to('xxs') { - width: 100%; - max-width: 100%; - } - } - - .mode-picker { - display: flex; - flex: 0 0 60px; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - margin-bottom: 10px; - color: $mode-picker-text-color; - font-size: 1.4rem; - font-weight: $font-weight-medium; - line-height: 3rem; - text-transform: uppercase; - - @include respond-to('xs') { - justify-content: flex-end; - margin-right: 10px; - } - - .body-map & { - flex-basis: 55px; - justify-content: flex-end; - margin-right: -10px; - padding-top: 3px; - - .mode-label { - display: none; - } - } - - i { - font-size: 2.2rem; - - .body-map & { - font-size: 2.5rem; - } - - &::before { - margin-right: .3em; - margin-left: 0; - line-height: 3rem; - } - - &.icon-walk::before { - margin-right: .2em; - - .body-map & { - margin-right: 0; - } - } - - &.icon-bike::before { - vertical-align: middle; - - .body-map & { - margin-right: 0; - } - } - - &.icon-transit-on, - &.icon-transit-off { - - &::before { - width: 1.5em; - vertical-align: middle; - } - } - } - } - - .mode-toggle { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: space-between; - margin-right: 80px; - - @include respond-to('xs') { - margin-right: 60px; - } - - .body-map & { - margin-right: 50px; - - @include respond-to('xxs') { - margin-right: 70px; - } - } - - .mode-option.on { - border-bottom-color: $mode-picker-text-color; - } - - .walk { - margin-right: 30px; - } - - .bike { - } - } - - .mode-option { - padding-right: .25em; - border-top: 2px solid transparent; - border-bottom: 2px solid transparent; - cursor: pointer; - - .body-map & { - padding-right: 0; - } - - &.transit.off { - opacity: .5; - } - } - - .btn-options { - display: flex; - align-items: center; - justify-content: center; - width: 50px; - height: 100%; - margin-top: -5px; - margin-left: 30px; - padding-top: 3px; - background-color: $gophillygo-blue-dark; - cursor: pointer; - - i.icon-sliders { - font-size: 1.8rem; - } - - @include respond-to('xxs') { - margin-left: 40px; - } - - i::before { - margin-right: 0; - } - - .body-home & { - display: none; - } - } - - .directions-input { - display: flex; - position: relative; - flex: 0 0 40px; - flex-flow: row nowrap; - align-items: stretch; - justify-content: space-between; - margin-bottom: 15px; - background-color: $directions-form-text-input-background-color; - - .body-map & { - flex: 0 0 30px; - margin-bottom: 0; - border: 1px solid $white; - background-color: $gophillygo-blue; - - &.directions-origin { - border-bottom-width: 0; - } - } - - label { - flex: 0 0 3em; - padding-left: 7px; - margin-right: 1em; - font-size: 1.4rem; - font-weight: $font-weight-bold; - line-height: 40px; - text-align: left; - cursor: text; - - .body-map & { - font-size: 1.3rem; - font-weight: $font-weight-medium; - line-height: 30px; - color: rgba(255, 255, 255, .9); - } - } - - input { - flex: 1; - border: 0; - font-size: 1.4rem; - - .body-map & { - background-color: $gophillygo-blue; - color: $white; - font-weight: $font-weight-medium; - line-height: 30px; - - &::placeholder { - color: $white; - } - } - - &:focus { - outline: none; - } - } - - .btn-geolocate { - padding: 0 .3em; - border: 0; - background-color: inherit; - font-size: 1.8rem; - color: $lt-gray; - cursor: pointer; - - .body-map & { - display: none; - } - } - - .btn-reverse { - display: none; - position: absolute; - top: -16px; - right: -3px; - width: 30px; - height: 30px; - padding: 0; - border: 1px solid $white; - border-radius: 100%; - background-color: $gophillygo-blue; - color: $white; - font-size: 2rem; - line-height: 20px; - cursor: pointer; - - .body-map & { - display: block; - } - } - - } - - .directions-destination { - &.directions-destination-within { - display: none; - } - - &.directions-destination-to { - display: flex; - } - } - - @include respond-to('xxs-up') { - .body-map & { - - .directions-destination label { - position: relative; - background-color: $gophillygo-blue-dark; - cursor: pointer; - - // Caret if we go with menu instead of toggle - // &:after { - // position: absolute; - // right: 5px; - // color: inherit; - // font-size: 1.1rem; - // content: '▾'; - // } - } - - &.directions-destination-mode-within { - - .directions-destination.directions-destination-within { - display: flex; - } - - .directions-destination.directions-destination-to { - display: none; - } - - .directions-destination label { - padding-right: 1em; - margin-right: .2em; - } - - #output-directions-within { - position: relative; - width: 6rem; - margin-right: 1rem; - color: $white; - font-size: 1.4rem; - font-weight: $font-weight-medium; - line-height: 30px; - text-align: right; - - &:after { - content: ' min'; - } - } - - #input-directions-within { - @include inputrange(); - margin-right: 1rem; - } - } - } - } -} diff --git a/src/prototype/app/sass/components/_directions-results.scss b/src/prototype/app/sass/components/_directions-results.scss deleted file mode 100644 index 12e654053..000000000 --- a/src/prototype/app/sass/components/_directions-results.scss +++ /dev/null @@ -1,102 +0,0 @@ -.directions-results { - @include sidebar-main; - - .body-home &, - .body-map.body-step-by-step & { - display: none; - } - - @include respond-to('xxs') { - flex: 0 0 $route-summary-height; - order: 10; - width: 100%; - height: $route-summary-height; - overflow: hidden; - z-index: 100; - } - - h1 { - margin: 0; - font-size: 2rem; - font-weight: $font-weight-bold; - line-height: 4; - text-align: center; - - @include respond-to('xxs') { - display: none; - } - } - - .route-summary { - display: flex; - flex-flow: row nowrap; - align-items: stretch; - justify-content: flex-start; - height: $route-summary-height; - margin-bottom: 20px; - padding: 6px 10px 4px 9px; - background-color: $white; - box-shadow: $place-card-drop-shadow; - cursor: pointer; - - @include respond-to('xxs') { - margin: 0; - } - - .route-summary-path { - flex: 0 0 4px; - margin-right: 13px; - } - - .route-summary-details { - display: flex; - flex: 1 1 auto; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; - } - - .route-summary-primary-details { - display: flex; - flex: 1 0 auto; - flex-flow: row nowrap; - align-items: center; - justify-content: flex-start; - font-size: 1.8rem; - } - - .route-summary-secondary-details { - display: flex; - flex: 1 0 auto; - flex-flow: row nowrap; - align-items: center; - justify-content: space-between; - color: $lt-gray; - font-weight: $font-weight-medium; - } - - .route-duration { - margin-right: 1em; - color: $gophillygo-blue; - font-weight: $font-weight-bold; - } - - .route-distance { - margin-right: 1em; - color: $lt-gray; - font-weight: $font-weight-semibold; - } - - .route-name { - font-weight: $font-weight-semibold; - } - - .route-start-stop { - font-size: 1.4rem; - } - - .route-modes { - font-size: 1.6rem; - } - } -} diff --git a/src/prototype/app/sass/components/_directions-step-by-step.scss b/src/prototype/app/sass/components/_directions-step-by-step.scss deleted file mode 100644 index 8f447b3ee..000000000 --- a/src/prototype/app/sass/components/_directions-step-by-step.scss +++ /dev/null @@ -1,207 +0,0 @@ -.body-step-by-step { - - @include respond-to('xxs') { - - .directions-form { - display: none; - } - - .sidebar-banner { - display: none; - } - - .the-map { - flex: 1 1 100px; - } - } -} - -.directions-step-by-step { - @include sidebar-main; - display: none; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; - - .body-step-by-step & { - display: block; - } - - @include respond-to('xxs') { - flex: 1 0 auto; - order: 10; - width: 100%; - overflow: auto; - z-index: 100; - - .sidebar-banner { - display: none; - } - - .directions-list-of-steps { - padding-top: 4rem; - } - } - - .step-by-step-header { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: space-between; - - @include respond-to('xxs') { - position: fixed; - width: 100%; - background-color: $gophillygo-blue; - color: $white; - z-index: 100; - } - - button { - flex: 0 0 40px; - border: 0; - border-radius: 0; - background: none; - cursor: pointer; - - @include respond-to('xxs') { - color: $white; - } - } - - h1 { - flex: 1 1 auto; - margin: 0; - font-size: 1.8rem; - font-weight: $font-weight-bold; - line-height: 4; - text-align: center; - - @include respond-to('xs') { - font-size: 2rem; - line-height: 3; - } - - @include respond-to('xxs') { - font-size: 1.5rem; - font-weight: $font-weight-medium; - line-height: 3; - text-transform: uppercase; - } - } - } - - .directions-leg { - display: block; - padding: 13px 0 13px 43px; - border-top: 1px solid #ddd; - background: $white; - } - - .directions-step { - position: relative; - padding-right: 20px; - - &::before { - position: absolute; - top: 1px; - left: -43px; - width: 40px; - margin: 0; - padding: 0; - color: inherit; - font-family: gpg; - font-size: 2rem; - line-height: 1; - text-align: center; - content: ''; - } - - & + .directions-step { - margin-top: .75em; - padding-top: .85em; - border-top: 1px solid #ddd; - - &::before { - top: 11px; - } - } - } - - .directions-instruction { - font-size: 1.5rem; - font-weight: $font-weight-bold; - line-height: 1.5; - } - - .directions-time { - margin-top: .5em; - font-size: 1.5rem; - font-weight: $font-weight-bold; - line-height: 1.5; - } - - .directions-distance { - margin-top: .5em; - color: $lt-gray; - font-size: 1.3rem; - line-height: 2; - } - - .directions-step-origin { - &::before { - color: $gophillygo-green; - content: '\e80a'; - } - } - - .directions-step-destination { - &::before { - color: $gophillygo-red; - content: '\e80a'; - } - } - - .directions-step-walk { - &::before { - content: '\e803'; - } - } - - .directions-step-turn-left { - &::before { - content: '\e809'; - } - } - - .directions-step-turn-right { - &::before { - content: '\e808'; - } - } - - .directions-step-bike { - &::before { - content: '\e801'; - } - } - - .directions-step-indego { - &::before { - color: $indego-purple; - content: '\e80f'; - } - } - - .directions-step-bus { - &::before { - content: '\e802'; - } - } - - .directions-step-train { - &::before { - content: '\f238'; - } - } -} diff --git a/src/prototype/app/sass/components/_map.scss b/src/prototype/app/sass/components/_map.scss deleted file mode 100644 index e70698531..000000000 --- a/src/prototype/app/sass/components/_map.scss +++ /dev/null @@ -1,43 +0,0 @@ -.the-map { - .body-home & { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - background-color: $gophillygo-blue; - opacity: .7; - z-index: -1; - - &::after { - display: block; - position: absolute; - width: 100%; - height: 100%; - background-color: transparentize($gophillygo-blue, .8); - content: ''; - z-index: 500; - } - - @include respond-to('xxs') { - display: none; - } - } - - .body-map & { - position: relative; - flex: 0 0 100vh; - align-self: flex-end; - order: 10; - width: calc(100vw - #{$sidebar-width}); - border-left: 1px solid #ddd; - z-index: auto; - - @include respond-to('xxs') { - flex: 1 1 auto; - order: auto; - width: 100%; - border: 0; - } - } -} diff --git a/src/prototype/app/sass/components/_modal.scss b/src/prototype/app/sass/components/_modal.scss deleted file mode 100644 index 6343f1f8c..000000000 --- a/src/prototype/app/sass/components/_modal.scss +++ /dev/null @@ -1,233 +0,0 @@ -.modal-overlay { - display: none; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - align-items: center; - justify-content: center; - width: 100vw; - height: 100vh; - background-color: rgba(0, 0, 0, .5); - z-index: 30000; - - .body-modal & { - display: flex; - } -} - -.modal-panel { - display: none; - flex-flow: column nowrap; - align-items: stretch; - justify-content: space-between; - width: 240px; - min-height: 360px; - background-color: $white; - box-shadow: $modal-panel-drop-shadow; - - .body-modal-share &.modal-share, - .body-modal-options &.modal-options { - display: flex; - } - -} - -.modal-header { - display: flex; - flex: 0 0 90px; - flex-flow: column nowrap; - align-items: center; - justify-content: center; - color: $white; - text-transform: uppercase; - - .modal-sub-menu & { - text-transform: none; - } - - .modal-options & { - background-color: $gophillygo-green; - } - - .modal-share & { - background-color: $gophillygo-blue; - } - - [class^="icon-"], [class*=" icon-"] { - margin-bottom: .25em; - font-size: 2.5rem; - } -} - -.modal-footer { - display: flex; - flex-flow: row nowrap; - flex: 0 0 70px; - align-items: stretch; - justify-content: stretch; - border-top: 1px solid $v-lt-gray; - - button { - flex: 1 1 100%; - margin: 0; - padding: 0; - border: 0; - border-radius: 0; - background: none; - text-transform: uppercase; - cursor: pointer; - - &:hover { - background-color: #eee; - } - } -} - -.modal-contents { - flex: 1; - - p { - margin: 1.5em; - line-height: 1.7; - text-align: center; - } - - a { - @include delinkify; - color: $gophillygo-blue !important; - word-wrap: break-word; - cursor: pointer; - } -} - -.modal-options-timing-tabs { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: space-around; - height: 7rem; - margin: 0; - padding: 0; - list-style: none; - - li { - border-top: 2px solid transparent; - border-bottom: 2px solid transparent; - line-height: 2; - - &:hover { - cursor: pointer; - } - - &.selected { - border-bottom-color: $primary-nav-link-color; - font-weight: $font-weight-bold; - } - } -} - -.modal-options-timing-fields { - margin: 0; - padding: 0; - list-style: none; - text-align: center; - - li { - height: 7rem; - line-height: 5rem; - } - - select { - width: 50%; - } -} - -.modal-list { - list-style: none; - margin: 0; - padding: 0; - - &.modal-list-narrow li { - padding-left: 100px; - } - - li { - position: relative; - height: 7rem; - padding-right: 10px; - padding-left: 60px; - line-height: 7rem; - cursor: pointer; - - &:hover { - background-color: #eee; - } - - &.selected { - font-weight: $font-weight-bold; - } - - &::before { - position: absolute; - top: 0; - left: 0; - width: 60px; - height: 7rem; - margin: 0; - padding: 0; - color: #5a5a5a; - font-family: gpg; - font-size: 2rem; - line-height: 7rem; - text-align: center; - content: ''; - } - - &.selected::before { - color: $gophillygo-green; - } - - &.modal-list-choice.selected::before { - content: '\e810'; - } - - &.modal-list-indego::before { - font-size: 3rem; - content: '\e80f'; - } - - &.modal-list-timing::before { - content: '\e80e'; - } - - &.modal-list-ride::before { - content: '\e80d'; - } - - &.modal-list-accessibility::before { - content: '\f193'; - } - - &.modal-list-link::before { - content: '\e80c'; - } - - &.modal-list-twitter::before { - content: '\f099'; - } - - &.modal-list-facebook::before { - content: '\f230'; - } - - &.modal-list-google::before { - content: '\f0d5'; - } - - &.modal-list-email::before { - content: '\f0e0'; - } - } -} diff --git a/src/prototype/app/sass/components/_place-card.scss b/src/prototype/app/sass/components/_place-card.scss deleted file mode 100644 index 932ce6899..000000000 --- a/src/prototype/app/sass/components/_place-card.scss +++ /dev/null @@ -1,87 +0,0 @@ -.place-card { - display: flex; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; - width: $place-card-width; - margin: 0 0 20px; - background-color: $place-card-bg-color; - box-shadow: $place-card-drop-shadow; - - .body-map & { - width: 100%; - } - - h2 { - width: 100%; - margin: 0; - padding: 0 1em; - font-size: 1.5rem; - font-weight: $font-weight-bold; - line-height: 3; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - } - - &.no-origin .place-card-travel-logistics { - display: none; - margin-bottom: 12px; - } -} - -.place-card-photo { - display: block; - width: 100%; - height: auto; -} - -.place-card-travel-logistics { - padding: 0 1em; - color: $font-secondary-color; - font-size: 1.3rem; - font-weight: $font-weight-medium; - line-height: 1.2; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} - -.place-card-travel-logistics-duration { - font-weight: $font-weight-bold; -} - -.place-card-travel-logistics-origin { - font-weight: $font-weight-bold; -} - -.place-card-actions { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: center; -} - -.place-card-action { - @include delinkify; - width: 90px; - margin: 6px 20px 20px; - border: 1px solid $gophillygo-blue; - font-size: 1.2rem; - font-weight: $font-weight-semibold; - line-height: 2.75; - text-align: center; - text-transform: uppercase; - cursor: pointer; - - &.place-action-go { - background-color: $gophillygo-blue; - color: $white; - } - - &.place-action-details { - background-color: transparent; - } -} diff --git a/src/prototype/app/sass/components/_place-list.scss b/src/prototype/app/sass/components/_place-list.scss deleted file mode 100644 index c0cf99923..000000000 --- a/src/prototype/app/sass/components/_place-list.scss +++ /dev/null @@ -1,53 +0,0 @@ -.places { - max-width: $home-main-max-width; - margin: 0 auto $home-section-margin; - padding: 0 $home-section-padding 10px; - background-color: $home-section-bg-color; - - @include respond-to('xs') { - max-width: $place-card-width + (2 * $home-section-padding); - margin-bottom: $home-section-margin / 2; - } - - @include respond-to('xxs') { - background-color: inherit; - } - - .body-map & { - display: none; - } - - h1 { - margin: 0; - font-size: 2.5rem; - font-style: italic; - font-weight: $font-weight-bold; - line-height: 3; - text-align: center; - text-transform: uppercase; - - @include respond-to('xs') { - font-size: 2rem; - line-height: 3; - } - - .body-map & { - font-size: 1.4rem; - line-height: 4; - } - } - - .place-list { - display: flex; - flex-flow: row wrap; - align-items: flex-start; - justify-content: space-between; - margin: 0; - padding: 0; - - @include respond-to('xs') { - flex-flow: column nowrap; - align-items: center; - } - } -} diff --git a/src/prototype/app/sass/components/_preview-card.scss b/src/prototype/app/sass/components/_preview-card.scss deleted file mode 100644 index dd899d492..000000000 --- a/src/prototype/app/sass/components/_preview-card.scss +++ /dev/null @@ -1,106 +0,0 @@ -.preview-card-link { - @include delinkify; - display: flex; - flex: 1 0 auto; - flex-flow: column nowrap; - align-items: stretch; - justify-content: flex-start; - margin: 0 auto $home-section-margin; - - @include respond-to('xs') { - width: $place-card-width; - } - - .body-map & { - display: none; - } -} - -.preview-card { - display: flex; - flex: 1 0 auto; - flex-flow: row nowrap; - align-items: flex-start; - justify-content: flex-start; - max-width: $home-main-max-width; - padding: $home-section-padding $home-section-padding; - background-color: $white; - - &:hover { - @include button-hover; - } - - @include respond-to('xs') { - flex-flow: column nowrap; - align-items: stretch; - } - - .goto-post { - @include delinkify; - } - - .preview-photo { - width: $place-card-width; - height: auto; - margin-right: $home-section-padding; - - @include respond-to('xs') { - width: $place-card-width - ($home-section-padding * 2); - margin-bottom: 4px; - } - } - - .preview-details { - display: flex; - flex-flow: column nowrap; - align-items: stretch; - justify-content: space-between; - } - - .category-heading { - color: $gophillygo-red; - font-size: 1.4rem; - font-weight: $font-weight-bold; - text-transform: uppercase; - } - - h2 { - margin: 4px 0; - font-size: 2.1rem; - font-weight: $font-weight-bold; - line-height: 1.5; - text-transform: uppercase; - - @include respond-to('xs') { - font-size: 1.8rem; - line-height: 1.5; - } - } - - .lede { - flex: 1; - margin: 0; - font-size: 1.3rem; - font-weight: $font-weight-medium; - line-height: 1.8; - } - - .goto-more-posts { - @include delinkify; - display: block; - margin-top: 10px; - border: 0; - outline: 0; - background-color: $gophillygo-orange; - font-size: 1.4rem; - font-weight: $font-weight-bold; - line-height: 2.75; - text-align: center; - cursor: pointer; - appearance: none; - - &:hover { - @include button-hover; - } - } -} diff --git a/src/prototype/app/sass/components/_sidebar-banner.scss b/src/prototype/app/sass/components/_sidebar-banner.scss deleted file mode 100644 index eb0a8b0a6..000000000 --- a/src/prototype/app/sass/components/_sidebar-banner.scss +++ /dev/null @@ -1,41 +0,0 @@ -.sidebar-banner { - display: none; - flex-flow: row nowrap; - align-items: center; - justify-content: center; - width: $sidebar-width; - max-width: $sidebar-width; - height: $sidebar-banner-height; - background-color: $gophillygo-green; - color: $white; - font-size: 1.3rem; - text-align: center; - - .body-has-sidebar-banner & { - display: flex; - } - - @include respond-to('xxs') { - width: 100%; - max-width: 100%; - } - - &.indego-banner { - justify-content: space-between; - padding-right: 10px; - padding-left: 12px; - background-color: $indego-purple; - text-align: left; - - button { - flex: 0 0 20px; - padding: 0; - border: 0; - border-radius: 0; - background: none; - color: $white; - text-align: center; - cursor: pointer; - } - } -} diff --git a/src/prototype/app/sass/layouts/_info.scss b/src/prototype/app/sass/layouts/_info.scss deleted file mode 100644 index 1f10de0e8..000000000 --- a/src/prototype/app/sass/layouts/_info.scss +++ /dev/null @@ -1,202 +0,0 @@ -.body-info { - display: flex; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - flex-flow: column nowrap; - align-items: stretch; - justify-content: space-between; - width: 100%; - height: 100%; - background-color: $body-color; - overflow: auto; - -webkit-overflow-scrolling: touch; - - .main { - max-width: $home-main-max-width; - margin: 0 auto; - - @include respond-to('xs') { - margin-right: 20px; - margin-left: 20px; - } - - @include respond-to('xxs') { - width: 100%; - margin-right: auto; - margin-left: auto; - } - } - - h1 { - margin: 5rem auto; - font-size: 2.5rem; - font-style: italic; - font-weight: $font-weight-bold; - line-height: 1.5; - text-align: center; - - @include respond-to('xs') { - margin: 4rem auto; - font-size: 2rem; - line-height: 1.75; - } - - a { - @include delinkify; - } - } - - .preview-card { - @include respond-to('xxs') { - margin-bottom: $home-section-margin/2; - } - } - - .info-article { - background-color: $white; - line-height: 2; - margin-bottom: 140px; - padding-bottom: 40px; - box-shadow: $place-card-drop-shadow; - - @include respond-to('xxs') { - background-color: inherit; - box-shadow: none; - } - - @include respond-to('xxs') { - margin-bottom: 80px; - } - } - - .info-article-header { - text-align: center; - } - - .info-article-image-hero { - height: 400px; - background-repeat: no-repeat; - background-size: cover; - - @include respond-to('xxs') { - height: 200px; - } - } - - .info-article-category { - margin: 20px 60px 0; - color: $gophillygo-red; - font-size: 1.4rem; - line-height: 1; - text-transform: uppercase; - } - - .info-article-title { - margin: 20px 60px; - font-size: 3rem; - font-style: italic; - line-height: 2; - - @include respond-to('xxs') { - font-size: 2.5rem; - } - } - - .info-article-aside { - width: 200px; - margin: 0 60px 20px 20px; - padding-left: 20px; - float: right; - border-left: 2px solid $gophillygo-green; - color: #000; - font-size: 1.3rem; - font-style: italic; - line-height: 2.2; - - @include respond-to('xxs') { - width: 36%; - margin-right: 2rem; - } - } - - .info-article-section { - padding: 0 4rem; - - @include respond-to('xxs') { - padding: 0 2rem; - } - - p { - margin-bottom: 2em; - } - - a { - @include delinkify; - color: $gophillygo-blue !important; - } - - strong { - font-weight: $font-weight-bold; - } - - } - - .info-article-p-image-inline { - text-align: center; - - img { - max-width: 100%; - } - } - - .info-article-p-link-inline { - text-align: center; - - a { - @include delinkify; - color: $gophillygo-blue !important; - font-weight: $font-weight-bold; - } - } - - .summaries-list { - h3 { - margin: 40px auto; - font-size: 2rem; - font-style: italic; - text-align: center; - } - - .more-link { - text-align: center; - - a { - @include delinkify; - font-style: italic; - font-weight: $font-weight-bold; - text-transform: uppercase; - } - } - - } - - .faq { - padding-top: 4rem; - - dt { - color: $gophillygo-red; - font-weight: $font-weight-bold; - } - - dd { - margin: 1em 0 3em 0; - } - } - - .app-footer { - margin-top: 10rem; - } -} diff --git a/src/prototype/app/sass/main.scss b/src/prototype/app/sass/main.scss deleted file mode 100644 index 11c3089dc..000000000 --- a/src/prototype/app/sass/main.scss +++ /dev/null @@ -1,45 +0,0 @@ -// Vendors -@import -'vendors/inputrange'; - -// Utils -@import -'utils/color', -'utils/variables', -'utils/functions', -'utils/mixins', -'utils/breakpoints'; - - -// Base -@import -'base/normalize', -'base/typography', -'base/base'; - - -// Components -@import -'components/app-header', -'components/app-footer', -'components/map', -'components/directions-form', -'components/place-card', -'components/place-list', -'components/preview-card', -'components/directions-results', -'components/directions-step-by-step', -'components/sidebar-banner', -'components/modal'; - - -// Layouts -@import -'layouts/info'; - - -// Pages -@import -'pages/home', -'pages/map', -'pages/PROTOTYPE'; diff --git a/src/prototype/app/sass/pages/_PROTOTYPE.scss b/src/prototype/app/sass/pages/_PROTOTYPE.scss deleted file mode 100644 index 9f0a6197f..000000000 --- a/src/prototype/app/sass/pages/_PROTOTYPE.scss +++ /dev/null @@ -1,29 +0,0 @@ -.body-extras { - position: relative; - width: 100%; - height: 100%; - padding: 0 100px 100px; - overflow: scroll; - - h1 { - margin-top: 150px; - margin-bottom: 60px; - padding-top: 40px; - border-top: 2px solid #000; - font-size: 8rem; - } - - .modal-panel { - display: flex; - margin-bottom: 80px; - } - - .directions-step-by-step { - display: block; - height: auto; - } - - .step-by-step-header { - display: none; - } -} diff --git a/src/prototype/app/sass/pages/_home.scss b/src/prototype/app/sass/pages/_home.scss deleted file mode 100644 index 17328e4f4..000000000 --- a/src/prototype/app/sass/pages/_home.scss +++ /dev/null @@ -1,15 +0,0 @@ -.body-home { - display: flex; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - flex-flow: column nowrap; - align-items: stretch; - justify-content: space-between; - width: 100%; - height: 100%; - overflow: auto; - -webkit-overflow-scrolling: touch; -} diff --git a/src/prototype/app/sass/pages/_map.scss b/src/prototype/app/sass/pages/_map.scss deleted file mode 100644 index 869b05314..000000000 --- a/src/prototype/app/sass/pages/_map.scss +++ /dev/null @@ -1,18 +0,0 @@ -.body-map { - display: flex; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - flex-flow: column wrap; - align-items: flex-start; - justify-content: flex-start; - width: 100%; - height: 100%; - overflow: hidden; - - @include respond-to('xxs') { - flex-wrap: nowrap; - } -} diff --git a/src/prototype/app/sass/utils/_breakpoints.scss b/src/prototype/app/sass/utils/_breakpoints.scss deleted file mode 100644 index c65896559..000000000 --- a/src/prototype/app/sass/utils/_breakpoints.scss +++ /dev/null @@ -1,30 +0,0 @@ -$breakpoints: ( - 'xxs': (max-width: 480px), - 'xxs-up': (min-width: 481px), - - 'xs': (max-width: 767px), - - 'sm': "(min-width: 768px) and (max-width: 991px)", - 'sm-up': (min-width: 768px), - 'sm-down': (max-width: 991px), - - 'md': "(min-width: 992px) and (max-width: 1200px)", - 'md-up': (min-width: 992px), - 'md-down': (max-width: 1200px), - - 'lg': (min-width: 1201px), -); - -// Responsive Breakpoint Manager -// requires $breakpoints -// Usage: @include respond-to('small') {...} -@mixin respond-to($breakpoint) { - @if map-has-key($breakpoints, $breakpoint) { - @media #{inspect(map-get($breakpoints, $breakpoint))} { - @content; - } - } @else { - @warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. " - + "Available breakpoints are: #{map-keys($breakpoints)}."; - } -} diff --git a/src/prototype/app/sass/utils/_color.scss b/src/prototype/app/sass/utils/_color.scss deleted file mode 100644 index ebefb6b97..000000000 --- a/src/prototype/app/sass/utils/_color.scss +++ /dev/null @@ -1,36 +0,0 @@ -$gophillygo-blue: #2e68a3; -$gophillygo-green: #60a244; -$gophillygo-yellow: #efa722; -$gophillygo-purple: #6a4388; -$gophillygo-red: #e23331; -$gophillygo-orange: #efa722; -$gophillygo-redorange: #f05223; - -$gophillygo-blue-dark: #245280; - -$indego-purple: #16216a; - - -$white: #fff; -$lt-gray: #777; -$v-lt-gray: #ccc; - -$body-color: #e1e5e9; - -$font-color: #111; -$font-secondary-color: #5a5a5a; - -$header-brand-text-color: rgba(255, 255, 255, 1); - -$primary-nav-link-color: #000; -$primary-nav-bg-color: rgba(255, 255, 255, .9); - - -$mode-picker-text-color: $white; -$directions-form-text-input-background-color: $white; - - - -$home-section-bg-color: rgba(250, 252, 255, .8); - -$place-card-bg-color: $white; diff --git a/src/prototype/app/sass/utils/_functions.scss b/src/prototype/app/sass/utils/_functions.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/prototype/app/sass/utils/_mixins.scss b/src/prototype/app/sass/utils/_mixins.scss deleted file mode 100644 index 7b6d81de1..000000000 --- a/src/prototype/app/sass/utils/_mixins.scss +++ /dev/null @@ -1,33 +0,0 @@ -@mixin delinkify { - &:link, &:visited, &:focus, &:hover, &:active { - color: inherit; - text-decoration: none; - } -} - -@mixin button-hover { - box-shadow: $place-card-drop-shadow; -} - -@mixin retina { - @media only screen and (-moz-min-device-pixel-ratio: 1.5), - only screen and (-o-min-device-pixel-ratio: 3/2), - only screen and (-webkit-min-device-pixel-ratio: 1.5), - only screen and (min-devicepixel-ratio: 1.5), - only screen and (min-resolution: 1.5dppx) { - @content; - } -} - -@mixin sidebar-main { - width: $sidebar-width; - height: calc(100vh - #{$footer-sidebar-height} - #{$directions-form-sidebar-height}); - margin: 0; - background-color: $body-color; - overflow: auto; - -webkit-overflow-scrolling: touch; - - .body-has-sidebar-banner & { - height: calc(100vh - #{$footer-sidebar-height} - #{$directions-form-sidebar-height} - #{$sidebar-banner-height}); - } -} diff --git a/src/prototype/app/sass/utils/_variables.scss b/src/prototype/app/sass/utils/_variables.scss deleted file mode 100644 index 17e83e8e6..000000000 --- a/src/prototype/app/sass/utils/_variables.scss +++ /dev/null @@ -1,41 +0,0 @@ -$home-main-max-width: 680px; -$home-section-margin: 30px; -$home-section-padding: 20px; - -$place-card-width: 310px; -$place-card-drop-shadow: 0 0 6px rgba(0, 0, 0, .3); - -$modal-panel-drop-shadow: 0 0 100px rgba(0, 0, 0, .3); - -$sidebar-width: 340px; -$footer-sidebar-height: 60px; -$directions-form-sidebar-height: 140px; - -$sidebar-banner-height: 50px; - -$route-summary-height: 80px; - - -// input[type=range] -$track-color: $white; -$thumb-color: $white; - -$thumb-radius: 20px; -$thumb-height: 17px; -$thumb-width: 17px; -$thumb-shadow-size: 0; -$thumb-shadow-blur: 0; -$thumb-shadow-color: #000; -$thumb-border-width: 2px; -$thumb-border-color: $gophillygo-blue; - -$track-width: 100%; -$track-height: 3px; -$track-shadow-size: 0; -$track-shadow-blur: 0; -$track-shadow-color: #000; -$track-border-width: 0; -$track-border-color: #000; - -$track-radius: 10px; -$inputrange-contrast: 5%; diff --git a/src/prototype/app/sass/vendors/.gitkeep b/src/prototype/app/sass/vendors/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/prototype/app/sass/vendors/_inputrange.scss b/src/prototype/app/sass/vendors/_inputrange.scss deleted file mode 100644 index 6e1057e1a..000000000 --- a/src/prototype/app/sass/vendors/_inputrange.scss +++ /dev/null @@ -1,125 +0,0 @@ -// ADAPTED FROM: -// Styling Cross-Browser Compatible Range Inputs with Sass -// Github: https://github.com/darlanrod/input-range-sass -// Author: Darlan Rod https://github.com/darlanrod -// Version 1.1.0 -// MIT License - -$track-color: #424242 !default; -$thumb-color: #555bc8 !default; - -$thumb-radius: 8px !default; -$thumb-height: 30px !default; -$thumb-width: 30px !default; -$thumb-shadow-size: 1px !default; -$thumb-shadow-blur: 1px !default; -$thumb-shadow-color: #111 !default; -$thumb-border-width: 1px !default; -$thumb-border-color: #fff !default; - -$track-width: 100% !default; -$track-height: 10px !default; -$track-shadow-size: 2px !default; -$track-shadow-blur: 2px !default; -$track-shadow-color: #222 !default; -$track-border-width: 1px !default; -$track-border-color: #000 !default; - -$track-radius: 5px !default; -$inputrange-contrast: 5% !default; - -@mixin shadow($shadow-size, $shadow-blur, $shadow-color) { - box-shadow: $shadow-size $shadow-size $shadow-blur $shadow-color, 0 0 $shadow-size lighten($shadow-color, 5%); -} - -@mixin track() { - width: $track-width; - height: $track-height; - cursor: pointer; - transition: all .2s ease; -} - -@mixin thumb() { - @include shadow($thumb-shadow-size, $thumb-shadow-blur, $thumb-shadow-color); - border: $thumb-border-width solid $thumb-border-color; - height: $thumb-height; - width: $thumb-width; - border-radius: $thumb-radius; - background: $thumb-color; - cursor: pointer; -} - -// [type=range] { -@mixin inputrange() { - -webkit-appearance: none; - margin: $thumb-height / 2 0; - width: $track-width; - - &:focus { - outline: none; - } - - &::-webkit-slider-runnable-track { - @include track(); - @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color); - background: $track-color; - border: $track-border-width solid $track-border-color; - border-radius: $track-radius; - } - - &::-webkit-slider-thumb { - @include thumb(); - -webkit-appearance: none; - margin-top: ((-$track-border-width * 2 + $track-height) / 2) - ($thumb-height / 2); - } - - &:focus::-webkit-slider-runnable-track { - background: lighten($track-color, $inputrange-contrast); - } - - &::-moz-range-track { - @include track(); - @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color); - background: $track-color; - border: $track-border-width solid $track-border-color; - border-radius: $track-radius; - } - - &::-moz-range-thumb { - @include thumb(); - } - - &::-ms-track { - @include track(); - background: transparent; - border-color: transparent; - border-width: $thumb-width 0; - color: transparent; - } - - &::-ms-fill-lower { - @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color); - background: darken($track-color, $inputrange-contrast); - border: $track-border-width solid $track-border-color; - border-radius: $track-radius * 2; - } - - &::-ms-fill-upper { - @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color); - background: $track-color; - border: $track-border-width solid $track-border-color; - border-radius: $track-radius * 2; - } - - &::-ms-thumb { - @include thumb(); - } - - &:focus::-ms-fill-lower { - background: $track-color; - } - - &:focus::-ms-fill-upper { - background: lighten($track-color, $inputrange-contrast); - } -} diff --git a/src/prototype/grunt/aliases.yaml b/src/prototype/grunt/aliases.yaml deleted file mode 100644 index 5d237eb6e..000000000 --- a/src/prototype/grunt/aliases.yaml +++ /dev/null @@ -1,5 +0,0 @@ -default: - - 'sass' - - 'postcss' - - 'browserSync' - - 'watch' \ No newline at end of file diff --git a/src/prototype/grunt/browserSync.js b/src/prototype/grunt/browserSync.js deleted file mode 100644 index 5806d0d24..000000000 --- a/src/prototype/grunt/browserSync.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - dev: { - bsFiles: { - src : [ - 'app/**/*.css', - 'app/**/*.html' - ] - }, - options: { - watchTask: true, - server: './app' - } - } -}; \ No newline at end of file diff --git a/src/prototype/grunt/concurrent.js b/src/prototype/grunt/concurrent.js deleted file mode 100644 index 851ff3da3..000000000 --- a/src/prototype/grunt/concurrent.js +++ /dev/null @@ -1,11 +0,0 @@ -// This file goes with grunt-concurrent. Not in use -module.exports = { - first: [ - 'sass', - 'postcss' - ], - second: [ - 'watch', - 'browserSync' - ] -}; \ No newline at end of file diff --git a/src/prototype/grunt/postcss.js b/src/prototype/grunt/postcss.js deleted file mode 100644 index 82448de7d..000000000 --- a/src/prototype/grunt/postcss.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - options: { - map: false, - processors: [ - require('autoprefixer')({browsers: ['last 2 versions']}), - require('cssnano')({ - 'safe': true - }) // minify the result - ], - }, - dist: { - src: 'app/css/*.css' - } -}; diff --git a/src/prototype/grunt/sass.js b/src/prototype/grunt/sass.js deleted file mode 100644 index 912f32a4f..000000000 --- a/src/prototype/grunt/sass.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - options: { - sourceMap: true - }, - dev: { - files: { - 'app/css/main.css': 'app/sass/main.scss' - } - } -}; diff --git a/src/prototype/grunt/watch.js b/src/prototype/grunt/watch.js deleted file mode 100644 index 5f36e5cff..000000000 --- a/src/prototype/grunt/watch.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - script: { - files: ['app/**/*.js'], - options: { - spawn: false, - } - }, - - css: { - files: ['app/**/*.scss'], - tasks: ['sass', 'postcss'], - options: { - spawn: false, - } - } -}; diff --git a/src/prototype/package.json b/src/prototype/package.json deleted file mode 100644 index 9a7c890fe..000000000 --- a/src/prototype/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "mantle", - "version": "0.1.0", - "description": "Azavea's front end framework for GIS applications", - "devDependencies": { - "autoprefixer": "^6.3.6", - "cssnano": "^3.5.2", - "grunt": "^0.4.5", - "grunt-browser-sync": "^2.2.0", - "grunt-contrib-watch": "^1.0.0", - "grunt-newer": "^1.2.0", - "grunt-postcss": "^0.8.0", - "grunt-sass": "^1.1.0", - "load-grunt-config": "^0.19.1", - "load-grunt-tasks": "^3.5.0", - "time-grunt": "^1.3.0" - } -}