Scott Seago
2009-Jan-19 20:09 UTC
[Ovirt-devel] [PATCH] Updated tree nav layout to move smart pools above the main pools.
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+VGAn5mH?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
Jeremy Perry
2009-Jan-19 21:10 UTC
[Ovirt-devel] [PATCH] Updated tree nav layout to move smart pools above the main pools.
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+VGAn5mH?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>
Jason Guiditta
2009-Jan-20 22:49 UTC
[Ovirt-devel] [PATCH] Updated tree nav layout to move smart pools above the main pools.
ACK but for the issue I hit if you have no smart pools, problem described inline and, one css fix inline. -j On Mon, 2009-01-19 at 20:09 +0000, 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 ><snip>> 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.newThe following line throws an error of you have no smart pools: NoMethodError (You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.each)> + 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<snip>> 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;if you get rid of the following line, the blank space that used to hold smart pools list will go away. Actually, I know jeremy had some style stuff for you to add that is not in this patch, so after this is in, I will fix a couple other things once I see what he has added. We can probably do away with most, if not all, of the absolute positioning. For now though, this next line needs to go.> 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; > +}