diff --git a/doc-template/additional/Demo-App.md b/doc-template/additional/Demo-App.md
new file mode 100644
index 000000000..146d44872
--- /dev/null
+++ b/doc-template/additional/Demo-App.md
@@ -0,0 +1,605 @@
+# My first The-M-Project 2.0 App from scratch
+
+In this tutorial we first build a very basic application.
+
+- The first step is to create the app and switch the content on a button press/tap with a transition
+- Then you learn how to use models and collections
+- Connect them with Bikini
+
+# Step 1 - Basic Sample App
+
+## Setup
+
+1. Install the generator if you haven't already. [Looking for details?](https://github.com/mwaylabs/generator-m/blob/master/README.md)
+2. Create a folder and name it after the application name and open it.
+
+ ```
+ mkdir demoapp && cd $_
+ ```
+
+3. Inside of the folder run the The-M-Project generator
+
+ ```
+ yo m
+ ```
+
+4. The generator guides you through several configuration steps
+
+ 1. Select a Template
+ - First you have to choose a basic template of your application.
+ - You find details to all the available templates [here](https://github.com/mwaylabs/The-M-Project/tree/absinthe#layouts-1).
+ 2. Work with or without Sass
+ - It is up to you if you want to use Sass inside of your project or not.
+ - If you want to use Sass we recommend Compass. [Details about Sass/Compass](#compass).
+ 3. Make sure you have a internet connection - all the dependencies getting installed.
+
+## Develop the application
+
+We want to develop a simple app with two pages and use different transitions to switch between both.
+
+[The sample app source code is on GitHub](https://github.com/mwaylabs/The-M-Project-Sample-Apps) (with a blank layout and without Sass).
+Read about the [Application Lifecycle](https://github.com/mwaylabs/The-M-Project/tree/absinthe#application-lifecycle)
+
+1. Start the Testserver
+
+ ```
+ // Stop the server with ctrl+c
+ grunt server
+
+ ```
+
+2. Run the Application: [http://localhost:9000/](http://localhost:9000/) to see what we have so far - should be empty.
+
+3. open app/scripts/main.js
+
+ - There is no Controller defined
+ - The Router points to no Controller
+ - The app is accessable through a global namespace
+
+ ```javascript
+ // The app gets initialized with the configuration provided from the config.js
+ // and gets appended to the global (window) namespace named like the app
+ global.demoapp = M.Application.extend().create(global.demoapp.mconfig);
+ $(document).ready(function() {
+
+ // If the DOM is ready, initialize the router
+ global.demoapp.start({
+ routing: {
+ routes: {
+ //m:routes -- don't edit this
+ },
+ //m:controllers -- don't edit this
+ }
+ });
+ });
+
+ ```
+
+4. Setup the both Controller
+ - The first page should contain a menu
+ - The Menu should be our entry point. The route to it is [http://localhost:9000/](http://localhost:9000/)
+ - The second page is a detail of a selected menu item
+ - Use detail as a route [http://localhost:9000/detail](http://localhost:9000/detail)
+ - This generates both files
+ - `scripts/controllers/menu.js`
+ - `scripts/controllers/detail.js`
+ - The generator adds a script tag for every view to the `index.html`
+ - The generator adds every controller to the router inside the `app/scripts/main.js`
+
+ ```
+ // The first argument is the name of the controller
+ yo m:controller menu ''
+ // The second argument is the route to the controller
+ yo m:controller detail detail
+ // Start the server again
+ grunt server
+ ```
+
+ - open [http://localhost:9000/](http://localhost:9000/) to call the `applicationStart` of the MenuController
+ - open [http://localhost:9000/#detail](http://localhost:9000/#detail) to call the `applicationStart` of the DetailController
+
+5. Add a [Layout](https://github.com/mwaylabs/The-M-Project/tree/absinthe#layouts-1)
+ - Both Controllers share a layout so add initialize it inside the `applicationStart` of the demoapp.MenuController
+
+ ```javascript
+ ...
+ applicationStart: function(settings) {
+ // Create a layout and apply it to the application
+ var layout = M.SwitchLayout.extend().create(this);
+ demoapp.setLayout(layout);
+ }
+ ...
+ ```
+6. Extend one Controller from the other
+ - Since both Controller should share the same Layout they can share the same code.
+ - Change the `scripts/controllers/detail.js`
+
+ ```javascript
+ ...
+ // Extend the MenuController
+ demoapp.Controllers.DetailController = demoapp.Controllers.MenuController.extend({
+
+ // Remove unused methods
+ });
+ ...
+ ```
+
+7. Create the basic Views
+
+ ```javascript
+ // The first argument is the name of the view
+ yo m:view menu
+ yo m:view detail
+ ```
+ - This generates the both files
+ - `scripts/views/menu.js`
+ - `scripts/views/detail.js`
+ - The generator adds a script tag for every view to the `index.html`
+
+8. Initialze the Views
+ - Every View is bound to a Controller
+ - Implement a `initViews` method for both controllers
+ - Create a `contentView` property for the controllers and assign the generated Views to it
+ - Application start
+ 1. Initialize the Layout
+ 2. Apply the Layout to the app
+ 3. Initialize the Views
+ 4. Render the views by applying them to the layout
+ - show
+ 1. Initialize the Views
+ 2. Change the from one content to another
+
+ ```javascript
+ // scripts/controllers/detail.js
+ demoapp.Controllers.DetailController = demoapp.Controllers.MenuController.extend({
+
+ initViews: function(){
+ // Initialzie the DetailView with the controller (this) as scope
+ this.contentView = demoapp.Views.DetailView.create(this);
+ }
+ });
+
+ ```
+
+ ```javascript
+ // scripts/controllers/menu.js
+ demoapp.Controllers.MenuController = M.Controller.extend({
+
+ // The Content of the page
+ contentView: null,
+
+ // Called when the Application starts
+ applicationStart: function () {
+ // Create a layout and apply it to the application
+ var layout = M.SwitchLayout.extend().create(this);
+ // Set the Layout to the View
+ demoapp.setLayout(layout);
+ // Initialize the Views
+ this.initViews();
+ // Apply the Views to the Layout (render)
+ this._applyViews();
+ },
+
+ show: function () {
+ // Initialize the Views
+ this.initViews();
+ // Apply the Views to the Layout (render)
+ this._applyViews();
+ // Switch the Layout
+ demoapp.getLayout().startTransition();
+ },
+
+ initViews: function(){
+ // Create the MenuView with the controller (this) as scope
+ this.contentView = demoapp.Views.MenuView.create(this);
+ },
+
+ _applyViews: function() {
+ demoapp.getLayout().applyViews({
+ content: this.contentView
+ });
+ }
+ });
+
+ ```
+
+9. Add content and interaction to the views
+
+ ```javascript
+ // scripts/views/detail.js
+ demoapp.Views.DetailView = M.View.extend({
+ // The properties of a view
+
+ // The view should be in a grid
+ grid: 'col-xs-12',
+ // Every view has a value
+ value: 'Detail'
+ }, {
+ // The childViews
+
+ // Add a button to navigate to the MenuView
+ button: M.ButtonView.extend({
+ // The Text of the Button
+ value: 'Back to the Menu',
+ // The events of the button
+ events: {
+ // On tab call the scope method 'gotoMenuPage' (scope is the DetailController)
+ tap: 'gotoMenuView'
+ }
+ })
+ });
+
+ ```
+
+ ```javascript
+ // scripts/views/menu.js
+ demoapp.Views.MenuView = M.View.extend({
+ // The properties of a view
+
+ // The view should be in a grid
+ grid: 'col-xs-12',
+ // Every view has a value
+ value: 'Menu'
+ }, {
+ // The childViews
+
+ // Add a button to navigate to the MenuView
+ button: M.ButtonView.extend({
+ // The Text of the Button
+ value: 'To the Detail View',
+ // The events of the button
+ events: {
+ // On tab call the scope method 'gotoMenuPage' (scope is the DetailController)
+ tap: 'gotoDetailView'
+ }
+ })
+ });
+ ```
+
+10. Add Navigation methods to the Controller
+
+ ```javascript
+ // scripts/controllers/detail.js
+ ...
+ // Navigation: on button tap
+ gotoMenuView: function(){
+ // navigate to the menu view via a route
+ demoapp.navigate({
+ route: ''
+ });
+ }
+ ...
+
+ ```
+
+ ```javascript
+ // scripts/controllers/menu.js
+ ...
+ // Navigation: on button tap
+ gotoDetailView: function(){
+ // navigate to the detail view via a route
+ demoapp.navigate({
+ route: '/detail'
+ });
+ }
+ ...
+
+ ```
+
+11. Change Transitions
+ - To get an overview of all available transitions have a look at the `M.PageTransitions.CONST`
+
+ ```javascript
+ demoapp.navigate({
+ route: '/detail',
+ transition: M.PageTransitions.CONST.FALL
+ });
+
+ ```
+
+12. You want more? Look at the sample apps to get an idea of how to use The-M-Project. The [Kitchensink](http://www.the-m-project.org/apps/absinthe/kitchensink/index.html) is a good starting point.
+
+
+# Step 2 - Working with models and collections
+Tipp: M.Model and M.Collection are extended from [Backbone.Model](http://backbonejs.org/#Model) and [Backbone.Collection](http://backbonejs.org/#Collection)
+
+1. Create a collection called contacts
+
+ - this will create a folder `scripts/collections` and inside a file called `contacts.js`
+
+
+ ```
+ yo m:collection contacts
+ ```
+
+ - UPDATE! There was a bug in the generator: https://github.com/mwaylabs/generator-m/issues/3 - all collections are append to the top of the index.html and not above this comment:
+
+ - quickfix: #1: remove: `` from the first line of the index.html and add it like the this:
+
+ ```
+
+
+
+
+ ```
+ - or: delete the collection, update your generator and run the task again.
+
+2. Create a model called contact
+ - this will create a folder `scripts/models` and inside a file called `contact.js`
+
+ ```
+ yo m:model contact
+ ```
+
+3. Assign the `contact` model to the `contacts` collection. Open `scripts/collections`. Default the model is called the same as the collection in this case `ContactsModel` so just remove the `s`:
+
+ ```
+ demoapp.Collections.ContactsCollection = M.Collection.extend({
+ //assign the contact model to this collection
+ model: demoapp.Models.ContactModel
+ });
+ ```
+
+5. Create the collection inside the Menucontroller. `scripts/controllers/menu.js`
+ 1. define a variable for it
+
+ ```
+ ...
+ // define contacts collection
+ contacts: null,
+ ...
+
+ ```
+
+ 2. Initialze the collection inside `applicationStart` and `show` before the `initViews` call.
+
+ ```
+ ...
+ // Called when the Application starts
+ applicationStart: function () {
+ // Create a layout and apply it to the application
+ var layout = M.SwitchLayout.extend().create(this);
+ // Set the Layout to the View
+ demoapp.setLayout(layout);
+ // Initialze the Collection
+ this.initData();
+ // Initialize the Views
+ this.initViews();
+ // Apply the Views to the Layout (render)
+ this._applyViews();
+ },
+
+ show: function () {
+ // Initialze the Collection
+ this.initData();
+ // Initialize the Views
+ this.initViews();
+ // Apply the Views to the Layout (render)
+ this._applyViews();
+ // Switch the Layout
+ demoapp.getLayout().startTransition();
+ },
+ ...
+ ```
+
+ 3. Implement `initData` with demo data
+
+ ```
+ // initialze the data
+ initData: function(){
+ // create the contacts collections if it doesn't exist
+ if(!this.contacts){
+ // create the collection with demo data
+ this.contacts = demoapp.Collections.ContactsCollection.create(this.getContacts());
+ }
+ },
+
+ // get the contacts
+ getContacts: function(){
+ // create some demo data
+ return [{"name": 'foo', "lastname": "bar"}, {"name": 'max', "lastname": "mustermann"}];
+ }
+ ```
+
+4. Display the collection using a `M.ListView` in `scripts/views/menu.js`
+
+Tipp: Look at the Kitchensink for example code
+
+
+ - create a M.ListView
+ - apply a grid (from left to right with some padding)
+ - set the scopeKey - the collections name inside the controller
+ - add a `M.ListItemView` as a blue print for every entry
+ - extend the template from `M.ListItemView` to fit to the collection model. Every attribute of the model can be displayed with '<%= ATTRIBUTE_NAME %>'
+
+ ```
+ ...
+ // The contacts list
+ contactsList: M.ListView.extend({
+
+ // fit into the grid - whole page
+ grid: 'col-xs-12',
+
+ // the collection inside the menu controller
+ scopeKey: 'contacts',
+
+ // This property contains the listitem view
+ listItemView: M.ListItemView.extend({
+
+ // Extend the default template with this one. It gets injected into the <%= _value_ %> placeholder
+ extendTemplate: '<%= name %><%= lastname %>'
+ })
+
+
+ })
+ ...
+ ```
+5. Test the application
+
+The application should display a basic list with the both entries.
+
+```
+grunt server
+```
+
+6. Add contacts through a submit form
+ 1. Create the input fields in `scripts/views/menu.js`
+
+ ```
+ ...
+ // an input field for the lastname
+ addLastName: M.TextfieldView.extend({
+ // fit into the grid
+ grid: 'col-xs-12',
+ // label it as lastname with a placeholder ...
+ placeholder: 'Lastname',
+ // and a label
+ label: 'Lastname',
+ // add a nice icon from http://fontawesome.io/icons/
+ icon: 'fa-users',
+ // bind the view to a controller model attribute
+ scopeKey: 'newContact.lastname'
+ }),
+
+ // an input field for the firstname
+ addFirstName: M.TextfieldView.extend({
+ // fit into the grid
+ grid: 'col-xs-12',
+ // label it as lastname with a placeholder ...
+ placeholder: 'Firstname',
+ // and a label
+ label: 'Firstname',
+ // add a nice icon from http://fontawesome.io/icons/
+ icon: 'fa-user',
+ // bind the view to a controller model attribute
+ scopeKey: 'newContact.name'
+ }),
+ ...
+
+ ```
+ 2. Add an submit button to `scripts/views/menu.js`
+
+ ```
+ ...
+ // a submit button for adding a entry to the list
+ addButton: M.ButtonView.extend({
+ //fit into the grid
+ grid: 'col-xs-12',
+ // The Text of the Button
+ value: 'Add',
+ // The events of the button
+ events: {
+ // On tab call the scope method 'addContact' (scope is the MenuController)
+ tap: 'addContact'
+ }
+ }),
+ ...
+ ```
+7. Extend the controller to serve the new features
+
+ 1. Add an attribute for the TextFieldViews
+
+ ```
+ ...
+ // use this model as reference to the form views
+ newContact: null,
+ ...
+
+ ```
+
+ 2. Implement the tap callback of the `addButton` inside the `scripts/controller/menu.js`
+ On the tab create a new model based on the `newContact` model. Thanks to [backbone.stickit](http://nytimes.github.io/backbone.stickit/) the model and the view are always in sync.
+
+ ```
+ addContact: function(){
+ // add a new model instance based on the the new contact model to the collection
+this.contacts.add(demoapp.Models.ContactModel.create(this.newContact.attributes));
+ }
+ ```
+
+8. Store the data inside the `localStorage`
+
+ 1. Add a store to the collection in `scripts/collection/contacts.js`
+
+ ```
+ demoapp.Collections.ContactsCollection = M.Collection.extend({
+ // assign the contact model to this collection
+ model: demoapp.Models.ContactModel,
+ // the collection uses the localStorage of the browser through the M.LocalStorageStore
+ store: M.LocalStorageStore.create( {})
+ });
+ ```
+
+ 2. Extend the contact model with an entity and attributes in `scripts/models/contact.js`
+
+ ```
+ demoapp.Models.ContactModel = M.Model.extend({
+ // an id for every entry
+ idAttribute: '_id',
+ // the entity
+ entity: {
+ // profide a name to identify the collection/model
+ name: 'contact',
+ fields: {
+ // the identifier of the model
+ _id: { type: M.CONST.TYPE.STRING, required: YES, index: YES },
+ // the name of the model
+ name: { type: M.CONST.TYPE.STRING },
+ // the lastnamename of the model
+ lastname: { type: M.CONST.TYPE.STRING }
+ }
+ }
+ });
+ ```
+
+ 3. Implement `getContacts` with real data in the menu controller `scripts/controllers/menu.js`
+
+ ```
+ // get the contacts
+ getContacts: function(){
+ // read the data from the store
+ this.contacts.fetch();
+ },
+ ```
+
+
+ 3. Implement `initData` with real data in the `MenuController.initData` inside of `scripts/controllers/menu.js`
+ - remove `this.getContacts()` from the `create` call
+ - call `this.getContacts()` when the contacts are accessable
+
+ ```
+ // initialze the data
+ initData: function(){
+ //create a model to store the first and the last name
+ this.newContact = demoapp.Models.ContactModel.create();
+ // create the contacts collections if it doesn't exist
+ if(!this.contacts){
+ this.contacts = demoapp.Collections.ContactsCollection.create();
+ }
+ // fetch the data
+ this.getContacts();
+ },
+ ```
+9. Test the application
+ - If you start the application with `grunt server` the list should be empty
+ - Enter a name and lastname and add it to the collection by tapping the add button
+ - The new contact should be added to the list
+ - Refreshing the browser fetchs the data from the localStorage and the list won't loose the entries
+
+
+
+# Step 3 - Connect with Bikini
+ - tbd
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc-template/additional/Generator.md b/doc-template/additional/Generator.md
new file mode 100644
index 000000000..e933a2e8b
--- /dev/null
+++ b/doc-template/additional/Generator.md
@@ -0,0 +1,186 @@
+# The-M-Project generator [](https://travis-ci.org/mwaylabs/generator-m) [](https://coveralls.io/r/mwaylabs/generator-m?branch=master)
+
+A [Yeoman](http://yeoman.io) generator for [The-M-Project 2.0](http://the-m-project.org).
+
+## Getting Started
+
+Make sure you have installed Node.js, Git and optionally, Ruby and Compass (if you plan to use Sass).
+
+Install: `npm install -g generator-m`
+
+Create a folder and name it after the application name and `cd` into it:
+```
+mkdir my-new-project && cd $_
+```
+
+Run the yo generator:
+```
+yo m
+```
+
+Run `grunt` for building and `grunt server` for preview
+
+## Generators
+
+Available generators:
+
+* [m](#app)
+* [m:view](#view)
+* [m:layout](#layout)
+* [m:controller](#controller)
+* [m:model](#model)
+* [m:collection](#collection)
+* [m:router](#router)
+* [m:i18n](#i18n)
+
+### App
+Create a new The-M-Project app and generate all the boilerplate for you.
+
+```
+yo m
+```
+
+### View
+
+Generates a view in `app/scripts/views`.
+
+Example:
+```
+yo m:view foo
+```
+
+Produces `app/scripts/views/foo.js`:
+
+```javascript
+APPNAME.Views.FooView = M.View.extend({
+ // ...
+})
+```
+### Layout
+
+Generates a layout in `app/scripts/layouts`.
+
+Example:
+```
+yo m:layout foo
+```
+
+Produces `app/scripts/layouts/foo.js`:
+
+```javascript
+APPNAME.Layouts.FooLayout = M.Layout.extend({
+ // ...
+})
+```
+
+### Controller
+
+Generates a controller in `app/scripts/controllers`.
+
+Example:
+```
+yo m:controller foo
+```
+
+Produces `app/scripts/controllers/foo.js`:
+
+```javascript
+APPNAME.Controllers.FooController = M.Controller.extend({
+ // ...
+})
+```
+
+### Model
+
+Generates a model in `app/scripts/models`.
+
+Example:
+```bash
+yo m:model foo
+```
+
+Produces `app/scripts/models/foo.js`:
+
+```javascript
+APPNAME.Models.FooModel = M.Model.extend({
+ // ...
+})
+```
+
+### Collection
+
+Generates a collection in `app/scripts/collections`.
+
+Example:
+```
+yo m:collection foo
+```
+
+Produces `app/scripts/collections/foo.js`:
+
+```javascript
+APPNAME.Collections.FooCollection = M.Collection.extend({
+ // ...
+})
+```
+
+### Router
+
+Generates a router in `app/scripts/routers`.
+
+Example:
+```
+yo m:routers foo
+```
+
+Produces `app/scripts/routers/foo.js`:
+
+```javascript
+APPNAME.Routers.FooRouter = M.Router.extend({
+ // ...
+})
+```
+
+### I18N
+
+Generates a i18n in `app/i18n`.
+
+Example:
+```
+yo m:i18n en
+```
+
+Produces `app/i18n/en.json`:
+
+```javascript
+{
+ "global.button.save": "Save document",
+ "global.button.emptyTrash": "Empty Trash ({{count}})",
+ "global.error.permissionDenied": "Permission denied"
+}
+```
+
+## Options
+
+* `--skip-install`
+
+ Skips the automatic execution of `bower` and `npm` after scaffolding has finished.
+
+* `--test-framework `
+
+ Defaults to `mocha`. Can be switched for another supported testing framework like `jasmine`.
+
+
+## Contribute
+
+See the [contributing docs](https://github.com/yeoman/yeoman/blob/master/contributing.md)
+
+When submitting an issue, please follow the [guidelines](https://github.com/yeoman/yeoman/blob/master/contributing.md#issue-submission). Especially important is to make sure Yeoman is up-to-date, and providing the command or commands that cause the issue.
+
+When submitting a bugfix, write a test that exposes the bug and fails before applying your fix. Submit the test alongside the fix.
+
+When submitting a new feature, add tests that cover the feature.
+
+## License
+
+[MIT License](http://en.wikipedia.org/wiki/MIT_License)
diff --git a/doc-template/additional/Sample-Apps.md b/doc-template/additional/Sample-Apps.md
new file mode 100644
index 000000000..79769f82f
--- /dev/null
+++ b/doc-template/additional/Sample-Apps.md
@@ -0,0 +1,21 @@
+# The-M-Project - Absinthe Sample Apps
+
+[Looking for the Samples of The-M-Project 1.x?](https://github.com/mwaylabs/The-M-Project-Sample-Apps/tree/1.x)
+
+## Setup
+
+- Navigate to a sample app ```cd kitchensink/```
+- Install dependencies:
+ - ```npm install```
+ - ```bower install```
+- Start the server: ```grunt server```
+
+## Setup all
+
+If you are looking for an easy setup process for all sample applications run:
+
+```sh setup-all.sh```
+
+The script runs the following commands:
+ - ```npm install```
+ - ```bower install```
\ No newline at end of file
diff --git a/resources/sass/_master.scss b/resources/sass/_master.scss
index d6a8c95e8..d1a579104 100644
--- a/resources/sass/_master.scss
+++ b/resources/sass/_master.scss
@@ -32,4 +32,6 @@
@import "themes/default/movable";
@import "themes/default/toggleswitch";
@import "themes/default/menu";
+@import "themes/default/alert";
+@import "themes/default/dialog";
diff --git a/resources/sass/themes/default/_alert.scss b/resources/sass/themes/default/_alert.scss
new file mode 100644
index 000000000..193350af3
--- /dev/null
+++ b/resources/sass/themes/default/_alert.scss
@@ -0,0 +1,21 @@
+.m-view.m-labelview.m-alertview-inner-message {
+ word-wrap: break-word;
+ padding: 15px;
+ text-align: center;
+}
+
+.m-view.m-labelview.m-alertview-title {
+ word-wrap: break-word;
+ padding: 15px 15px 0 15px;
+ text-align: center;
+}
+
+.m-alertview-inner {
+ position: relative;
+ width: 300px;
+ background: rgba(255, 255, 255, 0.9);
+ z-index: 1040;
+ border: 1px solid $m-modal-text-color;
+ color: $m-modal-text-color;
+ border-radius: 4px;
+}
\ No newline at end of file
diff --git a/resources/sass/themes/default/_variables.scss b/resources/sass/themes/default/_variables.scss
index d52a5bf6b..8997821e3 100644
--- a/resources/sass/themes/default/_variables.scss
+++ b/resources/sass/themes/default/_variables.scss
@@ -128,6 +128,7 @@ $m-primary-margin-bottom: 20px;
// Modal
$modal-backdrop-background-color: $black;
+$m-modal-text-color: $m-button-text-color;
$content-padding: 15px;
diff --git a/resources/sass/themes/default/dialog.scss b/resources/sass/themes/default/dialog.scss
new file mode 100644
index 000000000..47e6f293e
--- /dev/null
+++ b/resources/sass/themes/default/dialog.scss
@@ -0,0 +1,21 @@
+.m-view.m-labelview.m-dialogview-inner-message {
+ word-wrap: break-word;
+ padding: 15px;
+ text-align: center;
+}
+
+.m-view.m-labelview.m-dialogview-headline {
+ word-wrap: break-word;
+ padding: 15px 15px 0 15px;
+ text-align: center;
+}
+
+.m-dialogview-inner {
+ position: relative;
+ width: 300px;
+ background: rgba(255, 255, 255, 0.9);
+ z-index: 1040;
+ border: 1px solid $m-modal-text-color;
+ color: $m-modal-text-color;
+ border-radius: 4px;
+}
\ No newline at end of file
diff --git a/resources/sass/themes/ios/_alert.scss b/resources/sass/themes/ios/_alert.scss
new file mode 100644
index 000000000..5435f3b55
--- /dev/null
+++ b/resources/sass/themes/ios/_alert.scss
@@ -0,0 +1,6 @@
+.ios .m-alertview-inner {
+ position: relative;
+ width: 300px;
+ background: rgba(255, 255, 255, 0.9);
+ z-index: 1040;
+}
\ No newline at end of file
diff --git a/resources/sass/themes/ios/dialog.scss b/resources/sass/themes/ios/dialog.scss
new file mode 100644
index 000000000..9f96265b7
--- /dev/null
+++ b/resources/sass/themes/ios/dialog.scss
@@ -0,0 +1,6 @@
+.ios .m-dialogview-inner {
+ position: relative;
+ width: 300px;
+ background: rgba(255, 255, 255, 0.9);
+ z-index: 1040;
+}
\ No newline at end of file
diff --git a/resources/sass/themproject_ios.scss b/resources/sass/themproject_ios.scss
index a7d798490..6115f50da 100644
--- a/resources/sass/themproject_ios.scss
+++ b/resources/sass/themproject_ios.scss
@@ -3,6 +3,8 @@
.ios {
@import "master";
+ @import "themes/ios/alert";
+ @import "themes/ios/dialog";
@import "themes/ios/buttongroup";
@import "themes/ios/radiolist";
@import "themes/ios/checkboxlist";
diff --git a/src/_ui.js b/src/_ui.js
index 426980996..fb2b700cb 100644
--- a/src/_ui.js
+++ b/src/_ui.js
@@ -16,7 +16,6 @@
// @include ./ui/views/button.js
// @include ./ui/views/list.js
// @include ./ui/views/slider.js
-// @include ./ui/views/dialog.js
// @include ./ui/views/toggle.js
// @include ./ui/views/image.js
// @include ./ui/views/toast.js
@@ -30,6 +29,8 @@
// @include ./ui/views/checkboxlist.js
// @include ./ui/views/modal.js
// @include ./ui/views/loader.js
+// @include ./ui/views/alert.js
+// @include ./ui/views/dialog.js
// @include ./ui/views/text.js
// @include ./ui/views/debug.js
// @include ./ui/views/movable.js
diff --git a/src/templates.js b/src/templates.js
index 7965355f3..aba674039 100644
--- a/src/templates.js
+++ b/src/templates.js
@@ -1,10 +1,10 @@
-// Copyright (c) 2014 M-Way Solutions GmbH
-// http://github.com/mwaylabs/The-M-Project/blob/absinthe/MIT-LICENSE.txt
-
-////////////////////////////////////////////////////////////////
-// DO NOT EDIT THIS FILE - it is generated by grunt
-////////////////////////////////////////////////////////////////
-
-/* jshint -W109 */
-M.Templates = {"default":{"accordion.ejs":"
<%= value %>
","accordionitem.ejs":"
<%= value %>
","button.ejs":"
<% if(icon) { %> \"> <% } %>
><%= value %>
","buttongroup.ejs":"","checkboxlist.ejs":"
<%= label %>
","checkboxoption.ejs":"","debug.ejs":"
","dialog.ejs":"","image.ejs":"\" alt=\"<%= alt %>\"/>","label.ejs":"
"}};
/* jshint +W109 */
\ No newline at end of file
diff --git a/src/templates/default/alert.ejs b/src/templates/default/alert.ejs
new file mode 100644
index 000000000..03d69a62d
--- /dev/null
+++ b/src/templates/default/alert.ejs
@@ -0,0 +1,7 @@
+
+
+
<%= title %>
+
<%= text %>
+
+
+
\ No newline at end of file
diff --git a/src/templates/default/dialog.ejs b/src/templates/default/dialog.ejs
index 281c6866c..2348fc3a7 100644
--- a/src/templates/default/dialog.ejs
+++ b/src/templates/default/dialog.ejs
@@ -1 +1,7 @@
-
\ No newline at end of file
+
+
+
<%= headline %>
+
<%= text %>
+
+
+
\ No newline at end of file
diff --git a/src/templates/default/loader.ejs b/src/templates/default/loader.ejs
index 625b9090d..2b200efc6 100644
--- a/src/templates/default/loader.ejs
+++ b/src/templates/default/loader.ejs
@@ -1 +1,15 @@
-