[Ovirt-devel] [PATCH] Updated tree nav layout to move smart pools above the main pools.

Jeremy Perry jeremy.perry at redhat.com
Mon Jan 19 21:10:05 UTC 2009


Hi Scott - I'd like suggest the following 3 style tweaks to the nav  
for the sake of alignment.  This will make the non-tree nodes  
(Dashboard and Networks) have the same spacing and alignment as the  
tree parts.

The result is shown in the attached image



Complete new styles as follows - changes in red if you view this as  
html. A couple of declarations were removed.


/*  ----- tree.css (line 5) pushes tree down 1 px--------  */

.nav-tree {
	bottom:140px;
	overflow:auto;
	position:absolute;
	top:51px;
	width:222px;
}

/*  ----- tree.css (line 92) adds top and bottom padding, removes  
"top" position attribute --------  */

.nav-dashboard {
	background-image:url(../../images/icon_dashboard.png);
	background-position:left center;
	background-repeat:no-repeat;
	padding:4px 0 4px 28px;
	position:absolute;
}


/*  ----- tree.css (line 102)adds top and bottom padding, pushes top  
down 3 px --------  */

.nav-networks {
	background-image:url(../../images/icon_networks.png);
	background-position:left center;
	background-repeat:no-repeat;
	padding:4px 0 4px 28px;
	position:absolute;
	top:28px;
}










On Jan 19, 2009, at 3:09 PM, Scott Seago wrote:

> Dashboard and networks have their own links in the nav.
> Also updating reworked nav icons.
>
> Signed-off-by: Scott Seago <sseago at redhat.com>
> ---
> src/app/controllers/network_controller.rb    |   13 +++++-
> src/app/controllers/tree_controller.rb       |   53 +++++++++++++++ 
> +---------
> src/app/models/pool.rb                       |   12 +++++-
> src/app/views/layouts/_navigation_tabs.rhtml |    9 ++++
> src/app/views/layouts/_tree.rhtml            |   23 +++++++++--
> src/public/images/icon_add_hardwarepool.png  |  Bin 1223 -> 1133 bytes
> src/public/images/icon_add_smartpool.png     |  Bin 1341 -> 948 bytes
> src/public/images/icon_add_vmpool.png        |  Bin 838 -> 741 bytes
> src/public/images/icon_dashboard.gif         |  Bin 14152 -> 0 bytes
> src/public/images/icon_dashboard.png         |  Bin 0 -> 4457 bytes
> src/public/images/icon_hdwarepool.png        |  Bin 1179 -> 4509 bytes
> src/public/images/icon_networks.png          |  Bin 0 -> 4223 bytes
> src/public/images/icon_smartpool.png         |  Bin 641 -> 4233 bytes
> src/public/images/icon_smartpools.png        |  Bin 0 -> 4117 bytes
> src/public/images/icon_smartpools_dir.png    |  Bin 0 -> 4228 bytes
> src/public/javascripts/ovirt.tree.js         |   43 +++++ 
> +--------------
> src/public/stylesheets/ovirt-tree/tree.css   |   27 +++++++++++--
> 17 files changed, 119 insertions(+), 61 deletions(-)
> delete mode 100644 src/public/images/icon_dashboard.gif
> create mode 100644 src/public/images/icon_dashboard.png
> create mode 100644 src/public/images/icon_networks.png
> create mode 100644 src/public/images/icon_smartpools.png
> create mode 100644 src/public/images/icon_smartpools_dir.png
>
> diff --git a/src/app/controllers/network_controller.rb b/src/app/ 
> controllers/network_controller.rb
> index 725e60d..e4faf7b 100644
> --- a/src/app/controllers/network_controller.rb
> +++ b/src/app/controllers/network_controller.rb
> @@ -34,8 +34,17 @@ class NetworkController < ApplicationController
>    end
>
>    def list
> -      @networks = Network.find(:all)
> -      network_permissions
> +     @networks = Network.find(:all)
> +     network_permissions
> +     respond_to do |format|
> +       format.html {
> +         render :layout => 'tabs-and-content' if params[:ajax]
> +         render :layout => 'help-and-content' if params[:nolayout]
> +       }
> +       format.xml {
> +         render :xml => @pool.to_xml(XML_OPTS)
> +       }
> +     end
>    end
>
>    def networks_json
> diff --git a/src/app/controllers/tree_controller.rb b/src/app/ 
> controllers/tree_controller.rb
> index 07d46f7..e2065ca 100644
> --- a/src/app/controllers/tree_controller.rb
> +++ b/src/app/controllers/tree_controller.rb
> @@ -29,12 +29,19 @@ class TreeController < ApplicationController
>         @clientHash[tempItem[0]] = itemHash
>       }
>     end
> -    @serverHash = {:pools =>  
> build_json(HardwarePool.get_default_pool.full_set_nested(:method  
> => :json_hash_element,
> -                       :privilege => Permission::PRIV_VIEW, :user  
> => get_login_user))
> -                  }
> -    @serverHash[:smart_pools] =  
> adjust_smart_pool_list 
> (build_json(DirectoryPool.get_smart_root.full_set_nested(:method  
> => :json_hash_element,
> -         :privilege => Permission::PRIV_VIEW, :user =>  
> get_login_user,
> -         :smart_pool_set => true)))
> +    pools = build_json(
> +                HardwarePool.get_default_pool.full_set_nested(
> +                    :method => :json_hash_element,
> +                    :privilege => Permission::PRIV_VIEW,
> +                    :user => get_login_user))
> +    smart_pools = adjust_smart_pool_list(
> +                      build_json(
> +                           
> DirectoryPool.get_smart_root.full_set_nested(
> +                              :method => :json_hash_element,
> +                              :privilege => Permission::PRIV_VIEW,
> +                              :user => get_login_user,
> +                              :smart_pool_set => true)))
> +    @serverHash = {:pools => smart_pools + pools }
>     @ids.each { |item|
>       if @clientHash.has_key?(item.to_s)
>         @clientHash.delete(item.to_s)
> @@ -69,19 +76,27 @@ class TreeController < ApplicationController
>   end
>
>   def adjust_smart_pool_list(list)
> -    mySmartPools = Array.new
> -    otherSmartPools = Array.new
> -    list.each {|listItem|
> -      if (listItem[:name] == get_login_user)
> -        if listItem.has_key?(:children)
> -          listItem[:children].each {|item|
> -            mySmartPools.push(item)
> -          }
> +    # list should have a single element. If it doesn't, don't  
> transform anything here
> +    if list.size == 1
> +      smart_root = list[0]
> +      smart_root[:name] = "Smart Pools"
> +      smart_root[:type] = "SmartPoolRoot"
> +      mySmartPools = Array.new
> +      otherSmartPools = Array.new
> +      smart_root[:children].each {|listItem|
> +        if (listItem[:name] == get_login_user)
> +          if listItem.has_key?(:children)
> +            listItem[:children].each {|item|
> +              item[:parent_id] = smart_root[:id]
> +              mySmartPools.push(item)
> +            }
> +          end
> +        else
> +          otherSmartPools.push(listItem)
>         end
> -      else
> -        otherSmartPools.push(listItem)
> -      end
> -    }
> -    mySmartPools + otherSmartPools
> +      }
> +      smart_root[:children] = mySmartPools + otherSmartPools
> +    end
> +    list
>   end
> end
> diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb
> index 614325a..27cc7ab 100644
> --- a/src/app/models/pool.rb
> +++ b/src/app/models/pool.rb
> @@ -243,7 +243,9 @@ class Pool < ActiveRecord::Base
>     current_id = opts.delete(:current_id)
>     opts.delete(:order)
>     subtree_list = full_set(opts)
> -    subtree_list -= [self] if smart_pool_set
> +    if (smart_pool_set and !subtree_list.include?(self))
> +      subtree_list.unshift(self)
> +    end
>     subtree_list = Pool.send(type, subtree_list) if type
>     return_tree_list = []
>     ref_hash = {}
> @@ -260,7 +262,13 @@ class Pool < ActiveRecord::Base
>           pool_parent = pool.parent
>           parent_element = pool_parent.send(method)
>           ref_hash[pool_parent.id] = parent_element
> -          return_tree_list << parent_element
> +          smart_root = ref_hash[pool_parent.parent_id]
> +          if smart_root
> +            smart_root[:children] ||= []
> +            smart_root[:children] << parent_element
> +          else
> +            return_tree_list << parent_element
> +          end
>           parent_element[:children] ||= []
>           parent_element[:children] << new_element
>         else
> diff --git a/src/app/views/layouts/_navigation_tabs.rhtml b/src/app/ 
> views/layouts/_navigation_tabs.rhtml
> index 8d9e36a..70af098 100644
> --- a/src/app/views/layouts/_navigation_tabs.rhtml
> +++ b/src/app/views/layouts/_navigation_tabs.rhtml
> @@ -60,4 +60,13 @@
>   <ul id="dashboard_nav_tabs" class="ui-tabs-nav">
>     <li id="nav_summary" class="ui-tabs-selected"><%= link_to  
> "Tasks", {:action => 'index', :nolayout => :true}, :title =>  
> "content area" %></li>
>   </ul>
> +<% elsif controller.controller_name == "network"  %>
> +  <script>
> +    $(document).ready(function(){
> +      $tabs = $("#network_nav_tabs").tabs();
> +    });
> +  </script>
> +  <ul id="network_nav_tabs" class="ui-tabs-nav">
> +    <li id="nav_summary" class="ui-tabs-selected"><%= link_to  
> "Networks", {:action => 'list', :nolayout => :true}, :title =>  
> "content area" %></li>
> +  </ul>
> <% end %>
> \ No newline at end of file
> diff --git a/src/app/views/layouts/_tree.rhtml b/src/app/views/ 
> layouts/_tree.rhtml
> index 6129f0e..fa3effc 100644
> --- a/src/app/views/layouts/_tree.rhtml
> +++ b/src/app/views/layouts/_tree.rhtml
> @@ -28,6 +28,20 @@
>               e.preventDefault();
>           }
>       })
> +      $('div.nav-networks a').bind('click', function(e){
> +          if(this === e.target){
> +              var myURL = $(this).attr('href');
> +              $('.current').removeClass('current');
> +              $(this).parent().addClass('current');
> +              $.ajax({
> +                url: this.href,
> +                dataType: 'html',
> +                success: handleTabsAndContent,
> +                error: function(xhr) {$.jGrowl(xhr.status + ' ' +  
> xhr.statusText);}
> +              });
> +              e.preventDefault();
> +          }
> +      })
>       $('#nav_tree_form ul.ovirt-tree li').livequery(
>         function(){
>           $(this)
> @@ -36,6 +50,7 @@
>             $('#nav_tree_form ul.ovirt-tree li  
> div').removeClass('current');
>             var thisHref = (urlObj[$(this).attr('class')] !=null) ?  
> urlObj[$(this).attr('class')] + '/' + this.id :null;
>             $('div.nav-dashboard').removeClass('current');
> +            $('div.nav-networks').removeClass('current');
>             $(this).toggleClass('current');
>             currentNode = this.id;
>             if ($tabs != null) {
> @@ -87,14 +102,14 @@
> <div class="nav-dashboard <%= selected %>">
>   <%= link_to "Dashboard", dashboard_url, { :id => "dashboard"} %>
> </div>
> +<% network_selected = "current" if controller.controller_name ==  
> "network" %>
> +<div class="nav-networks <%= network_selected %>">
> +  <%= link_to "Networks", {:controller => "network", :action =>  
> "list", :ajax => true}, { :id => "networks"} %>
> +</div>
> <form id="nav_tree_form">
>   <div class="nav-tree">
>     <ul id="nav_tree" class="ovirt-tree"></ul>
>   </div>
> -  <div class="nav-smart-pool">
> -    <span class="nav-smart-pool-header">Smart Pools</span> <!-- 
> FIXME: replace with i18n text -->
> -    <ul id="smart_nav_tree" class="ovirt-tree"></ul>
> -  </div>
> </form>
>
> <!-- Template content -->
> diff --git a/src/public/images/icon_add_hardwarepool.png b/src/ 
> public/images/icon_add_hardwarepool.png
> index 3e7431c9602cc829b712d12cccec89e87b90a09f.. 
> 6eae0d566f10503c7a6a7f980a9d2b6d0e6353d0 100644
> GIT binary patch
> delta 1112
> zcmV-e1gHDQ3GE1wB!3xnMObuGZ)S9NVRB^vL1b at YWgtmyVP|DhWnpA_ami&o000CJ
> zNkl<Zc-rijUuauZ9LK*|lQd1cc3bnOu78%bBD1y%bJKwj>tL3xL<eOs6sd?$g2M-K
> zRrVx4$lL_`Buu90i!kQISU2m6Yhk*@bi>XKK_ at OvY7=w2<bSrgH_82z_&cX<yiL=l
> zjSmIcfx|iX+;j5z{l52i&hNyO%jK|MWdqi++=s7AF&iIDCR4tjD~QC$p6NqMoaTL7
> z?G_}3$O-CR{L?=?x*AZiz&05N3*qlxxW)T#^>pCS+aIH9V;!>DETni0v#}|NQ$g0g
> zK?a;E2X0<zL4R7+^L at 9=2~E#JBe=!cfQ|KTIJWOV_~x~f^g7;Fr~X0hdsL%T-yi;N
> zbflC)rUHu=J at lWu!P^sucP?7=!oZhYfh^5VM8cT7>KkjY>$_fh at fA!@$KV at 0$EFP$
> zjVLKQoAcV|ffcPCcy2d`vvoSrGr|Ot*S`V-Z*ObO&wm^H$-l^mOG6_gC1p<;q+YI6
> zP;9VS>b-DLFe|&Bc#>B#!b?VYnWH7)r~CHg`+aAA;O%EGKZU|wp$H+&1kM))8%u9*
> z?}7p)x0=Zq?Z$v(QroR&C|VZcjEJQF3-lj5j_R6C%Ys{)8ZkWl{p$Al(rC}-`@-Y|
> zW};ze8Gjk(N;|4)%;R~Gzmp{iQYy6sJT!C(x~`Q6_Z{uZ_n+_Sf~x6ckOooC;PUAJ
> zg2B6RI-LBy)8XK4Ob|Hu!Z#ObYiiK7Rl<#t- at 4~%96kOHLV}2 at N((B at 75rPrlPNyN
> zir;?~v&mU>Jkp8Ijz{wz`+Q$RBdDgTyq4v8ZGV*&I~pCh6S;?9gHxCe{*FviM1{2y
> zcJ8eUHk%#e<2P{Y_AfYipa%&tjx>D&m4P*t+A?L2iV{4oO?bTZ0d%yupzeOyAp14Q
> zDG8Gl3vO2f%oZy`6CpIWG$X~}ngUf(xe?{SWvkh2AG`C{BH0sC8WXVupU~dkiKgal
> z7=QoyIwT6Z#>TC43uTGRt at 5gr1;0Y)cz2=fiZp`_<Rz0`NoP<~U4yQ!{fH;x(3Ck)
> zN|xur<$Hei@{fV;BM0^_E4xCn>Nz^&DdE)B*1=-2 at bn-PTqBQF_RW<tzB#4IGt_MU
> zC>lPwwS6bHx$9ADw_!$3<8DOYbC_3If`1>H@?x;*Tb^ueHtU?{+ML((TkZCm18zP~
> z2co}?9}IaO>K7v+z8$MKJHd7}+s6!kcFTDvnascNbc#p1Mk>i_lKs at HYlhDoz-}s|
> z)V^sP-`~AA$I at qgy%Ra|Fh}5pb0SS}oerc-mY;h2mdow`<qo%x62{;spMD5I_)(j~
> z7J`eZPzqcupBKGStyD+>b_Tyr)%&dXFk0I at _+a4F67Xs+6KjSSF~UvtSfR&jg5Uqs
> e at V|xsBftQJOI3E8R*<>?0000<MNUMnLSTYO?=DOL
>
> delta 1203
> zcmV;k1Wfzw2*(MKB!2{RLP=Bz2nYy#2xN!=000SaNLh0L01EH`01EH{Laa2H0000L
> zbVXQnLvm$dbZKvHAXI5>WdJlUF*q+UI2$jIGynhq9CSrkbW?9;ba!ELWdK2BZ(?O2
> zMrm?ocW-iQb09-gGnm#!0{{R7AW1|)R7i>Kmt9O8RTze!X at 7SYSSYk*7qI-4Qe$cb
> zO)C9KynrT1T7oudnix&frtzwYjTgpN(<|eJsjZ1znbcIHHzp01xMC}IV at pzPx6nqk
> zjfvJ!SP*cR!ou#%?wm7cya2b$vLLK6T<CZ8<(xC~eD6Eo%sHdkw#`b#sud&u4_~Qp
> zqz`DCmdx$6Zhw60xkDI{aR71)*Aoqoo&qlQ2mIYjfu%RMHg6ye{?5fa0KC~!%f7ch
> zB5zF*N-1I!A*MqkL`DXf4voCtAMl at 9E_|Ny^oR>9nU|J$k(NR#h0|Ncn&MJCo3=3Y
> z<Bik6#O5OL8}KeL2E6D0ru*t*_nxO5m@{yq{Wbun4u5Q$v*=)32TCcF4U?lo3}5&4
> zmbtC^BZrSNJ|4o?*$&W|TEySl4%n}L*0Wf_w7s~UgKZtywvDB165&Cjx4z)W;iGKY
> zT$5badowVnh|679ucqE7qwPkD)eFUHO~V4jgQ1LIfchOfso$}a-kX6|UuSzOpry`d
> zgr7aMD}R|EI`<s_pT7LeoHd%JVTOZD^<2mZPL2Kh_y6U<oXGU5C9AV-+fHq`gKZtS
> zT at FmCh)hL at 20rJ+@ss2itX&XXRZ))L|82&(C3L$==HcN%rpAVl2^~j{n|z?U`cVM%
> zSd5rq%ma6IUB<Fxc5vUZ#$^6dOCv&B#DyfHCx5tdwuga%`*=NG0K6U#0HJW0s)}+h
> zesu|HNi4ZUcxw08?0S}CC*LL*j*yq*B*(EDP1Bf&8U(`;00M#QOh>1weWH%K+9#8W
> zeZDV|QX+*w3Xz at i!aNsS%01j0eZbEHBa9FHN+KFzwJQfV;PsS{o9m{p?>2Yt{>0ur
> zEq_c#CWspbLI|W32$7}jW04ruC2M)Q<`HVEN)X#0PqF<5x)Eb|c#zVPG8|49!NDMv
> zRh1ZqfsiJ`6o at R9>n?}G-Fxr%Ikr#6;tYl+0ob~=j*7~S^!;#)SS&_)`G%Pb^%zpj
> zfQ2x#f?tzLHK*Hd#->>1bm0cfc!Glb0)HACo0yoKK$<fkL)T})*(*PP<@=uI7xpwP
> zXuD|&EL)*0MNwf9PNx&F(RCduOoS8&GmB^5AMl?8)_piObb7<qZEP$prqG?slpg2)
> zXczz?1j<(I8)>Dp;%k&r<mS3&l*<{_v#;9S<tk@(pY9p^rEhPr`mqy{(IB>MlYhU?
> ziwBUFMA?e->n~s?5)a{V11SYkNOTbecxBn}*#f$O?*4%Pjnwg`<_3FwJVbG^7h4Ey
> zrIO!?c-+8}771kl?9Q~e|I;(vZeM46=f|IXKsfvdmb8-1WhN4ff+6#M{%}&$7Mx3s
> zrsjr5;5DH2`PKu}Y_8`0wlnj<ODs7|EE}Goh*IEqy5eQQ|Lyqi{xqy8{7-{$Rd%;2
> RW=8-3002ovPDHLkV1jQ&K`j6P
>
> diff --git a/src/public/images/icon_add_smartpool.png b/src/public/ 
> images/icon_add_smartpool.png
> index  
> d7cb7316596b1eafbcad54890971f42737d45a62 
> ..6bb07d7cca9839042a779bf8a7203b16bc6cb830 100644
> GIT binary patch
> delta 934
> zcmV;X16lmN3bY519De{Gt`<1}000?uMObuGZ)S9NVRB^vL1b at YWgtmyVP|DhWnpA_
> zami&o000A4Nkl<Zc-rh&Ye>^k6#w1*_comx!KP6`nn7X at 3Y?V?*_VQ(h$4z0dO!r4
> zU!o5cmA$_8fW8C~1r-q#D%FQnFer)?B*e%E77d-R`P}~7{(q0#`EO0;YHQibFCIAD
> zd(S=G-}#+;&i!wUbB@^(9cEGHz-J$vF*c<nJX$06&gPnsZ~cXwY|_$y#{9~Qwva}o
> zqq!E6w=V>&H>V9}=Hxg1O#lhO{gM*Wh`1Wgz|;0no1R>>W-FGI?9=AeGX>X2FL+GT
> zM*~Oi5nGpi#eX)KG8St~XG*{|seJSSiEKCau7hb_=0eN-BCtR=>;+B(1#__MZ13H_
> zPP<5K6R9SP*Or5iHbNa~MDD6`%~UZH<}4=D(-sHrya|o>53QeG3+_f3MjwESJz&dj
> zqv_fvsH$Qj_Q4saomz>#zPS;Bk*?EpP<8a3Q)+!Qn19l;?LzU9=a73^C{z_Xu>-k<
> zoAB*py`Ox<nDez@?$KE%lDcyOE=tR?SBDEuowAo6dukO-HZUEB;<^V_lENE(HOMR3
> zgS;*0nBp6-MxUk1qP6|y#YzgQfdZ&Yn0D<Ed2z}DgC#S>d|FWNw-XN!cyK6A4%5NR
> zj?h$CP=5xVQG(W|RTy)3--ySY#rvdEv{z|3oWExCe8(~;RCgV?w<~c0nHGTAR$_EQ
> zkM_5<P-N)|0q;(>;9>(<PQzoH&03Vd)Bz)#0F?1xI}7um=(6zT>j3%(#<VCe|E~R5
> zGCw9Lh$f>!C at n0o!-QcfH038B)!;zeXE(fJuz!U>*UspXi6c8?MI9CtiCRjE?Z_WZ
> z>IDniZ>9Q^T9IMVgUMcSNhVdmWrC7*;kl;4No1u7n(xt6gYUALiCj=5Ku%dVVA7|D
> zXM(^LV>pnYA2wr%`KnZd7ubv{fyht^*fpZyQ(pjG1Hs<zK^d|vP!Jquodlx*Gu23O
> zN`JuVp#4?@*BjITL_bG+zl^?d-bx(vsIYQ9KK`!FtzeAaKQ09#>?>2n{CJj8LH{K1
> z$s<6N*)sxNP1>z((&(gz at KWc9ZpbyRL%Lqp%o|b#UNtBRaC!ADDn}WC?TmFG+iC4;
> z`bD9Z{4~?`q%KqI^WW*K^N!+V{QlIJ%^&?^nFIfy@?C%d0K%5{zV?bS5C8xG07*qo
> IM6N<$f}H=uWB>pF
>
> delta 1330
> zcmV-21<m at j2fYfA9Df05sV1)g0004VQb$4nuFf3k00009a7bBm000W`000W`0Ya=a
> zm;e9-;z>k7R7l6|m3>T=Wf;bP&wCCB5e^>-Y9N`3m1rR-3Uj(tR<2f=)243vM`)|H
> za*fTk<x*QZbDGmKoMnErWwYTbW~>|texxLFVj>`#i5`@XBY$w<aK7L7?hk|@QFOLy
> z&Fin{eeUPFuIGNA`?(+J4=cVoEq2>x0Wbs1Je}!`e{g(M at wQp<036Moz3Z2+-<aJm
> z9l3!%lg6=BasDv&Ptg;VL-E*;a7R$xgZa57vMJ at HB*xoR#W4eq*F)yg{GK?48&Y at 4
> z{sb}h#Y_46D1YG}MtAb|@=a2<Kc}*HOanN+Z8`u6v1P<13{5WI{Y=j$%>cvG-yY{I
> z7<<-g4I@$2sM at -Qz6wcG=2l&-XhhkYQT0t&qQ~s+vjCvQ<)ciVn^xLB5x at Hy|032M
> zJR>3^wPoKgF4>qYhgQe^UUH;H4S3ihBCqZ}*(dn%^M7q9z?Qd>jAe!DwgLc$R>w-#
> zs^%`i>Uk(%Gok=X9AZhNqcteyKjy2ME9+Fh0suvuGd~M+S1-+&I2_Rhr4*PHC(Ev3
> z8acmo)Jr?E;=+~dreo-ar}>;Y&Jx5?b6HN5U+4I#2AZob$xw?<Q*~Z-Z}NTootJUl
> z!7~DIwtqNRep)$Lia$!9e5>{5-b8>lx4&mRa{OrdId at rUv%@tkE;gd+mQ}ZG&xt;5
> zXUCEZpoa4WA8_?TebG~I70>!Bxu;+jJ6Et{Nd|3hKd)=sp#1<`$Y#vcxmaToXWI6@
> zAg6cEl77jqt7QP}e{DLcQ$mqTx!}?;>OLiHvVVmMGbUnE{{C}*GP`u#;q}RRR?F4L
> zCro-6P1CxPl1_BFj;%BgmuYmzEpHmY;SJ*?^`TB8t)X2(rP0>z=1lz%MlZ<EN=Qg3
> zyveyI4<m^3ctHFJ3Z*nOw+D at AdK3F4<7p(=VQ{{|OT9ma1ha!7krC(}b=>lA_aG{X
> z at _!~BU)tJ5N8fL>KK8Dzer*gAFooa0MgRL2(Hq_KwWq$7!nLC$e>rk6$5ho_>?K>K
> zsk_lv1DUV-t^$BHFQ%ZBQbix8EDQ;c{K^_ at C1g-2L7z^0b9=z&axTbv$9CYJ%tb_&
> z?>lu{(w2qkxEc=;F)R~T<4I2M$rkG)bAQyt`CHXJoA>@+vhz3qd$XtZUFTSXq6IM?
> zz#UAXs^Ams<%O*#4I2tW3qi9)#xo>&9+O_)I_tKbyk|E`sr(!yJbD;2RyNS)4)k(#
> zgSQfzzC?M?gYH6U;S3(sO!~rgq`&e+4DR1%8i96v?RHx0%BVfI at 9xgrc3_3*-hWm+
> zSC0`LZDQDnXo-#06h=E@=%7MTXrMGe5OgqnC}jdu6b^?$!<7~s4NYD{LO;)X&;I5e
> zo7>M<SWO`j`sIQg-EpPp3yYaWF_C5-O^U at D6^7_WSF684R|uFiI-DMAFF0svaY;nd
> z95pm;X__fC(lcsoM$H}lc7PFMQh$0LjicM2^($Ws;;uzpouC4s3n+Ety-*+;Xa;(R
> z2MGv~56w^zvOQ_S)3)0coOz&%>};$eO!E_A31abj!0-|9>)4$E+yR5ZAsUHM7D6l<
> zgM0=NrXWq%EAdL`pn<dpG&h2sVA4ShE;jjb1~i<yMJ$68I+Ugbb+5~Ot}E4PjWqjI
> ol*J&#q#^!Jf&tI{F8$xcAIv&N^Zci at 82|tP07*qoM6N<$g4mLJod5s;
>
> diff --git a/src/public/images/icon_add_vmpool.png b/src/public/ 
> images/icon_add_vmpool.png
> index  
> 6afffd1fb1a02dc763f9a9f1e6fff3c1586f89a2 
> ..b0b73b08c3c794d66da088abcbab978c434f15e2 100644
> GIT binary patch
> delta 717
> zcmV;;0y6!^2IU2iB!3xnMObuGZ)S9NVRB^vL1b at YWgtmyVP|DhWnpA_ami&o0007q
> zNkl<Zc-rh%O=uHA6#i!avPnHy&_e0KYmfFI2)&BeCPEKhiqcZ>(h6P_sckKyM|%xO
> zp%=jx6A?TW4+T#i;-LpY1gmJIT4HQW+Wf6=X5(bD-Ry2cA%7rwFgr85GyA>o&G%-8
> zS(b%fnSvf#AG{}~IXjFo*|uCtq;Kq`#p%oZ;j0}{yqr66=59Nz)MPvTI4)?vSWSq2
> z{ARi%PrRb0xdvG6z$fNYEfdp7Se-iHHupMO^H1OUPFTHq0oc6`oLiGo2r}+uAaiad
> z2U}kw2i(zUXMb}Wj3cu^@Z{7**`9jxM%3%m<1U%1cKv0>AGKB_HXlQ$8gs6{bItMf
> z27hb&uV_skGMdc6tqv4FQ6XTacdPcgV`RIZIM<TUs|6sR0V=;5Q8K~_&To^!{w+`3
> zXD at Tu+Ww7PzP(n|`XOqHxxDc_wd9v-vdxt|ac#6oOn)^bIZ2q>TiXXnu5AX2Zt_ZE
> zma3)DVTWcMkF3jb`KqW#?(E3uMRXO>sD^<UFFIb&jPOsx9j!T3-6KO9l(~`%?~hH<
> zH5HKvftxDKs4hxZf|H>ZDrb!d(4+jF)cBcZ*IJz8z^0+VG&#7An5mH?TDRa at lc~Th
> z14p}5lYgSkfyST%d#Iwo5WpH at oH5k~0skqKy9EEYnTXV-)Uo!69`BrT46?x^1RNzW
> z4k`+*d8t at IG}dj{g>gaclOrY1oE;pr9sIC38uX)Vhu}wC&-RW5 at 6F=U<<pp*o<uHJ
> z_04lAW-{nhYuRw-#u57J@@*)N+Y8GWI(tUG+eZ8G6OUFFv6=Ed)qKG_xhTBLWUL1(
> z_p`2i&fZ<PH++6<jD<PR`&Z{a`2P$3SAYQkWJuj8Djl^-00000NkvXXu0mjfiuGJ=
>
> delta 815
> zcmV+~1JL~C1;z%DB!2{RLP=Bz2nYy#2xN!=000SaNLh0L01EH`01EH{Laa2H0000L
> zbVXQnLvm$dbZKvHAXI5>WdJlUF*q+UI2$jIGynhq9CSrkbW?9;ba!ELWdK2BZ(?O2
> zMrm?ocW-iQb09-gGnm#!0{{R5pGibPR7i>KmQP3&Q5?rVZ-3^^%$v1CK?&latH(S9
> zf!FA&8+hm<i6V4Sp-T~FCSk|C3L$g}QgS8mBprlK9qiyC2qB9yELqKMcXj`~4x{7j
> z%<Qgff(QG;GLJXE_xt>Qzj?p6PiU<<Eg7dq{trKsa2cKuLil4HY6T&LILYp)oB71T
> z3KI(}vBCYTB7d2Ol`oY1aq3x at 2AH2r0?;*_YABL$)gth4se|y&p}7j%6iMA^071ol
> zLp}8Jea%Iax30okFI=AXt58o}!>I@>w(Pk;wl%fZ8>vP$4bBJ+R8%PzKGk#0ANM?e
> z2f&NIj!GlL^qyb)Yg0>E$gRe{ifc7LI<2)1esjLv0e`d?zabCv at T(~Txs at UN8M3P&
> ztfRrh$`{H3>v$&tx)(q(1KZ0`*z%?fJ9brM6Vy6n*t{Fdef1{I;?i%@+tv4qS<X{3
> z)Y#1Hxkr935nln`{A7~O+ii!5nYN$Y0T=;`OFK+W&sGH=sQYGe0H_X+NZN;>DoSq`
> z0cgGNoqvQv2pr4AbtO#+NmIh&ZGS63ONHyYaML2xA^0hmvXJ>0Sz<{O$1!o0iE=HJ
> zd&~{zml_R1>{md;-Vexs0a>aD&XOj|Hc-mMRTc>)ah!O}5#SO(QvkgOyKA5`pqloL
> zc05zVz_tyPk|bOUr6jf^`IFf at Cj8(q0Vr>Q-hTiK;9S7SgFCi?>qwN^|GAP}wt$;B
> zZrK4S0-IpuVte+&1uwu)qiyvZtv3kY1=2tnh(9c at -#E`eUpMJ=v8ordoCiZq1?Ots
> zOoR{&cGPOJN_}tc;@-#@&6h6va~nT@@pOEY*}3SyT3z^2rM1={mX~=l{&=0reqMht
> t at +h$7N_#tmdiF%`WR2?VUY*Y_{4dRk-6#cp%B27R002ovPDHLkV1gShas~hZ
>
> diff --git a/src/public/images/icon_dashboard.gif b/src/public/ 
> images/icon_dashboard.gif
> deleted file mode 100644
> index  
> 5ed7483685461cb65f00718a83b207af6187b545 
> ..0000000000000000000000000000000000000000
> GIT binary patch
> literal 0
> HcmV?d00001
>
> literal 14152
> zcmeI3X;>3S9EVq{6|q7vZPki(iL{E6Y%Y#$2{&j}yr7Clku}*sB$r7r0kuW2#e-V#
> z1QkJz7V!!dkBW+kC<s(7wTQJ85EZQj at hFE}-3WsEp?&6q-)5eDvYXlWKeO}B at 9RwZ
> zJkVW0j6g;r%?Q$EX`Rh&olje-tK)HVM?+IbeN)H7XYKc&wBLKue)~~dRYO~4eOtv}
> zZRHQ1U%S^@QrlW|yX9ha%Y{E%OqDIi${LMV8;n=#5C8n|VDbG!#ShX-yHblgvkLDX
> zD7?G%a{HE|w#`M)_Z8G`ywtMk(sP5kCZ(V$rJy<4+?1JL`JL%m)4`Oa{3l8IPt)^$
> zN4k(Tc at 1f&ZX}-mJMnaVd~RL*@%wSPbt{auD~+`)j@({;q~_^nP0YcnW!aUw?8 at i^
> zx1zIdY4%ktHQZ3`Em!QhF3Tv>r<<3gUyIy%RhxS5 at mF)m)DrQwV$qhOMH?@Mr4-Cd
> zI*-Sm#A8kf^v97j#7&p$wk+3m*)f;sV|;B+QaH&|8 at Z~(Y~^9L;t-}d#FA%M2GW^P
> z2W|z at oujgxmt>U(&?^Gy*Zt{TJf2g;{_zsS72jdwNCP72D)AZSD9XI(W#>p_T=29T
> z8=m11mX3z)I486_BeeT?;r0_aZS?%KQK8#%1hk{>wj<|k$#%2Na<w(M*k<x<(z!Ni
> z9Ggwp(2dy8QiN)y)b?2Ju)Q4v4qZb+gJz=sgqEQ09$tDCA&Mfk=wdQLst__B<>fO_
> zsaVLE>k`BcQu&dQ(#f%EGB|d6h$uEnBoH&aJgq(SxL&T3lUf4R%Vi1;t`{;0v2rnq
> zQ_q%ejDfyDv{6EakL3kwnbS|HCQ&|%!xXW3e3b9X;<|AKZm!N~Frh`K5DJv*hH}|#
> z>W7PSI5?k!_B4j4HTC477EAEi{((JnQvZaENUc_dW0+2-W9fJ-r8)xR2m}I*&BeG}
> zCPgqcF$yiAXDT#fy9aqWjz6gpsii8dRH;BM;}VON(OMycVVS76^(>B1^-iSFuwE>b
> zB~r>UJ)y!lEH>6VGF9k7b>e<%lF%yEAxfppvwQi0QZ=bls-rZhUog+ZQu!LxH)~%#
> zNo^77N%?SRviZ~%!sXyR7o5wT|4Mx~^hSA*QY at 9kyk71e!m-ri9JikGSD>D956mLs
> z6)`WYTh{bO|NjXSi+X*jqSdk&+aeZWq>Pl43ay56#(CYDScFTIYB{0xl*)++5{r;Z
> zJg~mb|NOr0ucl%_#S-hy<;zd+-O9J}(C7WF4BtH{oCHWN)CF|`832M|x}Yu~13)lL
> z7t{r000 at TZg1UeV0KqU_P#2H^AQ+|#>H;zV1jBSeT|fqaV3;nb3&;Qv4ATX50T}>-
> zVY;9$AOk=!Oc&GzWB>?;>4Lg|3;@9}T~HU00U#Kr3+e(g00hHyL0v!wfMA#|s0+vd
> z5De1=bpaUwf?>L#E+7LyFiaQJ1!MpS{?Bw-_nq`071Z$#9d(YQUsq>Gd)xEYmgc5^
> zo;`i?xbaa#{ofD&dT_t)-rYO3w`;1a{;d4t*6%kfZj}Fa{nxTzu3f$Ib7 at KO<)Xq%
> z7Yi<!P3QB^ojsFx`lnMTPaMxZ_G6Cm=#j&R4rU+7`eFY*!`?l+Gc$Ij at 7%FHEp^-0
> zEt at xOOiBKJ!*@yR*R5TX`0Y2V6XI9Jef`zS70Y8|^txryT8(<CN~w^`qLxS_BP66)
> zw3rBA6!zu91 at q^H&Ykl`Nbu}gGiOW>nl^RH=aVM|2Kf8=`gnVJ3Ox{9;O^$?!sl^0
> zY>dTpo;bm2{J2j)aU9EVK*xMM+J4kWBS#GX at Pqg1!|Z6bHbdVVVm;Vu(7OW%ywkrQ
> zf;hAe=r;&ik2qV-+E@;VAy!?;@WJ+zjhUtdEBb_mMMlEciMB5^XHUTT;h3cK)Y9NV
> zh_4gkyUyOJY(rs!T~2t7d0=TOM^;gqwztk;a<W%{>s=EcICQl4I>)8vLW$1=flqSi
> z<G@)P#`q=kSCtixH%$~wJ)c#Un at AfwZI^#Padh}r8^(0m at i-!35Pd>e(ahO%GPlx}
> z43nQV`X^QKrPX(C#wQP1du9P|4Pn}wQ|o1wXYgJakWj^os4g<qj-#0|rsR(byE_S~
> z$^G9OA4wx<W;RDw-RL78FcML|d*&u{H_gnADlb^8sk8bB>2K{A-WVS5u-egYziDN7
> u^C;`Y%t=am91=g!1`QeEZAf>t$Cr0nG5oFUViFr`OEPBUdz#{q&;A8^{IuTy
>
> diff --git a/src/public/images/icon_dashboard.png b/src/public/ 
> images/icon_dashboard.png
> new file mode 100644
> index  
> 0000000000000000000000000000000000000000 
> ..57b933a8c84d500928f44a6156e4afdcb6dcf190
> GIT binary patch
> literal 4457
> zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk?
> zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k)
> z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D
> zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h
> z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWl<c?^Y>HCStb$zJpw<C-wn`Z#B?VUc
> z`sL;2dgaD?`9<mahL)C=`UXb&Mn<|o6}rWhc_oPzx_QOQAR{1VxTF>*7iAWdWaj57
> zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn
> z;o9<wp`i>6Z~cnI0-zQH{UWd$6rBYb`6c<q8Tkd+b;6~=`jM^lEGS7f0on at +P`F;8
> zuad!zEiOsXM^*vW4vr^??QjQM`6d=+rvl^JEitD!6>I at QE<80UxFoRz>}hBK!5w7f
> zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l
> zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^;
> zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh
> zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a
> z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o
> z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9
> zr{$vbQw9d+{hlt4Ar-gggy!Z1hf37tz0bWKC!rl2!=59n)zW{$>5f57*T>r%BsqU`
> zaJ5PPJ@~`X$zj0}9mXjdAGq)IXiSu!tf+I?Ysw at CGmahyh0`iE9n9M;qRh5$D&79}
> zuhpFD+tr!n;m!NbPM$aKd+q$s^S(cxqS$gk;Qgad+N+exH9x*M_{el0!@PjHyB}ty
> zo}c!sxwx;o at Zp&zuJCowL((6I+sFUjm$&n%b9XbF^Q3^ztW^?i7Z(=ye$$@!?x at fD
> zj&s&`Q)LfkL_Y7Yo+WDd&-df2T*gJ4jjReE at ia~0PVbA at ELrBm@>rsM=Xucui<Ss{
> z?owM@@a);#S2mlTR~&zM{(eBH=qj%T8d|Kq5rM~5(t?U at -d@crTDDQ{?RU0<-$mMw
> z{<AD}YZvHtEnNJYF^_lE1h+%Kc;kK~WIJ at b_;U)qwA}o3u1iD7T(>u|VV>)L?`J+;
> zRH4w3 at m|WIdI76hqCl5HONLIH_1 at Ya#WR{EB(Lz#2>zSdpmH**_VjTzy_%g(C0lB^
> zt&cZu-CS@(_64td;lF-?bMtN3+$0)gDm!LK9KM?%QO;_;#N!cL?f&`3yH7a9Y)Dbv
> zc`Js$Pbm9A?4FgcdAT!o%O1KZ+?$~ErD3AMqeUI>{w01nVd>~8@#+5lC;yKq_-W76
> z(Vn2fxrr^(E5!Ea$@1L+ru#YO=iX{aeZRi_(LAnc^BWE=-)#6_^WtHv&8Ib6FX!Cd
> zvTgzEwT`cLu8aKLz3ck8r!I}tsjCydmDl>g`?2E<w_l3K**~wi<tw;l%j|1jQXA#A
> z>dbaFkUAG-?I+j0=+#oCH|uV<ZO=Blyx at z%oaFC at p<O2VN~&V6nwF{k6Q4fV`1lsz
> z-EG^x<=5tS%|5=0_57tewVCWLfg&Gl{5xG`-CDl6dJEjz8NB_c(iZ8JSIrmvOjDWG
> z`tb4RQ`Z+h-EKDH?EEvu_t(W<OILn-R$=DUs!5;H!$01ebd9t4o)WLUiJ+r^#~%;j
> zpQpFamD<>1dr<K9 at mU{5W78crFMsFCmM-=2N+_=zqfO-bGZBwJO=H`XzSmQV?;^7s
> z%O?A}h97#r<b*HVGCy7!t5tZb!Dr<<b9v>rA7AH2JwNm5Ox5*g68{BH``7$Eeb)5H
> zhD|)}dPNH6zXF3Fo7H~yy65~PEkP>w-e#VTnUkKB*F9~Fcz5Zm at 5Ohgp9bw%UX^_J
> z-esxAwaX>5uRn{pG-G4M%p+9?_FbNLNz~%cWc$Vay#F1I<O;6*fB*jD<P%R;tv~zq
> z at 8Yd#yb|Z)6iQ+%T%|L;Klc1z`(N>#N|KbxId>)=hP*xbDT^k0%m593c)I$ztaD0e
> F0su%bp+W!v
>
> literal 0
> HcmV?d00001
>
> diff --git a/src/public/images/icon_hdwarepool.png b/src/public/ 
> images/icon_hdwarepool.png
> index  
> 76e0a288ebacf3ff615763f12bb2b3f53a27abc4 
> ..1e55305f45e55b87d0733c504a325aa52b7eb71f 100644
> GIT binary patch
> literal 4509
> zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk?
> zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k)
> z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D
> zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h
> z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWl<c?^Y>HCStb$zJpw<C-wn`Z#B?VUc
> z`sL;2dgaD?`9<mahL)C=`UXb&Mn<|o6}rWhc_oPzx_QOQAR{1VxTF>*7iAWdWaj57
> zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn
> z;o9<wp`i>6Z~cnI0-zQH{UWd$6rBYb`6c<q8Tkd+b;6~=`jM^lEGS7f0on at +P`F;8
> zuad!zEiOsXM^*vW4vr^??QjQM`6d=+rvl^JEitD!6>I at QE<80UxFoRz>}hBK!5w7f
> zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l
> zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^;
> zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh
> zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a
> z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o
> z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9
> zr{$vbQw9d+&z>%hAr-f#OnvJg9V&Bte{TN#Mx%^w)>FHh(tur(*|R^g>Npz37z-zT
> zS!yV?xbyv-$F21T=LyxOK638K7mrnPR`28R?pc={JTp3`Ano<xmcC6z-tTj(=f8SC
> z=Tel{$!DH*me036uQ~Vq``+h&)~yWDI+$YAxHa~-d)o@>>~E}UpB`!bKYQ^~TTInY
> z3*Phh`_9E2aW*-(rh&6+i|K{pO<S#d(()P3rSbC|ZkQ5z at YgA!BTFS--&g;!vYoA+
> zf6oWE1 at -6C`|bY9#FR14%A3-BU{~Oyg(BP at al2c-yq%r at t?J7D%)gvnB1d1&l-E0V
> zwfU^{<M2PV%pZ2ViK#UWcz5>6l(X*~qBrp8t^R0sc7E;Ot>xcjJNL*WKAw1SVX?^J
> ztslA`U7EPP at 00utuQW&3txgA at 8C*SDBC~V#{e}fMu1c?SS{KuoRP;*QY)+D7%#3-n
> zg>Otgn&s+v^}!}i8`i~X>D-#vR))V<mv)N0{rgRw+!n_cvxLYQJ4DmE8=4jsw%U|#
> z-YNAaGSXMcx_+DDmTkTL{o%)B3Qu167_x%7c>moNhd3+QvUT%vRnlCaEQ(Klbc4OX
> zd}|)}+n4VSojKD#`(WF$g-0_FKV)v+A-BK%=uy{{V9yNKnPx=?eT$tI+U;|grsDDQ
> zkJyVZUszx43S(b3eX5XZ%b&Fsb>#xpzpWN#S$&V4(mmsEirmH<vOo6N?K|=O>!&)^
> zxz8 at V-)HN8GxNe$D}!vm*`ncjf0>ux<=UO_ at LpO`rOG9x|MpUUSzqrg<*_mBIM}GZ
> z+Dl#iyrc4hWvgtqHOv&<y?f7&tu^xX$EIzN`ptcG4o7$IpJ!Ts3oK$HB7TTo&;Qf7
> z(OEyq_sjx^Z7X<It-N9$5VJAK-=d*W&i+bm|MiGM&Z4+OcXt<-{E%-<*s3V#uW&=y
> zWnQBx>#9YccwZgd<SP*KHEfM1>yhwlKU)6%b1Y#mPkQ)$^@JC!Wu>Ll#7_xrcX+xm
> zhw;CQdES<LT&|}M`MjDT>b0;#tz5XR-F-sjX@}rb6ZYujJ4kEW8UOzL=f&#wwryLT
> z7KVHkiY>RgJx`2(O-b}iwh2iyMJ9`$NnUy`S*vw^@b<@-Lq4UX|2MvI^J1UabmqvN
> z4c4bK?Ix}?<oI(bh$Z;${m;s;3T~Y0+Pdjh at 8h!M%cpOz*!+3r(bkPFFE(-(S|04~
> zuWsjmb7fQUsRQY^&INJm{$tmB^0V`ThIQmw!z;V5z6$%<lyiNB%Cr?Oi}v0<{ya)Y
> zjH8KR{d(Tz{xa%It-9Fu_p(Rku3LMYKZ|{3mT&FHr^h{(zb_1U>T39P>jmGhKODQV
> zr)*C8C+FIdD)5f?;o*M2+{V0L&;HI2+w91Gbfeq+W%aBQ3 at 0+2XYc*}Qvoz!;_2$=
> Jvd$@?2>^%N$yfjY
>
> literal 1179
> zcmV;M1Z4Y(P)<h;3K|Lk000e1NJLTq000yK000&U1^@s6z(KqQ00004b3#c}2nYxW
> zd<bNS00009a7bBm000W`000W`0Ya=am;e9(6?8>dbVG7wVRUJ4ZXi@?ZDjy7FEKbT
> zFgP18k2C-P0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q!|*>Mgsr<1N2Em
> zK~y-6m6hFZlT{qYKTrGgbz?8kZf@;LX_4S$8U=$ylR;b-rbZKPyfHzdF(G;<g3*6K
> zMXpVJiSf#WAc=E|U?VIcNF9h%K$wiJ+h7~*+`6 at W+UK0-JYKXb9Z1k$^1D2re7@)9
> zcQh)sZfj3B(6=hscEHHa0pM*|O)fL at 0dQ<AnHc0hlvaW5Yif%eYzoI%6==h^su86W
> z`S~<U>1ndlDVEaHZ;vGtAKe$YZfno0ZJnDxd+ at Ps_&qw(Qsq_(OW9b;#w-<?`u!}K
> zu`92|8^tK_AutOZN}L!xRSR at Bhhy)@xAn$bn;WnJ+pcK<Y#dG<&8btod8NJHWxu;;
> z_uf#XBf8=0$mLgJ@#vOVJUV at SG&R0#Xut6KJ^-XrD5a{Frlqj$vSleVLGJuF?Ag7S
> zb at 5o$=-e+!`Uj2x3;>6;^-uTN&%FEwez#tYx(u|Gjb+;y=}8ucj@|{Ut!1#o;nXRb
> z5@{(kO~c`ER9n+D%(<!i!T@&d+691aD~m^?t(>}W1>NJt=k-)=vx`}B$*(!E|2^vJ
> zo9+pVghM0}Kb3(>N*a7_o_n&3ixamP85v=5b_!W4pnLq(0nzAs01Ej$dBeC1cKrB{
> zSeC2+m0~uVC)(1)QyV+jvc4T5Es8>tEtEL<$q=d3IKe;=fM6g1Ksu8l5)SeGcgK*H
> z#F7;tfY0sX+_jtdJT5%C6HU{Y&lyZ+vH&ELKeLouV$;K2bZvU1YS!QXEmBIP5J(|z
> z0~>s9HiiORoB5kRQ`5|){-Tu2;&glP1HnKGUaz0w;a|CU=@0sLKFdOOo}ytOgg{Dx
> z5H*I&kvGTM*c53&Jn>LX<g*lvJU4Dk(Ax3<y35Vv#3UV&4h+LUNE2ZSM2%s=t?T|f
> zBQNBOOr#e8=<Mtw+_9G7-_DcI=Lv<{%ZF6RBSje|gjofimP+;B8QIJ);&8d~17@*A
> zeO*1<xA!o=Fpo6Li;Y5|0$XW#_~e<P-j{ZE-!rml3M^ZpEJb5OBQBQ<uqhM at NMRzR
> zK$w+197`rX2bw>fojTaw`8aD^*U;eivREiGK9d1J2!XN{FHS$tK==ogQh2 at YvY{;7
> zRj$n?9iTGjhGs{G`zE6s4rFI0v2B~W<{$w;S`uX|4zE6nSt{KI77e5nNFgbR9Kf6U
> z@{O-d<iW9I;+@);(9_#(&&{P-vnGfw1hy(qAb?`gz>*dvWdQ6*oESXi_}9m|vUc<j
> z92xlH%a6%qZedBQdH`mrv;qd;ydUlQXlnfWXzHt2JUV!F<Z|G`@X&^EC_-JGk2A^B
> tD_~IhQ~po&^mcCt-U3>I{dax={{T7tRKXhk?-u|7002ovPDHLkV1iS09jpKV
>
> diff --git a/src/public/images/icon_networks.png b/src/public/images/ 
> icon_networks.png
> new file mode 100644
> index  
> 0000000000000000000000000000000000000000 
> ..a2a2b878e8c3d6b8bfc93bad0991cccfad7a3985
> GIT binary patch
> literal 4223
> zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk?
> zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k)
> z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D
> zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h
> z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWl<c?^Y>HCStb$zJpw<C-wn`Z#B?VUc
> z`sL;2dgaD?`9<mahL)C=`UXb&Mn<|o6}rWhc_oPzx_QOQAR{1VxTF>*7iAWdWaj57
> zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn
> z;o9<wp`i>6Z~cnI0-zQH{UWd$6rBYb`6c<q8Tkd+b;6~=`jM^lEGS7f0on at +P`F;8
> zuad!zEiOsXM^*vW4vr^??QjQM`6d=+rvl^JEitD!6>I at QE<80UxFoRz>}hBK!5w7f
> zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l
> zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^;
> zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh
> zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a
> z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o
> z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9
> zr{$vbQw9d6tDY{7Ar-f_OpWyjPLw$Q|8nlBeWzY7JJ;KyVdAlfce#*Psj`-9z+IP;
> z#DoBrS>lZ)qH!e?IUQ4l?v?~za19W5yVB~CxlmEX*g0qZwJR&r^U|&5*FE3U;ga(-
> z@=IU)_osWF|D5~(bN%_sWhYaNe#kq2Hvh18HnY{NF3rBk+;8q1kG`;svVXnr(&4|_
> zKTLf6Ik;xu?K_$w!ot3EE{oZ`?_a)g-Tbu0GQrd&cFB$<469ek7|c48vwq1EmOZCi
> z6AXTs>=Kx{z<XY9vuEG=EdAsEc3F9B;)$HJAY|FajDVOBp6EzT9Wmi&`_Akr4xJ^c
> z<E3O}b?acE%r%W`mop`J*hF5I3bdNk7~2(O%k1_SjZkV`8NyYySFZ1r*M}|7!omeO
> zeh7B2RdC+VyUInRsF}N{@%`Ps&Hj at o3%CkatrhF;_U6&bXSy8Hs=@h6MB5-gS=i~J
> zz_H`UFI>CUSD<oc!6|1~RTjo3g;lKH64KTD`OeB&S>G=@MoPE at u6Uzq*S+Y#gH>w+
> zg!bHHt6Iub at wJG>@RRw}XD7?$YK%Hn&MO~O-?(erBEOGXjao8%- at 2|&O4 at w#NJCT5
> zz8Ps at oIfKJ17_OHKjfFKSz;yI!=|k1lk-b!LoMq%-771Z)jj6woIH_X^ycw{M^-^|
> z5(1V at +w;xWH`#L6A2(5p2j3q*ZvWWZEXQxn>^W_M&nFh&<f>Q3tJSuNyjEE)w<^o&
> zs^9dfcK1K8i#;cO+<#8f at _llLzvn9($U9g_?DWb!T>S56#J#&`BjW;d?<MZc**v{e
> zo1cUIuY`omm7L}B;(s!YzdZhJe*aC5zxV0H9e3RmOr$<%f4TnaS6fC={;_KrrRNeX
> z^%h@=>6jRB_C3$iQooq@@86%QtVll>S8)8Xr at PX`Tf3e~Sa$90WpB7Ed*BZD4LN?r
> zOTT_y-%{GuYOj at NcV$ZG$L442qhFu9Xd5ZozpwWC(pT#>?|%$#U}R|Tp2W38b*c(z
> ONWjz8&t;ucLK6U}aTiAb
>
> literal 0
> HcmV?d00001
>
> diff --git a/src/public/images/icon_smartpool.png b/src/public/ 
> images/icon_smartpool.png
> index 4ed0af0d2f2da5b34d13491ebe06f64a9450b5ec.. 
> 3a6688a7e0fb1e3dd1b4e177cc63c2c5296f1f0d 100644
> GIT binary patch
> literal 4233
> zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk?
> zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k)
> z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D
> zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h
> z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWl<c?^Y>HCStb$zJpw<C-wn`Z#B?VUc
> z`sL;2dgaD?`9<mahL)C=`UXb&Mn<|o6}rWhc_oPzx_QOQAR{1VxTF>*7iAWdWaj57
> zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn
> z;o9<wp`i>6Z~cnI0-zQH{UWd$6rBYb`6c<q8Tkd+b;6~=`jM^lEGS7f0on at +P`F;8
> zuad!zEiOsXM^*vW4vr^??QjQM`6d=+rvl^JEitD!6>I at QE<80UxFoRz>}hBK!5w7f
> zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l
> zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^;
> zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh
> zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a
> z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o
> z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9
> zr{$vbQw9d6`<^b2Ar-gQO!4&y36yBN|J!=;V&lHFvnx^qtUQfo?kI3+Ibp_nOFlP8
> z*hTta(Pgc!O-dQT-PZ)yDrp$3a80|Rbc;i5QHYo8<a0geepnZmKD$@^Yu)6DkEfKM
> zV3vP==l!1VmhXRxT0Gwn^lRNz(csYARh5r=MfYZiYTcH-xM<TV#;ol*QZr5+mHpbj
> zar4T<Io~6GI&R~5_u-8#)9lTca at fs|8v54mUb|q0()uI(oxX=3b8Aeo-Yn@|xOCG(
> z*_v(gIm_gqmcC6}mu-B&eS4TZQ~zG3?tN{W7jZ7qxH>Vr^suSgMb%YSnsX%onz?Uu
> z-?TG(LA at l4Me~YUr^>gCHUBSccln<w`Ag*}v(+T=mg(Vp>)LOBzIXo`v+DkoUaw6%
> z6*^>e?r=Xoe)x;X-LnGQw=(ugNpzl&vb}8Dvu8(NM8Otc1O1Md7Uy>^UH<P#uEsHO
> ziHFbkAM0;aU;f|dx)VoP{w;@0?H!vro&9$iic9U^{ix#WGr>P%q3Nq%@lUH*&780>
> z{lUkL^?Lgfv|AtCYQM=Ushpn~R`trz(SPlizm-cl_qDHb*9+gbKWn=9stpVhpKq=V
> zV&u8lyZ*ishx;=hc5}|E|KAtfyvHS#;1IfGTGV`YGndTEJ*861Dh&S^w(OWDqms~k
> zb#}Rrc|?d&P=b!@{75-1x%LU??w@`tQ*QY=g`-NwW@)g*1FOUm!@Fk6J2|#H8*P1F
> z#5lj?=E;yCWr^ie12)W<AQ-K%Vc{}%PrZXn*IBGP&HAQzWe<augk!TYo16M{LorXk
> z9{-mYN;}yeZ0OcpA at pX8darboXNgt(!%c^#Ez~XSX({zN_gV4Nw%KMYZKgeV-{#Er
> zOvq&Ml~1c)e-4u=-xbRI&^5tC&GB;Ua+W*(hIwT{vL1$ae%L7cu|IbeIkjtM-ZrLp
> z^De2dJpQEcI79WqM<2$gXSN>|zqTaq(#)0Cul;%FK0dSH`(ndrJMpzYIUd$??L0s0
> czvcmkFT1KLwrfdW1`Q5)y85}Sb4q9e00%B0H2?qr
>
> literal 641
> zcmV-{0)G98P)<h;3K|Lk000e1NJLTq000gE000gM1^@s7XiptS00001b5ch_0Itp)
> z=>Px#32;bRa{vGe>i_@>>j8p`4O##I0wzgBK~yNuZIDYylwlNxpYI#zqK at T2S=JyC
> z*&>E6I%yZEa3L*)iWaScHm%y#Sj12vM9^iELAzSCYGDjC>WH_Ll*&tLv#6;-Yf=*(
> zLq~sS=07cl{z>v(edpsn?|FFPUrEF#`N at p<B=)fr2A^FZ9B_&;-y<D&ygAEwlUu?8
> zXWrl1=*kUkH{2rM&r55dNVKW#5S_qN>OgCO?qQ8bXY*%b6TKMABl7yX+X_>W+dJjd
> z*#@*RiZ;R2Aa*aK{hv_)UHA6OiHbRtXp~Y6$A425SX5T*=MN#m*9wJ=6mE2hu{<L2
> z at jmNMwFkFJ)<{x!wGGEoGp)_9P`ZGv)t8kTdg_;h$1A~@vNp1=1N6KM<$wn7mdfF3
> zFQ5UFj=o>i-<nYc0CrI at H=iq6OkAGbzzhWd#X3#<*edoCFI&t6sZ=xvv=Mpt{VFNj
> zTZvLOW at A&Fyz*v4-#T?Ys*z~RIWboUM2ta+ww#gP$94a8qr#0YscHzYx#B2xS2=pq
> z9{AY=O9LQ+xQ`&^H<9HpWKszhC*Lw0dVu;i65(s;k~nQi{Ks}-x7+fmN+FUvmPrfm
> z`s1WBPU?fx%3|+(QZJ6=d;I%6>lQ(il?+3llCb?WH5XqfAlDo~YI=;a;xx=Hu(FnA
> ze0B{0UzvkKhmBHOn)qa=6{`O}igp}Qv4t#=AB9Z%9;({limDB+sD%Hy>P!?7TS%jw
> bB^KcyJ~ZgpH4FC800000NkvXXu0mjf6L=r`
>
> diff --git a/src/public/images/icon_smartpools.png b/src/public/ 
> images/icon_smartpools.png
> new file mode 100644
> index  
> 0000000000000000000000000000000000000000 
> ..8dc3aa10ad4720ed1f4a25090ace122183ce8362
> GIT binary patch
> literal 4117
> zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk?
> zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k)
> z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D
> zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h
> z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWl<c?^Y>HCStb$zJpw<C-wn`Z#B?VUc
> z`sL;2dgaD?`9<mahL)C=`UXb&Mn<|o6}rWhc_oPzx_QOQAR{1VxTF>*7iAWdWaj57
> zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn
> z;o9<wp`i>6Z~cnI0-zQH{UWd$6rBYb`6c<q8Tkd+b;6~=`jM^lEGS7f0on at +P`F;8
> zuad!zEiOsXM^*vW4vr^??QjQM`6d=+rvl^JEitD!6>I at QE<80UxFoRz>}hBK!5w7f
> zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l
> zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^;
> zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh
> zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a
> z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o
> z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9
> zr{$vbQw9d6Y)==*kcwMdruh2^2MQe9f7eX)lGru2SrQ@{+9q*RG~AlalX>KJBqUvG
> zzPQ`%u&l4vJ=?-B2}z6CO^$T4^e-y9;Fh(9v71q8%C?YOTS~U4{=QauJ51~4e9 at Fi
> zC(q3`|NZvK_j`RGj at 7gL-st`P`l at HHG80UN<n(^li^}DFo>O<QR{zo0miKaRrJ2g*
> z{;%G!^V~hlmp5ANKmMH9y2^EC$+CqXG<I$mnV(ZUH%q8>&Ata8-z>go$<@5HR`@4N
> z?VHrK>sl_AO22)x+vb{1=?l-<o7vlC<Yoj1|BA|$ZTXWeIP*sN67y*jCr_ at bOExUn
> zI;~>o<M7U>J2$S|Y at T?oePOEjfv`Ad-+IkDThX?&uNwEB?mh8GCx-d at sY7#WV;?@a
> zmR9oT?&H_n{djl|UOaT*QR7 at KRR-Snjgp><qCeZbzPa(eH%o5a9-pozU$N_U_1sCU
> z3DG|!wH?mQoWSj?ym#r7&h1P2epfnu-Y}_fsq5aklY+CtHp~i8EQ at Io{B~#4$<Q at 5
> z^Y$G-S{`rSu5lpKcy&T0TcEJxo5YsAS(beVj&#(;U48dawt6yyu6nZOQGxRrCW(vI
> z9=Ug`qxQvK`Ie$NyLiKdzeTk$Ilboba{S at q`q#!&roJUjE%x2JvMD#k|3_;tTFB3#
> zfAsK{Pr-jLNA2IDuh)Iv^9$F}zfV>6KDgGfWM*!&rct7i=-edXrzfJcT(i$|$^Q&V
> zZL)gyW~tF{m!QjYkJ}tS-+KK`s@(ex{kh6})~zXgZg~EqZCr8*hh*Y^L*3QsZ^U}P
> zzxbOSmN6?Vcx_S9#1qC<Hi{ST&R~04*!;=v at S)!unT7x99$;vRv_Hco7|9OmsC&Bl
> KxvX<aXaWFgIQ7o}
>
> literal 0
> HcmV?d00001
>
> diff --git a/src/public/images/icon_smartpools_dir.png b/src/public/ 
> images/icon_smartpools_dir.png
> new file mode 100644
> index  
> 0000000000000000000000000000000000000000 
> ..408aabc8f0cf0a74a30f58e1cd1d495011a71d7f
> GIT binary patch
> literal 4228
> zcmeAS at N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fk|nMYCBgY=CFO}lsSJ)O`AMk?
> zp1FzXsX?iUDV2pMQ*D5n9Wp~AN+NuHtdjF{^%6m9^eS=-fVvqNZ0suv5|gu2OB9k)
> z(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*VFffGH?<^D
> zp&~aYuh^=>Rtapb6_5=Q)>l#hD=EpgRf0Gw!Z$#{Ilm}X!9>qU&qz1fz|2^|)L75h
> z)X2=pL`T8Mz`#P^z+B(hK-bX1%D~jh#83eWl<c?^Y>HCStb$zJpw<C-wn`Z#B?VUc
> z`sL;2dgaD?`9<mahL)C=`UXb&Mn<|o6}rWhc_oPzx_QOQAR{1VxTF>*7iAWdWaj57
> zfXqxx$}cUkRZ;@VD?klTNrszUP+F7&HaR6(KQ$*cH#M)MSl>|3P#;-6FeHL9(=$qn
> z;o9<wp`i>6Z~cnI0-zQH{UWd$6rBYb`6c<q8Tkd+b;6~=`jM^lEGS7f0on at +P`F;8
> zuad!zEiOsXM^*vW4vr^??QjQM`6d=+rvl^JEitD!6>I at QE<80UxFoRz>}hBK!5w7f
> zSXz>iUsN2BUz`aFN}xO_gcWR3lC2>A1al!l?wC^o;X$}LnV at jC%1O*iw^gdpO-W5l
> zEX^rV(ueBM2gM3Zi;X_2fgtmfi&7Iy@{5ox2u>|TwE)E|m at L>VWX&MMN-|4wQjv^;
> zSqx1rB)b)1o(&=-LyLj=F(kDpx0qTs;WXO at Io_?DAwlJw56lP2C7yX{`QT)ZswUGh
> zrO36SBr&B3mJKlFoij at +amxk)OAc at vz+rkoa()UhnL-jU7Q;)5a2XzwniHO11S~_a
> z>UGUc%)}=jS_G2?CkPvG(n2Z#fUyA)0~Rd6GEE;|s6kT`wEUqJ1r9A*84fdd)Dl=o
> z5Jis$7g50kQ#2Y}u#g~%9t|#{f(fQ*G`L_PK@>e2Tto#EOcB1|;zD$bQuBcA<8ol9
> zr{$vbQw9d6Tb?eCAr-f_O!fB=36wd$KR<1bN%_^QF at _smx9bQpYie^@vAPOKmaJ$F
> z36NFNS{Pi?+0=J+VY2J;CZ?_4f+ZSWygq at 6{L9vAzPoj5o!;(q>t4T^U1z-c^1D~>
> zma)r!e*V4g{oeEMzt`=*KRa>OvP5I4+a?=Szu3Gxk-6}382 at b!gVTYsv(`T~j^J2x
> z-zUD}SDN{U-$CzYt`mPzTa*?XP+LCj_ at s|#*nN8?+pb^C+mkp;G)`Ejqc!|YjGoQB
> zkcJZ*6y20B^7J27vb9*Id$wZ9lb$bGl0TPe8$4B?dH7`vThit1oTUf<hdtA7D&b>}
> zldp-p`o^XHV5GJvgSeJf_e`G|6F>SKEd8)*X4CoPg1qUOeCHYUCK=0~D!aqgt}*-X
> zh47Zz;uS0GlS<s3pX_w$Q=M#iVA7td?U84H*GhOLoSGrPskNfyZR-J%WS{Bmc2x=b
> z;uo()H8#5Ymh+eP+Mnn!JiW1=EkE8qY}&Skd)8gOaBb^bC(otQw_?^`%(ts!-*`b~
> zQR94zYYZCQo4<4B9gXliEa6 at 0*MCH2)odAw*K&=k|0*px!eWvtQ}fIA%84108$Yn*
> zEX}(S+Z*t7u0+-CrK|5RJrGoun>j_r&_z)wQF~q6;)8wp=dCW*{1DMPZSmtzKvnWb
> z#i*ADn(TS}@7os4tMOVW5nJu>L&<S!$lghDA{(ARVYDc-F#P#c_)+T7g0KsGKPOqn
> zYaEsLx3A$A<mqE6d|UZo*Frzxue-iXbc>9ZOWCn(>b6~bm^#-t98Z40d2x at YnCEge
> zi?qKRLqi#@Y&pbiwpxXRKH6~AgXKv?fX{rHXv>^QT&D9Hbe8^2soNi4U9s)ke)$=9
> z^Q3P at pL(!P$Uykn49;2V>-Tv%)$VLKsc?MSH0=zVs at ZE_^C#7YtZ0b~o&KSCB8#)l
> z$-021Z_B?lA6>NVyk7Q<e$Mrt^>xk(+<xn)Z~5W;Oy<)31=m@*cdh)tXFn4UgZg!k
> UgMV2|)j{I|p00i_>zopr0BEclmjD0&
>
> literal 0
> HcmV?d00001
>
> diff --git a/src/public/javascripts/ovirt.tree.js b/src/public/ 
> javascripts/ovirt.tree.js
> index 13720b2..77d6c55 100644
> --- a/src/public/javascripts/ovirt.tree.js
> +++ b/src/public/javascripts/ovirt.tree.js
> @@ -8,26 +8,19 @@ function processTree (){
>       $.each(response.deleted, function(name, value){
>           //FIXME: special case for other peoples smart pools
>           //come up with better way or split out somewhere.
> -          if($('#' + value.id).hasClass('SmartPool')) {
> -            if($("#smart_nav_tree > li > div.SmartPool").size() >  
> 1) {
> -                $("#smart_nav_tree > li:first div").click();
> -            } else {
> -              $('#nav_tree > li:first > div').click();
> +
> +          //check if the li is the only one.  If so, remove its  
> container as well
> +          if ($('#' + value.id).parent("li").siblings().size() ===  
> 0 ) {
> +            if($('#' + value.id).is(':visible')) {
> +              $('#' +  
> value.id).parent("li").parent("ul").siblings("div").click();
>             }
> +            $('#' + value.id).parent("li").parent("ul").remove();
>           } else {
> -            //check if the li is the only one.  If so, remove its  
> container as well
> -            if ($('#' + value.id).parent("li").siblings().size()  
> === 0 ) {
> -              if($('#' + value.id).is(':visible')) {
> -                $('#' +  
> value.id).parent("li").parent("ul").siblings("div").click();
> -              }
> -              $('#' + value.id).parent("li").parent("ul").remove();
> -            } else {
> -              if($('#' + value.id).is(':visible')) {
> -                  $('#' + value.id).parent()
> -                  .siblings('li:first')
> -                  .children('div')
> -                  .click();
> -                }
> +            if($('#' + value.id).is(':visible')) {
> +                $('#' + value.id).parent()
> +                .siblings('li:first')
> +                .children('div')
> +                .click();
>               }
>           }
>           $('#' + value.id).parent().remove();
> @@ -35,12 +28,10 @@ function processTree (){
>
>       if(processRecursive) {
>         $("#nav_tree").html(recursiveTreeTempl.process({"pools" :  
> response.pools}));
> -        $ 
> ("#smart_nav_tree").html(recursiveTreeTempl.process({"pools" :  
> response.smart_pools}));
>         processRecursive = false;
>       } else {
>           // Loop through the items and decide if we need updated/ 
> new html for each item.
>           processChildren(response.pools, treeItemTempl);
> -          processChildren(response.smart_pools, treeItemTempl);
>       }
>     }
>   });
> @@ -64,16 +55,8 @@ function processChildren(list, templateObj){
>        if ($('#' + data.parent_id).siblings('ul').size() > 0) {
>          $('#' + data.parent_id).siblings('ul').append(result);
>        } else {
> -         if (data.type === "SmartPool"){  //handle current user  
> smart pools
> -           if($('#smart_nav_tree > li:has(ul)').size() > 0) {
> -             $(result).insertBefore('#smart_nav_tree >  
> li:has(ul):first');
> -           } else {
> -             $('#smart_nav_tree').append(result);
> -           }
> -         } else {
> -           $('#' + data.parent_id).parent().append('<ul>' + result  
> + '</ul>');
> -           $('#' +  
> data.parent_id).siblings('span').addClass('expanded');
> -         }
> +         $('#' + data.parent_id).parent().append('<ul>' + result +  
> '</ul>');
> +         $('#' +  
> data.parent_id).siblings('span').addClass('expanded');
>        }
>       }
>     else {
> diff --git a/src/public/stylesheets/ovirt-tree/tree.css b/src/public/ 
> stylesheets/ovirt-tree/tree.css
> index 7d5411f..de019f4 100644
> --- a/src/public/stylesheets/ovirt-tree/tree.css
> +++ b/src/public/stylesheets/ovirt-tree/tree.css
> @@ -1,12 +1,12 @@
> #nav_tree {
> -   padding: 20px;
> +   padding: 0px 20px;
> }
>
> .nav-tree {
>     width: 222px;
>     position: absolute;
>     overflow: auto;
> -    top: 25px;
> +    top: 50px;
>     bottom: 140px;
> }
>
> @@ -44,6 +44,15 @@
>     background-image: url('../../images/icon_smartpool.png');
> }
>
> +.SmartPoolRoot {
> +    padding: 4px 0 4px 28px !important;
> +    background-image: url('../../images/icon_smartpools.png');
> +}
> +.DirectoryPool {
> +    padding: 4px 0 4px 28px !important;
> +    background-image: url('../../images/icon_smartpools_dir.png');
> +}
> +
> .hitarea {
> 	width: 16px;
> 	margin-left: -16px;
> @@ -81,11 +90,21 @@
> }
>
> .nav-dashboard {
> -    background-image: url('../../images/icon_dashboard.gif');
> +    background-image: url('../../images/icon_dashboard.png');
>     background-repeat: no-repeat;
>     background-position: left;
>     padding: 0px 0 0px 28px;
>     position: absolute;
>     height: 25px;
>     top: 0;
> -}
> \ No newline at end of file
> +}
> +
> +.nav-networks {
> +    background-image: url('../../images/icon_networks.png');
> +    background-repeat: no-repeat;
> +    background-position: left;
> +    padding: 0px 0 0px 28px;
> +    position: absolute;
> +    height: 25px;
> +    top: 25px;
> +}
> -- 
> 1.6.0.6
>
> _______________________________________________
> Ovirt-devel mailing list
> Ovirt-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/ovirt-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/ovirt-devel/attachments/20090119/1f061d7a/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nav-before-after.png
Type: image/png
Size: 13437 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/ovirt-devel/attachments/20090119/1f061d7a/attachment.png>


More information about the ovirt-devel mailing list