From dcebbeaf56c2cc0d9e76527a68872eefca2f2ddc Mon Sep 17 00:00:00 2001
From: Drew Rygh
Date: Thu, 8 Oct 2015 10:01:13 -0500
Subject: [PATCH 01/17] refactor(demos): give each component section its own
view
---
.../actionSheet/actionSheet.html | 9 +
.../component-docs/actionSheet/actionSheet.ts | 64 ++++++
demos/component-docs/buttons/block.html | 26 +++
demos/component-docs/buttons/buttons.html | 27 +++
demos/component-docs/buttons/buttons.ts | 73 +++++++
demos/component-docs/buttons/fab.html | 15 ++
demos/component-docs/buttons/full.html | 29 +++
demos/component-docs/buttons/icons.html | 44 +++++
demos/component-docs/buttons/outline.html | 29 +++
demos/component-docs/buttons/round.html | 29 +++
demos/component-docs/buttons/sizes.html | 29 +++
demos/component-docs/cards/cards.html | 62 ++++++
demos/component-docs/cards/cards.ts | 10 +
demos/component-docs/forms/forms.html | 23 +++
demos/component-docs/forms/forms.ts | 25 +++
demos/component-docs/helpers.ts | 51 ++++-
demos/component-docs/icons/icons.html | 78 ++++++++
demos/component-docs/icons/icons.ts | 10 +
demos/component-docs/index.ts | 185 ++----------------
demos/component-docs/lists/lists.html | 58 ++++++
demos/component-docs/lists/lists.ts | 10 +
demos/component-docs/menus/menus.html | 12 ++
demos/component-docs/menus/menus.ts | 10 +
demos/component-docs/modal.html | 1 -
demos/component-docs/modal.ts | 46 -----
.../component-docs/modals/modals-content.html | 13 ++
demos/component-docs/modals/modals.html | 14 ++
demos/component-docs/modals/modals.ts | 80 ++++++++
demos/component-docs/navigation.html | 8 -
.../navigation/navigation-details.html | 8 +
.../component-docs/navigation/navigation.html | 30 +++
.../{ => navigation}/navigation.ts | 30 +--
demos/component-docs/popups/popups.html | 10 +
demos/component-docs/popups/popups.ts | 16 ++
demos/component-docs/slides/slides.html | 24 +++
demos/component-docs/slides/slides.ts | 10 +
demos/component-docs/tabs.ts | 35 ----
demos/component-docs/{ => tabs}/tabs.html | 2 +-
demos/component-docs/tabs/tabs.ts | 22 +++
gulpfile.js | 4 +-
40 files changed, 985 insertions(+), 276 deletions(-)
create mode 100644 demos/component-docs/actionSheet/actionSheet.html
create mode 100644 demos/component-docs/actionSheet/actionSheet.ts
create mode 100644 demos/component-docs/buttons/block.html
create mode 100644 demos/component-docs/buttons/buttons.html
create mode 100644 demos/component-docs/buttons/buttons.ts
create mode 100644 demos/component-docs/buttons/fab.html
create mode 100644 demos/component-docs/buttons/full.html
create mode 100644 demos/component-docs/buttons/icons.html
create mode 100644 demos/component-docs/buttons/outline.html
create mode 100644 demos/component-docs/buttons/round.html
create mode 100644 demos/component-docs/buttons/sizes.html
create mode 100644 demos/component-docs/cards/cards.html
create mode 100644 demos/component-docs/cards/cards.ts
create mode 100644 demos/component-docs/forms/forms.html
create mode 100644 demos/component-docs/forms/forms.ts
create mode 100644 demos/component-docs/icons/icons.html
create mode 100644 demos/component-docs/icons/icons.ts
create mode 100644 demos/component-docs/lists/lists.html
create mode 100644 demos/component-docs/lists/lists.ts
create mode 100644 demos/component-docs/menus/menus.html
create mode 100644 demos/component-docs/menus/menus.ts
delete mode 100644 demos/component-docs/modal.html
delete mode 100644 demos/component-docs/modal.ts
create mode 100644 demos/component-docs/modals/modals-content.html
create mode 100644 demos/component-docs/modals/modals.html
create mode 100644 demos/component-docs/modals/modals.ts
delete mode 100644 demos/component-docs/navigation.html
create mode 100644 demos/component-docs/navigation/navigation-details.html
create mode 100644 demos/component-docs/navigation/navigation.html
rename demos/component-docs/{ => navigation}/navigation.ts (72%)
create mode 100644 demos/component-docs/popups/popups.html
create mode 100644 demos/component-docs/popups/popups.ts
create mode 100644 demos/component-docs/slides/slides.html
create mode 100644 demos/component-docs/slides/slides.ts
delete mode 100644 demos/component-docs/tabs.ts
rename demos/component-docs/{ => tabs}/tabs.html (82%)
create mode 100644 demos/component-docs/tabs/tabs.ts
diff --git a/demos/component-docs/actionSheet/actionSheet.html b/demos/component-docs/actionSheet/actionSheet.html
new file mode 100644
index 0000000000..3a4444307f
--- /dev/null
+++ b/demos/component-docs/actionSheet/actionSheet.html
@@ -0,0 +1,9 @@
+
+ Action Sheet
+
+
+
diff --git a/demos/component-docs/actionSheet/actionSheet.ts b/demos/component-docs/actionSheet/actionSheet.ts
new file mode 100644
index 0000000000..749cc8f51b
--- /dev/null
+++ b/demos/component-docs/actionSheet/actionSheet.ts
@@ -0,0 +1,64 @@
+import {IonicPlatform, IonicView, ActionSheet} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'actionSheet/actionSheet.html',
+})
+export class ActionSheetPage {
+
+ constructor(actionSheet: ActionSheet, platform: IonicPlatform) {
+ this.actionSheet = actionSheet;
+ this.platform = platform;
+ }
+
+ openMenu() {
+ if (this.platform.is('android')) {
+ var androidSheet = {
+
+ buttons: [
+ { text: 'Share', icon: 'share' },
+ { text: 'Play', icon: 'arrow-dropright-circle'},
+ { text: 'Favorite', icon: 'ion-md-heart-outline'}
+ ],
+ destructiveText: 'Delete',
+ titleText: 'Purchased',
+ cancelText: 'Cancel',
+ cancel: function() {
+ console.log('Canceled');
+ },
+ destructiveButtonClicked: () => {
+ console.log('Destructive clicked');
+ },
+ buttonClicked: function(index) {
+ console.log('Button clicked', index);
+ if (index == 1) { return false; }
+ return true;
+ }
+ };
+ }
+
+ this.actionSheet.open(androidSheet || {
+ buttons: [
+ { text: 'Share This' },
+ { text: 'Move' }
+ ],
+ destructiveText: 'Delete',
+ titleText: 'You Opened Action Sheet',
+ cancelText: 'Cancel',
+ cancel: function() {
+ console.log('Canceled');
+ },
+ destructiveButtonClicked: () => {
+ console.log('Destructive clicked');
+ },
+ buttonClicked: function(index) {
+ console.log('Button clicked', index);
+ if (index == 1) { return false; }
+ return true;
+ }
+
+ }).then(actionSheetRef => {
+ this.actionSheetRef = actionSheetRef;
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/demos/component-docs/buttons/block.html b/demos/component-docs/buttons/block.html
new file mode 100644
index 0000000000..f5177f5944
--- /dev/null
+++ b/demos/component-docs/buttons/block.html
@@ -0,0 +1,26 @@
+
+ Block Buttons
+
+
+
+
diff --git a/demos/component-docs/buttons/buttons.html b/demos/component-docs/buttons/buttons.html
new file mode 100644
index 0000000000..56c7b8a8b3
--- /dev/null
+++ b/demos/component-docs/buttons/buttons.html
@@ -0,0 +1,27 @@
+
+ Buttons
+
+
+
+
+
diff --git a/demos/component-docs/buttons/buttons.ts b/demos/component-docs/buttons/buttons.ts
new file mode 100644
index 0000000000..fb1880085a
--- /dev/null
+++ b/demos/component-docs/buttons/buttons.ts
@@ -0,0 +1,73 @@
+import {IonicPlatform, IonicView} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'buttons/buttons.html',
+})
+export class ButtonsPage {
+ constructor() {
+
+ }
+}
+
+@IonicView({
+ templateUrl: 'buttons/block.html',
+})
+export class BlockButtonsPage {
+ constructor() {
+
+ }
+}
+
+@IonicView({
+ templateUrl: 'buttons/full.html',
+})
+export class FullButtonsPage {
+ constructor() {
+
+ }
+}
+
+@IonicView({
+ templateUrl: 'buttons/outline.html',
+})
+export class OutlineButtonsPage {
+ constructor() {
+
+ }
+}
+
+@IonicView({
+ templateUrl: 'buttons/round.html',
+})
+export class RoundButtonsPage {
+ constructor() {
+
+ }
+}
+
+@IonicView({
+ templateUrl: 'buttons/fab.html',
+})
+export class FabPage {
+ constructor() {
+
+ }
+}
+
+@IonicView({
+ templateUrl: 'buttons/sizes.html',
+})
+export class ButtonSizesPage {
+ constructor() {
+
+ }
+}
+
+@IonicView({
+ templateUrl: 'buttons/icons.html',
+})
+export class IconButtonsPage {
+ constructor() {
+
+ }
+}
\ No newline at end of file
diff --git a/demos/component-docs/buttons/fab.html b/demos/component-docs/buttons/fab.html
new file mode 100644
index 0000000000..15b7396b66
--- /dev/null
+++ b/demos/component-docs/buttons/fab.html
@@ -0,0 +1,15 @@
+
+ Floating Action Buttons
+
+
+
+
+
+
+
diff --git a/demos/component-docs/buttons/full.html b/demos/component-docs/buttons/full.html
new file mode 100644
index 0000000000..8c4efb0a51
--- /dev/null
+++ b/demos/component-docs/buttons/full.html
@@ -0,0 +1,29 @@
+
+ Full Buttons
+
+
+
+
+
+
+
diff --git a/demos/component-docs/buttons/icons.html b/demos/component-docs/buttons/icons.html
new file mode 100644
index 0000000000..fcdf5ba799
--- /dev/null
+++ b/demos/component-docs/buttons/icons.html
@@ -0,0 +1,44 @@
+
+
+ Icon Buttons
+
+
+
+
+
+
+
diff --git a/demos/component-docs/buttons/outline.html b/demos/component-docs/buttons/outline.html
new file mode 100644
index 0000000000..9413d1aff9
--- /dev/null
+++ b/demos/component-docs/buttons/outline.html
@@ -0,0 +1,29 @@
+
+ Outline Buttons
+
+
+
+
+
+
+
diff --git a/demos/component-docs/buttons/round.html b/demos/component-docs/buttons/round.html
new file mode 100644
index 0000000000..61be74abbb
--- /dev/null
+++ b/demos/component-docs/buttons/round.html
@@ -0,0 +1,29 @@
+
+ Round Buttons
+
+
+
+
+
+
+
diff --git a/demos/component-docs/buttons/sizes.html b/demos/component-docs/buttons/sizes.html
new file mode 100644
index 0000000000..b1d996a92d
--- /dev/null
+++ b/demos/component-docs/buttons/sizes.html
@@ -0,0 +1,29 @@
+
+ Button Sizes
+
+
+
+
+
+
+
diff --git a/demos/component-docs/cards/cards.html b/demos/component-docs/cards/cards.html
new file mode 100644
index 0000000000..f0de786baa
--- /dev/null
+++ b/demos/component-docs/cards/cards.html
@@ -0,0 +1,62 @@
+
+
+ Cards
+
+
+
+
+
+
+
diff --git a/demos/component-docs/cards/cards.ts b/demos/component-docs/cards/cards.ts
new file mode 100644
index 0000000000..c48f892ab9
--- /dev/null
+++ b/demos/component-docs/cards/cards.ts
@@ -0,0 +1,10 @@
+import {IonicPlatform, IonicView} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'cards/cards.html',
+})
+export class CardsPage {
+ constructor() {
+
+ }
+}
\ No newline at end of file
diff --git a/demos/component-docs/forms/forms.html b/demos/component-docs/forms/forms.html
new file mode 100644
index 0000000000..aa18cfbe9a
--- /dev/null
+++ b/demos/component-docs/forms/forms.html
@@ -0,0 +1,23 @@
+
+ Forms
+
+
+
+
+
+
+
diff --git a/demos/component-docs/forms/forms.ts b/demos/component-docs/forms/forms.ts
new file mode 100644
index 0000000000..37a03c6ac5
--- /dev/null
+++ b/demos/component-docs/forms/forms.ts
@@ -0,0 +1,25 @@
+import {FORM_DIRECTIVES, FormBuilder, Validators, Control, ControlGroup} from 'angular2/forms';
+import {IonicView} from 'ionic/ionic';
+
+
+@IonicView({
+ templateUrl: 'forms/forms.html',
+ bindings: [FormBuilder]
+})
+export class FormsPage {
+
+ constructor() {
+ this.form = new ControlGroup({
+ firstName: new Control("", Validators.required),
+ lastName: new Control("", Validators.required)
+ });
+ }
+
+ processForm(event) {
+ // TODO: display input in a popup
+ console.log(event);
+ }
+
+
+}
+
diff --git a/demos/component-docs/helpers.ts b/demos/component-docs/helpers.ts
index 1f0bd7a166..e65f250883 100644
--- a/demos/component-docs/helpers.ts
+++ b/demos/component-docs/helpers.ts
@@ -1,3 +1,52 @@
+import {ActionSheetPage} from 'actionSheet/actionSheet';
+
+import {ButtonsPage,
+ BlockButtonsPage,
+ FullButtonsPage,
+ OutlineButtonsPage,
+ RoundButtonsPage,
+ FabPage,
+ ButtonSizesPage,
+ IconButtonsPage} from 'buttons/buttons';
+
+import {CardsPage} from 'cards/cards';
+import {FormsPage} from 'forms/forms';
+import {IconsPage} from 'icons/icons';
+import {ListsPage} from 'lists/lists';
+import {MenusPage} from 'menus/menus';
+import {ModalsPage} from 'modals/modals';
+import {NavigationPage} from 'navigation/navigation';
+import {PopupsPage} from 'popups/popups';
+import {SlidesPage} from 'slides/slides';
+import {TabsPage} from 'tabs/tabs';
+
+
export function toTitleCase(str) {
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
-}
\ No newline at end of file
+}
+
+export function getPageFor(hash) {
+ return {
+ 'action-sheets': ActionSheetPage,
+ 'buttons': ButtonsPage,
+ 'block-buttons': BlockButtonsPage,
+ 'full-buttons': FullButtonsPage,
+ 'outline-buttons': OutlineButtonsPage,
+ 'round-buttons': RoundButtonsPage,
+ 'floating-action-buttons': FabPage,
+ 'button-sizes': ButtonSizesPage,
+ 'icon-buttons': IconButtonsPage,
+ 'cards': CardsPage,
+ 'forms': FormsPage,
+ 'icons': IconsPage,
+ 'lists': ListsPage,
+ 'menus': MenusPage,
+ 'modals': ModalsPage,
+ 'navigation': NavigationPage,
+ 'popups': PopupsPage,
+ 'slides': SlidesPage,
+ 'tabs': TabsPage
+ }[hash]
+}
+
+
diff --git a/demos/component-docs/icons/icons.html b/demos/component-docs/icons/icons.html
new file mode 100644
index 0000000000..f328076f9d
--- /dev/null
+++ b/demos/component-docs/icons/icons.html
@@ -0,0 +1,78 @@
+
+
+ Icons
+
+
+
+
+
+
+
diff --git a/demos/component-docs/icons/icons.ts b/demos/component-docs/icons/icons.ts
new file mode 100644
index 0000000000..02ca95dbe2
--- /dev/null
+++ b/demos/component-docs/icons/icons.ts
@@ -0,0 +1,10 @@
+import {IonicPlatform, IonicView} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'icons/icons.html',
+})
+export class IconsPage {
+ constructor() {
+
+ }
+}
\ No newline at end of file
diff --git a/demos/component-docs/index.ts b/demos/component-docs/index.ts
index 46226cc577..bc867c01b8 100644
--- a/demos/component-docs/index.ts
+++ b/demos/component-docs/index.ts
@@ -1,186 +1,33 @@
-import {FORM_DIRECTIVES, FormBuilder, Validators, Control, ControlGroup} from 'angular2/forms';
-import {App, IonicApp, IonicPlatform, ActionSheet, NavController, NavParams} from 'ionic/ionic';
-import {Popup, Modal, IonicView, IonicConfig, Events, Animation} from 'ionic/ionic';
-import {NavigationDetailsPage} from 'navigation';
-
-import {TabsPage} from 'tabs';
-import {DemoModal} from 'modal';
+import {App, IonicApp, IonicPlatform, ActionSheet} from 'ionic/ionic';
+import {IonicView, IonicConfig, Events} from 'ionic/ionic';
+import {ActionSheetPage} from 'actionSheet/actionSheet';
import * as helpers from 'helpers';
-@IonicView({
- templateUrl: 'main.html',
- bindings: [FormBuilder]
+@App({
+ template: ''
})
-export class MainPage {
+class DemoApp {
- component: any = { title: 'Action Sheets' };
+ constructor(app: IonicApp) {
+ this.app = app;
+ this.rootPage = ActionSheetPage;
- constructor(app: IonicApp,
- nav: NavController,
- actionSheet: ActionSheet,
- params: NavParams,
- popup: Popup,
- platform: IonicPlatform,
- modal: Modal,
- events: Events) {
- this.params = params;
- this.nav = nav;
- this.platform = platform;
- this.modal = modal;
- this.popup = popup;
- this.actionSheet = actionSheet;
- this.navDetailsPage = NavigationDetailsPage;
- this.demoModal = DemoModal;
- this.form = new ControlGroup({
- firstName: new Control("", Validators.required),
- lastName: new Control("", Validators.required)
- });
-
- if (params.data.location) { this.component.title = params.data.location; }
- else if (window.location.hash) { this.component.title = window.location.hash; }
+ // if (params.data.location) { this.nextPage = helpers.getPageFor(params.data.location); }
+ // else if (window.location.hash) { this.nextPage = helpers.getPageFor(window.location.hash); }
+ // else { this.nextPage = helpers.getPageFor('action-sheet'); }
window.addEventListener('message', (e) => {
zone.run(() => {
if (e.data) {
var data = JSON.parse(e.data);
- this.component.title = helpers.toTitleCase(data.hash.replace(/-/g, ' '));
- if (this.component.title === 'Tabs') {
- this.nav.setRoot(TabsPage);
- }
+ this.nextPage = helpers.getPageFor(data.hash);
+ this.title = helpers.toTitleCase(data.hash.replace(/-/g, ' '));
+ let nav = this.app.getComponent('nav');
+ nav.setRoot(this.nextPage);
}
});
});
- events.subscribe('page:locationChange', (data) => {
- this.component.title = data[0].componentName;
- });
- }
-
- // **************************
- // Action Sheets
- // **************************
- openMenu() {
- if (this.platform.is('android')) {
- var androidSheet = {
-
- buttons: [
- { text: 'Share', icon: 'share' },
- { text: 'Play', icon: 'arrow-dropright-circle'},
- { text: 'Favorite', icon: 'ion-md-heart-outline'}
- ],
- destructiveText: 'Delete',
- titleText: 'Purchased',
- cancelText: 'Cancel',
- cancel: function() {
- console.log('Canceled');
- },
- destructiveButtonClicked: () => {
- console.log('Destructive clicked');
- },
- buttonClicked: function(index) {
- console.log('Button clicked', index);
- if (index == 1) { return false; }
- return true;
- }
- };
- }
-
- this.actionSheet.open(androidSheet || {
- buttons: [
- { text: 'Share This' },
- { text: 'Move' }
- ],
- destructiveText: 'Delete',
- titleText: 'You Opened Action Sheet',
- cancelText: 'Cancel',
- cancel: function() {
- console.log('Canceled');
- },
- destructiveButtonClicked: () => {
- console.log('Destructive clicked');
- },
- buttonClicked: function(index) {
- console.log('Button clicked', index);
- if (index == 1) { return false; }
- return true;
- }
-
- }).then(actionSheetRef => {
- this.actionSheetRef = actionSheetRef;
- });
- }
-
- // **************************
- // Navigation
- // **************************
- openNavDetailsPage(item) {
- this.nav.push(NavigationDetailsPage, { name: item });
- }
-
-
- // **************************
- // Modal
- // **************************
- openModal() {
- this.modal.open(this.demoModal, {
- handle: 'my-awesome-modal',
- enterAnimation: 'my-fade-in',
- leaveAnimation: 'my-fade-out'
- });
- }
-
- // **************************
- // Popup
- // **************************
- showPopup() {
- this.popup.alert("Popup Title").then(() => {
- });
- }
-
-
- // **************************
- // Form
- // **************************
- processForm(event) {
- // TODO: display input in a popup
- console.log(event);
- }
-
-}
-
-class FadeIn extends Animation {
- constructor(element) {
- super(element);
- this
- .easing('ease')
- .duration(450)
- .fadeIn();
}
}
-
-Animation.register('my-fade-in', FadeIn);
-
-class FadeOut extends Animation {
- constructor(element) {
- super(element);
- this
- .easing('ease')
- .duration(250)
- .fadeOut();
- }
-}
-
-Animation.register('my-fade-out', FadeOut);
-
-
-@App({
- template: ''
-})
-class DemoApp {
-
- constructor() {
- this.rootPage = MainPage;
- }
-
-}
diff --git a/demos/component-docs/lists/lists.html b/demos/component-docs/lists/lists.html
new file mode 100644
index 0000000000..b8dc74a791
--- /dev/null
+++ b/demos/component-docs/lists/lists.html
@@ -0,0 +1,58 @@
+
+
+ Lists
+
+
+
+
+
+
+
diff --git a/demos/component-docs/lists/lists.ts b/demos/component-docs/lists/lists.ts
new file mode 100644
index 0000000000..66e78d0bfd
--- /dev/null
+++ b/demos/component-docs/lists/lists.ts
@@ -0,0 +1,10 @@
+import {IonicPlatform, IonicView} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'lists/lists.html',
+})
+export class ListsPage {
+ constructor() {
+
+ }
+}
\ No newline at end of file
diff --git a/demos/component-docs/menus/menus.html b/demos/component-docs/menus/menus.html
new file mode 100644
index 0000000000..51705e2f64
--- /dev/null
+++ b/demos/component-docs/menus/menus.html
@@ -0,0 +1,12 @@
+
+
+ Menus
+
+
+
+
+
+
+
diff --git a/demos/component-docs/menus/menus.ts b/demos/component-docs/menus/menus.ts
new file mode 100644
index 0000000000..bf6cbfa992
--- /dev/null
+++ b/demos/component-docs/menus/menus.ts
@@ -0,0 +1,10 @@
+import {IonicPlatform, IonicView} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'menus/menus.html',
+})
+export class MenusPage {
+ constructor() {
+
+ }
+}
\ No newline at end of file
diff --git a/demos/component-docs/modal.html b/demos/component-docs/modal.html
deleted file mode 100644
index dc34228232..0000000000
--- a/demos/component-docs/modal.html
+++ /dev/null
@@ -1 +0,0 @@
-TODO
diff --git a/demos/component-docs/modal.ts b/demos/component-docs/modal.ts
deleted file mode 100644
index 94089f578e..0000000000
--- a/demos/component-docs/modal.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import {App, IonicApp, Modal, NavController, IonicView, Events} from 'ionic/ionic';
-import * as helpers from 'helpers';
-
-@IonicView({
- templateUrl: 'modal.html'
-})
-class ModalFirstPage {
-
- constructor(
- nav: NavController,
- modal: Modal,
- events: Events
- ) {
- this.nav = nav;
- this.modal = modal;
- window.onmessage = (e) => {
- zone.run(() => {
- if (e.data) {
- var data = JSON.parse(e.data);
- var componentTitle = helpers.toTitleCase(data.hash.replace('-', ' '));
- events.publish('page:locationChange', { componentName: componentTitle });
- this.closeModal();
- }
- });
- };
- }
-
- closeModal() {
- let modal = this.modal.get();
- if (modal) {
- modal.close();
- }
- }
-
-}
-
-@IonicView({
- template: ''
-})
-export class DemoModal {
- constructor() {
- this.rootView = ModalFirstPage;
- }
-}
-
-
diff --git a/demos/component-docs/modals/modals-content.html b/demos/component-docs/modals/modals-content.html
new file mode 100644
index 0000000000..8d9c8d52d0
--- /dev/null
+++ b/demos/component-docs/modals/modals-content.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/component-docs/modals/modals.html b/demos/component-docs/modals/modals.html
new file mode 100644
index 0000000000..572380a046
--- /dev/null
+++ b/demos/component-docs/modals/modals.html
@@ -0,0 +1,14 @@
+
+
+ Modals
+
+
+
+
+
+
+
diff --git a/demos/component-docs/modals/modals.ts b/demos/component-docs/modals/modals.ts
new file mode 100644
index 0000000000..4234adf900
--- /dev/null
+++ b/demos/component-docs/modals/modals.ts
@@ -0,0 +1,80 @@
+import {App, IonicApp, Animation, Modal, NavController, IonicView, Events} from 'ionic/ionic';
+import * as helpers from 'helpers';
+
+
+@IonicView({
+ templateUrl: 'modals/modals.html'
+})
+class ModalsFirstPage {
+
+ constructor(
+ nav: NavController,
+ modal: Modal,
+ events: Events
+ ) {
+ this.nav = nav;
+ this.modal = modal;
+ }
+
+ openModal() {
+ this.modal.open(ModalsContentPage, {
+ handle: 'my-awesome-modal',
+ enterAnimation: 'my-fade-in',
+ leaveAnimation: 'my-fade-out'
+ });
+ }
+
+}
+
+@IonicView({
+ templateUrl: 'modals/modals-content.html'
+})
+class ModalsContentPage {
+
+ constructor(
+ modal: Modal,
+ events: Events
+ ) {
+ this.modal = modal;
+ }
+
+ closeModal() {
+ let modal = this.modal.get();
+ if (modal) {
+ modal.close();
+ }
+ }
+}
+
+@IonicView({
+ template: ''
+})
+export class ModalsPage {
+ constructor() {
+ this.rootView = ModalsFirstPage;
+ }
+}
+
+class FadeIn extends Animation {
+ constructor(element) {
+ super(element);
+ this
+ .easing('ease')
+ .duration(450)
+ .fadeIn();
+ }
+}
+
+Animation.register('my-fade-in', FadeIn);
+
+class FadeOut extends Animation {
+ constructor(element) {
+ super(element);
+ this
+ .easing('ease')
+ .duration(250)
+ .fadeOut();
+ }
+}
+
+Animation.register('my-fade-out', FadeOut);
diff --git a/demos/component-docs/navigation.html b/demos/component-docs/navigation.html
deleted file mode 100644
index 5d734ef310..0000000000
--- a/demos/component-docs/navigation.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- {{ selection.title }}
-
-
-
-{{ selection.content }}
-
\ No newline at end of file
diff --git a/demos/component-docs/navigation/navigation-details.html b/demos/component-docs/navigation/navigation-details.html
new file mode 100644
index 0000000000..d278f76b49
--- /dev/null
+++ b/demos/component-docs/navigation/navigation-details.html
@@ -0,0 +1,8 @@
+
+
+ {{selection.title}}
+
+
+
+ {{selection.content}}
+
\ No newline at end of file
diff --git a/demos/component-docs/navigation/navigation.html b/demos/component-docs/navigation/navigation.html
new file mode 100644
index 0000000000..3263158fdf
--- /dev/null
+++ b/demos/component-docs/navigation/navigation.html
@@ -0,0 +1,30 @@
+
+
+ Navigation
+
+
+
+
+
+
+
+ Angular
+
+
+
+
+ CSS3
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demos/component-docs/navigation.ts b/demos/component-docs/navigation/navigation.ts
similarity index 72%
rename from demos/component-docs/navigation.ts
rename to demos/component-docs/navigation/navigation.ts
index 60f6a8b36c..5c5f5250e2 100644
--- a/demos/component-docs/navigation.ts
+++ b/demos/component-docs/navigation/navigation.ts
@@ -3,9 +3,9 @@ import {IonicView, Events} from 'ionic/ionic';
import * as helpers from 'helpers';
@IonicView({
- templateUrl: 'navigation.html'
+ templateUrl: 'navigation/navigation-details.html'
})
-export class NavigationDetailsPage {
+class NavigationDetailsPage {
constructor(nav: NavController, params: NavParams, events: Events) {
this.nav = nav;
this.selection = { title: params.data.name };
@@ -23,16 +23,20 @@ export class NavigationDetailsPage {
};
this.selection['content'] = navData[this.selection.title];
this.selection['icon'] = navIcons[this.selection.title];
- window.onmessage = (e) => {
- zone.run(() => {
- if (e.data) {
- var data = JSON.parse(e.data);
- var componentTitle = helpers.toTitleCase(data.hash.replace('-', ' '));
- events.publish('page:locationChange', { componentName: componentTitle });
- this.nav.pop();
- }
- });
- };
-
}
+}
+
+@IonicView({
+ templateUrl: 'navigation/navigation.html',
+})
+export class NavigationPage {
+
+ constructor(nav: NavController) {
+ this.nav = nav;
+ }
+
+ openNavDetailsPage(item) {
+ this.nav.push(NavigationDetailsPage, { name: item });
+ }
+
}
\ No newline at end of file
diff --git a/demos/component-docs/popups/popups.html b/demos/component-docs/popups/popups.html
new file mode 100644
index 0000000000..1398388f0b
--- /dev/null
+++ b/demos/component-docs/popups/popups.html
@@ -0,0 +1,10 @@
+
+
+ Popups
+
+
+
diff --git a/demos/component-docs/popups/popups.ts b/demos/component-docs/popups/popups.ts
new file mode 100644
index 0000000000..609975601b
--- /dev/null
+++ b/demos/component-docs/popups/popups.ts
@@ -0,0 +1,16 @@
+import {IonicPlatform, IonicView, Popup} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'popups/popups.html',
+})
+export class PopupsPage {
+
+ constructor(popup: Popup) {
+ this.popup = popup;
+ }
+
+ showPopup() {
+ this.popup.alert("Popup Title").then(() => {
+ });
+ }
+}
\ No newline at end of file
diff --git a/demos/component-docs/slides/slides.html b/demos/component-docs/slides/slides.html
new file mode 100644
index 0000000000..08d81d2e51
--- /dev/null
+++ b/demos/component-docs/slides/slides.html
@@ -0,0 +1,24 @@
+
+
+ Slides
+
+
+
diff --git a/demos/component-docs/slides/slides.ts b/demos/component-docs/slides/slides.ts
new file mode 100644
index 0000000000..dfaf615154
--- /dev/null
+++ b/demos/component-docs/slides/slides.ts
@@ -0,0 +1,10 @@
+import {IonicPlatform, IonicView} from 'ionic/ionic';
+
+@IonicView({
+ templateUrl: 'slides/slides.html',
+})
+export class SlidesPage {
+ constructor() {
+
+ }
+}
\ No newline at end of file
diff --git a/demos/component-docs/tabs.ts b/demos/component-docs/tabs.ts
deleted file mode 100644
index 357ab55d72..0000000000
--- a/demos/component-docs/tabs.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import {NavController, NavParams} from 'ionic/ionic';
-import {IonicView, ViewController, Events} from 'ionic/ionic';
-import {MainPage} from 'index';
-import * as helpers from 'helpers';
-
-@IonicView({
- template: 'Hello 1',
-})
-class TabOneCtrl {
- constructor(nav: NavController, view: ViewController) {
- this.nav = nav;
- this.view = view;
- }
-}
-
-@IonicView({
- templateUrl: 'tabs.html'
-})
-export class TabsPage {
- constructor(nav: NavController, params: NavParams, events: Events) {
- this.nav = nav;
- this.TabOneRoot = TabOneCtrl;
- window.onmessage = (e) => {
- zone.run(() => {
- if (e.data) {
- var data = JSON.parse(e.data);
- var componentTitle = helpers.toTitleCase(data.hash.replace('-', ' '));
- this.nav.setRoot(MainPage, {location: componentTitle});
- events.publish('page:locationChange', { componentName: componentTitle });
- }
- });
- };
-
- }
-}
\ No newline at end of file
diff --git a/demos/component-docs/tabs.html b/demos/component-docs/tabs/tabs.html
similarity index 82%
rename from demos/component-docs/tabs.html
rename to demos/component-docs/tabs/tabs.html
index c6566ddd7f..f69ce0c9d0 100644
--- a/demos/component-docs/tabs.html
+++ b/demos/component-docs/tabs/tabs.html
@@ -4,7 +4,7 @@
-
+
diff --git a/demos/component-docs/tabs/tabs.ts b/demos/component-docs/tabs/tabs.ts
new file mode 100644
index 0000000000..22e1a53966
--- /dev/null
+++ b/demos/component-docs/tabs/tabs.ts
@@ -0,0 +1,22 @@
+import {NavController, NavParams} from 'ionic/ionic';
+import {IonicView, ViewController} from 'ionic/ionic';
+import * as helpers from 'helpers';
+
+@IonicView({
+ template: 'Hello 1',
+})
+class TabOneCtrl {
+ constructor(nav: NavController, view: ViewController) {
+ this.nav = nav;
+ this.view = view;
+ }
+}
+
+@IonicView({
+ templateUrl: 'tabs.html'
+})
+export class TabsPage {
+ constructor(nav: NavController, params: NavParams) {
+ this.nav = nav;
+ }
+}
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
index 808c405ff8..5333b45dde 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -416,8 +416,8 @@ gulp.task('demos', function(){
gulp.task('demos:all', ['demos'], function() {
return gulp
- .src('dist/demos/component-docs/*')
- .pipe(gulp.dest('dist/ionic-site/docs/v2/components/demo/'))
+ .src('dist/demos/component-docs/**/*')
+ .pipe(gulp.dest('dist/ionic-site/docs/v2/components/demo/'))
});
gulp.task('publish', function(done) {
From a92ea015bd96049e3332a8c184a0e14a20d62141 Mon Sep 17 00:00:00 2001
From: Drew Rygh
Date: Thu, 8 Oct 2015 11:06:11 -0500
Subject: [PATCH 02/17] docs(demos): directly load a page when parent window
has url hash
---
demos/component-docs/index.ts | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/demos/component-docs/index.ts b/demos/component-docs/index.ts
index bc867c01b8..4a3d936416 100644
--- a/demos/component-docs/index.ts
+++ b/demos/component-docs/index.ts
@@ -9,24 +9,28 @@ import * as helpers from 'helpers';
})
class DemoApp {
- constructor(app: IonicApp) {
+ rootPage: any;
+
+ constructor(app: IonicApp, platform: IonicPlatform) {
this.app = app;
- this.rootPage = ActionSheetPage;
+ this.platform = platform;
- // if (params.data.location) { this.nextPage = helpers.getPageFor(params.data.location); }
- // else if (window.location.hash) { this.nextPage = helpers.getPageFor(window.location.hash); }
- // else { this.nextPage = helpers.getPageFor('action-sheet'); }
-
- window.addEventListener('message', (e) => {
- zone.run(() => {
- if (e.data) {
- var data = JSON.parse(e.data);
- this.nextPage = helpers.getPageFor(data.hash);
- this.title = helpers.toTitleCase(data.hash.replace(/-/g, ' '));
- let nav = this.app.getComponent('nav');
- nav.setRoot(this.nextPage);
- }
+ this.platform.ready().then( () => {
+ window.addEventListener('message', (e) => {
+ zone.run(() => {
+ if (e.data) {
+ var data = JSON.parse(e.data);
+ if (data.hash) {
+ this.nextPage = helpers.getPageFor(data.hash.replace('#', ''));
+ } else {
+ this.nextPage = ActionSheetPage;
+ }
+ let nav = this.app.getComponent('nav');
+ nav.setRoot(this.nextPage);
+ }
+ });
});
+ window.parent.postMessage(this.platform.is('ios')? "ios":"android", "*");
});
}
From 3203fa16a1b3350f7a4432afbc59b61779021581 Mon Sep 17 00:00:00 2001
From: Tim Lancina
Date: Thu, 8 Oct 2015 12:28:59 -0500
Subject: [PATCH 03/17] use angular2/test_lib for tests
---
scripts/karma/karma.conf.js | 1 +
scripts/karma/test-main.js | 30 +++++++++++++++++-------------
2 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/scripts/karma/karma.conf.js b/scripts/karma/karma.conf.js
index d05990d431..ac5855f203 100644
--- a/scripts/karma/karma.conf.js
+++ b/scripts/karma/karma.conf.js
@@ -8,6 +8,7 @@ module.exports = function(config) {
frameworks: ['jasmine'],
files: buildConfig.scripts.concat([
+ 'node_modules/angular2/bundles/test_lib.dev.js',
'dist/tests/**/*.spec.js',
'scripts/karma/test-main.js'
]),
diff --git a/scripts/karma/test-main.js b/scripts/karma/test-main.js
index c0deefdd35..de357b69bb 100644
--- a/scripts/karma/test-main.js
+++ b/scripts/karma/test-main.js
@@ -4,19 +4,23 @@ jasmine.DEFAULT_TIMEOUT_INTERVAL = 50;
// we will call `__karma__.start()` later, once all the specs are loaded.
__karma__.loaded = function() {};
-Promise.all(
- Object.keys(window.__karma__.files) // All files served by Karma.
- .filter(onlySpecFiles)
- .map(window.file2moduleName) // Normalize paths to module names.
- .map(function(path) {
- return System.import(path).then(function(module) {
- if (module.hasOwnProperty('run')) {
- module.run();
- } else {
- console.warn('WARNING: Module ' + path + ' does not implement a run() method. No tests run.');
- }
- });
- }))
+System.import('angular2/src/core/dom/browser_adapter').then(function(browser_adapter) {
+ browser_adapter.BrowserDomAdapter.makeCurrent();
+}).then(function() {
+ return Promise.all(
+ Object.keys(window.__karma__.files) // All files served by Karma.
+ .filter(onlySpecFiles)
+ .map(window.file2moduleName) // Normalize paths to module names.
+ .map(function(path) {
+ return System.import(path).then(function(module) {
+ if (module.hasOwnProperty('run')) {
+ module.run();
+ } else {
+ console.warn('WARNING: Module ' + path + ' does not implement a run() method. No tests run.');
+ }
+ });
+ }))
+})
.then(function() {
__karma__.start();
}, function(error) {
From a1155b4663b13be238b2aa6ab9e5e16102747194 Mon Sep 17 00:00:00 2001
From: Tim Lancina
Date: Thu, 8 Oct 2015 12:29:41 -0500
Subject: [PATCH 04/17] update nav-controller tests to angular test methods
---
.../nav/test/nav-controller.spec.ts | 82 ++++++++++++++-----
ionic/components/nav/view-controller.ts | 2 +-
2 files changed, 62 insertions(+), 22 deletions(-)
diff --git a/ionic/components/nav/test/nav-controller.spec.ts b/ionic/components/nav/test/nav-controller.spec.ts
index 2a41a025ae..70c965074e 100644
--- a/ionic/components/nav/test/nav-controller.spec.ts
+++ b/ionic/components/nav/test/nav-controller.spec.ts
@@ -1,42 +1,76 @@
+import {
+ ddescribe,
+ describe,
+ xdescribe,
+ it,
+ iit,
+ xit,
+ expect,
+ beforeEach,
+ afterEach,
+ AsyncTestCompleter,
+ inject,
+ beforeEachBindings
+} from 'angular2/test';
+
+import {Compiler} from 'angular2/angular2';
+
import {
NavController,
IonicConfig,
+ Page,
ViewController
} from 'ionic/ionic';
+
+@Page({
+ template: ''
+})
+class SomePage {}
+
export function run() {
- describe("NavController", function(){
- beforeEach( function(){
- this.nav = new NavController(null, null, new IonicConfig(), null, null, null, null, null);
+ describe("NavController", () => {
+ let nav;
+
+ beforeEach(inject([Compiler], compiler => {
+ nav = new NavController(null, null, new IonicConfig(), null, compiler, null, null, null);
+ }));
+
+ it('should exist', () => {
+ expect(nav).not.toBeUndefined();
});
- it('should exist', function(){
- expect(this.nav).not.toBeUndefined();
- });
-
- describe("getActive", function(){
- it('should return null if there is no active view', function(){
- var active = this.nav.getActive();
+ describe("getActive", () => {
+ it('should return null if there is no active view', () => {
+ var active = nav.getActive();
expect(active).toBe(null);
});
- it('should return the first active page', function(){
+ it('should return the first active page', () => {
let activeView = new ViewController();
activeView.state = 1; // ACTIVE_STATE
- this.nav.add(activeView);
- var active = this.nav.getActive();
+ nav.add(activeView);
+ var active = nav.getActive();
+
+ expect(active).toBe(activeView);
+
+ let secondActiveView = new ViewController();
+ secondActiveView.state = 1; // ACTIVE_STATE
+
+ nav.add(secondActiveView);
+ active = nav.getActive();
expect(active).toBe(activeView);
});
});
- describe("push", function(){
- it('should return a rejected Promise if componentType is falsy', function(done){
+ describe("push", () => {
+ it('should return a rejected Promise if componentType is falsy', done => {
let s = jasmine.createSpy('success');
let f = jasmine.createSpy('fail');
- let promise = this.nav.push(undefined, {}, {});
+ let promise = nav.push(undefined, {}, {});
promise.then(s, f).then(() => {
expect(s).not.toHaveBeenCalled();
@@ -45,20 +79,26 @@ export function run() {
});
});
- it('should throw an error if componentType truthy, but is not a function', function(){
- let push = () => this.nav.push({}, {}, {});
+ it('should throw an error if componentType truthy, but is not a function', () => {
+ let push = () => nav.push({}, {}, {});
expect(push).toThrow();
- push = () => this.nav.push("string", {}, {});
+ push = () => nav.push("string", {}, {});
expect(push).toThrow();
- push = () => this.nav.push(42, {}, {});
+ push = () => nav.push(42, {}, {});
expect(push).toThrow();
- push = () => this.nav.push(true, {}, {});
+ push = () => nav.push(true, {}, {});
expect(push).toThrow();
});
+ it('be successful', () => {
+ expect(SomePage).toBeDefined();
+
+ nav.push(SomePage, {}, {});
+ });
+
})
});
diff --git a/ionic/components/nav/view-controller.ts b/ionic/components/nav/view-controller.ts
index 7169e22e39..38707e2bc6 100644
--- a/ionic/components/nav/view-controller.ts
+++ b/ionic/components/nav/view-controller.ts
@@ -36,7 +36,7 @@ export class ViewController {
return done();
}
- // compile the componenet and create a ProtoViewRef
+ // compile the component and create a ProtoViewRef
navCtrl.compileView(this.componentType).then(hostProtoViewRef => {
// get the pane the NavController wants to use
From b07a3760e5ebdd80a9c00b2ebb29a09663edc23d Mon Sep 17 00:00:00 2001
From: Brandy Carney
Date: Thu, 8 Oct 2015 14:04:18 -0400
Subject: [PATCH 05/17] refactor(search-bar): Added JS to calculate the margin
of the iOS cancel button
References #247
---
ionic/components/search-bar/modes/ios.scss | 19 +++++--------------
ionic/components/search-bar/modes/md.scss | 4 ++++
ionic/components/search-bar/search-bar.ts | 18 ++++++++++++++++++
.../search-bar/test/floating/main.html | 2 ++
4 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/ionic/components/search-bar/modes/ios.scss b/ionic/components/search-bar/modes/ios.scss
index 2e702ce67a..c7f9d10922 100644
--- a/ionic/components/search-bar/modes/ios.scss
+++ b/ionic/components/search-bar/modes/ios.scss
@@ -15,8 +15,9 @@ $search-bar-ios-input-height: 28px !default;
$search-bar-ios-input-placeholder-color: #9D9D9D !default;
$search-bar-ios-input-text-color: #000 !default;
$search-bar-ios-input-background-color: #FFFFFF !default;
-$search-bar-ios-input-transition: all 0.3s linear !default;
-//cubic-bezier(.25, .45, .05, 1)
+$search-bar-ios-input-transition: all 400ms cubic-bezier(.25, .45, .05, 1) !default;
+$search-bar-ios-cancel-transition: all 400ms cubic-bezier(.25, .45, .05, 1) !default;
+
$search-bar-ios-input-close-icon-color: #8F8E94 !default;
$search-bar-ios-input-close-icon-svg: "" !default;
$search-bar-ios-input-close-icon-size: 17px !default;
@@ -88,19 +89,9 @@ $search-bar-ios-input-close-icon-size: 17px !default;
.search-bar-cancel {
@extend button[clear];
- // transition: all 2s cubic-bezier(.25, .45, .05, 1);
- transition: $search-bar-ios-input-transition;
- transition-duration: 3s !important;
- margin-right: calc(-100%);
- // transform: translate3d(100px,0,0);
- // max-width: 0;
- min-height: 0;
-}
-
-.search-bar-cancel.left-align {
- max-width: initial;
- margin-right: 0;
+ transition: $search-bar-ios-cancel-transition;
padding-left: 8px;
+ min-height: 0;
padding-right: 0;
}
diff --git a/ionic/components/search-bar/modes/md.scss b/ionic/components/search-bar/modes/md.scss
index 4605baf186..84a1c244bd 100644
--- a/ionic/components/search-bar/modes/md.scss
+++ b/ionic/components/search-bar/modes/md.scss
@@ -69,3 +69,7 @@ $search-bar-md-input-close-icon-size: 22px !default;
right: 13px;
top: 13px;
}
+
+.search-bar-cancel {
+ display: none;
+}
diff --git a/ionic/components/search-bar/search-bar.ts b/ionic/components/search-bar/search-bar.ts
index 7bc2933142..766fe60c6d 100644
--- a/ionic/components/search-bar/search-bar.ts
+++ b/ionic/components/search-bar/search-bar.ts
@@ -74,6 +74,16 @@ export class SearchBar extends Ion {
this.query = '';
}
+ // Add the margin for iOS
+ afterViewInit() {
+ this.cancelButton = this.elementRef.nativeElement.querySelector('.search-bar-cancel');
+
+ if (this.cancelButton) {
+ this.cancelWidth = this.cancelButton.offsetWidth;
+ this.cancelButton.style.marginRight = "-" + this.cancelWidth + "px";
+ }
+ }
+
/**
* Much like ngModel, this is called from our valueAccessor for the attached
* ControlDirective to update the value internally.
@@ -99,10 +109,18 @@ export class SearchBar extends Ion {
inputFocused() {
this.isFocused = true;
this.shouldLeftAlign = true;
+
+ if (this.cancelButton) {
+ this.cancelButton.style.marginRight = "0px";
+ }
}
inputBlurred() {
this.isFocused = false;
this.shouldLeftAlign = this.value.trim() != '';
+
+ if (this.cancelButton) {
+ this.cancelButton.style.marginRight = "-" + this.cancelWidth + "px";
+ }
}
clearInput() {
diff --git a/ionic/components/search-bar/test/floating/main.html b/ionic/components/search-bar/test/floating/main.html
index da43d4f498..9d04b18b29 100644
--- a/ionic/components/search-bar/test/floating/main.html
+++ b/ionic/components/search-bar/test/floating/main.html
@@ -13,6 +13,8 @@
+
+
From 8665f65cf044112c281169851f040db4e9d389c1 Mon Sep 17 00:00:00 2001
From: Drew Rygh
Date: Thu, 8 Oct 2015 11:17:07 -0500
Subject: [PATCH 06/17] remove padding from demo
---
demos/component-docs/icons/icons.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/demos/component-docs/icons/icons.html b/demos/component-docs/icons/icons.html
index f328076f9d..9090fea137 100644
--- a/demos/component-docs/icons/icons.html
+++ b/demos/component-docs/icons/icons.html
@@ -3,7 +3,7 @@
Icons
-
-
diff --git a/demos/component-docs/buttons/buttons.html b/demos/component-docs/buttons/buttons.html
index 56c7b8a8b3..bb2582ec93 100644
--- a/demos/component-docs/buttons/buttons.html
+++ b/demos/component-docs/buttons/buttons.html
@@ -2,7 +2,7 @@
Buttons
-