From 80cb06ae65d8a79a54a7733352dcd692d2852317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= <cmartin@opennebula.org> Date: Wed, 17 Jun 2015 15:59:30 +0200 Subject: [PATCH] Feature #3748: Add views to group create wizard --- .../app/tabs/groups-tab/form-panels/create.js | 102 +++++++++++++++--- .../groups-tab/form-panels/create/wizard.hbs | 60 ++++++++++- .../public/app/tabs/groups-tab/panels/info.js | 4 +- .../utils/{viewsInfo.js => views.js} | 31 +++++- 4 files changed, 180 insertions(+), 17 deletions(-) rename src/sunstone/public/app/tabs/groups-tab/utils/{viewsInfo.js => views.js} (66%) diff --git a/src/sunstone/public/app/tabs/groups-tab/form-panels/create.js b/src/sunstone/public/app/tabs/groups-tab/form-panels/create.js index 168229145d..133ec5092f 100644 --- a/src/sunstone/public/app/tabs/groups-tab/form-panels/create.js +++ b/src/sunstone/public/app/tabs/groups-tab/form-panels/create.js @@ -9,6 +9,7 @@ define(function(require) { var Locale = require('utils/locale'); var UserCreation = require('tabs/users-tab/utils/user-creation'); var Tips = require('utils/tips'); + var Views = require('tabs/groups-tab/utils/views'); /* TEMPLATES @@ -64,9 +65,64 @@ define(function(require) { */ function _htmlWizard() { + var filtered_views = { + cloud : [], + advanced : [], + vcenter : [], + other : [] + }; + + var view_info; + $.each(config['all_views'], function(index, view_id) { + view_info = Views.info[view_id]; + if (view_info) { + switch (view_info.type) { + case 'advanced': + filtered_views.advanced.push(view_info); + break; + case 'cloud': + filtered_views.cloud.push(view_info); + break; + case 'vcenter': + filtered_views.vcenter.push(view_info); + break; + default: + filtered_views.other.push({ + id: view_id, + name: view_id, + description: null, + type: "other" + }); + break; + } + } else { + filtered_views.other.push({ + id: view_id, + name: view_id, + description: null, + type: "other" + }); + } + }); + + var viewTypes = []; + + $.each(filtered_views, function(view_type, views){ + if (views.length > 0) { + viewTypes.push( + { + 'name': Views.types[view_type].name, + 'description': Views.types[view_type].description, + 'preview': Views.types[view_type].preview, + 'views': views + }); + } + }); + return TemplateWizardHTML({ 'formPanelId': this.formPanelId, - 'userCreationHTML': this.userCreation.html() + 'userCreationHTML': this.userCreation.html(), + 'viewTypes': viewTypes }); } @@ -98,20 +154,20 @@ define(function(require) { $("#group_res_net", context).prop("checked", false); - /* TODO - - generateAdminViewsSelect(context, "groupadmin"); + _generateViewsSelect(context, "admin", "groupadmin"); $(context).off("change", ".admin_view_input"); $(context).on("change", ".admin_view_input", function(){ - generateAdminViewsSelect(context); - }) + _generateViewsSelect(context, "admin"); + }); - generateUserViewsSelect(context, "cloud") - $(context).off("change", ".user_view_input") + _generateViewsSelect(context, "user", "cloud"); + $(context).off("change", ".user_view_input"); $(context).on("change", ".user_view_input", function(){ - generateUserViewsSelect(context) - }) - */ + _generateViewsSelect(context, "user"); + }); + + $("input#group_view_cloud").attr('checked','checked').change(); + $("input#group_admin_view_groupadmin").attr('checked','checked').change(); } function _submitWizard(context) { @@ -146,7 +202,7 @@ define(function(require) { if ( $('#shared_resources', context).prop('checked') ){ group_json['group']['shared_resources'] = "VM+DOCUMENT"; } -/* + group_json['group']['views'] = []; $.each($('[id^="group_view"]:checked', context), function(){ @@ -168,7 +224,7 @@ define(function(require) { if (default_view != undefined){ group_json['group']['default_admin_view'] = default_view; } -*/ + Sunstone.runAction("Group.create",group_json); return false; } @@ -180,4 +236,24 @@ define(function(require) { function _fill(context, element) { } + + function _generateViewsSelect(context, idPrefix, value) { + var views = []; + var old_value = value || $("#"+idPrefix+"_view_default", context).val(); + + var html = '<option id="" name="" value=""></option>'; + + $("."+idPrefix+"_view_input:checked", context).each(function(){ + var name = (Views.info[this.value] ? Views.info[this.value].name : this.value); + + html += '<option value="'+this.value+'">'+name+'</option>'; + }); + + $("select#"+idPrefix+"_view_default", context).html(html); + + if (old_value) { + $("#"+idPrefix+"_view_default", context).val(old_value).change(); + } + } + }); diff --git a/src/sunstone/public/app/tabs/groups-tab/form-panels/create/wizard.hbs b/src/sunstone/public/app/tabs/groups-tab/form-panels/create/wizard.hbs index 7d3d2ed917..66056029d4 100644 --- a/src/sunstone/public/app/tabs/groups-tab/form-panels/create/wizard.hbs +++ b/src/sunstone/public/app/tabs/groups-tab/form-panels/create/wizard.hbs @@ -25,7 +25,65 @@ </div> <div class="row"> <div class="large-12 columns"> - {{! TODO insert_views(dialog_name)}} + <div class="row"> + <div class="large-6 columns"> + <label for="user_view_default">{{tr "Default Users View"}} + </label> + <select id="user_view_default"> + </select> + </div> + <div class="large-6 columns"> + <label for="admin_view_default">{{tr "Default Admin View"}} + </label> + <select id="admin_view_default"> + </select> + </div> + </div> + <br> + {{#each viewTypes}} + <div class="row"> + <div class="large-7 columns"> + <h4>{{name}} + {{#if description}} + <span class="tip">{{description}}</span> + {{/if}} + </h4> + <table class="dataTable extended_table"> + <tr> + <th style='width: 60%;'></th> + <th>{{tr "Group Users"}}</th> + <th>{{tr "Group Admins"}}</th> + </tr> + {{#each views}} + <tr> + <td> + {{name}} {{tr "View"}} + {{#if description}} + <span class="tip">{{description}}</span> + {{/if}} + </td> + <td> + <input class="user_view_input" type="checkbox" + id="group_view_{{id}}" + value="{{id}}"/> + </td> + <td> + <input class="admin_view_input" type="checkbox" + id="group_admin_view_{{id}}" + value="{{id}}"/> + </td> + </tr> + {{/each}} + </table> + </div> + <div class="large-5 columns" style="text-align: center"> + {{#if preview}} + <img src="images/{{preview}}" style="height: 200px;"> + {{/if}} + </div> + </div> + <br> + {{/each}} </div> </div> </div> diff --git a/src/sunstone/public/app/tabs/groups-tab/panels/info.js b/src/sunstone/public/app/tabs/groups-tab/panels/info.js index 0efc2286e8..5623940adc 100644 --- a/src/sunstone/public/app/tabs/groups-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/groups-tab/panels/info.js @@ -5,7 +5,7 @@ define(function(require) { var TemplateInfo = require('hbs!./info/html'); var Locale = require('utils/locale'); - var ViewsInfo = require('../utils/viewsInfo'); + var Views = require('../utils/views'); var Tips = require('utils/tips'); /* @@ -113,7 +113,7 @@ define(function(require) { $.each(viewsStr.split(','), function(index, view){ var viewElem; - var knownView = ViewsInfo[view]; + var knownView = Views.info[view]; if (knownView){ viewElem = { 'name': knownView.name, diff --git a/src/sunstone/public/app/tabs/groups-tab/utils/viewsInfo.js b/src/sunstone/public/app/tabs/groups-tab/utils/views.js similarity index 66% rename from src/sunstone/public/app/tabs/groups-tab/utils/viewsInfo.js rename to src/sunstone/public/app/tabs/groups-tab/utils/views.js index 62a4d24a8a..3651fa4e42 100644 --- a/src/sunstone/public/app/tabs/groups-tab/utils/viewsInfo.js +++ b/src/sunstone/public/app/tabs/groups-tab/utils/views.js @@ -1,7 +1,30 @@ define(function(require) { var Locale = require('utils/locale'); - return { + var _view_types = { + advanced : { + name: 'Advanced Layout', + description : Locale.tr("This layout exposes a complete view of the cloud, allowing administrators and advanced users to have full control of any physical or virtual resource of the cloud."), + preview: "advanced_layout.png" + }, + cloud : { + name: 'Cloud Layout', + description : Locale.tr("This layout exposes a simplified version of the cloud where group administrators and cloud end-users will be able to manage any virtual resource of the cloud, without taking care of the physical resources management."), + preview: "cloud_layout.png" + }, + vcenter : { + name: 'vCenter Layout', + description : Locale.tr("Set of views to present the valid operation against a vCenter infrastructure"), + preview: "vcenter_layout.png" + }, + other : { + name: 'Other Layouts', + description : '', + preview: null + } + }; + + var _views_info = { admin : { id: 'admin', name: "Admin", @@ -45,4 +68,10 @@ define(function(require) { type: "vcenter" } }; + + return { + 'info': _views_info, + 'types': _view_types + }; + }); \ No newline at end of file