From 42565f19fc22a94aa93bd59dd058ec359b0b2328 Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Tue, 10 Jul 2012 11:42:20 +0000 Subject: [PATCH] Use image buttons for ordering summary bar sections (images courtesy of dr|z3d) --- .../i2p/router/web/ConfigSummaryHandler.java | 36 ++++++++++-------- .../src/net/i2p/router/web/SummaryHelper.java | 27 +++++++------ apps/routerconsole/jsp/configsidebar.jsp | 3 ++ .../console/classic/images/move_bottom.png | Bin 0 -> 326 bytes .../console/classic/images/move_down.png | Bin 0 -> 325 bytes .../console/classic/images/move_top.png | Bin 0 -> 325 bytes .../themes/console/classic/images/move_up.png | Bin 0 -> 290 bytes .../resources/themes/console/dark/console.css | 4 ++ .../console/dark/images/move_bottom.png | Bin 0 -> 497 bytes .../themes/console/dark/images/move_down.png | Bin 0 -> 498 bytes .../themes/console/dark/images/move_top.png | Bin 0 -> 519 bytes .../themes/console/dark/images/move_up.png | Bin 0 -> 452 bytes .../console/light/images/move_bottom.png | Bin 0 -> 326 bytes .../themes/console/light/images/move_down.png | Bin 0 -> 325 bytes .../themes/console/light/images/move_top.png | Bin 0 -> 325 bytes .../themes/console/light/images/move_up.png | Bin 0 -> 290 bytes .../console/midnight/images/move_bottom.png | Bin 0 -> 497 bytes .../console/midnight/images/move_down.png | Bin 0 -> 498 bytes .../console/midnight/images/move_top.png | Bin 0 -> 519 bytes .../console/midnight/images/move_up.png | Bin 0 -> 452 bytes 20 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 installer/resources/themes/console/classic/images/move_bottom.png create mode 100644 installer/resources/themes/console/classic/images/move_down.png create mode 100644 installer/resources/themes/console/classic/images/move_top.png create mode 100644 installer/resources/themes/console/classic/images/move_up.png create mode 100644 installer/resources/themes/console/dark/images/move_bottom.png create mode 100644 installer/resources/themes/console/dark/images/move_down.png create mode 100644 installer/resources/themes/console/dark/images/move_top.png create mode 100644 installer/resources/themes/console/dark/images/move_up.png create mode 100644 installer/resources/themes/console/light/images/move_bottom.png create mode 100644 installer/resources/themes/console/light/images/move_down.png create mode 100644 installer/resources/themes/console/light/images/move_top.png create mode 100644 installer/resources/themes/console/light/images/move_up.png create mode 100644 installer/resources/themes/console/midnight/images/move_bottom.png create mode 100644 installer/resources/themes/console/midnight/images/move_down.png create mode 100644 installer/resources/themes/console/midnight/images/move_top.png create mode 100644 installer/resources/themes/console/midnight/images/move_up.png diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java index 3ad7c1c206..92228d4bf2 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java @@ -26,10 +26,7 @@ public class ConfigSummaryHandler extends FormHandler { boolean deleting = _action.equals(_("Delete selected")); boolean adding = _action.equals(_("Add item")); boolean saving = _action.equals(_("Save order")); - boolean movingTop = _action.substring(_action.indexOf(' ') + 1).equals(_("Top")); - boolean movingUp = _action.substring(_action.indexOf(' ') + 1).equals(_("Up")); - boolean movingDown = _action.substring(_action.indexOf(' ') + 1).equals(_("Down")); - boolean movingBottom = _action.substring(_action.indexOf(' ') + 1).equals(_("Bottom")); + boolean moving = _action.startsWith("move_"); if (_action.equals(_("Save")) && "0".equals(group)) { try { int refreshInterval = Integer.parseInt(getJettyString("refreshInterval")); @@ -50,8 +47,7 @@ public class ConfigSummaryHandler extends FormHandler { _context.router().saveConfig(SummaryHelper.PROP_SUMMARYBAR + "default", SummaryHelper.DEFAULT_MINIMAL); addFormNotice(_("Minimal summary bar default restored.") + " " + _("Summary bar will refresh shortly.")); - } else if (adding || deleting || saving || - movingTop || movingUp || movingDown || movingBottom) { + } else if (adding || deleting || saving || moving) { Map<Integer, String> sections = new TreeMap<Integer, String>(); for (Object o : _settings.keySet()) { if (!(o instanceof String)) @@ -115,21 +111,19 @@ public class ConfigSummaryHandler extends FormHandler { addFormNotice(_("Removed") + ": " + removedName); } } - } else if (movingTop || movingUp || movingDown || movingBottom) { - int start = _action.indexOf('['); - int end = _action.indexOf(']'); - String fromStr = _action.substring(start + 1, end - start); + } else if (moving) { + String parts[] = _action.split("_"); try { - int from = Integer.parseInt(fromStr); + int from = Integer.parseInt(parts[1]); int to = 0; - if (movingUp) + if ("up".equals(parts[2])) to = from - 1; - if (movingDown) + if ("down".equals(parts[2])) to = from + 1; - if (movingBottom) + if ("bottom".equals(parts[2])) to = sections.size() - 1; int n = -1; - if (movingDown || movingBottom) + if ("down".equals(parts[2]) || "bottom".equals(parts[2])) n = 1; for (int i = from; n * i < n * to; i += n) { String temp = sections.get(i + n); @@ -159,4 +153,16 @@ public class ConfigSummaryHandler extends FormHandler { return null; return arr[0].trim(); } + + public void setMovingAction() { + for (Object o : _settings.keySet()) { + if (!(o instanceof String)) + continue; + String k = (String) o; + if (k.startsWith("move_") && k.endsWith(".x") && _settings.get(k) != null) { + _action = k.substring(0, k.length() - 2); + break; + } + } + } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index 79d3233501..3adcf38cd9 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -799,6 +799,9 @@ public class SummaryHelper extends HelperBase { sortedSections.add(section); } + String theme = _context.getProperty(CSSHelper.PROP_THEME_NAME, CSSHelper.DEFAULT_THEME); + String imgPath = CSSHelper.BASE_THEME_PATH + theme + "/images/"; + StringBuilder buf = new StringBuilder(2048); buf.append("<table><tr><th>") .append(_("Remove")) @@ -817,28 +820,28 @@ public class SummaryHelper extends HelperBase { .append(i) .append("\">"); if (i > 0) { - buf.append("<input type=\"submit\" class=\"buttonTop\" name=\"action\" value=\"[") + buf.append("<input type=\"image\" class=\"buttonTop\" name=\"move_") .append(i) - .append("] ") + .append("_top\" alt=\"") .append(_("Top")) - .append("\">"); - buf.append("<input type=\"submit\" class=\"buttonUp\" name=\"action\" value=\"[") + .append("\" src=\"" + imgPath + "move_top.png\">"); + buf.append("<input type=\"image\" class=\"buttonUp\" name=\"move_") .append(i) - .append("] ") + .append("_up\" alt=\"") .append(_("Up")) - .append("\">"); + .append("\" src=\"" + imgPath + "move_up.png\">"); } if (i < sections.size() - 1) { - buf.append("<input type=\"submit\" class=\"buttonDown\" name=\"action\" value=\"[") + buf.append("<input type=\"image\" class=\"buttonDown\" name=\"move_") .append(i) - .append("] ") + .append("_down\" alt=\"") .append(_("Down")) - .append("\">"); - buf.append("<input type=\"submit\" class=\"buttonBottom\" name=\"action\" value=\"[") + .append("\" src=\"" + imgPath + "move_down.png\">"); + buf.append("<input type=\"image\" class=\"buttonBottom\" name=\"move_") .append(i) - .append("] ") + .append("_bottom\" alt=\"") .append(_("Bottom")) - .append("\">"); + .append("\" src=\"" + imgPath + "move_bottom.png\">"); } buf.append("</td><td align=\"left\">") .append(section) diff --git a/apps/routerconsole/jsp/configsidebar.jsp b/apps/routerconsole/jsp/configsidebar.jsp index 3f219fb40b..cbb270d4f6 100644 --- a/apps/routerconsole/jsp/configsidebar.jsp +++ b/apps/routerconsole/jsp/configsidebar.jsp @@ -30,6 +30,9 @@ input.default { <jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> +<% + formhandler.setMovingAction(); +%> <jsp:getProperty name="formhandler" property="allMessages" /> <% String pageNonce = formhandler.getNewNonce(); diff --git a/installer/resources/themes/console/classic/images/move_bottom.png b/installer/resources/themes/console/classic/images/move_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..577ae3352199ef87736c59ec1a137aa5165a4961 GIT binary patch literal 326 zcmV-M0lEH(P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pF_(?=TR5*=|(lJT{K@`UEp9*4OB?N?RJwWc^0R(T51EjUK@eUS( zot?d4k!u7YU>)2@Hfv&$5oX7?s~=4B=9~X~Z{9$IU9qP6H4Xd?JfST%K2ZgbD(&Uo zHZfda6M!BA&_e*)BnG$(TKvK|gN#$HZ0R<?=?u%lw8kv+%u+4)EYsPJCOxUHan+M% z6149abKQsE;w`PM?gP(p6oKH<?+LDhmfGYU)N63C1i$<RA)e0AGzWE$I)Kz^@87Dh z3P3CIj~~=ck*ZF$PzOC}&T)!ooY;@Pv7gij-mw@;G1C1nKYuBzjq-zs0c;nfE|ZrY Y-?oO31t8!@xc~qF07*qoM6N<$g4HyLSpWb4 literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/classic/images/move_down.png b/installer/resources/themes/console/classic/images/move_down.png new file mode 100644 index 0000000000000000000000000000000000000000..d82b5d45dcfd3fe251ef497ce48108cb251109be GIT binary patch literal 325 zcmV-L0lNN)P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pF_en%SR5*>D(>+Q<K@`RDAEdPstg-{EfUVeN4FPvxBQ^ouf{U;c zEbPQ88%W~{6dOfI?e|A~T4V+$!+kO4z`%Pm=l$=wmwE7spK1-YYZ&;aaG4&;gEw>o zNH?98-fx`4W_qbXX94Im0KJz*Pg*MV3P>*~IK_S)`KvO0U|e{{X|MF$qEp8{##4}L z7lR;8gYBSw>v*h^HMmQwsrD}-NY-J3)h*U7%?&ux8XoXceOR}2un3a1hvx;Ld%=Js zb#Q}8OPZZ!AXx*v2B6V@AX!(qHb3-@RX}~So11^?qg5bTBeQ!ovE+c;v}M*(|1aY& XgZ+fDxsXG{00000NkvXXu0mjf;#`J! literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/classic/images/move_top.png b/installer/resources/themes/console/classic/images/move_top.png new file mode 100644 index 0000000000000000000000000000000000000000..55192cf79bd3ce5bb58ab0323eed2d3f05b2bab7 GIT binary patch literal 325 zcmV-L0lNN)P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pF_en%SR5*>5(mhH8Q51&ZM+LD62!bFCSh;}gBMWd1E+DN7a1Vlo zU?JGq3RYP}8W99b5ho@?Of0;Co0&72_`zw;J>Sduxvc9DQ!G2;2gkW_w+7lzk!xkn zwWBM60w?I<5eF$h#Q<M;$6MeHb%`?Ts7$$kslY^YH<R?XwXR!0C2qEb^!;6B)5ZGR zfSxeh0Gi>s3o^hwFxJ8IR2ym!;~Hpz*A$By=p}g?x<IA5kMk7uy;aGxrXD_mkw#g~ zC>Ze*M>*)KrJMXZ(KV~&1*e(|{>EJ}{%v}zFa8YfTR_ndE?Phjf{~UO29TA8L4EZL Xwg-;nhc4HW00000NkvXXu0mjf(6)lH literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/classic/images/move_up.png b/installer/resources/themes/console/classic/images/move_up.png new file mode 100644 index 0000000000000000000000000000000000000000..e512dbdc2d1682d38bd58edaa248aff3cbde7863 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Q!3HFy+4N(86lZ})WHAE+-(e7DJf6QI1t@sM z)5S5wqIc;eN3Ny>f!6)Z70e5bcku3UzhHaE?eq&7#|i9$Sr^waZxQ)EbJ^C6x*2uH zx72(PJNN&Y;bR+#V}2H#h95+Z1^4thDBJwc-o%n+8mPN<z5v5cqrx*!b4{)}q)LPy zNL%B{F{Q0DS#y@7%#T0jcG(wej^4@G!(F;IRe?|a-tud_;fbqX@fN%^{&@bal-QxR zcU^NWSR4}9OwsgBTNCl%XyR34-z6p!4MSOT<{q&6&U-`p_4_Bj+42W?6sGduKXJ<I mM)H)VxetyQ6ngN~er1}Z);!0lMNby!KL$@%KbLh*2~7a>p>lr! literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index a08bce0641..827d3a6b7d 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -923,6 +923,10 @@ input[type=text]:active, input[type=text]:hover { background: #000; } +input[type=image] { + min-width: 0; +} + fieldset { overflow: hidden; position: relative; diff --git a/installer/resources/themes/console/dark/images/move_bottom.png b/installer/resources/themes/console/dark/images/move_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..349fe2d5046056bb6e6f3082b2ef063268bcfeb9 GIT binary patch literal 497 zcmV<N0S^9&P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGqe(<TR5*==lCf^oP!L7$9S4+x7A<Q(SNuRKYI=Gk3O)cu2pYDD zM3HI<AVjq-5)xk!zJP)@9}p@(dqK2l746z{Dey+#w+3Ei-#b2Y-;CKb&05k8?4DUs z6t6LI>biab;B2Uo+?b?ulHJgdbXrwakwU7fDkPmIkWSLMx%&)&5))?jCIy+<E0U=! zcb{2VmY0&=N!kp|Ly`|;j7M7`#&|^X5rD%%@(sziWm#St0J!_y%&vxQ+`T2a7^Gad zdz&P@YTNb<0IqY!7@q)mPjWbTC;3=X2jCL`8>Rv9EQGMw0ZGc5rujxPNXoV{fY?8W zZGAuBnCJQ3?V_$b^yaa&J9kMFNt2{0Bpna8y|;q8uD<}d2jFJv^=D1;Yo6!#cjlE= zNqP$4;4csWIB@spskjFUAzYCB2w*h=SpoPELb&)Z2mrdSJHg1c0npuFj(sx<D$BA4 zFi%pg0L*)Dze6fiRaInJc8BCGcmIq(f4NIqo7n?Nzq+pbo&tA3%jNR6yZ=aZjnvA_ nCe!Kk=fAF|<eekQ(;EB+;lasi@|=Nl00000NkvXXu0mjf*udGW literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/dark/images/move_down.png b/installer/resources/themes/console/dark/images/move_down.png new file mode 100644 index 0000000000000000000000000000000000000000..c9152a3a005daaa7e896e26f872232e24ee6bd4a GIT binary patch literal 498 zcmV<O0S*3%P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGq)9|UR5*==P(N!FK^%Q=_6!jug~f&0-Dw2-d;&j$r67_Ikj}<~ z0|f~oV6;;S*xA_HSjA2(t*w>a->L{UiYB@2Jexb2o9x9`&Ai`l-k)LDb*GXpVHuOE zsvctiW_Az2LCTTrU5xPvK%WjI?KVwQ<swbfRFZZxIs$m@ilUeRVCDel+>>0$IroTU zPS5(jzw5mB9|61saGVU+N#1JPc56YjZM#MCHh}fC63Iyj!5jd@7#{!_E#-~zjO1bR z=rG23mZkaZy?>6hl9?R<*a2`Q)g!qrsR!^1fJ<f~d7~`L_e(-e(_D4VeIj{T(juJz zwDWVF>`T&{x~^|7-v4t5A^ae@58zMYN=ciNHd9kcCz5v3j%iekMx$qveggQN{LLE4 zwX~9RZW=<cl|tk3_?M);d8Jh_@BP!9bU9H~)e8V$NPZhqA$f;npY!L0=1cb_Z4BtV zEz9!VpurFc0A}_9zy^Tp03hkKD2m#9|9xoxT%rV1lGjMi=J$uIME(miJ2JCb*L7bd o6&LMZln5lJ0HUPrp$|^+7vONDRgw^63IG5A07*qoM6N<$f@QtlFaQ7m literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/dark/images/move_top.png b/installer/resources/themes/console/dark/images/move_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b743ff473eea18cda0dda3d895784e29cb4f48c8 GIT binary patch literal 519 zcmV+i0{H!jP)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGxk*GpR5*=|Q$34QQ52jxcZo49q}}-P)JCurZM4xJkOd1XYeCpv z(JIA)ji6ZQKkx_G_#3Pgn^Y2;eK(j0HVQ7AyfZd0*_)f};(^<okC{2cxkM7<@wnS= zx2FIu;QVki+w1juKbHwhtDR1#1)!A;sd;HIN8U&r9UT=RgguhG?*0)#yD1%;*+9~t zx~_keWf{}CogAoXh%v@tLll;z?tZT*io<QYZYWx+GP7?0E@q{_?tU#-17sepl4gh4 z^aTJELU{3CimIx*LGtriBmi8}t$x4%^;|_}_8P$A3=jZVkbJu_m#G;@x{KrlB%Me) zN!nTfZdX+`*a{>mkbFa~Z7Y&fl2as}kp#(iqtU3f0Tg3=Ea{4*kOBdC+PoEzq#)^1 zx7&TR0tbNEY__{tEGkLebS08silVsF5Pgz#ljKST$=`KdUoFe>mjS?hJ|DV!XKiP* z9Z3fX@PV1F9k9E%&Fnb<a59-(mh>H`7YqQ$06r8&@h}~XF}?@z0H@yu0BU!?ZUA0o z2163u{Ry&g_h-`josxu^y)*##GlM~Lxa}L1Wf@5hGtxkE{~tq%zBfM=p>hBK002ov JPDHLkV1kir+j0N^ literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/dark/images/move_up.png b/installer/resources/themes/console/dark/images/move_up.png new file mode 100644 index 0000000000000000000000000000000000000000..937e4266fea11848e0ea610f4f9a686e29d3626d GIT binary patch literal 452 zcmV;#0XzPQP)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGc1c7*R5*=|ld)<PQ5c24b0?z~q5*M=9R@UDCn9!&`U)wm^bOJ* zZDij-qS#sI0elAqJKsPNmOGG@bScEUJIBHy+`a5>^20ReKmWPs=llZ~RE+UB#&~=Y zPurS(-#@Ya1whi%$z<|%6E|!Vvi$)VfWh|1ZQPAQec!(X9*mp-+#j*EwRW}ne11Kp z^b@#Uw0_rhz1K9&*`*vU7K_)mcT3#%?sB<&dnre=*{lsA`~a@58?c>h-|f0CZgo^u z)e%sw69JH<k+a!R9(U&8?<jC3hb2AB&!Kd5#Q(VSffGq5fLHbXDIYu+8l!z!h#NQ@ zzg#Ftx|g4W;5_bMz^!~GN#EPHeGCv|{AT-6vEpf6*LRwxIST+Or9(+KSFDDxWBVWz zJ_sS~<Q&^KQc6<*ZHW61@VRZ<7y01$^F9ZzW$;qcUZ|?-y`=IbhGBR`QNu92vAu#x u0(cjIecM&hoR$X%&~;suG%X&jfc<~e%&L_LfI^o50000<MNUMnLSTX=;K?=s literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/light/images/move_bottom.png b/installer/resources/themes/console/light/images/move_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..577ae3352199ef87736c59ec1a137aa5165a4961 GIT binary patch literal 326 zcmV-M0lEH(P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pF_(?=TR5*=|(lJT{K@`UEp9*4OB?N?RJwWc^0R(T51EjUK@eUS( zot?d4k!u7YU>)2@Hfv&$5oX7?s~=4B=9~X~Z{9$IU9qP6H4Xd?JfST%K2ZgbD(&Uo zHZfda6M!BA&_e*)BnG$(TKvK|gN#$HZ0R<?=?u%lw8kv+%u+4)EYsPJCOxUHan+M% z6149abKQsE;w`PM?gP(p6oKH<?+LDhmfGYU)N63C1i$<RA)e0AGzWE$I)Kz^@87Dh z3P3CIj~~=ck*ZF$PzOC}&T)!ooY;@Pv7gij-mw@;G1C1nKYuBzjq-zs0c;nfE|ZrY Y-?oO31t8!@xc~qF07*qoM6N<$g4HyLSpWb4 literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/light/images/move_down.png b/installer/resources/themes/console/light/images/move_down.png new file mode 100644 index 0000000000000000000000000000000000000000..d82b5d45dcfd3fe251ef497ce48108cb251109be GIT binary patch literal 325 zcmV-L0lNN)P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pF_en%SR5*>D(>+Q<K@`RDAEdPstg-{EfUVeN4FPvxBQ^ouf{U;c zEbPQ88%W~{6dOfI?e|A~T4V+$!+kO4z`%Pm=l$=wmwE7spK1-YYZ&;aaG4&;gEw>o zNH?98-fx`4W_qbXX94Im0KJz*Pg*MV3P>*~IK_S)`KvO0U|e{{X|MF$qEp8{##4}L z7lR;8gYBSw>v*h^HMmQwsrD}-NY-J3)h*U7%?&ux8XoXceOR}2un3a1hvx;Ld%=Js zb#Q}8OPZZ!AXx*v2B6V@AX!(qHb3-@RX}~So11^?qg5bTBeQ!ovE+c;v}M*(|1aY& XgZ+fDxsXG{00000NkvXXu0mjf;#`J! literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/light/images/move_top.png b/installer/resources/themes/console/light/images/move_top.png new file mode 100644 index 0000000000000000000000000000000000000000..55192cf79bd3ce5bb58ab0323eed2d3f05b2bab7 GIT binary patch literal 325 zcmV-L0lNN)P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pF_en%SR5*>5(mhH8Q51&ZM+LD62!bFCSh;}gBMWd1E+DN7a1Vlo zU?JGq3RYP}8W99b5ho@?Of0;Co0&72_`zw;J>Sduxvc9DQ!G2;2gkW_w+7lzk!xkn zwWBM60w?I<5eF$h#Q<M;$6MeHb%`?Ts7$$kslY^YH<R?XwXR!0C2qEb^!;6B)5ZGR zfSxeh0Gi>s3o^hwFxJ8IR2ym!;~Hpz*A$By=p}g?x<IA5kMk7uy;aGxrXD_mkw#g~ zC>Ze*M>*)KrJMXZ(KV~&1*e(|{>EJ}{%v}zFa8YfTR_ndE?Phjf{~UO29TA8L4EZL Xwg-;nhc4HW00000NkvXXu0mjf(6)lH literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/light/images/move_up.png b/installer/resources/themes/console/light/images/move_up.png new file mode 100644 index 0000000000000000000000000000000000000000..e512dbdc2d1682d38bd58edaa248aff3cbde7863 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Q!3HFy+4N(86lZ})WHAE+-(e7DJf6QI1t@sM z)5S5wqIc;eN3Ny>f!6)Z70e5bcku3UzhHaE?eq&7#|i9$Sr^waZxQ)EbJ^C6x*2uH zx72(PJNN&Y;bR+#V}2H#h95+Z1^4thDBJwc-o%n+8mPN<z5v5cqrx*!b4{)}q)LPy zNL%B{F{Q0DS#y@7%#T0jcG(wej^4@G!(F;IRe?|a-tud_;fbqX@fN%^{&@bal-QxR zcU^NWSR4}9OwsgBTNCl%XyR34-z6p!4MSOT<{q&6&U-`p_4_Bj+42W?6sGduKXJ<I mM)H)VxetyQ6ngN~er1}Z);!0lMNby!KL$@%KbLh*2~7a>p>lr! literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/midnight/images/move_bottom.png b/installer/resources/themes/console/midnight/images/move_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..349fe2d5046056bb6e6f3082b2ef063268bcfeb9 GIT binary patch literal 497 zcmV<N0S^9&P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGqe(<TR5*==lCf^oP!L7$9S4+x7A<Q(SNuRKYI=Gk3O)cu2pYDD zM3HI<AVjq-5)xk!zJP)@9}p@(dqK2l746z{Dey+#w+3Ei-#b2Y-;CKb&05k8?4DUs z6t6LI>biab;B2Uo+?b?ulHJgdbXrwakwU7fDkPmIkWSLMx%&)&5))?jCIy+<E0U=! zcb{2VmY0&=N!kp|Ly`|;j7M7`#&|^X5rD%%@(sziWm#St0J!_y%&vxQ+`T2a7^Gad zdz&P@YTNb<0IqY!7@q)mPjWbTC;3=X2jCL`8>Rv9EQGMw0ZGc5rujxPNXoV{fY?8W zZGAuBnCJQ3?V_$b^yaa&J9kMFNt2{0Bpna8y|;q8uD<}d2jFJv^=D1;Yo6!#cjlE= zNqP$4;4csWIB@spskjFUAzYCB2w*h=SpoPELb&)Z2mrdSJHg1c0npuFj(sx<D$BA4 zFi%pg0L*)Dze6fiRaInJc8BCGcmIq(f4NIqo7n?Nzq+pbo&tA3%jNR6yZ=aZjnvA_ nCe!Kk=fAF|<eekQ(;EB+;lasi@|=Nl00000NkvXXu0mjf*udGW literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/midnight/images/move_down.png b/installer/resources/themes/console/midnight/images/move_down.png new file mode 100644 index 0000000000000000000000000000000000000000..c9152a3a005daaa7e896e26f872232e24ee6bd4a GIT binary patch literal 498 zcmV<O0S*3%P)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGq)9|UR5*==P(N!FK^%Q=_6!jug~f&0-Dw2-d;&j$r67_Ikj}<~ z0|f~oV6;;S*xA_HSjA2(t*w>a->L{UiYB@2Jexb2o9x9`&Ai`l-k)LDb*GXpVHuOE zsvctiW_Az2LCTTrU5xPvK%WjI?KVwQ<swbfRFZZxIs$m@ilUeRVCDel+>>0$IroTU zPS5(jzw5mB9|61saGVU+N#1JPc56YjZM#MCHh}fC63Iyj!5jd@7#{!_E#-~zjO1bR z=rG23mZkaZy?>6hl9?R<*a2`Q)g!qrsR!^1fJ<f~d7~`L_e(-e(_D4VeIj{T(juJz zwDWVF>`T&{x~^|7-v4t5A^ae@58zMYN=ciNHd9kcCz5v3j%iekMx$qveggQN{LLE4 zwX~9RZW=<cl|tk3_?M);d8Jh_@BP!9bU9H~)e8V$NPZhqA$f;npY!L0=1cb_Z4BtV zEz9!VpurFc0A}_9zy^Tp03hkKD2m#9|9xoxT%rV1lGjMi=J$uIME(miJ2JCb*L7bd o6&LMZln5lJ0HUPrp$|^+7vONDRgw^63IG5A07*qoM6N<$f@QtlFaQ7m literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/midnight/images/move_top.png b/installer/resources/themes/console/midnight/images/move_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b743ff473eea18cda0dda3d895784e29cb4f48c8 GIT binary patch literal 519 zcmV+i0{H!jP)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGxk*GpR5*=|Q$34QQ52jxcZo49q}}-P)JCurZM4xJkOd1XYeCpv z(JIA)ji6ZQKkx_G_#3Pgn^Y2;eK(j0HVQ7AyfZd0*_)f};(^<okC{2cxkM7<@wnS= zx2FIu;QVki+w1juKbHwhtDR1#1)!A;sd;HIN8U&r9UT=RgguhG?*0)#yD1%;*+9~t zx~_keWf{}CogAoXh%v@tLll;z?tZT*io<QYZYWx+GP7?0E@q{_?tU#-17sepl4gh4 z^aTJELU{3CimIx*LGtriBmi8}t$x4%^;|_}_8P$A3=jZVkbJu_m#G;@x{KrlB%Me) zN!nTfZdX+`*a{>mkbFa~Z7Y&fl2as}kp#(iqtU3f0Tg3=Ea{4*kOBdC+PoEzq#)^1 zx7&TR0tbNEY__{tEGkLebS08silVsF5Pgz#ljKST$=`KdUoFe>mjS?hJ|DV!XKiP* z9Z3fX@PV1F9k9E%&Fnb<a59-(mh>H`7YqQ$06r8&@h}~XF}?@z0H@yu0BU!?ZUA0o z2163u{Ry&g_h-`josxu^y)*##GlM~Lxa}L1Wf@5hGtxkE{~tq%zBfM=p>hBK002ov JPDHLkV1kir+j0N^ literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/midnight/images/move_up.png b/installer/resources/themes/console/midnight/images/move_up.png new file mode 100644 index 0000000000000000000000000000000000000000..937e4266fea11848e0ea610f4f9a686e29d3626d GIT binary patch literal 452 zcmV;#0XzPQP)<h;3K|Lk000e1NJLTq000sI000mO1^@s68wM|200009a7bBm000id z000id0mpBsWB>pGc1c7*R5*=|ld)<PQ5c24b0?z~q5*M=9R@UDCn9!&`U)wm^bOJ* zZDij-qS#sI0elAqJKsPNmOGG@bScEUJIBHy+`a5>^20ReKmWPs=llZ~RE+UB#&~=Y zPurS(-#@Ya1whi%$z<|%6E|!Vvi$)VfWh|1ZQPAQec!(X9*mp-+#j*EwRW}ne11Kp z^b@#Uw0_rhz1K9&*`*vU7K_)mcT3#%?sB<&dnre=*{lsA`~a@58?c>h-|f0CZgo^u z)e%sw69JH<k+a!R9(U&8?<jC3hb2AB&!Kd5#Q(VSffGq5fLHbXDIYu+8l!z!h#NQ@ zzg#Ftx|g4W;5_bMz^!~GN#EPHeGCv|{AT-6vEpf6*LRwxIST+Or9(+KSFDDxWBVWz zJ_sS~<Q&^KQc6<*ZHW61@VRZ<7y01$^F9ZzW$;qcUZ|?-y`=IbhGBR`QNu92vAu#x u0(cjIecM&hoR$X%&~;suG%X&jfc<~e%&L_LfI^o50000<MNUMnLSTX=;K?=s literal 0 HcmV?d00001 -- GitLab