On 10/19/2011 02:23 PM, Tomas Hrcka wrote:
---
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=(a)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 #{(a)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
ACK
2 notes:
We should be doing strings in a localized fashion from now on (but that
can happen later in another patch).
The "Select" buttons aren't hooked into the launching action because it
connects to my patches which aren't in yet.
Either just push it as it is and I can connect it later or just have it
POST to deployments#launch_params in the same way as
deployments/launch_new does in my patch.
Thomas
--
No trees were killed to send this message, but a large number of
electrons were terribly inconvenienced.