diff --git a/build/apps/parking/garages.html b/build/apps/parking/garages.html
new file mode 100755
index 00000000..5f20143e
--- /dev/null
+++ b/build/apps/parking/garages.html
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/apps/parking/garages_map.html b/build/apps/parking/garages_map.html
new file mode 100755
index 00000000..2cf8fc5e
--- /dev/null
+++ b/build/apps/parking/garages_map.html
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Powered By SFPark.org
+
+
+
+
+
diff --git a/build/apps/parking/index.html b/build/apps/parking/index.html
new file mode 100755
index 00000000..06e2cd55
--- /dev/null
+++ b/build/apps/parking/index.html
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/apps/parking/react/components/garage-hours.js b/build/apps/parking/react/components/garage-hours.js
new file mode 100755
index 00000000..6ce4ee56
--- /dev/null
+++ b/build/apps/parking/react/components/garage-hours.js
@@ -0,0 +1,34 @@
+MyComponents.Hour = React.createClass({
+ render: function() {
+ return(
+
+
+ {this.props.hour.FROM}- {this.props.hour.TO}
+ Beggining: {this.props.hour.BEG}
+ End: {this.props.hour.END}
+
+
+
+ );
+ }
+});
+
+//TODO: This is a component to display an item in the hours array
+ // Raw props data is {JSON.stringify(this.props)}
+MyComponents.GarageHours = React.createClass({
+ render: function() {
+
+ var hours = this.props.hours.map(function(h,i){
+ return
+ })
+
+ return (
+
+ );
+ }
+});
diff --git a/build/apps/parking/react/components/garage-rates.js b/build/apps/parking/react/components/garage-rates.js
new file mode 100755
index 00000000..90a13340
--- /dev/null
+++ b/build/apps/parking/react/components/garage-rates.js
@@ -0,0 +1,44 @@
+MyComponents.Rate = React.createClass({
+ render: function() {
+ var desc = this.props.rate.DESC
+ var beginning = this.props.rate.BEG ? this.props.rate.BEG : ""
+ var end = this.props.rate.END ? this.props.rate.END : ""
+ var amount = this.props.rate.RATE
+ var requirement = this.props.rate.RQ
+ var data = ""
+ if(beginning != ""){
+ data += (beginning + ' - ' + end + ': $' + amount + ' ' + requirement)
+ }
+ else{
+ data += (desc + ': $' + amount + ' ' + requirement)
+ }
+ return (
+
+ );
+ }
+});
+
+
+MyComponents.GarageRates = React.createClass({
+ render: function() {
+
+ var rates = this.props.rates.map(function(r,i){
+ return
+ })
+
+ return (
+
+
+ Rates
+ { rates }
+
+
+ );
+ }
+});
diff --git a/build/apps/parking/react/components/garage-spaces.js b/build/apps/parking/react/components/garage-spaces.js
new file mode 100755
index 00000000..860272a2
--- /dev/null
+++ b/build/apps/parking/react/components/garage-spaces.js
@@ -0,0 +1,20 @@
+MyComponents.GarageSpaces = React.createClass({
+ render: function() {
+ var circle_fill = "green"
+ if(this.props.open == 0){
+ circle_fill = "red"
+ }
+ return (
+
+
+ Spaces
+
+
+
+ Open Spaces: {this.props.open}
+ Total Spaces: {this.props.total}
+
+
+ );
+ }
+});
diff --git a/build/apps/parking/react/components/garage-title.js b/build/apps/parking/react/components/garage-title.js
new file mode 100755
index 00000000..6f23bde4
--- /dev/null
+++ b/build/apps/parking/react/components/garage-title.js
@@ -0,0 +1,11 @@
+MyComponents.GarageTitle = React.createClass({
+ render: function() {
+ return (
+
+
+ {this.props.title}
+
+
+ );
+ }
+});
diff --git a/build/apps/parking/react/components/garage.js b/build/apps/parking/react/components/garage.js
new file mode 100755
index 00000000..daa55ea4
--- /dev/null
+++ b/build/apps/parking/react/components/garage.js
@@ -0,0 +1,23 @@
+// Dependencies:
+// - MyComponents.GarageSpaces
+// - MyComponents.GarageTitle
+// - MyComponents.GarageHours
+// - MyComponents.GarageRates
+
+MyComponents.Garage = React.createClass({
+ render: function() {
+ return (
+
+
+
+
+
+
+ );
+ }
+});
diff --git a/build/apps/parking/react/components/helloworld.js b/build/apps/parking/react/components/helloworld.js
new file mode 100755
index 00000000..7bd4e6ff
--- /dev/null
+++ b/build/apps/parking/react/components/helloworld.js
@@ -0,0 +1,7 @@
+MyComponents.HelloWorld = React.createClass({
+ render: function() {
+ return (
+ Hello, world!
+ );
+ }
+});
diff --git a/build/apps/parking/react/components/navbar.js b/build/apps/parking/react/components/navbar.js
new file mode 100755
index 00000000..6b932caa
--- /dev/null
+++ b/build/apps/parking/react/components/navbar.js
@@ -0,0 +1,14 @@
+MyComponents.NavBar = React.createClass({
+ render: function() {
+ return (
+
+
+
+ );
+ }
+});
diff --git a/build/apps/parking/react/components/team.js b/build/apps/parking/react/components/team.js
new file mode 100755
index 00000000..3c60d0ed
--- /dev/null
+++ b/build/apps/parking/react/components/team.js
@@ -0,0 +1,30 @@
+MyComponents.Team = React.createClass({
+ render: function() {
+
+ // inspect this.props.team to make sure we load the data correctly
+ console.log('members', this.props.members)
+
+ // For each 'member' in 'team', create a component to display
+ // information about this member.
+
+ var members = this.props.members.map(function(member, i){
+ return
+ {member.firstname} {member.lastname}
+ Github
+
+ })
+
+ return (
+
+ );
+ }
+});
+
+
diff --git a/build/apps/parking/react/garages.snapshot.json b/build/apps/parking/react/garages.snapshot.json
new file mode 100755
index 00000000..37bd800a
--- /dev/null
+++ b/build/apps/parking/react/garages.snapshot.json
@@ -0,0 +1,1319 @@
+{
+ "16th and Hoff Garage":{
+ "friendlyName":"16th and Hoff Garage",
+ "hours":[
+ {
+ "BEG":"8:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Monday",
+ "TO":"Thursday"
+ },
+ {
+ "BEG":"8:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Friday"
+ },
+ {
+ "BEG":"10:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Saturday"
+ },
+ {
+ "BEG":"11:00 AM",
+ "END":"11:00 PM",
+ "FROM":"Sunday"
+ }
+ ],
+ "open_spaces":"Unknown",
+ "points":[
+ 37.76425207,
+ -122.4207729
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"1.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"1.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"2.5",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"22",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"Unknown"
+ },
+ "Civic Center Garage":{
+ "friendlyName":"Civic Center Garage",
+ "hours":[
+ {
+ "BEG":"6:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Monday",
+ "TO":"Friday"
+ },
+ {
+ "BEG":"8:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Saturday"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"10:00 PM",
+ "FROM":"Sunday"
+ }
+ ],
+ "open_spaces":"218",
+ "points":[
+ 37.7802465669,
+ -122.4177671135
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"4",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"16",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before close"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"27",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Student",
+ "RATE":"8",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"6",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Special Event",
+ "RATE":"15",
+ "RQ":"Flat rate",
+ "RR":"Applies during events at nearby venues"
+ }
+ ],
+ "total_spaces":"843"
+ },
+ "Ellis OFarrell Garage":{
+ "friendlyName":"Ellis OFarrell Garage",
+ "hours":[
+ {
+ "BEG":"5:30 AM",
+ "END":"1:00 AM",
+ "FROM":"Sunday",
+ "TO":"Thursday"
+ },
+ {
+ "BEG":"5:30 AM",
+ "END":"2:00 AM",
+ "FROM":"Friday",
+ "TO":"Saturday"
+ }
+ ],
+ "open_spaces":"206",
+ "points":[
+ 37.7863925455,
+ -122.4071540583
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"19",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before close"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"34",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Sunday Daily Max / Lost Ticket",
+ "RATE":"16",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"7",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"820"
+ },
+ "Fifth and Mission Garage":{
+ "friendlyName":"Fifth and Mission Garage",
+ "hours":{
+ "BEG":"24 Hrs/Day",
+ "FROM":"7 Days/Wk"
+ },
+ "open_spaces":"932",
+ "points":[
+ 37.7832776731,
+ -122.405537559
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1.5",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"34",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"7",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"2573"
+ },
+ "Golden Gateway Garage":{
+ "friendlyName":"Golden Gateway Garage",
+ "hours":[
+ {
+ "BEG":"4:00 AM",
+ "END":"10:00 PM",
+ "FROM":"Monday",
+ "TO":"Friday"
+ },
+ {
+ "BEG":"7:00 AM",
+ "END":"10:00 PM",
+ "FROM":"Saturday"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"10:00 PM",
+ "FROM":"Sunday"
+ }
+ ],
+ "open_spaces":"346",
+ "points":[
+ 37.79544154,
+ -122.3986032
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"7",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"7",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"7",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"7",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at leasat 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"22",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before close"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"38",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Weekend",
+ "RATE":"8",
+ "RQ":"Flat rate",
+ "RR":"Sat: Enter after 7am, exit before close; Sun: Enter after 4am, exit before close"
+ },
+ {
+ "DESC":"Park & Ride Validation",
+ "RATE":"3",
+ "RQ":"Flat rate",
+ "RR":"Weekend only until 10pm"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"7",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"1160"
+ },
+ "Japan Center Annex Garage":{
+ "friendlyName":"Japan Center Annex Garage",
+ "hours":{
+ "BEG":"6:30 AM",
+ "END":"1:30 AM",
+ "FROM":"7 Days/Wk"
+ },
+ "open_spaces":"46",
+ "points":[
+ 37.7849547433,
+ -122.4328661663
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"13",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before close"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"23",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"6",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"175"
+ },
+ "Japan Center Garage":{
+ "friendlyName":"Japan Center Garage",
+ "hours":[
+ {
+ "BEG":"5:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Monday",
+ "TO":"Friday"
+ },
+ {
+ "BEG":"7:00 AM",
+ "END":"3:00 AM",
+ "FROM":"Saturday",
+ "TO":"Sunday"
+ }
+ ],
+ "open_spaces":"202",
+ "points":[
+ 37.7849220106,
+ -122.4301614271
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"13",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before close"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"23",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"6",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"745"
+ },
+ "Lombard Street Garage":{
+ "friendlyName":"Lombard Street Garage",
+ "hours":[
+ {
+ "BEG":"7:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Sunday",
+ "TO":"Monday"
+ },
+ {
+ "BEG":"7:00 AM",
+ "END":"1:00 AM",
+ "FROM":"Tuesday",
+ "TO":"Wednesday"
+ },
+ {
+ "BEG":"7:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Thursday"
+ },
+ {
+ "BEG":"7:00 AM",
+ "END":"3:00 AM",
+ "FROM":"Friday",
+ "TO":"Saturday"
+ }
+ ],
+ "open_spaces":"59",
+ "points":[
+ 37.7996475876,
+ -122.4348921128
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"2.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"1.25",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"15",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before close"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"22"
+ }
+ ],
+ "total_spaces":"205"
+ },
+ "Mission Bartlett Garage":{
+ "friendlyName":"Mission Bartlett Garage",
+ "hours":[
+ {
+ "BEG":"7:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Monday",
+ "TO":"Thursday"
+ },
+ {
+ "BEG":"7:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Friday"
+ },
+ {
+ "BEG":"8:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Saturday"
+ },
+ {
+ "BEG":"8:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Sunday"
+ }
+ ],
+ "open_spaces":"57",
+ "points":[
+ 37.7568400419,
+ -122.4204335636
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"4.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"2.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"4.5",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"24",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"205"
+ },
+ "Moscone Center Garage":{
+ "friendlyName":"Moscone Center Garage",
+ "hours":[
+ {
+ "BEG":"6:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Monday",
+ "TO":"Thursday"
+ },
+ {
+ "BEG":"6:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Friday"
+ },
+ {
+ "BEG":"8:00 AM",
+ "END":"2:30 AM",
+ "FROM":"Saturday"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"9:00 PM",
+ "FROM":"Sunday"
+ }
+ ],
+ "open_spaces":"105",
+ "points":[
+ 37.78452379,
+ -122.3994795
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"2.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"4.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"12",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am, exit before close (does not apply on major event days)"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"27"
+ }
+ ],
+ "total_spaces":"752"
+ },
+ "Performing Arts Garage":{
+ "friendlyName":"Performing Arts Garage",
+ "hours":{
+ "BEG":"6:00 AM",
+ "END":"12:00 AM",
+ "FROM":"Monday",
+ "TO":"Friday"
+ },
+ "open_spaces":"60",
+ "points":[
+ 37.77810302,
+ -122.4225312
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"2",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"4",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"13",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before close"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"20",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"6",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Special Event",
+ "RATE":"15",
+ "RQ":"Flat rate",
+ "RR":"Applies during events at nearby venues"
+ }
+ ],
+ "total_spaces":"600"
+ },
+ "St Marys Square Garage":{
+ "friendlyName":"St Marys Square Garage",
+ "hours":{
+ "BEG":"24 Hrs/Day",
+ "FROM":"7 Days/Wk"
+ },
+ "open_spaces":"119",
+ "points":[
+ 37.79199927,
+ -122.4045476
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"4",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"4.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"3.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"Weekends 9am-6pm",
+ "RATE":"1.5",
+ "RQ":"Off per hr"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Early Bird",
+ "RATE":"23",
+ "RQ":"Flat rate",
+ "RR":"Mon-Fri: Enter before 8:30am and exit before Midnight"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"39",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"392"
+ },
+ "Sutter Stockton Garage":{
+ "friendlyName":"Sutter Stockton Garage",
+ "hours":{
+ "BEG":"24 Hrs/Day",
+ "FROM":"7 Days/Wk"
+ },
+ "open_spaces":"365",
+ "points":[
+ 37.7897829226,
+ -122.4068556189
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"4",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"1",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"Sunday 9am-6pm",
+ "RATE":"1",
+ "RQ":"Off per hr"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"36",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Sunday Daily Max / Lost Ticket",
+ "RATE":"18",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"7",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"1650"
+ },
+ "Union Square Garage":{
+ "friendlyName":"Union Square Garage",
+ "hours":{
+ "BEG":"24 Hrs/Day",
+ "FROM":"7 Days/Wk"
+ },
+ "open_spaces":"134",
+ "points":[
+ 37.7876789151,
+ -122.407447946
+ ],
+ "rates":[
+ {
+ "BEG":"12:00 AM",
+ "END":"9:00 AM",
+ "RATE":"2.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"9:00 AM",
+ "END":"12:00 PM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"12:00 PM",
+ "END":"3:00 PM",
+ "RATE":"5.5",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"3:00 PM",
+ "END":"6:00 PM",
+ "RATE":"4",
+ "RQ":"Per hour"
+ },
+ {
+ "BEG":"6:00 PM",
+ "END":"12:00 AM",
+ "RATE":"3",
+ "RQ":"Per hour"
+ },
+ {
+ "DESC":"AM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Enter before 8:30am (stay at least 3 hours)"
+ },
+ {
+ "DESC":"PM Off-Peak",
+ "RATE":"2",
+ "RQ":"Off total",
+ "RR":"Mon-Fri: Exit after 6:30pm (stay at least 3 hours)"
+ },
+ {
+ "DESC":"Daily Maximum / Lost Ticket",
+ "RATE":"36",
+ "RQ":"Flat rate"
+ },
+ {
+ "DESC":"Motorcycle",
+ "RATE":"7",
+ "RQ":"Flat rate"
+ }
+ ],
+ "total_spaces":"670"
+ },
+ "_geofire":{
+ "16th and Hoff Garage":{
+ "g":"9q8yy4zbtn",
+ "l":[
+ 37.76425207,
+ -122.4207729
+ ]
+ },
+ "Civic Center Garage":{
+ "g":"9q8yymdjgk",
+ "l":[
+ 37.7802465669,
+ -122.4177671135
+ ]
+ },
+ "Ellis OFarrell Garage":{
+ "g":"9q8yywccdw",
+ "l":[
+ 37.7863925455,
+ -122.4071540583
+ ]
+ },
+ "Fifth and Mission Garage":{
+ "g":"9q8yyw5p81",
+ "l":[
+ 37.7832776731,
+ -122.405537559
+ ]
+ },
+ "Golden Gateway Garage":{
+ "g":"9q8znb2n3u",
+ "l":[
+ 37.79544154,
+ -122.3986032
+ ]
+ },
+ "Japan Center Annex Garage":{
+ "g":"9q8yvyx176",
+ "l":[
+ 37.7849547433,
+ -122.4328661663
+ ]
+ },
+ "Japan Center Garage":{
+ "g":"9q8yyn9147",
+ "l":[
+ 37.7849220106,
+ -122.4301614271
+ ]
+ },
+ "Lombard Street Garage":{
+ "g":"9q8zjcjwuj",
+ "l":[
+ 37.7996475876,
+ -122.4348921128
+ ]
+ },
+ "Mission Bartlett Garage":{
+ "g":"9q8yy32jt1",
+ "l":[
+ 37.7568400419,
+ -122.4204335636
+ ]
+ },
+ "Moscone Center Garage":{
+ "g":"9q8yywrqv3",
+ "l":[
+ 37.78452379,
+ -122.3994795
+ ]
+ },
+ "Performing Arts Garage":{
+ "g":"9q8yyjq9kk",
+ "l":[
+ 37.77810302,
+ -122.4225312
+ ]
+ },
+ "St Marys Square Garage":{
+ "g":"9q8yyxgdr7",
+ "l":[
+ 37.79199927,
+ -122.4045476
+ ]
+ },
+ "Sutter Stockton Garage":{
+ "g":"9q8yyx6j3w",
+ "l":[
+ 37.7897829226,
+ -122.4068556189
+ ]
+ },
+ "Union Square Garage":{
+ "g":"9q8yyx195t",
+ "l":[
+ 37.7876789151,
+ -122.407447946
+ ]
+ },
+ "i":{
+ "9q8yvyx176:Japan Center Annex Garage":true,
+ "9q8yy32jt1:Mission Bartlett Garage":true,
+ "9q8yy4zbtn:16th and Hoff Garage":true,
+ "9q8yyjq9kk:Performing Arts Garage":true,
+ "9q8yymdjgk:Civic Center Garage":true,
+ "9q8yyn9147:Japan Center Garage":true,
+ "9q8yyw5p81:Fifth and Mission Garage":true,
+ "9q8yywccdw:Ellis OFarrell Garage":true,
+ "9q8yywrqv3:Moscone Center Garage":true,
+ "9q8yyx195t:Union Square Garage":true,
+ "9q8yyx6j3w:Sutter Stockton Garage":true,
+ "9q8yyxgdr7:St Marys Square Garage":true,
+ "9q8zjcjwuj:Lombard Street Garage":true,
+ "9q8znb2n3u:Golden Gateway Garage":true
+ },
+ "l":{
+ "16th and Hoff Garage":[
+ 37.76425207,
+ -122.4207729
+ ],
+ "Civic Center Garage":[
+ 37.7802465669,
+ -122.4177671135
+ ],
+ "Ellis OFarrell Garage":[
+ 37.7863925455,
+ -122.4071540583
+ ],
+ "Fifth and Mission Garage":[
+ 37.7832776731,
+ -122.405537559
+ ],
+ "Golden Gateway Garage":[
+ 37.79544154,
+ -122.3986032
+ ],
+ "Japan Center Annex Garage":[
+ 37.7849547433,
+ -122.4328661663
+ ],
+ "Japan Center Garage":[
+ 37.7849220106,
+ -122.4301614271
+ ],
+ "Lombard Street Garage":[
+ 37.7996475876,
+ -122.4348921128
+ ],
+ "Mission Bartlett Garage":[
+ 37.7568400419,
+ -122.4204335636
+ ],
+ "Moscone Center Garage":[
+ 37.78452379,
+ -122.3994795
+ ],
+ "Performing Arts Garage":[
+ 37.77810302,
+ -122.4225312
+ ],
+ "St Marys Square Garage":[
+ 37.79199927,
+ -122.4045476
+ ],
+ "Sutter Stockton Garage":[
+ 37.7897829226,
+ -122.4068556189
+ ],
+ "Union Square Garage":[
+ 37.7876789151,
+ -122.407447946
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/build/apps/parking/react/index.html b/build/apps/parking/react/index.html
new file mode 100755
index 00000000..cdf16c83
--- /dev/null
+++ b/build/apps/parking/react/index.html
@@ -0,0 +1,134 @@
+
+
+
+
+ Parking App in ReactJS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/apps/parking/react/lib/react-dom-server.js b/build/apps/parking/react/lib/react-dom-server.js
new file mode 100755
index 00000000..5a39e799
--- /dev/null
+++ b/build/apps/parking/react/lib/react-dom-server.js
@@ -0,0 +1,42 @@
+/**
+ * ReactDOMServer v0.14.7
+ *
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ */
+// Based off https://github.com/ForbesLindesay/umd/blob/master/template.js
+;(function(f) {
+ // CommonJS
+ if (typeof exports === "object" && typeof module !== "undefined") {
+ module.exports = f(require('react'));
+
+ // RequireJS
+ } else if (typeof define === "function" && define.amd) {
+ define(['react'], f);
+
+ //
+
+
+
+
+
+
+
+
+
+
+
+
My Favorite Cities
+
+
+
+
+
+
+
+