Jeremy Perry
2009-May-21 14:38 UTC
[Ovirt-devel] [PATCH server] Updated look and feel for empty grid views
When empty grids are shown (ex: no VMs in this pool) a specific graphic, message and improved action button are shown. For Task views, the user will see the current filter and an explanation that no tasks match that filter. Signed-off-by: Jeremy Perry <jeremy.perry at redhat.com> --- src/app/views/hardware/show_hosts.rhtml | 11 ++++------- src/app/views/hardware/show_storage.rhtml | 15 ++++++--------- src/app/views/hardware/show_vms.rhtml | 17 +++++++---------- src/app/views/network/list.html.erb | 9 ++++----- src/app/views/resources/show_vms.rhtml | 25 +++++++++++-------------- src/app/views/search/results.rhtml | 4 ++-- src/app/views/smart_pools/show_hosts.rhtml | 9 ++++----- src/app/views/smart_pools/show_pools.rhtml | 9 ++++----- src/app/views/smart_pools/show_storage.rhtml | 9 ++++----- src/app/views/smart_pools/show_vms.rhtml | 9 ++++----- src/app/views/task/_show.rhtml | 19 +++++++++++-------- src/app/views/user/_show.rhtml | 7 ++++--- src/public/images/no-grid-items.png | Bin 15004 -> 0 bytes src/public/stylesheets/components.css | 25 ++++++++++++++++++++++--- 14 files changed, 87 insertions(+), 81 deletions(-) delete mode 100644 src/public/images/no-grid-items.png diff --git a/src/app/views/hardware/show_hosts.rhtml b/src/app/views/hardware/show_hosts.rhtml index fb54373..18ee4a6 100644 --- a/src/app/views/hardware/show_hosts.rhtml +++ b/src/app/views/hardware/show_hosts.rhtml @@ -109,14 +109,11 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_hosts.png" alt="hosts" width="145" height="145"> <div class="no-grid-items-text"> - No hosts found in this pool. <br/><br/> - <%if @can_modify -%> - <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %> - <a href="<%= url_for :controller => 'hardware', :action => 'addhost', :id => @pool %>" rel="facebox[.bolder]">Add first host to this hardware pool</a> - <% end -%> + <h2>There are no hosts in this pool.</h2> + <p>Hosts belonging to this hardware pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'hardware', :action => 'addhost', :id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Hosts</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/hardware/show_storage.rhtml b/src/app/views/hardware/show_storage.rhtml index c9f46ad..94560d0 100644 --- a/src/app/views/hardware/show_storage.rhtml +++ b/src/app/views/hardware/show_storage.rhtml @@ -93,7 +93,7 @@ ${htmlList(pools, id)} } if (storage.indexOf($('#storage_selection_id').html()) != -1){ empty_summary('storage_selection', 'Storage Pool'); - } + } }, 'json'); } } @@ -110,7 +110,7 @@ ${htmlList(pools, id)} } if (storage.indexOf($('#storage_selection_id').html()) != -1){ empty_summary('storage_selection', 'Storage Pool'); - } + } }, 'json'); } } @@ -144,14 +144,11 @@ ${htmlList(pools, id)} <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_storage.png" alt="virtual machine" width="145" height="145"> <div class="no-grid-items-text"> - No storage volumes found in this pool. <br/><br/> - <%if @can_modify -%> - <%= image_tag "icon_add_storage.png", :style=>"vertical-align:middle;" %> - <a href="<%= url_for :controller => 'storage', :action => 'addstorage', :hardware_pool_id => @pool %>" rel="facebox[.bolder]">Add first storage volume to this hardware pool</a> - <% end -%> + <h2>There is no storage in this pool.</h2> + <p>Storage associated with this hardware pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'storage', :action => 'addstorage', :hardware_pool_id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Storage</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/hardware/show_vms.rhtml b/src/app/views/hardware/show_vms.rhtml index c6c8b4e..8ddde73 100644 --- a/src/app/views/hardware/show_vms.rhtml +++ b/src/app/views/hardware/show_vms.rhtml @@ -55,14 +55,14 @@ } if (vm_pools.indexOf($('#vmpool_selection_id').html()) != -1){ empty_summary('vmpool_selection', 'Virtual Machine Pool'); - } + } }, 'json'); } } function vmpools_select(selected_rows) { - var selected_ids = new Array() - for(i=0; i<selected_rows.length; i++) { + var selected_ids = new Array() + for(i=0; i<selected_rows.length; i++) { load_widget_select(selected_rows[i]); selected_ids[i] = selected_rows[i].id; } @@ -92,14 +92,11 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_vmpools.png" alt="virtual machine pool" width="145" height="145"> <div class="no-grid-items-text"> - No virtual machine pools found in this hardware pool. <br/><br/> - <%if @can_modify -%> - <%= image_tag "icon_add_vmpool.png", :style => "vertical-align:middle;" %> - <a href="<%= url_for :controller => 'resources', :action => 'new', :parent_id => @pool %>" rel="facebox[.bolder]">Add first virtual machine pool to this hardware pool</a></li> - <% end -%> + <h2>There are no virtual machine pools in this pool.</h2> + <p>Virtual machine pools belonging to this hardware pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'resources', :action => 'new', :parent_id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Virtual Machine Pool</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/network/list.html.erb b/src/app/views/network/list.html.erb index 0451a9c..fab8111 100644 --- a/src/app/views/network/list.html.erb +++ b/src/app/views/network/list.html.erb @@ -60,12 +60,11 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_networks.png" alt="networks" width="145" height="145"> <div class="no-grid-items-text"> - No networks found. <br/><br/> - <%= image_tag "icon_addhost.png", :style=>"vertical-align:middle;" %> - <a href="<%= url_for :action => 'new' %>" rel="facebox[.bolder]">Add first network</a> + <h2>There are no networks to display.</h2> + <p>Networks will be listed here after you create one.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :action => 'new' %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Network</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/resources/show_vms.rhtml b/src/app/views/resources/show_vms.rhtml index 996d3fb..0003bd4 100644 --- a/src/app/views/resources/show_vms.rhtml +++ b/src/app/views/resources/show_vms.rhtml @@ -72,7 +72,7 @@ } if (vms.indexOf($('#vms_selection_id').html()) != -1){ empty_summary('vms_selection', 'Virtual Machine'); - } + } }, 'json'); } } @@ -81,7 +81,7 @@ var vms = get_selected_vms(); if (validate_selected(vms, "vm")) { jQuery.facebox('<div id="vm_action_results">'); - $('#vm_action_results').load('<%= url_for :controller => "resources", + $('#vm_action_results').load('<%= url_for :controller => "resources", :action => "vm_actions", :id => @pool %>', { vm_ids: vms.toString(), vm_action: action }); } @@ -89,7 +89,7 @@ function vms_select(selected_rows) { var selected_ids = new Array(); - for(i=0; i<selected_rows.length; i++) { + for(i=0; i<selected_rows.length; i++) { load_widget_select(selected_rows[i]); selected_ids[i] = selected_rows[i].id; } @@ -119,16 +119,13 @@ </div> <% else %> <div class="data_section"> - <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - - <div class="no-grid-items-text"> - No vms found in this pool. <br/><br/> - <%if @can_modify -%> - <%= image_tag "icon_add_host.png", :style => "vertical-align:middle;" %> - <a href="<%= url_for :controller => 'vm', :action => 'new', :vm_resource_pool_id => @pool %>" rel="facebox[.bolder]">Add first virtual machine to resource pool</a></li> - <% end -%> + <div class="no-grid-items"> + <img src="images/jumbo_vm.png" alt="virtual machine" width="145" height="145"> + <div class="no-grid-items-text"> + <h2>There are no virtual machines in this pool.</h2> + <p>Virtual machines belonging to this virtual machine pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'vm', :action => 'new', :vm_resource_pool_id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Virtual Machine</a></div><div class="button_right_blue" /></div> + </div> </div> - </div> - </div> + </div> <% end %> diff --git a/src/app/views/search/results.rhtml b/src/app/views/search/results.rhtml index 1537b60..7eb25ef 100644 --- a/src/app/views/search/results.rhtml +++ b/src/app/views/search/results.rhtml @@ -93,9 +93,9 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> + <img src="images/jumbo_find.png" alt="find" width="145" height="145"> <div class="no-grid-items-text"> - No results found. <br/><br/> + <h2>No results found.</h2> </div> </div> </div> diff --git a/src/app/views/smart_pools/show_hosts.rhtml b/src/app/views/smart_pools/show_hosts.rhtml index 8b13c2b..65a3500 100644 --- a/src/app/views/smart_pools/show_hosts.rhtml +++ b/src/app/views/smart_pools/show_hosts.rhtml @@ -66,12 +66,11 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_hosts.png" alt="hosts" width="145" height="145"> <div class="no-grid-items-text"> - No hosts found in this pool. <br/><br/> - <%= image_tag "icon_add_host.png", :style=>"vertical-align:middle;" %> - <a href="<%= url_for :controller => 'host', :action => 'add_to_smart_pool', :smart_pool_id => @pool %>" rel="facebox[.bolder]">Add first host to this smart pool</a> + <h2>There are no hosts in this pool.</h2> + <p>Hosts belonging to this smart pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'host', :action => 'add_to_smart_pool', :smart_pool_id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Hosts</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/smart_pools/show_pools.rhtml b/src/app/views/smart_pools/show_pools.rhtml index de8741b..f120fa2 100644 --- a/src/app/views/smart_pools/show_pools.rhtml +++ b/src/app/views/smart_pools/show_pools.rhtml @@ -62,12 +62,11 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_pools.png" alt="pools" width="145" height="145"> <div class="no-grid-items-text"> - No pools found in this pool. <br/><br/> - <%= image_tag "icon_add_pools.png", :style=>"vertical-align:middle;" %> - <a href="<%= url_for :controller => 'smart_pools', :action => 'add_pool_dialog', :id => @pool %>" rel="facebox[.bolder]">Add first pool to this smart pool</a> + <h2>There are no pools in this pool.</h2> + <p>Pools associated with this smart pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'smart_pools', :action => 'add_pool_dialog', :id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Pools</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/smart_pools/show_storage.rhtml b/src/app/views/smart_pools/show_storage.rhtml index da553a1..ac5aff3 100644 --- a/src/app/views/smart_pools/show_storage.rhtml +++ b/src/app/views/smart_pools/show_storage.rhtml @@ -91,12 +91,11 @@ ${htmlList(pools, id)} <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_storage.png" alt="storage" width="145" height="145"> <div class="no-grid-items-text"> - No storage pools found in this pool. <br/><br/> - <%= image_tag "icon_add_storage.png", :style=>"vertical-align:middle;" %> - <a href="<%= url_for :controller => 'storage', :action => 'add_to_smart_pool', :smart_pool_id => @pool %>" rel="facebox[.bolder]">Add first storage volume to this smart pool</a> + <h2>There is no storage in this pool.</h2> + <p>Storage associated with this smart pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'storage', :action => 'add_to_smart_pool', :smart_pool_id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Storage</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/smart_pools/show_vms.rhtml b/src/app/views/smart_pools/show_vms.rhtml index 48ae800..f3bd6ed 100644 --- a/src/app/views/smart_pools/show_vms.rhtml +++ b/src/app/views/smart_pools/show_vms.rhtml @@ -65,12 +65,11 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_vm.png" alt="virtual machine" width="145" height="145"> <div class="no-grid-items-text"> - No virtual machines found in this pool. <br/><br/> - <%= image_tag "icon_add_vm.png", :style=>"vertical-align:middle;" %> - <a href="<%= url_for :controller => 'vm', :action => 'add_to_smart_pool', :smart_pool_id => @pool %>" rel="facebox[.bolder]">Add first virtual machine to this smart pool</a> + <h2>There are no virtual machines in this pool.</h2> + <p>Virtual machines associated with this smart pool will be listed here.</p> + <div class="no-grid-items-button"><div class="button_left_blue" /><div class="button_middle_blue"><a href="<%= url_for :controller => 'vm', :action => 'add_to_smart_pool', :smart_pool_id => @pool %>" rel="facebox[.bolder]"><img src="images/icon_plusbutton.png" alt="Add" style="margin: 5px 2px 0 -5px">Add Virtual Machines</a></div><div class="button_right_blue" /></div> </div> </div> </div> diff --git a/src/app/views/task/_show.rhtml b/src/app/views/task/_show.rhtml index 521ab8e..f4e001d 100644 --- a/src/app/views/task/_show.rhtml +++ b/src/app/views/task/_show.rhtml @@ -70,14 +70,17 @@ </div> </div> --> <% else %> - <div class="data_section"> - <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> + <div class="data_section"> + <div class="no-grid-items"> + <img src="images/jumbo_find.png" alt="find" width="145" height="145"> + <div class="no-grid-items-text"> + <h2>There are no tasks that match this filter.</h2> + <p>Type: <strong><%= task_types.select {|type| type[1]==task_type}[0][0] %></strong></p> + <p>State: <strong><%= task_states.select {|state| state[1]==task_state}[0][0] %></strong></p><br /> + <p>Choose another filter to display tasks.</p> + </div> + </div> + </div> - <div class="no-grid-items-text"> - No tasks found. - </div> - </div> - </div> <% end %> <% end %> \ No newline at end of file diff --git a/src/app/views/user/_show.rhtml b/src/app/views/user/_show.rhtml index 306d1d4..decb498 100644 --- a/src/app/views/user/_show.rhtml +++ b/src/app/views/user/_show.rhtml @@ -54,11 +54,12 @@ <% else %> <div class="data_section"> <div class="no-grid-items"> - <%= image_tag 'no-grid-items.png', :style => 'float: left;' %> - + <img src="images/jumbo_find.png" alt="find" width="145" height="145"> <div class="no-grid-items-text"> - No users found associated with this pool. <br/><br/> + <h2>There are no users associated with this pool.</h2> + <p>Users associated with this pool will be listed here.</p> </div> </div> </div> + <% end %> diff --git a/src/public/images/no-grid-items.png b/src/public/images/no-grid-items.png deleted file mode 100644 index 49b42110d1354582477f516f59167d53beaaf2c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15004 zcmV;NI%CC&P)<h;3K|Lk000e1NJLTq0040S004Ig1^@s6G$*gk00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOJz z7YzndRA)p003ZNKL_t(|+U&h)uw>_b-uHXAv-Ntn*)W5RBmnLdDT$FRi=-HtqT@<r zs~pLZMEirBd`aX~tcp`{rBbfM6<5BbDt48X$Z=e9HpLa$u_Tfb7pW}L3 at M5tNP-K9 z0cM}O-`@Ky?~)Ji>7F~lfFwWywlVA~)W!64-|0Tj`R~vFd4+Q>gb?`t<KNte3?cAB z5G4TL2lw9)5CMb`&wJVvLb%8CFYoca`aR!&d<zf(g1Gx>Ap}B%?}<fz-=bgHhY0a; zm$i8B!H2aqN~Q3 at udV9&mi6td_Iqj7-+#Oai1)haAq1q95CHK)Yg&O40Sbg5z7N#D za(8+PBq0Redrrn9>ZZQS0-tY*@&D!b0sL3^&@YyJ937ANhrj-hF<Hu`^A|XCW|P5S zK)>Io*XuFp^)SYuge1hf;AOkid&SJ}-xMzc#8p-bk`UnV at Pt47%x9^*rI}R#^!r`< zgD!(^kB#Ag&B2i2aL8aVWP4}8U@%w%on;wGl8~C at +k&#P{O at PB-xCmJd*R^VV3)eA z at VdhrfACL{`ik2}Cmc;CT-)EnHP`UICJ_#kDAFXS7<B07UGlVGW6)>N>o6E>Fx(n) zW)Lm7JLuEz78FH6mKGFw8vkV}PZu}{1kbn6Hax%J|6k0~?>y&EM~>Gzh<6^lySq%M zQ}V%p|Li~f5U+n|i<9Y+lgW~k<0-p`$L#JMv3qpD;lVMZ$(ZrUh}%bV>gqPZUPelR zQVOj#xsl{)M&2ptbaOg+L8ln7v$er+7y<4LHrO0==@%)TPLEEvOJdX-2yqGs at jRgJ z0J!odr*45D??(K70rA%UA>La0!%fcZbdeIe-JDJ*=fMk`yg59Ca{=oGWn~#nmy9M$ z4o at Z=kH#Dxj5r>RIT`IS8yzz*=S-IiPL7tyqd9nomI0$BnHDIMlH`Ug%P4e*yh!PG zyL1O#x}827{S7uYyYzYq{eGV!?~^AfX=X4=pRzW2$_;z0btt6}uVEDL38MF&gQF9I z^K5Q!kQWKd%2PEKCnU~7(==Eoa26ba5G37hL8n*n(4~tsHc&fDS=P*F6~|@GWV&QB zI$=6HVLlx(pHErL=ggN2f?Xn~C1F+qC8 at L+;gMRPwMGj`s#A<kF=;{G&FOXw-ENmb zr^Cj^2L0ZEPB)|18_>-&`u#qMQLp(rRo^S-)MdkLGC>Hz*_|^ODJZQ&U~tyqT)+v5 z1!@9~i_cjX at E)pW(E==~(b!be(>Zz3XSltMZJ at NCy0Xm5ip8R&T22{{PgpFcROO8M zazRth33Z9AN|Y2BS(B)eWPU<A)+m{wl}AXA5ulX9n-2Y=gVch|DE{(a`u91zedhj2 zY*zQ`csik6&d{A651u`b0IUl*93cd}_c$-`-r+<0TnIQ9sGX$on#Ovpm6Rf|^d2nK zHsAu(*5Mmyyg{UjBuNO}9=(mT6ph7OOI5?7shBSp)YXD=K4H9A;_4-#nj>t93^iKT zBs!2Mf_{>-DP|muE!tbIUcJieE?(qk{=!e+KOnB$&S*TvyMXESxp4Lj0jSy%z<ELK z1<rb!;IS at Xoual57X(!Z_ at MAY(io4j4LuxI8x(>?BMBnV=s+DTrS<qAASjfOc#{&8 zKq^a;b_ksTiS-mVP<l^UH!Pcqx@@qEIaNKUspc%ZXL-G`bSED{Q{h#DP7IUD{QfC1 zy!VIzD8XbhLF<HJe}kQ~Thwg{7d$jBV4cT#kM+ at gdcb)IHl+}AMAlF>Da|afH}~v~ zE&J1wlSRd7ZkgLa?FHTmT<{3)^k|h9C?!aYLMt%BgA{nF2+APSlqBgPbBF5%43dS1 za~nHc7=4!d>Wn7O(3!-0==HkySxgiX0ZbQj(yU-J>C at Znv#h}RfDImJ72XFL9NtSB z6u!3PT0v5CYb^Q770;KhA8=)N&f(Ous11wS0uH1?5-km*kWwPO1mSR01f`KuqC`N7 zKv0rY8!`<t at uVh@w2t3vgTs+(!Ju%c+s`qZPjS*SP!gpSTU#5i`G&z7L at 8z4HIY=+ zoHR2G^cMXh$2Q<SIHzzfP!Vtrgj4jAz)S|dc%|ag-x%}x=O*l)gy`<1ATiMIz=MN8 zFU{%Zk|aq;i~=DDQlNsT_JP_5YzS0NQd>u99gP>%J}_+>T<tMhqJ&0EkjVm+Ce;EN zJa&A-#Mb1c!kLULNf{1 at gy0ZD-6x4nd&jx}MYm74*d$F;YHzU~ocGZJ>p*T&e7E6? zPcQjrpPBRN>mx?f1}PGf3@)5cdEFV!1KVBBb`9NJt^dKwIZE$wt$S{)q6&`M1$>Y+ z4oWYmoCIrPEVP29lQd3Jx`xI}8mFlnN60hq4a<`Q>Sc+N2H){WAs7q>ujy{hT_CRF zM$=T_9sO>B>GcpYp|TCug_vDB#a2ghZCvuJzjeaLzHrRaE-<>o=1}p@^9ApEU55+j z1i9|uT*JI7Su~2J3(V_4<Dm`#XC+M#R34h3WAbF7 at tzuia}w_zApla6N`X=VB at E8T zxT;+sHxd;Z%Gn5S9nLxGx+d>*84ic{k301Q6oRU;2ohAD)9H7R!QvZF?LlclmP<bT z<S~EmqlaAHE6KFt%wWj7pAh`mV>>*sRbXw+tP+f;bCzCEdPT4f8^981oWKV`6QFVd z=RH0EK41g55dZ9hpuy1uL5;+^03qNA$Ph?S1ZhZ&!q^4Ns=}yfb at Tb0tznOTuXDdO zz at cgaN*R>N=yZoT4GSOW$po)!{+AEm=GXpUm*ZgBG(Fz+M3+DR?jetErp%T#lV!uQ z3RKSFM4X6tAMgmAkBxx_uwGC(M-u`rNL=tVAz*323vtlwgT!-Z!eLvlQ48<^ngCiz zsAt$}hE at tGHRJJ=-Wwi4X?_2IDBFzBRwYU&<VjAq=;2G~3CUb7_&dLGz;AwbLP!h` zcRKvy`wD*i&70V{VQ*H`SWobZ+6SBm=LEG2;K2HTZ332n_kj>}3$P~yg`)+|1*`)H zc<-=Y;Jw7sX2&A7`GnUrQs4xrM8RT2hC`YhwB+REh;Fyb{V>RS!BDue4x=SP3(`Cx z(+x*b@;85dk57Dl42kE59?1Bm4_ at RATPcTQ%ZY99HiEHi8iKbFKodxmrbeI$I34g- z;Dg2@@WJB(SUkZCG=f at 6oR3AR69R<7ivZpc1Tj7aiO116MGzpAK-E*SR3LOp6QC{^ zY;A4bHQ9LWCpM>w{<Mg9_ at I#3#PGL&{W>4}!Vy7ue*7&1{`#MLgsz`+bL?0;3trL$ zi3l~BQItNRtl^-BlX1!M)G}@?mGzW1CP+R6ob&`CQ9*zPArw-AQgS_Ba?(YPj}Q^O z&@%G`co*l6S_u+YqKXbA1$Htec*oY6oi=F`i2Gp_wf>II<F&>#Lv}V&{@zFT`JI2c zk1&Qm^R_;J;{#`zImgwdflv|%NFnJc!BL~RaZvK~Ud_#uhU2AWQ9BwT;w(@JkO3h> zbl+0qWwbzH1%dc?Lih+`0B<6=TFbR9`Beu-3Y36EdJ<n at x*c57V=<kPBncNToV&}* z+!u+Bb%Dk^QVW}#hEIOI;a5L$ol3%co+$X0KYJEyVLbC70t$tZiW`%fKe{sJslAfJ z<C4lNlul8?p|l`T3aJHNfNWWDUWC|A6QF~@D*-{^ga_Ioued|daxP}2VKo32apq#A zAd!MXdx}n%I@{oA|0Y|*4bGjr at akR3=TQw#xB6b`w%^^UTW|zdA%$aiV)?aCe}kiC zpSM3+ at GF1zBDHrMR06F^3X^baB>Ci5_xQrIOU84JNdhWKD3kykK`2B3Ap&0dn5}x% zS_dr&LtqgIABe^(2_hz1L4a?+yp$3bLX3ej#1^4<NTra<v#Bhyzd>dSv`X1Ie~!(; z5b${aDp_N=8^jRY3u5sr at j33cMDJqz$_f6D5B~{YSw6z+FKqMIKDdd_72}blClz&o zfAN(Qe(TFK4kjf@(Wl$@n9$J3h)@t9WqSt(f%Fn90tgRMw(!N9H^gNEf{eTxFT$FU z?ujnb14w}&TB;;~R-hmamO&;#Zs9$oY0kNGXDRYL=H0IXJ7Z;tchg1WdUW at ySz=vQ z2nG9-C4X{#2Io?K?nkzH`}u9Ik7|0k<HkwN|MsapK7XwuO(eZuA1MW3X at pn<C`5!w zcv`n9BdF~ccH+)mDce$E73YEo#DPlu9lixQzFgepri|2dM9r`$aA`{8EJ>a)91ht% zJR$@~5Pt0eUKP*U60gVOG3U0oICpmE)r*OBU6M%2{_%)e6?pIKxB01eY_dO@(dndo z^~#dJ`v)f+O&0XK2|{|5Z@@bca&1X5=0%q&)rz#_ku3mHM9@|)lh*0 at cq_*@64urS zG1<AppHXd(DS$R~R7IzoVV$R{DmJ=9L{R+E=RS|e(|C6mo9-0_P{c08Y&HW4 at A;7* z;oRAsS2Ql(1>(GM2xqx|Yk^XVUwGexq%u$@icdX##6SGKeHIw{odkg+c!iS=Ayy3V zfDjTyYc*2f2_T|X#Td5&Y1L&A1RoGmAY at A<ma>hdf`Dr;jzYGHO$ZJz6(TsK)O2+d z8}cslS9`q<`-eyT-tT=JPr$zlO`DY~l|rL~BFMlGzWbe|X&S%BE4Wm2w<XRd1l#b{ zYsb9pEf4XQOG9i}@<*4){OU&z at H(NN$0-NIS>OtfXo2x=_bq^@<3kWJnyq4oL=aSb zr%=&yeVg%!5Y}#UW!bHNMYLUB?*mF&65-g&B)ufTikz}qVvM0`8m7y#{kLBQ5Q9f3 ziM2~6qdDi#@1Uh#gD3C7qkRP?`<BIg%Dk-D8_oH5e*9f%<N5t>l>FK!4?%14Jm7?i z_1x;>C}6cr)4I`UfgogT=7|<Sq(De<$L#>V{qw41Kyr#+DAulXeIbNuty-Y8B9kyk z1X*e#Da$!Tu>8`8{sSI- at WB^lmcJ5~sI=y(Z#>Q4`S1USww)MWm9 at S#h}L?_*_ at lB z5qZ|(hu`!N&+bn72cNvbiB}8?j|>KnJ5|H2%??C}wchhm>9DdU8NX?uE%ZhERuN(& zK=^niL|ES>UIaw&C at Ikz5-lPVKsj8HBs!tnQJl#e(xgB*P4J#1NqG3uMRv|?zv_ke z*^@H_;bRzq^^WJO0^)p8vshN_?TvZ;Lz`^$Q~s;p*<)`a==TCb=ysaW7VE3kx7L}i zEs9lU8trFQ^Q}B0>tu!X&EN?Lp<4GDyEX)Yk`^r$S)wpnp#=y$LP&xT7$w+9pl3iQ z2H7ZFU6E%ACQa6D#Cz>jzEY36t~t#>e>KvnHHg#2oXLE~Xjby(*S(1kKQ-eE&(-t_ zgAjHd- at J%3K`k}3iAazFFWby>H4#}QHBz*F&-NR&uU%W|I;KX`mNHtUk%3N{APpEH zkiw#cibcMRH&bq4Bk^>UAOR}vsmmE at qRBf&>>@gcG3He(E$+IJU!@yoeWR4~83&^& z083f$Pd~RyPg#ud_ at D_$Xsty`Nsw_g6m+B at u0HT8R{H0Ck=VZ$cjD#h`L?4YSFZ^H zttCaCkZMID1xh+Htw<9^o`|^DVW5*FbWI>{cRp<0Fq_TdM%JlqtXFH@{9X$^uPTU> z`HabAMxr!- at ReH}jAxjl4?)syAjYiJ3sjpcNUhppT_M}z+_%Zf+Kq<xr;>Ml*;Uo2 zgg~NVK_225EH{c&N{k8^Eyxlb0o9NiNnsR463C3EqapD&@?4vS(R4=M?X6QIt at ZuW z03RQpAhBHDTk_ePW6aJQv0;G-9wRhX#!x1uh?QIGCgmw$!l|b9x|JveP73t832>*Q zvr2k`i1R}&S5~G`xHw``pru5c*jJTOV%h|#lR!^9l=pZ6^W}n*lM~W3y}O<HD)3HE z_rLGCV)tr*I5|0HzOXzsJ41HnEj)6z!?a#7D;3sSgln(_gkL2#Iu^JhtZN`~%AKCJ zI3ZVAPHS=E)N9vcB~PwXip(ID$KXkg#z-(yU?eCdFsij|Dd;4Ep>inU5jtTsnJ}Bp zD2jr+M{KXWC5mt1Mq{1(3K#p!WySTIhn$R0c>Tr(Z`wYl*DERMun0MeS~0PnQSGR# zV_7e0EY#jdibV+M)`iA8J!XVni3qUwcr+-#j)5T7d{8Gmi8SP?MhZ(RB&pV<TBDR8 zRiI at cRiI>?h!oP0rGgHYN_di{W;B{mInTz%#*1I!*Qz@`JUZg?t?QJ>6V4C5N?3dm znGERU1Ge)nF5Si#X9)d16VYQqkEu(T*088Ov$CPGf+ZE+dwio1DiWN8kO(O-p{)r8 z>)vR*YaKEK(!?NDyxv*~v=nOq)3sX#(@y<!Eyxo|ST3kUg$<J9<6{Jhjdld}TIZYI z1>zUJ at CBaw%98}I=`Z?pvXrhFA>{<E1Ze^)Nin*^*(^nNhS=^I>U>D(ZLk!5Mm}e5 zbCzB+t~}GyVjHmDQ#oj;5h3<gLtAUEtWrotqT|TPAW5{qC`lp%i4-I%kVr_ARjmk_ z7HDaqoKo8*0?n;kyLj(g)_353S at +i=1Uf~=<8OK!`+L`z93OG87m!+!rivoZ$@2~J zEMUYEtqocolIUm1j6@|lSw3JRA40l;&$pNkH(9724G9yMa#9DDbwX)<q-!({A$Xin zc%evyMG1|P?TAoFqy(cNHHt(BGU+ffx^1H*9b?eK63PjS#1Z_0r=NbB{xGhI-%oN4 z8sPo!e?Ra2iT81IGUoW;kY}!3<(X%m;qo`1V|V{H`}^0hb%W6<NtTjj1z8eTvr|=J z%$!W`BeW;chGCMindZ2BfavWI(joKi7E4_)mj%<%VNwegm8EPfK`3%5NVG$>qbngn zO1*9!8?EnvC_HH*5p_*d&zVSrUC!9syUoRm7r5W_HuNex)KYPFYm>8Eo4oOf#|XS1 z+c-v}30H64;JIfm^UQP4a`oCxZtb72cd$>0QzE)WMw)l%<eDr`P%Ow2g;F;#vLHz^ z21d}yGPa8$qS(M?+blcVEYv2}q^KmN!V-c+A!7aL9R^E6T$qU&Di{HUmdq9v^<qv* z!D3#L7hN8G=wa at +hmJ+OkHd%{)+K^OVvJ;GXN#SkEq?GFZzqI6<7#g09&+>MO|D(L z!PDP-hU?dFvcJE}@o|YqVA6!5C at 8X=JhLb@!x%$q6j~m}IA;ufle3j~kZF&q*dTPb z3EeG{&IT&a5hg*Y94#cld8Bs;X%W(qW|H|~$zm}hm6~$7<m}nAJoeaQ_aBH-%2NgV zi)ZAkxn81E9(v#c4_|zMKlSb(CWOFrI_3EIn5(z;c;=bQT>j=W+`4^}(a8yi2PIjN zV at wyN6nSEhT9GA?=mw*w=&*-Q3_ at uVE$~^Frs$&wTlnr4YOq1xA7Y9jrpU;3V2~@O zmnW1>#jIMgTrTP585bWoe~(Xp_gLukn%j5U1bDH@{7T!7wy$-%MwH<@`yKac)xDJF z#CJUN7BA8x6hhGN_v!chJoNCxyyr*X9XT}KarMe|{`iYe^3Q+kx0uZqcwjLN7$s0b zq7y at E5=^QwDj`cWK?&4+N^-o9xpf(35*8*wm=3zzA?=-|Gu);;v(038k7QKSNXKNc zKuXQl&h`tHiipE&A!s*~?*ZT`A;NoIz!$ryaq at C%0(xrn<WK*4!FMFX@^U&$-!*Yz zHT;ZPF)*D at xq15*w{PBHF`r|E<y~)o8(;X!*YVyXr6x2r-g~O1j-#7tWVdOpNlXW0 z3^Es}G(puhsZey}95ItD_HJ+hB%Q#<J9bzKN48&5PUrM`J^J0j3tY))Hpf~UB~hfj zH&Ca#Om{0$efxouxa;S=Un^SX`nS`#d(}WZO~G4j7+<}1gRgz{tL*OWwKFxqS%i|D zJ+sZ*-t<PEyLydf;|V6gdy8;s`vpD0Ib36@>M`@mBgc>$14)W9no*|7Ly9p5Cq3Qw zHhk%gPcfLCr}xpbRMRErE^X0!-YQ!Nfsg*~C;8$R|CmP~ev~t3HyCVevNPPI-|Nxs zX7svUv`O!p#C$vOPP=C*Wz>fiw6dWA8M6#r`<m0O$nT{UzAO+|A3T-;lB1Jjo_z92 z_V*4+l7yX|9i$L6HZsr3vZSmkcDB1@$s^o8KA~<LwQVA3Ra{_2cw|)}ouN>Q`FO(K z!4X-JB2APQn}#UBkTxlH1X~*kYTmGaG(k=0JaGQa?V at ah))FD25YbalJ;kR#`^Wr$ zfATc5`3e0Zr(5J~47wD(9-CV`Z1oHJ{UMthTWo9&84mk&yIuPIKAk*`ZvWI=^7-?^ zAbcEb`?&n$y={l)@?}}sOL_fE260V%3V~-XKf~9*_B45(^Y~+rMNUntm{`}*RnBHJ zrqel#<%qm6T+o}8WldQ%*rvg{xV~nsrM8a7SzKfBUUL2RF4OrW#xm!*_{c?4sYnY! z`6&U<4Y_ at 7pT(6up15$HOP3zu*=L_Y>x48-+1lEmE*;aOLz*DCaPd)o{IQ3)y?emn z(E&HcBdXn-)L;H4N`jG+#3+g^B`;Enyicc-(;sx$=nv>`3>gdtY!3$vd;KUj*y%<o zv!WntHF*?qXb?icoKm!UDImTgiOuuxkf)!1hRc^Pv%S3?_W*?;NfNY<>KCh(>!K(~ zvlC|1jM;2PqAN08QzlF5%CIcwxW-a at k2Zpk7N9j}&+Z_E<I3fy(OQ#b30u7Zh0uiD z^JjkS&(Sd%&zh^;81D0?H$KAF#*p!J7Pn84ESF2h<1sgG-DGq$;^%+%2l!8Z>1SBf zj at f+9@wnpnV9MV95jT&<>>ccLbaKqe$qCcxn9*oPwR?o~C8;t%AWJk!qDf5>wdXoH zS(dRm*kosC3l{`$dHdT)vJ~e9`v)WX{ULd3NVIv$@o at EgXp8cD2}r#3m?#7{Zr<kV zwQFpjJCBqS8=%N at 5^YEmjY$$h2+Yf6q;pt{vjST;%$>s|60apfS%g+pRfStFY3hn{ zJ^>l<Ny4C;^4Oz~P;@#t=diV-k%4Ml^RbWrF8|SA{UsiG;$fPm!Fx|xmTQK22=OMm zeDwym_V;K4Yz(^u;%IBw?bGkV#f#e at AH_CMSAk_|nat)KPv(rqbM}vq8I7kL9v*Xi zvd>~NqFhdy)g{LVGxWh2O+bpv7^BFtjA4I(^A+Fx+E;nz>2K2Mbm(_;y4^0lUZ25W zgN=<1dc6*vPC=gM^z(!yNnSv5UIDve?Fn&*kM!~_(R;r5<u9?fcfj7kF(%Puc}~CA zW6<r8=Q*8D2cgwEb4AH0vX>Z?Gx(-KV-Sg4(>;_@=u)GlqAW`mvpL>-@?Mv^tZ*)} z?40!^Nye>PxA^Gq{VqTK(?890I*r-!smwCQY|Zh}3CraYB~o0l%;yyj6PH_Eg>AQ( ztH!l5FAlU}V`Gcqa5K^#1I(I+<+5TiFPTgi9M4Lo(=p at mn8kd`Vm6|zri{uthbIe+ zZ_v`BLRe2<lolvyBITsLCTUTS7hSsDA>AUS+aE9-4%zHQ&<BG7MUgQW^byVxf^XL* zz6(n{JU+sE%YzSJ!Zp4v8)DkNsM^w at s&ELbtywG<Os7*O(>crK5 at +v_u2$ed%nX%^ zF~t~zGMaL+q+XUl6yICD*LzD|6ny>bUuU^olBOw5)7;HFX+P7X6&mafx at 1|w-rhdl z&9f+N at F9vhI2+k}K6tE9Sf^N4mc~o0w^U7o3j*&Iq+K%8;anfixJy)xWnpU;wPik^ zQ!Z=f%LVh<gymw2t!K;@Q+(y{%@WNN;T?$#7}b!?$7E`RRyR;eAw&GGK^b(CQWP1B z*^>AD=^y2TKlwhqd*PWSFB!zTvT^uYdmO|*r&8#up-yV*Bq7VP_(70plad!9N at vzJ zWm!^HHLkId70?2?+9FcQP!tNS6B3<Lss+<Utn&hrAU!CF7qDC|@!qfBze=iBH-z&I z)A0x;C7n*6?Ow6YF#Sp`5<%lFK6n}@a9+|hHZHO{k9Q6T_ at F5pM`In<2Wm%D)M~YL zyi_FFCc=1R$C3^lje|Nks-~n`mMoVQ%jKMUF=M=#()cC5UO-c#WFV!aqb+$>u$cw& zs-kHc_V at Ss@P|LlpZ<||)9V(`6XbmvAa*-BH*el#HeaIC6xr at fNV!_kW}V<@ty|?` z(^^?dmgPW<lhf&xvMgEF6~Wrrh*zrRoNDr{Ak_&vO_)xnESJl;q at xwH*^Jjc@(@K) zFq_TRmbZ#2Aq48WWHy_jmEp{pb3AbIB6+WmK+-seb&-|e39Z-?@j35t4$9#0K_FcY zAx>C~5LoMwqG3`yEK!r7^3b>jCp1ndgfe&<giMe+B{c=AD at d)Rv<*w=2~AB?RV=Fo zRkdWaTr&5D&ej>;HT?u?F+nF$l(%UbmgSsYw^%nKR=w_*4B~J&<nh-%%FVrf-tmri zG9HhyHWFr?b6DqTni^{@P18`fG(zVb*4nk@<$28NvMi(1G}LuPRaMk=6B_|Swlqg5 ziUK8dRJW>2s;c7X=!n1aiyyj+F29O}(Ha%CZLq=9A8zo_>t4sjOBYyHj>dUv at 3F0p zj`v`l!1_o(u at 0n!p%RovFfB_CPnH~v1-Ivcy_sh*Z<tmUb1UNVtBw1WQYoZxNG(uW zqNO0w5 at QmS3@B>6OfX7PnGU1 at 6F@o#F3>YM5A_4d=f^C{B_;%HU6FM+Ns@%q3d<{x zs$WjG=Kb$~Kfn4v|4&?f_A-w@{y3x2s8t_sFCrPvIh+k^tBWN^LseBQmrEv-3EulS zlS~t|HV7fn+E6wXO=FSmnwyl8G)*ZwIg7=NKm5Z#<bxmlAa8%iTNxd{7vf<602&ZU zL_t)a+>tYLZXFMcB1hMTUa!Z_+4H>a;fKjm!DMP_yr5|nBC!%19Ch&cCMs5?x#nc- z`O4mmFW;E+jawBr$Bt>)u(V*kLWW3UmJ+0j18cM-2!;1?rzA*62m&dhM>0yFv?o<@ z9;&sBv`;A^c&xW{@|=!8VmaN%*_eq2=VCV79o(}Vd08M11_S=ehklX2|EvFi8 at G3P z>s#MSl4z{8lyw<>wvQsVs|)LV%&O8fB}o!Gog%u@<&w#yBuUb>YDQ)f6cTGKS{jf7 znRs at 0Z}H4CPxFgE|CjjLpZ!^OZ{5Ziv$ni6HKb`uw_7k63^+QTFx=SWWZJO3wS}ug zyU_)~ORTez0PO+=0y>`SM}bfN(TLAJeaz*(CF4pXgFz&oJdvCq3N|~6ER|#?C(AXa zb>Xh1?^n)K`)Ki%Rn#sD at VZv7Zs7ydnME53vWYWNEzy8h2D_}N$1{QuG%CRf$=248 z7hAE^FSXEDDt05zo;}as_|JcZ|NEc(KYa4zALZeP9_8Z2i*$NjthFo_CC<4vzPK2B zyl?BBn1E=l>2x}6d#;M{Q!0dnG)>8~6k9di-rM8G&FgfFg#YxHf0_5Z=RJ7uxp3hE zRaLE%nKVsF)7W1XLa?_#BFR&FgCYIFkg|!1iwzbRqBtPJGw9|#cUbe!KQ-p#Up`>> zB(SUnsmZxG2wdFJJao>m)6W=mQxX+7k5}KPv4PS_taU8CqY8p1s3 at WBB~5_R8+ at aw z8(4UldrM<2we$F(sA|s=!3K)u?2x8jVud1c4UO{*2ZNPd6mb>pWr7%0EFv&X(~##m zfB8edz|&9vFdzTK at AH|@e1^2h**SBLt<51xlEsX+t_jwz0bRwg)qiP{AdxiAf)rTi zSd6Fa?e8)jov^vF!C(CI|1KZ+zz67bI_q+x+wIcrcJDdg3jt=!1>L+urx4`*4$Hd2 zw#tr`gG@<+%J at G&ca#79_s8rWG+;pGf*-h)^Ug<lJn=xmMj`P8s?swp1&b0I8#U*u zAgP_l`B-OGPT at SQ^rwunXI at eVi4TFGz~IP*BvmPu_cVCC1Lq}qA`r_Xs%lBl1=d=Y zWktW=U(d9j-`RP|?sS#T-_b{fH at x8uJoeaQT)%#uC%^O+zVziUa`noyG3K at HDWOfY z5P3(8z&qC_Ke5j`o=jLS7AOM!exEl!_6FYlZ~YK&eB&GG7M=Bn*WW^~Extyy{niR) zQqrDbm}wSPQimEGY;-lx9xnMGfBP!`;wvSUvt)(fEe~$+fw%N{)A=Z8J*xua(z9$V z);pTuaDWv8>pj-RT@~x&x}C-0h#O?y2k^ub at 0`HlsYTp<4jx=Ptft-R)JkHELYId) z=g^77TZ^qLdc9t>Ll;o$yNrqJ(F?qwMRe)XB`#gM#7}+TCmBt~T)TFS8`rM0ySvNv z+xr~tA5c|Qj6-d3R>Yp`*474Ze&TV?UpUL74?n`iix<hV?4CWvd-osj=9z{NHRZCb zAZ-Gv$)a?bmuwFWpZ>~(zxn^(;Kp8slr^tEx4~cd(LO))Xct1wXlbbGKxvz`@}nbQ zgQgBqiMjCsOO&a0LAE7|XhjDFjfeshK0qU5JoZ6E!gc$1&IJe(2N)3`IQ(LYlJWXB zO+#ZVhQt0nuldW0iQn!}uhq}3jZL;Uw|M6}eqjCgWm!_zv4F+L_-c$<Cp*voUDn#z zG`I&X{>48_1k<}Fx at v7m5((O15o{HTk9_`s|Kc}pFl(Tb1m64hhxvscFX*U*+lv}o z>F6a|7uf_s<01&wdc2o}RZFowXVL|alak;i&PQocXXARG3(-|N1R;1l9vk9K01}VD z2M}6dti>%Rv5#sD%SA;9Va;k^ZC`&^G4VSZjc9%Ms<VuA{#9N0tp=>8o4qRlSD>A~ z3t#wI<Xt~&3tmQ at 8=0g?tr(_)|Lb$d{H=d-n?)meAb0%y`yS-qepiQj0f&nvs+82^ zl*|ZCXjc&&iH0VqDEZk08ls+E>FioSHw2=)4ed6Vh#jFoTs`n!MoaYVl5UVRqLm88 zqlH0Jk at yOocM)06@$n(uZik)Ct+qiE?xJ~w5cr<zN}RTk?`C!u`>A*T&X+1-Vncf~ znT$RKo1Ki`{`@h2`!}w$be4y at 1%Lf#9_Ag7rtBVD$}(D9Ej`jL=wPU`ig^R0g<^LS z7%xhW7fa at ir?Qg91}fUU%hmS~v6n1cb*v~RA`nu>^>rVji*4Ph4FVr*JPAu=Xm?Cu z0#$E_G at 7bh^6<qA6rJo&{CwWEd)f2E?-Y>ll;QQgqb)>tYHf{Hg1YjY*;IV}>WKgP zpI&292Oi$Y`7eL&Jdd3>+&rkLT#Q at 7LM{~(U32@`^W1L5vxj5$W{O$e5Q3l)5 at j?x zYF~kp>jm1lr7qW7({Xd!AzMKusRCxT)~6)|8MSznj?16glGvI&QE1b{dyn-E=P#U% zzax00kl%f=e-|a;TMRPqMPc|}b4y+%?P?p`H6m0fC2+FC-}=p)>>t%UIMn>g&pg0m z=OqXGfu`N!>Lw{CzTwGhW4>^?;qrJ%*@S3Ki6>DSiK5k`$4P;ds$CE|CHp1f{$>=% zl7Nl`DGlBW>Q>VZA1%m>fcI?+Ee&*h&9Lawq?-A3hSUicE?l^a&-DCjroUVF`O1Ux z5<Nw{i)d;vL6B?sUq5!4KlnzM?IPi?{?tX@`cTU4BZrkWnKqObKK}HGPkm#-%~3 at V zkYs^EiRczv>6OS<b8+ig5~V&*9ml)k9m$m<mS8QaL>#LUlx#V?V8co|Bp?YSA|sJA zimoB(f>2wA-5!@NKJ<dh;Co70{MYRvT7ICjOVTXikH5CZM?ZCdy7V^wy>~y%d)`uT zaN^L?k*677yE*4KKRe>fhaROGirgcGA$T8|=dEQ0eTR4))<o-YO8JU*dzzTaw9R`~ z+h4L(jEq_oQM0aP#|h&4Un(WN(9jzU38KSdv7q1YbN1ZME6Y3m*YOcTAT%X5SibPw z0plv+J(n)<bMH-<O-iJKM)vq;e|(eQ{^Ej>s~Bb}CMaxsN{?u*EQAo_m*6gitMwtA zD^Wrv?jj1W6h$O=tAwnj)1aNyctR95AXN=RAsO}uR21aXV>UK6*x5dNe}Nc6Y`Ry@ zQ!Z<6A1}za&her54A9n45~!WwAARCFpZvy%PRDRwr`X`|s- at naX1J>;Jb1Sf$f-K@ zlnTgc0N2tkt>zE38VB- at JXoYz#Pw<^1X?+^jG)jxR8S;|VP|KDt<B;61LEq!+9r;? z=97}=_8jm3(H-9OXovZ<<e*CUM<0EL&t3Nn`vZ(x&;&=20xcwta7V9or9}{k0)pXg zYxJj?;}S$@PeKk+LBxx-e{Z!~BR`e(`&)4Fq*9V;M?aGkp^G9aX`S8PdO?5qwQq?) zSvl&e;+ew(Y6O4r#~wu}!FU<?yC1#IQ#U*tLr{JmrxDVlxpUFOy7p@|d0GHO>mG%O zgJ9&HEwYs|2&c5|+AWaiiV<t6Fxd((dGFS%0zpZ7NV*+K5(;D!`9#Cbtrv8&Ub7&E zQ*Lgum}2WC&t4w$_BWj44G(T{d{XlFKXJ_0cb9Ar6SNCB<8b&^dpu^fLW%V{`dU=* zlq)?g+ag-m7$kTl2tGcy7F!Z8Y|112y62*lLMj11s$LB=bTUQo2GI^aHwVMJnjf!i zOAHR@<As^dXUrxuZk{aokvBhq>1zJ*C$96kE5~dMG7{eqgn^)1<^MK|gebNoPXUN( zmtn$PE?c(Nxe}wthgM%uAXGpG(Y_~Yv|0p41(fg at qezrOBS0r0ELo=6?3DCOm&U<F zlnCJ%48Q#`Nv|0YBcV1rti@!?Xj!q42|xMxIX?C$`+V#xQ~E_89UNAAys&o_=<A<S z;N<CY#jo3D>;A5|vpeU-ojr_b(XB+bywmdyI5J}>5{;5k*2Sz!6crbGyIQcR1*ujD zE%9SZaE^YrcmIG0zU^qhVzS_5Jm#UTEtYAYU;p?%K_wVnW2I?TAAQUs+k|DcODI=* zJR%AMo>rAyl at XFy?E5xehR_}XFJc4Wj^t-_rQJLuRRSd=y;2EKtAC$BA|)Ly=$n9{ zLa3aosR<#pM+e?FAjVFJwKb#plF?|wX7>Ug`O*=$CZ4UXz=S}JZS_<Y_?S(udY!Z} zZlzHdguG*+A{O?@cr20>vYpPX`lg~S?tRQ|LqICX(}YyT^1<lXri%=4-8Kdksr2Nj zVxTRA*!@||%Qcbg+x3=TQ`xBi7R!p`lOuc(Tt6Q3nJXE+d<zgXB8^8fv at TLgffe^| z6Do11p7XLTGl-j_Ld!e#VOyw+)tMb_?I>i3nguGLq{nC#m9a!T7D>uhfLAI~8R(>j zuJlN$aCpX}5#B+TW#6`q`P#`&+q?B-GNoQjnOM&sTs~pOCHfi~UlB0zn4=KZt+BhB z^eYRLcjP at +<$_wB*`eB^{nYzhSP9tsR#G&OC6aFHkscB)(aMqNNCeYLqEtW=5W-Pt zLC-XFq>Jo!?>Rg^z&Ur%`Ri-GPMl7sEUN{#XB{T$ZM^Q`M<7fo>y&xbP`emE+v0-6 zN9|UGiOT=-6sWR2Js_<5ob5p^;?B?u;gR at LZ8eWpP$UK=0*MB#14bzlqex{uQ74fx zwki?GjHIIj33cS_*oN`Rh^^tqU1Ec;{p>W_3kL at W+}u5($O1oc at qob=c-5tp9i}d4 z>H at Q+XW2OBrKhwW>mAlxq>uBx(4G(g5*b$KQ~6e$SDlgtjYrkXcJD9*hZK$?$w;(B z1&>saXiX*ssfaq}TFS^0moZDtQ%M&`?LFSr%$Fr6Cu1&MdI%-eePoG3;hf{@wd>rx zy~p;}g1+8Ij7z$vORw1COuk9T2H0YUI^AGF!8mkT_`qb at FtdVXqgYlksh~Z9)dz<c z at icNNBB3dWfIzL8ccG1sT5D1jk3lk8k|>E50;46Vj4F{vgO(a0As116Hw$sOrj`kl z at r=oI%COge0UhHt4WbWl`}S at A<)=Q)l^a(W&3g>8K3UR1rE{d3QRr)E<uOT4n)T_W zJ<eqVe73=|IEPDmEXf$tVP*}Breaw;X0>HuEsbli2x>ISi|B at Z%x-mi^sdqgQh1Dz z7^yJElPG~v9-|amL8>KMMW&w?o-|P;iv_M6Q<<~u?jLcmzt3PW_%@`l*BFShjahGf z^AjXV#_rw$`}>E~b{}mZ$x=GqA$gvY>KUn7qQo9rf=UdT(WIusAm8GAv4PKf%!?h$ z-Ug-YFlWHb2F7(@ZUaqasj7;~Sxk^r!6F2tGN6Qx!{o%E6;bwDHKdvt8<iqav92{T z(9KfB)H1J1R9SNE#x)KO4(N7^@94X~rh2CjJn#U2?U(;!s;c7P at R-}TZ*%qPRlf1f zXSw{`6^@S&**!RjEihxq(}XNf$g>VQNy)S$krTAOijt5do?f<z&$@`Lk0`cS7H25C z8!TnPOyrCj&Aif#YKspQLm3DXBo6!%bb^!$C1u<WPGT~nl)y+&t|W<YG}VMf8Bk@# z=;Q<+0$W>K(F$K6uJoGiorZN?m!>HfA2`p&2hQ_DKln}{a$ffjj(Fy|D?Iz$l}K#9 zaf{u<0}c+4Avm<kD6)i3rxVxd(gL$Mp^zhl2q>e;5<|zN$Yg-;ZQ-(LwTu21r5<3@ z0;Hmmf+jdpFVLYzg($!)sZm0bMK&cS%_*d3vY1d;6^r?jx~_TPfs33!e||lq{8mv> zgjY-V|5d0HPyf90d|X#M{pVGDna}6kxOtnKH*WCkmCHQ+%oT3k-skxEkg}<PKvopzvVtTlNV1ev2#it~EzmmdS{e-|--NUSSqIhKB6K&Qw+(q8nPu@*0FxnnK!*zD8x#VW z=j3k5;gi2de>q2|8DIL+mk>hm-~G4$4O-ntG4X|JP|xq>+}-O2=yW<f{@Ckz{IS>b z6TBDa8ph)(`}_M`e(qVmdG#jGJ@*{9clS9yJd78tU1yit#A$?%>XFI(m_!~UWI!2- zP=+MQ&}o71ZqoG6qI(;3hJCW$21(u{Pb9sLrkrRFCrc_{;ibhkjt3t&^Bn>Bnk at Fe z)6UM_B7Tvps+3`KbCb=@O&)*z@%6<UogDGaE7$q$-}xwC{_>Y;swK^0(bkNykY9;L zWJyYr#?nKJIX*c?jc$^NuajxRLZ_&Ffaq<I_IB9V-lD;>98XcHWT7OB*_fTJH^ooZ zY7*QxiH&#(7W;e^#?xQ|R8_^T+k4#Jy~)wh5p`Md`iCB1KAmx6caM%S>xCCvM<Iz> zT{7{YRf0B>#AN6+A<;2;DUBc`o?<aa9z91TdmQLM?}?1!&3#7KMr6}2wX4}VzjNpF z-Y<!bcsbTc<dNc6C+J8<qY+O%^%PgGTw__5ch1Oi4QZP4rYGKj5Q5Qcjz<uLjEWrI z$KkKF;4Ri#=CcW5Di8`pYEVj$tCX=xQK=&H$7GLpxb>q~n1>nX!xOkqH{`m*0}otU z-&kRN0`tA~Q13f;`og#wXM<%~^3+pb<Jsq)125Rv+-6J0M5rtmQ6Q-*A$Z>Kx`)|6 zo-mz9!K7s!)vKDuB1}W at 6~ZQ%JSryd?(QN&Ly{y^NfHZqDbPMeq$3^_l8s)U$;p)C zv8C5f+1}iss;X9IP2BUdulHVFE7|FH^Ef&l@#K?FQkFH_+nZ!*8W&;PZLP8_Su7UJ z=X2(ZDa%De?JQ+kVyl|U1<E=qhJ<#L`u}h5e0tkB&N%$c%+8LM6iG=;<v13kIBD#Q z>%ytq1_q2cEov0~4n at 8}kyHA$g1|QyHGFB}q=Dt6ap5|F11Od3%5)@A`+tX<!|X0s zag-E6TEHL&;DHA&0lu7>_uub%Q(F)xuG#5}2cI+A`8Nx`CeBipmzQ~A?IcN(Fc?0E zcwQ0}5u-a#SX4cJ|A#kt<MJi)Jg3|3Hm~E#QZu;|YYG;?S9=G1w0Xy|ZceV?c}}hC z>xCvSnq?Vr95X)L#~cJ4s6CP-V?lewUW~CBMi!)LNsc8iCn(=R?TsHW=ovQC7 at MXH z20d0*Rv2{pXstN+(#u at FaGB4xxA@QE7S@;i^1^uz$6q;M!(qtCQ*^uC1``$pLF4TF z=+d at l!U3u%Q9=uHTky%<e>&Zy30xXXYn0aL1w-H)q?8SWH?sw4ZZSoGMPQQ>)9IoL z4blV8Fo{F*GNH&)@+c?e0MGN-cyY}o$32ZL3bHgt2+8}mZn3nq#BYE18<Oa31scq- z6UV at r;F_TisySHu`}-^{EioKUTN!6>CrW`rBLr-1ZE^43Js0;$Ne~1CfuY}ZK!>c` z#n;*ugDXOZ=XuW1UNMCN3J(JfMavjN6h*{wOrE4fQA7{~6h+a{J|>mQ*ciiKuK$%Y zXV0=U=n=;uQhE(FN+PFI?#hxd42hzMvMf1u>eOuRL{SYWqlAYKAF{r_j at G)tZECG3 z$_Y{G5H7OvIHN2j49ASeA%};Dq^To#I2_tk>FjwDPb at UXjN=#;$An>swWX_1*4XI^ zgZB9GW4?IsfJ>KNBTeJ#d7=q-+PTyEWT*}KgG8p!dZ1rceV|eZ#^W)&qkTNBQOaww zIa+I1?eKlqou(8 at X^iQT<t15e$#Y8-$7ETKwM8 at CTUOFGDKwsjjt~wusC?%fC9&%u z048OQ6b>YqWz{(OQdEMQmi(PcCs_dqYr<AT6PeA>!u_?CQhfUH9ePX46uCudMct__ zrK*^u4lXDwQK{#-%*<l1Pp?046s;sCjuVn3CP~t&J-<e^NPKM&9qBp%v`07&DJBI1 zMLC&3DcRWAAWhRFp+g%f+U6Jx1_Oq};p}>+HBd=P$=O%VaO?dKx%BJT5JE7HLZos% zE_t3;kinvPpXZKgy0^FI3cyNLFbPAq+hJj0fuhJO9BA5rm+HIN7=!P57~dxhLxh66 zcRt}~=gzUdzRq|&KEhaU6GZB?-tzJ?!{HEP%v3czYjI+m$S8#1`t|Gl?Y&!ExpD;| zM0MQBBlJdVEtDm;B4X9>B*&&pnw{tS2H)3i98+HZ5gbaz=@Ol;-{uzONp9c%h_bN! z`R%vyeUB{5n$V}lrfKaUPJ_XKe!o9u$+ogi^I#vicI_HBZ{Fm>s~0)(!b!5MMt!=` z2o7iF>XkLWX3{cn&8Dl5!<yyoK36cAl-MFiDg{cBgb{Z?{RgK`tn$`de?n``?(Xi9 zl$tSyPNze!*K_xC>kfR{S(|Yq){esF<|gmF^DZTD`t)g5S63UzyhE224Un%aONthw z4%`u)=NU<oQWS-ovQzCUr5w!f$&(S=J71EFL$193I&Z%DN3`)BCOgZTXKSse80}UC z<Jb{Mvus31Cw7_#V+=)6aO1`eKKS78uG?(5!s_aCEH3s at N;mU9thMenas0MPVV#b# zx})lF#ii^rMx$LuqY+99F1~u6t5>gb=BKX!Q$}m;z#NyTZ%+k!3X?YLMr=C~^^cgQ zDfjQ+=l15ueD?Xj9Du$Q1VPsgFR2_2A)F at BT8k~+v6^QYVH7!}wJ7NrH%aan7k|b1 zpP%EzPgY$;qQX|!-(Sao$5&g*V>{pGcjEVys<JHO(W6H^*!q&4ogKEfx7pp at C63dE zs9f)kz}NKqeO6CC&)V7=8yg$ExV}a==uExNR at v-_4)~fMr~ick+o4EVmQSHMYwxo@ zijSn at zEOp*ou4V_{>Nwh%#HXRyP_SAe0$R1+gF=K{>^94jrff1<nQw;=SG~bX36<a m at c-GFb0a>(s~tl8uh!QUw3PPevRJtQ0000<MNUMnLSTa4edT)q diff --git a/src/public/stylesheets/components.css b/src/public/stylesheets/components.css index 540c413..41ad3d0 100644 --- a/src/public/stylesheets/components.css +++ b/src/public/stylesheets/components.css @@ -127,19 +127,38 @@ } /*** the no grid items block ***/ -.no-grid-items{ +.no-grid-items { padding: 45px; margin: 50px; height: 150px; border: 1px solid #c9e7f7; vertical-align: middle; } -.no-grid-items-text { + +.no-grid-items img{ + float:left; +} + +.no-grid-items-text{ float: left; - padding-top: 35px; padding-left: 20px; } +.no-grid-items-text h2{ + margin: 0.8em 0 0; + font-family: Arial, sans-serif; +} + +.no-grid-items-text p{ + color:#999999; +} + +.no-grid-items-button{ + margin: 2.5em 0 0 0; +} + + + /*************************** * Graphing Style **************************/ -- 1.6.0.6
Jason Guiditta
2009-May-22 01:27 UTC
[Ovirt-devel] [PATCH server] Updated look and feel for empty grid views
On Thu, 2009-05-21 at 10:38 -0400, Jeremy Perry wrote:> When empty grids are shown (ex: no VMs in this pool) a specific graphic, message and improved action button are shown. For Task views, the user will see the current filter and an explanation that no tasks match that filter. > > Signed-off-by: Jeremy Perry <jeremy.perry at redhat.com> > --- > src/app/views/hardware/show_hosts.rhtml | 11 ++++------- > src/app/views/hardware/show_storage.rhtml | 15 ++++++--------- > src/app/views/hardware/show_vms.rhtml | 17 +++++++---------- > src/app/views/network/list.html.erb | 9 ++++----- > src/app/views/resources/show_vms.rhtml | 25 +++++++++++-------------- > src/app/views/search/results.rhtml | 4 ++-- > src/app/views/smart_pools/show_hosts.rhtml | 9 ++++----- > src/app/views/smart_pools/show_pools.rhtml | 9 ++++----- > src/app/views/smart_pools/show_storage.rhtml | 9 ++++----- > src/app/views/smart_pools/show_vms.rhtml | 9 ++++----- > src/app/views/task/_show.rhtml | 19 +++++++++++-------- > src/app/views/user/_show.rhtml | 7 ++++--- > src/public/images/no-grid-items.png | Bin 15004 -> 0 bytes > src/public/stylesheets/components.css | 25 ++++++++++++++++++++++--- > 14 files changed, 87 insertions(+), 81 deletions(-) > delete mode 100644 src/public/images/no-grid-items.pngACK and pushed, looks much nicer. Only minor nit is standard html img tags replaced rails image_tag helpers, but not sure I feel that stringly one way or the other. We can always adjust later. -j
Possibly Parallel Threads
- [PATCH server] final cleanup for service layer refactoring.
- [PATCH server] Add of a button destroy for disabled hosts.
- [PATCH] Adding the VM Pool migration for vms
- [PATCH 1/3] Adding the VM Pool migration for vms
- [PATCH server] consolidated network & routing info ui's