Added tabs 'n stuff

This commit is contained in:
Fergal Moran
2016-08-02 23:50:42 +01:00
parent 5d0838315e
commit 798434fed6
17 changed files with 380 additions and 3 deletions

5
.firebaserc Normal file
View File

@@ -0,0 +1,5 @@
{
"projects": {
"default": "icebreaker-f5f20"
}
}

View File

@@ -3,7 +3,7 @@ import {Component} from '@angular/core';
import {ionicBootstrap, Platform} from 'ionic-angular';
import {StatusBar} from 'ionic-native';
import {HomePage} from './pages/home/home';
import {TabsPage} from './pages/tabs/tabs';
import {
@@ -32,9 +32,10 @@ import {
]
})
export class MyApp {
rootPage: any = HomePage;
private rootPage: any;
constructor(platform: Platform) {
this.rootPage = TabsPage;
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.

View File

@@ -0,0 +1,10 @@
<ion-header>
<ion-navbar>
<ion-title>
About
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding class="about">
Hello About
</ion-content>

10
app/pages/about/about.ts Normal file
View File

@@ -0,0 +1,10 @@
import { Component, OnInit } from '@angular/core';
@Component({
templateUrl: 'build/pages/about/about.html'
})
export class AboutPage implements OnInit {
ngOnInit() { }
}

View File

@@ -0,0 +1,10 @@
<ion-header>
<ion-navbar>
<ion-title>
Contact
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding class="about">
Hello Contact
</ion-content>

View File

@@ -0,0 +1,10 @@
import { Component, OnInit } from '@angular/core';
@Component({
templateUrl: 'build/pages/contact/contact.html'
})
export class ContactPage implements OnInit {
ngOnInit() { }
}

View File

@@ -11,7 +11,7 @@
</ion-buttons>
</ion-navbar>
</ion-header>
<ion-content class="home">
<ion-content padding class="home">
<ion-list>
<ion-list-header>Nearby people</ion-list-header>
<ion-item *ngFor="let neighbour of neighbours | async">

View File

@@ -0,0 +1,80 @@
<ion-header>
<ion-navbar>
<ion-title>Icon List</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<ion-list no-border>
<ion-list-header>
Classes
</ion-list-header>
<ion-item>
<ion-icon name='planet' item-left></ion-icon>
Astronomy
<ion-note item-right>
To the moon
</ion-note>
</ion-item>
<ion-item>
<ion-toggle checked="false"></ion-toggle>
<ion-label>
Muggle Studies
</ion-label>
<ion-icon name='body' item-left></ion-icon>
</ion-item>
<ion-item>
<ion-icon name='leaf' item-left></ion-icon>
Herbology
<ion-icon name='rose' item-right secondary></ion-icon>
</ion-item>
<ion-item>
<ion-icon name='flask' item-left></ion-icon>
Potions
<ion-note item-right>
Poisonous
</ion-note>
</ion-item>
</ion-list>
<ion-list>
<ion-list-header>
Activities
</ion-list-header>
<ion-item>
Incantation
<ion-icon name='color-wand' item-left></ion-icon>
<ion-note item-right>Crucio!</ion-note>
</ion-item>
<ion-item>
<ion-toggle checked="true"></ion-toggle>
<ion-label>
Quidditch Practice
</ion-label>
<ion-icon name='brush' item-left></ion-icon>
</ion-item>
<ion-item>
<ion-icon name='wine' item-left></ion-icon>
Mead Drinking
<ion-note item-right>Yes please</ion-note>
</ion-item>
</ion-list>
<ion-list>
<ion-list-header>
Friends
</ion-list-header>
<ion-item>
<ion-icon name='flash' item-left></ion-icon>
Harry
<ion-note item-right>The boy who lived</ion-note>
</ion-item>
<ion-item>
<ion-icon name='book' item-left></ion-icon>
Hermoine
<ion-note item-right>Muggle-born</ion-note>
</ion-item>
<ion-item>
<ion-icon name='beer' item-left></ion-icon>
Ron
<ion-note item-right>Brilliant!</ion-note>
</ion-item>
</ion-list>
</ion-content>

View File

@@ -0,0 +1,10 @@
import { Component, OnInit } from '@angular/core';
@Component({
templateUrl: 'build/pages/settings/settings.html'
})
export class SettingsPage implements OnInit {
ngOnInit() { }
}

6
app/pages/tabs/tabs.html Normal file
View File

@@ -0,0 +1,6 @@
<ion-tabs>
<ion-tab tabIcon="contact" [root]="tabHome"></ion-tab>
<ion-tab tabIcon="compass" [root]="tabAbout"></ion-tab>
<ion-tab tabIcon="analytics" [root]="tabContact"></ion-tab>
<ion-tab tabIcon="settings" [root]="tabSettings"></ion-tab>
</ion-tabs>

25
app/pages/tabs/tabs.ts Normal file
View File

@@ -0,0 +1,25 @@
import {Component} from '@angular/core';
import {HomePage} from '../home/home';
import {AboutPage} from '../about/about';
import {ContactPage} from '../contact/contact';
import {SettingsPage} from '../settings/settings';
@Component({
templateUrl: 'build/pages/tabs/tabs.html'
})
export class TabsPage {
private tabHome: any;
private tabAbout: any;
private tabContact: any;
private tabSettings: any;
constructor() {
// this tells the tabs component which Pages
// should be each tab's root Page
this.tabHome = HomePage;
this.tabAbout = AboutPage;
this.tabContact = ContactPage;
this.tabSettings = SettingsPage;
}
}

View File

@@ -0,0 +1,26 @@
import {Injectable} from '@angular/core'
import { AngularFire } from 'angularfire2';
@Injectable()
export class NeighboursService {
constructor(private _af: AngularFire) {
}
getNeighbours() {
return this._af.database.list('/neighbours');
}
registerMe() {
var textItems = this._af.database.list('/neighbours');
textItems.push({
"displayName": "Hello Sailor",
"userName": "hello@sailor.com",
"avatarImage": "https://placekitten.com/64/64"
}).then((_data) => {
console.log(_data)
alert("Item Successfully Added")
}).catch((_error) => {
console.log(_error)
alert("Error Adding Item")
})
}
}

20
data/neighbours.json Normal file
View File

@@ -0,0 +1,20 @@
[
{
"userName": "fergal.moran@gmail.com",
"displayName": "Fergal Moran",
"avatarImage": "https://api.adorable.io/avatars/64/fergalm",
"tagLine": "Scientist, pragmatist, generous lover, all round nice guy"
},
{
"userName": "mar.spud@gmail.com",
"displayName": "Maurice Murphy",
"avatarImage": "https://api.adorable.io/avatars/64/marspud",
"tagLine": "I like spuds"
},
{
"userName": "donagh.murphy@gmail.com",
"displayName": "Donagh Murphy",
"avatarImage": "https://api.adorable.io/avatars/64/donaghmurphy",
"tagLine": "Wanna see my robots?"
}
]

6
database.rules.json Normal file
View File

@@ -0,0 +1,6 @@
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}

8
firebase.json Normal file
View File

@@ -0,0 +1,8 @@
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "public"
}
}

81
public/404.html Normal file
View File

@@ -0,0 +1,81 @@
<!doctype html>
<html>
<head>
<title>Page Not Found</title>
<style>
body {
margin: 0 auto;
padding: 1em;
font-family: Helvetica, Arial, "Lucida Grande", sans-serif;
font-size: 1.1em;
color: #333;
}
@media screen and (min-width: 40em) {
body {
width: 40em;
}
}
h1, h2, h3 {
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
font-weight: 300;
}
h1 {
margin: 1em 0;
padding: 0 0 0.25em 0;
border-bottom: 1px dotted #ccc;
text-align: center;
font-size: 3em;
line-height: 1.1em;
}
h2 {
margin: 1em 0 0.45em 0;
padding: 0;
font-size: 1.8em;
}
p {
margin: 0 0 0.5em 0;
line-height: 1.8em;
}
ol {
}
ol li {
margin: 0 0 0.5em 0;
font-size: 0.9em;
line-height: 1.8em;
}
a {
color: #50B1FF;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
code {
display: inline-block;
padding: 0.1em;
background-color: #F8F8F8;
border: 1px solid #DDD;
border-radius: 3px;
font-family: Consolas,"Liberation Mono",Courier,monospace;
font-size: 0.9em;
line-height: 1;
}
.logo {
display: block;
margin: 3em 0;
text-align: center;
}
</style>
</head>
<body>
<h1>Page Not Found</h1>
<p>This specified file was not found on this website. Please check the URL for mistakes and try again.</p>
<h2>Why am I seeing this?</h2>
<p>This page was generated by the Firebase Command-Line Interface. To modify it, edit the <code>404.html</code> file in your project's configured public directory.</p>
<a class="logo" href="//firebase.google.com">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJQAAAAaCAYAAABRhnV8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNWM4MWUxOS0zYWJmLTQyYWYtOTVhMi01MDBiZWU5NzAyMTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkNCQkJBMDlCNkRGMTFFM0JDMTdBQTgyNEFEQURCQTQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkNCQkJBMDhCNkRGMTFFM0JDMTdBQTgyNEFEQURCQTQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ZWFkZWM0M2YtMmFjMy00NTEyLTljNzQtYjVmMDJjMWNhNTkxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjI1YzgxZTE5LTNhYmYtNDJhZi05NWEyLTUwMGJlZTk3MDIxOCIvPiA8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" />
</a>
</body>
</html>

69
public/index.html Normal file
View File

@@ -0,0 +1,69 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome to Firebase Hosting</title>
<style media="screen">
body {
font-family: Roboto, Arial, sans-serif;
background: #ECEFF1;
color: rgba(0,0,0,0.87);
}
a {
color: rgb(3,155,229);
}
#message {
max-width: 400px;
margin: 40px auto;
box-shadow: 0 1px 3px 0 rgba(0,0,0,0.2),0 1px 1px 0 rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12);
border-radius: 2px;
background: white;
padding: 16px 24px;
}
#message h1 {
font-size: 22px;
font-weight: 500;
text-align: center;
margin: 0 0 16px;
}
#message p {
font-weight: 300;
line-height: 150%;
}
#message ul {
list-style: none;
margin: 16px 0 0;
padding: 0;
text-align: center;
}
#message li a {
display: inline-block;
padding: 8px;
text-transform: uppercase;
text-decoration: none;
font-weight: 500;
background: rgb(3,155,229);
color: white;
border: 1px solid rgb(3,155,229);
border-radius: 3px;
font-size: 14px;
box-shadow: 0 2px 5px 0 rgba(0,0,0,.26);
}
</style>
</head>
<body>
<div id="message">
<h1>Welcome to Firebase Hosting</h1>
<p>You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!</p>
<ul>
<li><a target="_blank" href="https://firebase.google.com/docs/hosting/">Open Hosting Documentation</a></li>
</ul>
</div>
</body>
</html>