diff --git a/example-admin-materializecss-sidemenu/README.md b/example-admin-materializecss-sidemenu/README.md
new file mode 100644
index 0000000..83a648c
--- /dev/null
+++ b/example-admin-materializecss-sidemenu/README.md
@@ -0,0 +1,51 @@
+Admin panel sidemenu example with materializecss (http://materializecss.com/)
+============================================================================
+
+This example shows the usage of sidemenu layout and component.
+
+This input file for Meteor Kitchen will build meteor application with user account system and admin panel.
+
+To generate and run application, inside this directory type:
+
+```
+meteor-kitchen ./example-admin-materializecss-sidemenu.json ./example-admin-materializecss-sidemenu
+cd ./example-admin-materializecss-sidemenu
+meteor
+```
+
+**JSON** and **YAML** files are the same example in different formats.
+
+Meteor-kitchen natively supports input files written in **JSON**. To use the **YAML** example you'll need to have js-yaml converter installed. The following is the most common example of how to accomplish this:
+
+```
+npm install -g js-yaml
+```
+
+How to use application
+----------------------
+
+When you start the application and register, your user account will have role "user" by default and you will not be able to see admin panel.
+
+To make yourself admin, you first need to find your user ID. Open mongo shell and type:
+
+```
+db.users.find().pretty()
+```
+
+Copy your user id and then type:
+
+```
+db.users.update({ _id: "YOUR_USER_ID" }, { $set: { roles: ["admin"] } })
+```
+
+Now, you have admin panel in your application and you can manage users.
+
+This example has three user roles:
+
+- `user` can login but cannot access admin panel
+
+- `admin` can access admin panel
+
+- `blocked` user is blocked and cannot login
+
+That's it :)
diff --git a/example-admin-materializecss-sidemenu/example-admin-materializecss-sidemenu.json b/example-admin-materializecss-sidemenu/example-admin-materializecss-sidemenu.json
new file mode 100644
index 0000000..a1c7cd0
--- /dev/null
+++ b/example-admin-materializecss-sidemenu/example-admin-materializecss-sidemenu.json
@@ -0,0 +1,297 @@
+ {
+ "application": {
+ "title": "Example application",
+ "frontend": "materialize",
+ "roles": [ "admin", "user" ],
+ "default_role": "user",
+ "send_verification_email": true,
+
+ "collections": [
+ {
+ "name": "customers"
+ }
+ ],
+
+ "queries": [
+ {
+ "name": "admin_users",
+ "collection": "users",
+ "filter": {}
+ },
+ {
+ "name": "admin_user",
+ "collection": "users",
+ "filter": { "_id": ":userId" },
+ "find_one": true
+ },
+ {
+ "name": "users_null",
+ "collection": "users",
+ "filter": { "_id": null },
+ "find_one": true
+ },
+ {
+ "name": "current_user_data",
+ "collection": "users",
+ "filter": { "_id": "Meteor.userId()" },
+ "find_one": true
+ }
+ ],
+
+ "public_zone": {
+ "layout": "sidemenu",
+ "pages": [
+ {
+ "name": "home_public",
+ "title": "",
+ "components": [
+ {
+ "name": "home_jumbotron",
+ "title": "Example application",
+ "type": "jumbotron",
+ "text": "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here.",
+ "button_title": "Continue »",
+ "button_route": "login"
+ }
+ ]
+ },
+ { "name": "login", "template": "login" },
+ { "name": "register", "template": "register" },
+ { "name": "verify_email", "template": "verify_email", "route_params": ["verifyEmailToken"] },
+ { "name": "forgot_password", "template": "forgot_password" },
+ { "name": "reset_password", "template": "reset_password", "route_params": ["resetPasswordToken"] }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "template":"sidemenu",
+ "class": "",
+ "title": "Left menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_public","icon_class":"store" }
+ ]
+ },
+
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "template":"sidemenu",
+ "class": "",
+ "dest_selector": "#menu",
+ "title": "Right menu",
+ "items": [
+ { "title": "Register", "route": "register","icon_class":"assignment_ind" },
+ { "title": "Login", "route": "login","icon_class":"lock_open" }
+ ]
+ }
+ ]
+ },
+
+ "private_zone": {
+ "layout":"sidemenu",
+ "pages": [
+ { "name": "home_private", "title": "Welcome {{userFullName}}!" },
+
+
+ {
+ "name": "admin",
+ "roles": ["admin"],
+ "pages": [
+ {
+ "name": "users",
+ "components": [
+ {
+ "name": "view",
+ "type": "data_view",
+ "title": "Users",
+ "text_if_empty": "No users yet",
+ "query_name": "admin_users",
+ "query_params": [],
+
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail" },
+ { "name": "roles", "title": "Role" }
+ ],
+
+ "insert_route": "admin.users.insert",
+
+ "edit_route": "admin.users.edit",
+ "edit_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ],
+
+ "details_route": "admin.users.details",
+ "details_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ]
+ }
+ ],
+ "pages": [
+ {
+ "name": "details",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "details_form",
+ "type": "form",
+ "mode": "read_only",
+ "title": "User details",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail", "type": "email" },
+ { "name": "roles", "title": "Role" }
+ ],
+ "close_route": "admin.users",
+ "back_route": "admin.users"
+ }
+ ]
+ },
+ {
+ "name": "insert",
+ "components": [
+ {
+ "name": "insert_form",
+ "type": "form",
+ "mode": "insert",
+ "title": "Add new user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "users_null",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "password", "title": "Password", "input": "password", "required": true }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "edit",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ {
+ "name": "roles",
+ "type": "array",
+ "title": "Role",
+ "input": "radio",
+ "input_items": [
+ { "value": "user", "title": "User" },
+ { "value": "admin", "title": "Admin" },
+ { "value": "blocked", "title": "Blocked" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "nav nav-stacked nav-pills",
+ "items": [
+ { "title": "Users", "route": "admin.users" }
+ ]
+ }
+ ]
+ },
+
+ {
+ "name": "user_settings",
+ "roles": ["user", "admin"],
+ "pages": [
+ {
+ "name": "profile",
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit your profile",
+ "submit_route": "user_settings.profile",
+ "query_name": "current_user_data",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "profile.facebook", "title": "Facebook URL" },
+ { "name": "profile.google", "title": "Google+ URL" },
+ { "name": "profile.twitter", "title": "Twitter ID" },
+ { "name": "profile.website", "title": "Website URL" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "change_pass", "template": "change_pass" }
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "ui vertical menu",
+ "items": [
+ { "title": "Profile", "route": "user_settings.profile" },
+ { "title": "Change password", "route": "user_settings.change_pass" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "logout", "template": "logout" }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "title": "Left menu",
+ "template":"sidemenu",
+ "class": "",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_private", "icon_class": "home" }
+ ]
+ },
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "title": "Right menu",
+ "template":"sidemenu",
+ "class": "",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Admin", "route": "admin", "icon_class": "brightness_auto" },
+ { "title": "Settings", "route": "user_settings","icon_class":"settings" },
+ { "title": "Logout", "route": "logout","icon_class":"power_settings_new" }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/example-admin-materializecss-sidemenu/example-admin-materializecss-sidemenu.yaml b/example-admin-materializecss-sidemenu/example-admin-materializecss-sidemenu.yaml
new file mode 100644
index 0000000..497368c
--- /dev/null
+++ b/example-admin-materializecss-sidemenu/example-admin-materializecss-sidemenu.yaml
@@ -0,0 +1,331 @@
+---
+ application:
+ title: "Example application"
+ frontend: "materialize"
+ roles:
+ - "admin"
+ - "user"
+ default_role: "user"
+ send_verification_email: true
+ collections:
+ -
+ name: "customers"
+ queries:
+ -
+ name: "admin_users"
+ collection: "users"
+ filter: {}
+ -
+ name: "admin_user"
+ collection: "users"
+ filter:
+ _id: ":userId"
+ find_one: true
+ -
+ name: "users_null"
+ collection: "users"
+ filter:
+ _id: null
+ find_one: true
+ -
+ name: "current_user_data"
+ collection: "users"
+ filter:
+ _id: "Meteor.userId()"
+ find_one: true
+ public_zone:
+ layout: "sidemenu"
+ pages:
+ -
+ name: "home_public"
+ title: ""
+ components:
+ -
+ name: "home_jumbotron"
+ title: "Example application"
+ type: "jumbotron"
+ text: "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here."
+ button_title: "Continue »"
+ button_route: "login"
+ -
+ name: "login"
+ template: "login"
+ -
+ name: "register"
+ template: "register"
+ -
+ name: "verify_email"
+ template: "verify_email"
+ route_params:
+ - "verifyEmailToken"
+ -
+ name: "forgot_password"
+ template: "forgot_password"
+ -
+ name: "reset_password"
+ template: "reset_password"
+ route_params:
+ - "resetPasswordToken"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ template: "sidemenu"
+ class: ""
+ title: "Left menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_public"
+ icon_class: "store"
+ -
+ name: "right_menu"
+ type: "menu"
+ template: "sidemenu"
+ class: ""
+ dest_selector: "#menu"
+ title: "Right menu"
+ items:
+ -
+ title: "Register"
+ route: "register"
+ icon_class: "assignment_ind"
+ -
+ title: "Login"
+ route: "login"
+ icon_class: "lock_open"
+ private_zone:
+ layout: "sidemenu"
+ pages:
+ -
+ name: "home_private"
+ title: "Welcome {{userFullName}}!"
+ -
+ name: "admin"
+ roles:
+ - "admin"
+ pages:
+ -
+ name: "users"
+ components:
+ -
+ name: "view"
+ type: "data_view"
+ title: "Users"
+ text_if_empty: "No users yet"
+ query_name: "admin_users"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ -
+ name: "roles"
+ title: "Role"
+ insert_route: "admin.users.insert"
+ edit_route: "admin.users.edit"
+ edit_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ details_route: "admin.users.details"
+ details_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ pages:
+ -
+ name: "details"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "details_form"
+ type: "form"
+ mode: "read_only"
+ title: "User details"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ -
+ name: "roles"
+ title: "Role"
+ close_route: "admin.users"
+ back_route: "admin.users"
+ -
+ name: "insert"
+ components:
+ -
+ name: "insert_form"
+ type: "form"
+ mode: "insert"
+ title: "Add new user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "users_null"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "password"
+ title: "Password"
+ input: "password"
+ required: true
+ -
+ name: "edit"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "roles"
+ type: "array"
+ title: "Role"
+ input: "radio"
+ input_items:
+ -
+ value: "user"
+ title: "User"
+ -
+ value: "admin"
+ title: "Admin"
+ -
+ value: "blocked"
+ title: "Blocked"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "nav nav-stacked nav-pills"
+ items:
+ -
+ title: "Users"
+ route: "admin.users"
+ -
+ name: "user_settings"
+ roles:
+ - "user"
+ - "admin"
+ pages:
+ -
+ name: "profile"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit your profile"
+ submit_route: "user_settings.profile"
+ query_name: "current_user_data"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "profile.facebook"
+ title: "Facebook URL"
+ -
+ name: "profile.google"
+ title: "Google+ URL"
+ -
+ name: "profile.twitter"
+ title: "Twitter ID"
+ -
+ name: "profile.website"
+ title: "Website URL"
+ -
+ name: "change_pass"
+ template: "change_pass"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "ui vertical menu"
+ items:
+ -
+ title: "Profile"
+ route: "user_settings.profile"
+ -
+ title: "Change password"
+ route: "user_settings.change_pass"
+ -
+ name: "logout"
+ template: "logout"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ title: "Left menu"
+ template: "sidemenu"
+ class: ""
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_private"
+ icon_class: "home"
+ -
+ name: "right_menu"
+ type: "menu"
+ title: "Right menu"
+ template: "sidemenu"
+ class: ""
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Admin"
+ route: "admin"
+ icon_class: "brightness_auto"
+ -
+ title: "Settings"
+ route: "user_settings"
+ icon_class: "settings"
+ -
+ title: "Logout"
+ route: "logout"
+ icon_class: "power_settings_new"
+
diff --git a/example-admin-materializecss/README.md b/example-admin-materializecss/README.md
new file mode 100644
index 0000000..549eb11
--- /dev/null
+++ b/example-admin-materializecss/README.md
@@ -0,0 +1,49 @@
+Admin panel example with materializecss (http://materializecss.com/)
+====================================================================
+
+This input file for Meteor Kitchen will build meteor application with user account system and admin panel.
+
+To generate and run application, inside this directory type:
+
+```
+meteor-kitchen ./example-admin-materializecss.json ./example-admin-materializecss
+cd ./example-admin-materializecss
+meteor
+```
+
+**JSON** and **YAML** files are the same example in different formats.
+
+Meteor-kitchen natively supports input files written in **JSON**. To use the **YAML** example you'll need to have js-yaml converter installed. The following is the most common example of how to accomplish this:
+
+```
+npm install -g js-yaml
+```
+
+How to use application
+----------------------
+
+When you start the application and register, your user account will have role "user" by default and you will not be able to see admin panel.
+
+To make yourself admin, you first need to find your user ID. Open mongo shell and type:
+
+```
+db.users.find().pretty()
+```
+
+Copy your user id and then type:
+
+```
+db.users.update({ _id: "YOUR_USER_ID" }, { $set: { roles: ["admin"] } })
+```
+
+Now, you have admin panel in your application and you can manage users.
+
+This example has three user roles:
+
+- `user` can login but cannot access admin panel
+
+- `admin` can access admin panel
+
+- `blocked` user is blocked and cannot login
+
+That's it :)
diff --git a/example-admin-materializecss/example-admin-materializecss.json b/example-admin-materializecss/example-admin-materializecss.json
new file mode 100644
index 0000000..28a3897
--- /dev/null
+++ b/example-admin-materializecss/example-admin-materializecss.json
@@ -0,0 +1,295 @@
+ {
+ "application": {
+ "title": "Example application",
+ "frontend": "materialize",
+ "roles": [ "admin", "user" ],
+ "default_role": "user",
+ "send_verification_email": true,
+
+ "collections": [
+ {
+ "name": "customers"
+ }
+ ],
+
+ "queries": [
+ {
+ "name": "admin_users",
+ "collection": "users",
+ "filter": {}
+ },
+ {
+ "name": "admin_user",
+ "collection": "users",
+ "filter": { "_id": ":userId" },
+ "find_one": true
+ },
+ {
+ "name": "users_null",
+ "collection": "users",
+ "filter": { "_id": null },
+ "find_one": true
+ },
+ {
+ "name": "current_user_data",
+ "collection": "users",
+ "filter": { "_id": "Meteor.userId()" },
+ "find_one": true
+ }
+ ],
+
+ "public_zone": {
+ "pages": [
+ {
+ "name": "home_public",
+ "title": "",
+ "components": [
+ {
+ "name": "home_jumbotron",
+ "title": "Example application",
+ "type": "jumbotron",
+ "text": "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here.",
+ "button_title": "Continue »",
+ "button_route": "login"
+ }
+ ]
+ },
+ { "name": "login", "template": "login" },
+ { "name": "register", "template": "register" },
+ { "name": "verify_email", "template": "verify_email", "route_params": ["verifyEmailToken"] },
+ { "name": "forgot_password", "template": "forgot_password" },
+ { "name": "reset_password", "template": "reset_password", "route_params": ["resetPasswordToken"] }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "class": "left",
+ "title": "Left menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_public","icon_class":"store" }
+ ]
+ },
+
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "class": "right",
+ "dest_selector": "#menu",
+ "title": "Right menu",
+ "items": [
+ { "title": "Register", "route": "register","icon_class":"assignment_ind" },
+ { "title": "Login", "route": "login","icon_class":"lock_open" }
+ ]
+ }
+ ]
+ },
+
+ "private_zone": {
+ "pages": [
+ { "name": "home_private", "title": "Welcome {{userFullName}}!" },
+ {
+ "name": "admin",
+ "roles": ["admin"],
+ "pages": [
+ {
+ "name": "users",
+ "components": [
+ {
+ "name": "view",
+ "type": "data_view",
+ "title": "Users",
+ "text_if_empty": "No users yet",
+ "query_name": "admin_users",
+ "query_params": [],
+
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail" },
+ { "name": "roles", "title": "Role" }
+ ],
+
+ "insert_route": "admin.users.insert",
+
+ "edit_route": "admin.users.edit",
+ "edit_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ],
+
+ "details_route": "admin.users.details",
+ "details_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ]
+ }
+ ],
+ "pages": [
+ {
+ "name": "details",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "details_form",
+ "type": "form",
+ "mode": "read_only",
+ "title": "User details",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail", "type": "email" },
+ { "name": "roles", "title": "Role" }
+ ],
+ "close_route": "admin.users",
+ "back_route": "admin.users"
+ }
+ ]
+ },
+ {
+ "name": "insert",
+ "components": [
+ {
+ "name": "insert_form",
+ "type": "form",
+ "mode": "insert",
+ "title": "Add new user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "users_null",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "password", "title": "Password", "input": "password", "required": true }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "edit",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ {
+ "name": "roles",
+ "type": "array",
+ "title": "Role",
+ "input": "radio",
+ "input_items": [
+ { "value": "user", "title": "User" },
+ { "value": "admin", "title": "Admin" },
+ { "value": "blocked", "title": "Blocked" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "collection",
+ "items": [
+ { "title": "Users", "route": "admin.users","class": "collection-item"}
+ ]
+ }
+ ]
+ },
+
+ {
+ "name": "user_settings",
+ "roles": ["user", "admin"],
+ "pages": [
+ {
+ "name": "profile",
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit your profile",
+ "submit_route": "user_settings.profile",
+ "query_name": "current_user_data",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "profile.facebook", "title": "Facebook URL" },
+ { "name": "profile.google", "title": "Google+ URL" },
+ { "name": "profile.twitter", "title": "Twitter ID" },
+ { "name": "profile.website", "title": "Website URL" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "change_pass", "template": "change_pass" }
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "collection",
+ "items": [
+ { "title": "Profile", "route": "user_settings.profile","class":"collection-item" },
+ { "title": "Change password", "route": "user_settings.change_pass","class":"collection-item" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "logout", "template": "logout" }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "title": "Left menu",
+ "class": "",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_private", "icon_class": "home" }
+ ]
+ },
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "title": "Right menu",
+ "class": "right",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Admin", "route": "admin", "icon_class": "brightness_auto" },
+ {
+ "title": "{{userEmail}}",
+ "items": [
+ { "title": "Settings", "route": "user_settings","icon_class":"settings" },
+ { "title": "Logout", "route": "logout","icon_class":"power_settings_new" }
+ ],
+ "icon_class": "settings"
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/example-admin-materializecss/example-admin-materializecss.yaml b/example-admin-materializecss/example-admin-materializecss.yaml
new file mode 100644
index 0000000..9e8c255
--- /dev/null
+++ b/example-admin-materializecss/example-admin-materializecss.yaml
@@ -0,0 +1,332 @@
+---
+ application:
+ title: "Example application"
+ frontend: "materialize"
+ roles:
+ - "admin"
+ - "user"
+ default_role: "user"
+ send_verification_email: true
+ collections:
+ -
+ name: "customers"
+ queries:
+ -
+ name: "admin_users"
+ collection: "users"
+ filter: {}
+ -
+ name: "admin_user"
+ collection: "users"
+ filter:
+ _id: ":userId"
+ find_one: true
+ -
+ name: "users_null"
+ collection: "users"
+ filter:
+ _id: null
+ find_one: true
+ -
+ name: "current_user_data"
+ collection: "users"
+ filter:
+ _id: "Meteor.userId()"
+ find_one: true
+ public_zone:
+ pages:
+ -
+ name: "home_public"
+ title: ""
+ components:
+ -
+ name: "home_jumbotron"
+ title: "Example application"
+ type: "jumbotron"
+ text: "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here."
+ button_title: "Continue »"
+ button_route: "login"
+ -
+ name: "login"
+ template: "login"
+ -
+ name: "register"
+ template: "register"
+ -
+ name: "verify_email"
+ template: "verify_email"
+ route_params:
+ - "verifyEmailToken"
+ -
+ name: "forgot_password"
+ template: "forgot_password"
+ -
+ name: "reset_password"
+ template: "reset_password"
+ route_params:
+ - "resetPasswordToken"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ class: "left"
+ title: "Left menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_public"
+ icon_class: "store"
+ -
+ name: "right_menu"
+ type: "menu"
+ class: "right"
+ dest_selector: "#menu"
+ title: "Right menu"
+ items:
+ -
+ title: "Register"
+ route: "register"
+ icon_class: "assignment_ind"
+ -
+ title: "Login"
+ route: "login"
+ icon_class: "lock_open"
+ private_zone:
+ pages:
+ -
+ name: "home_private"
+ title: "Welcome {{userFullName}}!"
+ -
+ name: "admin"
+ roles:
+ - "admin"
+ pages:
+ -
+ name: "users"
+ components:
+ -
+ name: "view"
+ type: "data_view"
+ title: "Users"
+ text_if_empty: "No users yet"
+ query_name: "admin_users"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ -
+ name: "roles"
+ title: "Role"
+ insert_route: "admin.users.insert"
+ edit_route: "admin.users.edit"
+ edit_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ details_route: "admin.users.details"
+ details_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ pages:
+ -
+ name: "details"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "details_form"
+ type: "form"
+ mode: "read_only"
+ title: "User details"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ -
+ name: "roles"
+ title: "Role"
+ close_route: "admin.users"
+ back_route: "admin.users"
+ -
+ name: "insert"
+ components:
+ -
+ name: "insert_form"
+ type: "form"
+ mode: "insert"
+ title: "Add new user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "users_null"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "password"
+ title: "Password"
+ input: "password"
+ required: true
+ -
+ name: "edit"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "roles"
+ type: "array"
+ title: "Role"
+ input: "radio"
+ input_items:
+ -
+ value: "user"
+ title: "User"
+ -
+ value: "admin"
+ title: "Admin"
+ -
+ value: "blocked"
+ title: "Blocked"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "collection"
+ items:
+ -
+ title: "Users"
+ route: "admin.users"
+ class: "collection-item"
+ -
+ name: "user_settings"
+ roles:
+ - "user"
+ - "admin"
+ pages:
+ -
+ name: "profile"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit your profile"
+ submit_route: "user_settings.profile"
+ query_name: "current_user_data"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "profile.facebook"
+ title: "Facebook URL"
+ -
+ name: "profile.google"
+ title: "Google+ URL"
+ -
+ name: "profile.twitter"
+ title: "Twitter ID"
+ -
+ name: "profile.website"
+ title: "Website URL"
+ -
+ name: "change_pass"
+ template: "change_pass"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "collection"
+ items:
+ -
+ title: "Profile"
+ route: "user_settings.profile"
+ class: "collection-item"
+ -
+ title: "Change password"
+ route: "user_settings.change_pass"
+ class: "collection-item"
+ -
+ name: "logout"
+ template: "logout"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ title: "Left menu"
+ class: ""
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_private"
+ icon_class: "home"
+ -
+ name: "right_menu"
+ type: "menu"
+ title: "Right menu"
+ class: "right"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Admin"
+ route: "admin"
+ icon_class: "brightness_auto"
+ -
+ title: "{{userEmail}}"
+ items:
+ -
+ title: "Settings"
+ route: "user_settings"
+ icon_class: "settings"
+ -
+ title: "Logout"
+ route: "logout"
+ icon_class: "power_settings_new"
+ icon_class: "settings"
+
diff --git a/example-admin-semanticui-sidemenu/README.md b/example-admin-semanticui-sidemenu/README.md
new file mode 100644
index 0000000..33404aa
--- /dev/null
+++ b/example-admin-semanticui-sidemenu/README.md
@@ -0,0 +1,51 @@
+Admin panel sidemenu example with semantic-ui (http://semantic-ui.com/)
+=======================================================================
+
+This example shows the usage of sidemenu layout and component.
+
+This input file for Meteor Kitchen will build meteor application with user account system and admin panel.
+
+To generate and run application, inside this directory type:
+
+```
+meteor-kitchen ./example-admin-semanticui-sidemenu.json ./example-admin-semanticui-sidemenu
+cd ./example-admin-semanticui-sidemenu
+meteor
+```
+
+**JSON** and **YAML** files are the same example in different formats.
+
+Meteor-kitchen natively supports input files written in **JSON**. To use the **YAML** example you'll need to have js-yaml converter installed. The following is the most common example of how to accomplish this:
+
+```
+npm install -g js-yaml
+```
+
+How to use application
+----------------------
+
+When you start the application and register, your user account will have role "user" by default and you will not be able to see admin panel.
+
+To make yourself admin, you first need to find your user ID. Open mongo shell and type:
+
+```
+db.users.find().pretty()
+```
+
+Copy your user id and then type:
+
+```
+db.users.update({ _id: "YOUR_USER_ID" }, { $set: { roles: ["admin"] } })
+```
+
+Now, you have admin panel in your application and you can manage users.
+
+This example has three user roles:
+
+- `user` can login but cannot access admin panel
+
+- `admin` can access admin panel
+
+- `blocked` user is blocked and cannot login
+
+That's it :)
diff --git a/example-admin-semanticui-sidemenu/example-admin-semanticui-sidemenu.json b/example-admin-semanticui-sidemenu/example-admin-semanticui-sidemenu.json
new file mode 100644
index 0000000..8ed74e7
--- /dev/null
+++ b/example-admin-semanticui-sidemenu/example-admin-semanticui-sidemenu.json
@@ -0,0 +1,295 @@
+ {
+ "application": {
+ "title": "Example application",
+ "frontend": "semantic-ui",
+ "roles": [ "admin", "user" ],
+ "default_role": "user",
+ "send_verification_email": true,
+
+ "collections": [
+ {
+ "name": "customers"
+ }
+ ],
+
+ "queries": [
+ {
+ "name": "admin_users",
+ "collection": "users",
+ "filter": {}
+ },
+ {
+ "name": "admin_user",
+ "collection": "users",
+ "filter": { "_id": ":userId" },
+ "find_one": true
+ },
+ {
+ "name": "users_null",
+ "collection": "users",
+ "filter": { "_id": null },
+ "find_one": true
+ },
+ {
+ "name": "current_user_data",
+ "collection": "users",
+ "filter": { "_id": "Meteor.userId()" },
+ "find_one": true
+ }
+ ],
+
+ "public_zone": {
+ "layout": "sidemenu",
+ "footer_class": "sticky_footer",
+ "pages": [
+ {
+ "name": "home_public",
+ "title": "",
+ "components": [
+ {
+ "name": "home_jumbotron",
+ "title": "Example application",
+ "type": "jumbotron",
+ "text": "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here.",
+ "button_title": "Continue »",
+ "button_route": "login"
+ }
+ ]
+ },
+ { "name": "login", "template": "login" },
+ { "name": "register", "template": "register" },
+ { "name": "verify_email", "template": "verify_email", "route_params": ["verifyEmailToken"] },
+ { "name": "forgot_password", "template": "forgot_password" },
+ { "name": "reset_password", "template": "reset_password", "route_params": ["resetPasswordToken"] }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "template":"sidemenu",
+ "class": "ui icon left inline vertical sidebar menu left_menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_public","icon_class":"blue home icon" }
+ ]
+ },
+
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "template":"sidemenu",
+ "class": "ui icon right inline vertical sidebar menu right_menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Register", "route": "register","icon_class":"orange add user icon" },
+ { "title": "Login", "route": "login","icon_class":"blue sign in icon" }
+ ]
+ }
+ ]
+ },
+
+ "private_zone": {
+ "layout":"sidemenu",
+ "footer_class": "sticky_footer",
+ "pages": [
+ { "name": "home_private", "title": "Welcome {{userFullName}}!" },
+
+
+ {
+ "name": "admin",
+ "roles": ["admin"],
+ "pages": [
+ {
+ "name": "users",
+ "components": [
+ {
+ "name": "view",
+ "type": "data_view",
+ "title": "Users",
+ "text_if_empty": "No users yet",
+ "query_name": "admin_users",
+ "query_params": [],
+
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail" },
+ { "name": "roles", "title": "Role" }
+ ],
+
+ "insert_route": "admin.users.insert",
+
+ "edit_route": "admin.users.edit",
+ "edit_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ],
+
+ "details_route": "admin.users.details",
+ "details_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ]
+ }
+ ],
+ "pages": [
+ {
+ "name": "details",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "details_form",
+ "type": "form",
+ "mode": "read_only",
+ "title": "User details",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail", "type": "email" },
+ { "name": "roles", "title": "Role" }
+ ],
+ "close_route": "admin.users",
+ "back_route": "admin.users"
+ }
+ ]
+ },
+ {
+ "name": "insert",
+ "components": [
+ {
+ "name": "insert_form",
+ "type": "form",
+ "mode": "insert",
+ "title": "Add new user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "users_null",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "password", "title": "Password", "input": "password", "required": true }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "edit",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ {
+ "name": "roles",
+ "type": "array",
+ "title": "Role",
+ "input": "radio",
+ "input_items": [
+ { "value": "user", "title": "User" },
+ { "value": "admin", "title": "Admin" },
+ { "value": "blocked", "title": "Blocked" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "nav nav-stacked nav-pills",
+ "items": [
+ { "title": "Users", "route": "admin.users" }
+ ]
+ }
+ ]
+ },
+
+ {
+ "name": "user_settings",
+ "roles": ["user", "admin"],
+ "pages": [
+ {
+ "name": "profile",
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit your profile",
+ "submit_route": "user_settings.profile",
+ "query_name": "current_user_data",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "profile.facebook", "title": "Facebook URL" },
+ { "name": "profile.google", "title": "Google+ URL" },
+ { "name": "profile.twitter", "title": "Twitter ID" },
+ { "name": "profile.website", "title": "Website URL" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "change_pass", "template": "change_pass" }
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "ui vertical menu",
+ "items": [
+ { "title": "Profile", "route": "user_settings.profile" },
+ { "title": "Change password", "route": "user_settings.change_pass" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "logout", "template": "logout" }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "template":"sidemenu",
+ "class": "ui icon left inline vertical sidebar menu left_menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_private", "icon_class": "home icon" }
+ ]
+ },
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "template":"sidemenu",
+ "class": "ui icon right inline vertical sidebar menu right_menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Admin", "route": "admin", "icon_class": "blue spy icon" },
+ { "title": "Settings", "route": "user_settings","icon_class":"orange settings icon" },
+ { "title": "Logout", "route": "logout","icon_class":"red sign out icon" }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/example-admin-semanticui-sidemenu/example-admin-semanticui-sidemenu.yaml b/example-admin-semanticui-sidemenu/example-admin-semanticui-sidemenu.yaml
new file mode 100644
index 0000000..16b408c
--- /dev/null
+++ b/example-admin-semanticui-sidemenu/example-admin-semanticui-sidemenu.yaml
@@ -0,0 +1,329 @@
+---
+ application:
+ title: "Example application"
+ frontend: "semantic-ui"
+ roles:
+ - "admin"
+ - "user"
+ default_role: "user"
+ send_verification_email: true
+ collections:
+ -
+ name: "customers"
+ queries:
+ -
+ name: "admin_users"
+ collection: "users"
+ filter: {}
+ -
+ name: "admin_user"
+ collection: "users"
+ filter:
+ _id: ":userId"
+ find_one: true
+ -
+ name: "users_null"
+ collection: "users"
+ filter:
+ _id: null
+ find_one: true
+ -
+ name: "current_user_data"
+ collection: "users"
+ filter:
+ _id: "Meteor.userId()"
+ find_one: true
+ public_zone:
+ layout: "sidemenu"
+ footer_class: "sticky_footer"
+ pages:
+ -
+ name: "home_public"
+ title: ""
+ components:
+ -
+ name: "home_jumbotron"
+ title: "Example application"
+ type: "jumbotron"
+ text: "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here."
+ button_title: "Continue »"
+ button_route: "login"
+ -
+ name: "login"
+ template: "login"
+ -
+ name: "register"
+ template: "register"
+ -
+ name: "verify_email"
+ template: "verify_email"
+ route_params:
+ - "verifyEmailToken"
+ -
+ name: "forgot_password"
+ template: "forgot_password"
+ -
+ name: "reset_password"
+ template: "reset_password"
+ route_params:
+ - "resetPasswordToken"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ template: "sidemenu"
+ class: "ui icon left inline vertical sidebar menu left_menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_public"
+ icon_class: "blue home icon"
+ -
+ name: "right_menu"
+ type: "menu"
+ template: "sidemenu"
+ class: "ui icon right inline vertical sidebar menu right_menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Register"
+ route: "register"
+ icon_class: "orange add user icon"
+ -
+ title: "Login"
+ route: "login"
+ icon_class: "blue sign in icon"
+ private_zone:
+ layout: "sidemenu"
+ footer_class: "sticky_footer"
+ pages:
+ -
+ name: "home_private"
+ title: "Welcome {{userFullName}}!"
+ -
+ name: "admin"
+ roles:
+ - "admin"
+ pages:
+ -
+ name: "users"
+ components:
+ -
+ name: "view"
+ type: "data_view"
+ title: "Users"
+ text_if_empty: "No users yet"
+ query_name: "admin_users"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ -
+ name: "roles"
+ title: "Role"
+ insert_route: "admin.users.insert"
+ edit_route: "admin.users.edit"
+ edit_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ details_route: "admin.users.details"
+ details_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ pages:
+ -
+ name: "details"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "details_form"
+ type: "form"
+ mode: "read_only"
+ title: "User details"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ -
+ name: "roles"
+ title: "Role"
+ close_route: "admin.users"
+ back_route: "admin.users"
+ -
+ name: "insert"
+ components:
+ -
+ name: "insert_form"
+ type: "form"
+ mode: "insert"
+ title: "Add new user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "users_null"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "password"
+ title: "Password"
+ input: "password"
+ required: true
+ -
+ name: "edit"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "roles"
+ type: "array"
+ title: "Role"
+ input: "radio"
+ input_items:
+ -
+ value: "user"
+ title: "User"
+ -
+ value: "admin"
+ title: "Admin"
+ -
+ value: "blocked"
+ title: "Blocked"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "nav nav-stacked nav-pills"
+ items:
+ -
+ title: "Users"
+ route: "admin.users"
+ -
+ name: "user_settings"
+ roles:
+ - "user"
+ - "admin"
+ pages:
+ -
+ name: "profile"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit your profile"
+ submit_route: "user_settings.profile"
+ query_name: "current_user_data"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "profile.facebook"
+ title: "Facebook URL"
+ -
+ name: "profile.google"
+ title: "Google+ URL"
+ -
+ name: "profile.twitter"
+ title: "Twitter ID"
+ -
+ name: "profile.website"
+ title: "Website URL"
+ -
+ name: "change_pass"
+ template: "change_pass"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "ui vertical menu"
+ items:
+ -
+ title: "Profile"
+ route: "user_settings.profile"
+ -
+ title: "Change password"
+ route: "user_settings.change_pass"
+ -
+ name: "logout"
+ template: "logout"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ template: "sidemenu"
+ class: "ui icon left inline vertical sidebar menu left_menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_private"
+ icon_class: "home icon"
+ -
+ name: "right_menu"
+ type: "menu"
+ template: "sidemenu"
+ class: "ui icon right inline vertical sidebar menu right_menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Admin"
+ route: "admin"
+ icon_class: "blue spy icon"
+ -
+ title: "Settings"
+ route: "user_settings"
+ icon_class: "orange settings icon"
+ -
+ title: "Logout"
+ route: "logout"
+ icon_class: "red sign out icon"
+
diff --git a/example-admin-semanticui/README.md b/example-admin-semanticui/README.md
new file mode 100644
index 0000000..c497664
--- /dev/null
+++ b/example-admin-semanticui/README.md
@@ -0,0 +1,49 @@
+Admin panel example with semantic-ui (http://semantic-ui.com/)
+==============================================================
+
+This input file for Meteor Kitchen will build meteor application with user account system and admin panel.
+
+To generate and run application, inside this directory type:
+
+```
+meteor-kitchen ./example-admin-semanticui.json ./example-admin-semanticui
+cd ./example-admin-semanticui
+meteor
+```
+
+**JSON** and **YAML** files are the same example in different formats.
+
+Meteor-kitchen natively supports input files written in **JSON**. To use the **YAML** example you'll need to have js-yaml converter installed. The following is the most common example of how to accomplish this:
+
+```
+npm install -g js-yaml
+```
+
+How to use application
+----------------------
+
+When you start the application and register, your user account will have role "user" by default and you will not be able to see admin panel.
+
+To make yourself admin, you first need to find your user ID. Open mongo shell and type:
+
+```
+db.users.find().pretty()
+```
+
+Copy your user id and then type:
+
+```
+db.users.update({ _id: "YOUR_USER_ID" }, { $set: { roles: ["admin"] } })
+```
+
+Now, you have admin panel in your application and you can manage users.
+
+This example has three user roles:
+
+- `user` can login but cannot access admin panel
+
+- `admin` can access admin panel
+
+- `blocked` user is blocked and cannot login
+
+That's it :)
diff --git a/example-admin-semanticui/example-admin-semanticui.json b/example-admin-semanticui/example-admin-semanticui.json
new file mode 100644
index 0000000..235dfc2
--- /dev/null
+++ b/example-admin-semanticui/example-admin-semanticui.json
@@ -0,0 +1,295 @@
+ {
+ "application": {
+ "title": "Example application",
+ "frontend": "semantic-ui",
+
+ "roles": [ "admin", "user" ],
+ "default_role": "user",
+ "send_verification_email": true,
+
+ "collections": [
+ {
+ "name": "customers"
+ }
+ ],
+
+ "queries": [
+ {
+ "name": "admin_users",
+ "collection": "users",
+ "filter": {}
+ },
+ {
+ "name": "admin_user",
+ "collection": "users",
+ "filter": { "_id": ":userId" },
+ "find_one": true
+ },
+ {
+ "name": "users_null",
+ "collection": "users",
+ "filter": { "_id": null },
+ "find_one": true
+ },
+ {
+ "name": "current_user_data",
+ "collection": "users",
+ "filter": { "_id": "Meteor.userId()" },
+ "find_one": true
+ }
+ ],
+
+ "public_zone": {
+ "pages": [
+ {
+ "name": "home_public",
+ "title": "",
+ "components": [
+ {
+ "name": "home_jumbotron",
+ "title": "Example application",
+ "type": "jumbotron",
+ "text": "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here.",
+ "button_title": "Continue »",
+ "button_route": "login"
+ }
+ ]
+ },
+ { "name": "login", "template": "login" },
+ { "name": "register", "template": "register" },
+ { "name": "verify_email", "template": "verify_email", "route_params": ["verifyEmailToken"] },
+ { "name": "forgot_password", "template": "forgot_password" },
+ { "name": "reset_password", "template": "reset_password", "route_params": ["resetPasswordToken"] }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "class": "nav navbar-nav",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_public" }
+ ]
+ },
+
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "class": "right menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Register", "route": "register" },
+ { "title": "Login", "route": "login" }
+ ]
+ }
+ ]
+ },
+
+ "private_zone": {
+ "pages": [
+ { "name": "home_private", "title": "Welcome {{userFullName}}!" },
+
+
+ {
+ "name": "admin",
+ "roles": ["admin"],
+ "pages": [
+ {
+ "name": "users",
+ "components": [
+ {
+ "name": "view",
+ "type": "data_view",
+ "title": "Users",
+ "text_if_empty": "No users yet",
+ "query_name": "admin_users",
+ "query_params": [],
+
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail" },
+ { "name": "roles", "title": "Role" }
+ ],
+
+ "insert_route": "admin.users.insert",
+
+ "edit_route": "admin.users.edit",
+ "edit_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ],
+
+ "details_route": "admin.users.details",
+ "details_route_params": [
+ { "name": "userId", "value": "this._id" }
+ ]
+ }
+ ],
+ "pages": [
+ {
+ "name": "details",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "details_form",
+ "type": "form",
+ "mode": "read_only",
+ "title": "User details",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name"},
+ { "name": "profile.email", "title": "E-mail", "type": "email" },
+ { "name": "roles", "title": "Role" }
+ ],
+ "close_route": "admin.users",
+ "back_route": "admin.users"
+ }
+ ]
+ },
+ {
+ "name": "insert",
+ "components": [
+ {
+ "name": "insert_form",
+ "type": "form",
+ "mode": "insert",
+ "title": "Add new user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "users_null",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "password", "title": "Password", "input": "password", "required": true }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "edit",
+ "route_params": ["userId"],
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit user",
+ "submit_route": "admin.users",
+ "cancel_route": "admin.users",
+ "query_name": "admin_user",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ {
+ "name": "roles",
+ "type": "array",
+ "title": "Role",
+ "input": "radio",
+ "input_items": [
+ { "value": "user", "title": "User" },
+ { "value": "admin", "title": "Admin" },
+ { "value": "blocked", "title": "Blocked" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "nav nav-stacked nav-pills",
+ "items": [
+ { "title": "Users", "route": "admin.users" }
+ ]
+ }
+ ]
+ },
+
+ {
+ "name": "user_settings",
+ "roles": ["user", "admin"],
+ "pages": [
+ {
+ "name": "profile",
+ "components": [
+ {
+ "name": "edit_form",
+ "type": "form",
+ "mode": "update",
+ "title": "Edit your profile",
+ "submit_route": "user_settings.profile",
+ "query_name": "current_user_data",
+ "query_params": [],
+ "fields": [
+ { "name": "profile.name", "title": "Name", "required": true },
+ { "name": "profile.email", "title": "E-mail", "type": "email", "required": true },
+ { "name": "profile.facebook", "title": "Facebook URL" },
+ { "name": "profile.google", "title": "Google+ URL" },
+ { "name": "profile.twitter", "title": "Twitter ID" },
+ { "name": "profile.website", "title": "Website URL" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "change_pass", "template": "change_pass" }
+ ],
+
+ "components": [
+ {
+ "name": "side_menu",
+ "type": "menu",
+ "class": "ui vertical menu",
+ "items": [
+ { "title": "Profile", "route": "user_settings.profile" },
+ { "title": "Change password", "route": "user_settings.change_pass" }
+ ]
+ }
+ ]
+ },
+
+ { "name": "logout", "template": "logout" }
+ ],
+
+ "components": [
+ {
+ "name": "left_menu",
+ "type": "menu",
+ "class": "nav navbar-nav",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Home", "route": "home_private", "icon_class": "fa fa-home" }
+ ]
+ },
+ {
+ "name": "right_menu",
+ "type": "menu",
+ "class": "right menu",
+ "dest_selector": "#menu",
+ "items": [
+ { "title": "Admin", "route": "admin", "icon_class": "fa fa-wrench" },
+
+ {
+ "title": "{{userEmail}}",
+ "items": [
+ { "title": "Settings", "route": "user_settings" },
+ { "title": "Logout", "route": "logout" }
+ ],
+ "icon_class": "fa fa-cog"
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/example-admin-semanticui/example-admin-semanticui.yaml b/example-admin-semanticui/example-admin-semanticui.yaml
new file mode 100644
index 0000000..bd51cd9
--- /dev/null
+++ b/example-admin-semanticui/example-admin-semanticui.yaml
@@ -0,0 +1,320 @@
+---
+ application:
+ title: "Example application"
+ frontend: "semantic-ui"
+ roles:
+ - "admin"
+ - "user"
+ default_role: "user"
+ send_verification_email: true
+ collections:
+ -
+ name: "customers"
+ queries:
+ -
+ name: "admin_users"
+ collection: "users"
+ filter: {}
+ -
+ name: "admin_user"
+ collection: "users"
+ filter:
+ _id: ":userId"
+ find_one: true
+ -
+ name: "users_null"
+ collection: "users"
+ filter:
+ _id: null
+ find_one: true
+ -
+ name: "current_user_data"
+ collection: "users"
+ filter:
+ _id: "Meteor.userId()"
+ find_one: true
+ public_zone:
+ pages:
+ -
+ name: "home_public"
+ title: ""
+ components:
+ -
+ name: "home_jumbotron"
+ title: "Example application"
+ type: "jumbotron"
+ text: "This is example application built with meteor-kitchen code generator without manual coding.
It demonstrates simple application with user account system and admin panel.
Source code (input file for generator) is here."
+ button_title: "Continue »"
+ button_route: "login"
+ -
+ name: "login"
+ template: "login"
+ -
+ name: "register"
+ template: "register"
+ -
+ name: "verify_email"
+ template: "verify_email"
+ route_params:
+ - "verifyEmailToken"
+ -
+ name: "forgot_password"
+ template: "forgot_password"
+ -
+ name: "reset_password"
+ template: "reset_password"
+ route_params:
+ - "resetPasswordToken"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ class: "nav navbar-nav"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_public"
+ -
+ name: "right_menu"
+ type: "menu"
+ class: "right menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Register"
+ route: "register"
+ -
+ title: "Login"
+ route: "login"
+ private_zone:
+ pages:
+ -
+ name: "home_private"
+ title: "Welcome {{userFullName}}!"
+ -
+ name: "admin"
+ roles:
+ - "admin"
+ pages:
+ -
+ name: "users"
+ components:
+ -
+ name: "view"
+ type: "data_view"
+ title: "Users"
+ text_if_empty: "No users yet"
+ query_name: "admin_users"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ -
+ name: "roles"
+ title: "Role"
+ insert_route: "admin.users.insert"
+ edit_route: "admin.users.edit"
+ edit_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ details_route: "admin.users.details"
+ details_route_params:
+ -
+ name: "userId"
+ value: "this._id"
+ pages:
+ -
+ name: "details"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "details_form"
+ type: "form"
+ mode: "read_only"
+ title: "User details"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ -
+ name: "roles"
+ title: "Role"
+ close_route: "admin.users"
+ back_route: "admin.users"
+ -
+ name: "insert"
+ components:
+ -
+ name: "insert_form"
+ type: "form"
+ mode: "insert"
+ title: "Add new user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "users_null"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "password"
+ title: "Password"
+ input: "password"
+ required: true
+ -
+ name: "edit"
+ route_params:
+ - "userId"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit user"
+ submit_route: "admin.users"
+ cancel_route: "admin.users"
+ query_name: "admin_user"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "roles"
+ type: "array"
+ title: "Role"
+ input: "radio"
+ input_items:
+ -
+ value: "user"
+ title: "User"
+ -
+ value: "admin"
+ title: "Admin"
+ -
+ value: "blocked"
+ title: "Blocked"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "nav nav-stacked nav-pills"
+ items:
+ -
+ title: "Users"
+ route: "admin.users"
+ -
+ name: "user_settings"
+ roles:
+ - "user"
+ - "admin"
+ pages:
+ -
+ name: "profile"
+ components:
+ -
+ name: "edit_form"
+ type: "form"
+ mode: "update"
+ title: "Edit your profile"
+ submit_route: "user_settings.profile"
+ query_name: "current_user_data"
+ query_params: []
+ fields:
+ -
+ name: "profile.name"
+ title: "Name"
+ required: true
+ -
+ name: "profile.email"
+ title: "E-mail"
+ type: "email"
+ required: true
+ -
+ name: "profile.facebook"
+ title: "Facebook URL"
+ -
+ name: "profile.google"
+ title: "Google+ URL"
+ -
+ name: "profile.twitter"
+ title: "Twitter ID"
+ -
+ name: "profile.website"
+ title: "Website URL"
+ -
+ name: "change_pass"
+ template: "change_pass"
+ components:
+ -
+ name: "side_menu"
+ type: "menu"
+ class: "ui vertical menu"
+ items:
+ -
+ title: "Profile"
+ route: "user_settings.profile"
+ -
+ title: "Change password"
+ route: "user_settings.change_pass"
+ -
+ name: "logout"
+ template: "logout"
+ components:
+ -
+ name: "left_menu"
+ type: "menu"
+ class: "nav navbar-nav"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Home"
+ route: "home_private"
+ icon_class: "fa fa-home"
+ -
+ name: "right_menu"
+ type: "menu"
+ class: "right menu"
+ dest_selector: "#menu"
+ items:
+ -
+ title: "Admin"
+ route: "admin"
+ icon_class: "fa fa-wrench"
+ -
+ title: "{{userEmail}}"
+ items:
+ -
+ title: "Settings"
+ route: "user_settings"
+ -
+ title: "Logout"
+ route: "logout"
+ icon_class: "fa fa-cog"
+