--- src/app/controllers/deployments_controller.rb | 5 + src/app/models/catalog_entry.rb | 7 ++ src/app/stylesheets/layout.scss | 109 ++++++++++++++++++++ .../deployments/launch_from_catalog.html.haml | 57 ++++++++++ src/app/views/layouts/_catalog_dropdown.html.haml | 7 ++ src/app/views/pools/_pretty_list.html.haml | 1 + src/config/routes.rb | 1 + src/public/images/deployment-button-pressed.png | Bin 0 -> 524 bytes src/public/images/deployment-button.png | Bin 0 -> 488 bytes 9 files changed, 187 insertions(+), 0 deletions(-) create mode 100644 src/app/views/deployments/launch_from_catalog.html.haml create mode 100644 src/app/views/layouts/_catalog_dropdown.html.haml create mode 100644 src/public/images/deployment-button-pressed.png create mode 100644 src/public/images/deployment-button.png
diff --git a/src/app/controllers/deployments_controller.rb b/src/app/controllers/deployments_controller.rb index 6504db1..ec39ade 100644 --- a/src/app/controllers/deployments_controller.rb +++ b/src/app/controllers/deployments_controller.rb @@ -284,6 +284,11 @@ class DeploymentsController < ApplicationController render :text => deployment.nil?.to_s end
+ def launch_from_catalog + @catalog = Catalog.find(params[:catalog_id]) + @catalog_entries = @catalog.catalog_entries.paginate(:page => params[:page] || 1, :per_page => 6) + require_privilege(Privilege::VIEW, @catalog) + end private def load_deployments @deployments = Deployment.paginate(:page => params[:page] || 1, diff --git a/src/app/models/catalog_entry.rb b/src/app/models/catalog_entry.rb index 6175bdf..bb99332 100644 --- a/src/app/models/catalog_entry.rb +++ b/src/app/models/catalog_entry.rb @@ -80,4 +80,11 @@ class CatalogEntry < ActiveRecord::Base deployable.image_uuids unless deployable.nil? end
+ def hw_profile_for_image(image_id) + fetch_deployable.assemblies.each do |as| + if as.image_id == image_id + return HardwareProfile.find_by_name(as.hwp) + end + end + end end diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss index 3115a5e..54e7523 100644 --- a/src/app/stylesheets/layout.scss +++ b/src/app/stylesheets/layout.scss @@ -2247,6 +2247,115 @@ ul.deployment-array.small + ul.deployment-array.small{ margin-top: 10px; }
+/************************************************************************** */ +/********************************************* Launch from catalog elements */ +/************************************************************************** */ + +.catalog_info{ + text-align:center; + h3{ + padding:20px 0px 20px 0px; + } + } +.catalog_list{ + position: relative; + vertical-align:center; +} +.catalog_list .more{ + display:none; + width: 164px; + & > li.catalog{ + width:100%; + text-align:left; + padding: 10px 0px 10px 0px; + margin: 0px !important; + a { + padding-left: 10px; + } + } + li.catalog:hover{ + background:#C4E0F0; + } +} +.catalog_link{ + background: url(../../images/deployment-button.png) no-repeat center; + padding: 7px 15px; +} +.catalog_link:hover{ + background-color:#e0e0e0; + background: url(../../images/deployment-button-pressed.png) no-repeat center; + + .more{ + border: 1px solid #999999; + display:block; + position:absolute; + z-index:1; + background-color:#e0e0e0; + right:-15px; + top:5px; + -webkit-border-radius: 7px 0px 7px 7px; -moz-border-radius: 7px 0px 7px 7px; border-radius: 7px 0px 7px 7px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.50); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.50); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.50); + } +} +table.catalog_pretty { + width: 100%; + #border: 1px solid #ccc; + background-color: #efefef; + background: -moz-linear-gradient(top, #efefef 0%, #e0e0e0 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(100%,#e0e0e0)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#e0e0e0',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* W3C */ + -webkit-border-radius: 7px 7px 7px 7px; -moz-border-radius: 7px 7px 7px 7px; border-radius: 7px 7px 7px 7px; + tr { + padding:5px; + border-bottom: 1px solid #CCCCCC; + + } + + tr:last-child { + border:none; + } + + td.info{ + padding:5px; + width:80%; + h2.catalog_entry{ + font-size: 16px; + margin-top: 6px; + display: inline-block; + padding: 6px 7px 7px 44px; + background: transparent url('../../images/deployment_large_icon_provider.png') no-repeat 8px center; + } + .catalog_entry_description{ + padding-left: 44px; + } + } + + td.controls{ + text-align: right; + vertical-align: middle; + a{ + + } + } + + table{ + width:90%; + tr td{ + padding:10px; + } + tr th{ + padding:10px; + } + } +} + + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Flat Table Component -- v.0.0.1 [flat_table] (flat_table.scss) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ diff --git a/src/app/views/deployments/launch_from_catalog.html.haml b/src/app/views/deployments/launch_from_catalog.html.haml new file mode 100644 index 0000000..770cd65 --- /dev/null +++ b/src/app/views/deployments/launch_from_catalog.html.haml @@ -0,0 +1,57 @@ += render :partial => 'layouts/nav_history' +%header.page-header + %h1=@catalog.name + #obj_actions.button-container + = link_to 'Edit', edit_catalog_path(@catalog), :class => 'button pill', :id => 'edit_button' +%span.catalog_info + %h3="Choose a deployable to launch in the #{@catalog.pool.name} pool" +.content + %table.catalog_pretty + - @catalog_entries.each do |entry| + %tr.entry_row + %td.info + %h2.catalog_entry=entry.name + %div.catalog_entry_description=entry.description + %td.controls + =link_to "Details","#", :class => "collapse" + =link_to "Select","#", :class=> "button pill" + %tr.details_row + %td + %table + %tr + %th + %h2 Image ID + %th Profile + %th HDD + %th RAM + %th ARCH + -entry.fetch_images.each do |image| + %tr + %td + %h2=image.id + %td=entry.hw_profile_for_image(image.id).name + %td=entry.hw_profile_for_image(image.id).storage + %td=entry.hw_profile_for_image(image.id).memory + %td=entry.hw_profile_for_image(image.id).architecture + %td + %h2 Deployable URI + %span=entry.url + %div.align-center + %div + =will_paginate @catalog_entries + %div + = link_to 'Cancel', root_path, :class => 'button pill', :id => 'edit_button' + +:javascript + $(document).ready(function() { + $('.details_row').each(function(){ + $(this).hide(); + }) + $('.entry_row').each(function(){ + var this_row = this; + $(this).find('a.collapse').click(function(){ + $(this_row).next().toggle(); + return false; + }); + }) + }); diff --git a/src/app/views/layouts/_catalog_dropdown.html.haml b/src/app/views/layouts/_catalog_dropdown.html.haml new file mode 100644 index 0000000..d5a2d59 --- /dev/null +++ b/src/app/views/layouts/_catalog_dropdown.html.haml @@ -0,0 +1,7 @@ +%li.catalog_link + =#image_tag 'deployment-button.png' +   + %div.catalog_list + %ul.more + - catalogs.each do |catalog| + %li.catalog= link_to catalog.name, launch_from_catalog_deployments_path(:catalog_id => catalog.id) \ No newline at end of file diff --git a/src/app/views/pools/_pretty_list.html.haml b/src/app/views/pools/_pretty_list.html.haml index 461db2d..e4d9626 100644 --- a/src/app/views/pools/_pretty_list.html.haml +++ b/src/app/views/pools/_pretty_list.html.haml @@ -31,6 +31,7 @@ = link_to "#{html_escape(pool.name)} Pool details »".html_safe, pool_path(pool), :class =>'pool_details' %li = link_to 'New Deployment', launch_new_deployments_path(:pool_id => pool.id), :class => 'button primary', :id => 'new_deployment_button' + = render :partial => 'layouts/catalog_dropdown', :locals => {:catalogs => pool.catalogs}
:javascript $(document).ready(function() { diff --git a/src/config/routes.rb b/src/config/routes.rb index 1e31d16..5527816 100644 --- a/src/config/routes.rb +++ b/src/config/routes.rb @@ -106,6 +106,7 @@ Conductor::Application.routes.draw do delete :multi_destroy get 'launch_new' get 'check_name' + get 'launch_from_catalog' end resources :instances end diff --git a/src/public/images/deployment-button-pressed.png b/src/public/images/deployment-button-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..4a87935ab785bf7602d46e498c3aa5cf4af2b9a8 GIT binary patch literal 524 zcmV+n0`vWeP)<h;3K|Lk000e1NJLTq001BW000>X1^@s6P!BAT00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2ipn? z3k5m92Q4K4000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004JNkl<Z zNXPA#PfG$p7{-4)>&}*|wGxzJkg?UFQ*`i9cL}<65QIKKAEJ-p*+WnWeE<)2(?hqq z1c7M5LLil~uDXiWDM;v#LGD8MoQ9dh^W&X)pLvyhKL6@@9zjS-Nyzg&GMP*u0EI#U zLBN^-1P&1T?yy*MC{`U-O^FrL*-02gG~o|G$#yYymDFMwLlX!EPH&!h>h!Tpoz3|v zEK?uf6`b9^aDL~Y2?awFJhuBtRbZJqQ7O2tcQ`6NjIRRM^)>((_e}t{69(%sow;e1 zW_N(o9S{$P#`^|7s%*QIZ5M!pjTk~vg6o1-Z{SZC{8opTVNPmtXfK=Wl1sJx$$?y| zMK;+T+5FEd@DB0W+BbkvjVFJ>j{tEa<O{%;F2{SzR2m*v^$x|VL!~i1wn<fCYau+| z9I#9s%hcIlo2A(sP_|u4w#!mfV|Qf+sVe>jQA87@lTp&i=wu@LUjT0)>1HmHufJpf O0000<MNUMnLSTYbz|WEZ
literal 0 HcmV?d00001
diff --git a/src/public/images/deployment-button.png b/src/public/images/deployment-button.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc615128700e1e6e350c56610e9f1dd533b4d37 GIT binary patch literal 488 zcmV<E0T=#>P)<h;3K|Lk000e1NJLTq001BW000>X1^@s6P!BAT00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2ipn? z3jrcg4k66|000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003)Nkl<Z zNXPA$zly>@5Qjg96%vSrV&iBP1VPJSXXiWQS$rK^pTfe@MGLcKtda-NBHF~O4o)~Y zk0VKO{;Fl!Wj<!--?p4{kFqRjLL!1G%aY-6*a$$DWe5%H4Pbscu;1^o)}pEm1_NfZ z8NTn=1CS&MK@c#ROz=Dp5n;RCa=l(rRl+btRjYe~-EPO>aKIRY=XqQ%7uxMMs*3OX zoX=<0>veS=NYfO6<M9Z<bUI};8qw)=xZQ3PMM1CEt2PF{$~lK~4uIuyiHJ0p1^4^C zo-FvSHk%FB+NZrJiiqR5o;nc6F;Nt~WV{j&d_sJ;t_|Q7!|z`35<s`xZMGS$Rx9#6 zCrwkVwd8sJeAyVr<8ifhKvhvy7K;T%QQ({-NfP?~KJ)n;WBwM$t<&lBc#mZNdn6MP evMg)tU+@7pA!&&O#&F000000<MNUMnLSTZUX~%{D
literal 0 HcmV?d00001