From d18c75741a44cd3739ebca9fbf0f50d91c857ddc Mon Sep 17 00:00:00 2001 From: skaman82 Date: Fri, 30 Oct 2015 01:03:39 +0100 Subject: [PATCH] CLI Tab rework --- images/cli_backdrop.png | Bin 0 -> 19089 bytes images/cli_backdrop.psd | Bin 0 -> 21426 bytes tabs/cli old.css | 53 +++++++++++ tabs/cli old.html | 10 ++ tabs/cli old.js | 202 ++++++++++++++++++++++++++++++++++++++++ tabs/cli.css | 23 +++-- tabs/cli.html | 7 +- 7 files changed, 286 insertions(+), 9 deletions(-) create mode 100644 images/cli_backdrop.png create mode 100644 images/cli_backdrop.psd create mode 100644 tabs/cli old.css create mode 100644 tabs/cli old.html create mode 100644 tabs/cli old.js diff --git a/images/cli_backdrop.png b/images/cli_backdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9b3c87745dd8fc6c4024330df8aa6d441d0d3d GIT binary patch literal 19089 zcmeI32~-nFw}6|$0c3GkM8pZ8f=E_KLShI)SY;Ck0`5)H2@yzQ5@m5j5J6lyNF>I%uvi$eM8p$>KmZW_DAR|}_GzDD-TmaPoohn$ZdZ}_WDShB-L~jS zNwduiM~_>OV7UL`WUmY39UMmKU&&5T-LWHj`(!V3?X8**)LRS>?1(*>u=U!fr|S*| z->c|;ezW)FeP&x>S7u3_dZmW;US|t0aOvPS_cuX6&MfrVILrOAfpcYx^34{7UEfF-*PC#z&90hozUf;|v44=Ai# zwABIdCjgUpuGKW)0Tv**`0<>9qo;t%+HqRP0S#?{;FS~CE+ z03bVQGCbR^p77c+#kIAR9i?MdU|*hB>oW=rZ0>EXD-h2IfTyyk`d)K<$+YNsYSE#+ z2WEAS3RRo!^&c4&ItuF;zU8=ogSeLkht_u1f%QMF58nZMbj zX0HjWci5+I?;;&C+G4kB&ZSwm`?$}V%s;6zo5;Y?RZNw2N!Z+F9M$)(Cgc2NmCw2X z;7z&c!mp+ps?kBQPwT?^Ufc9IWzPblc`mzF1Hf|onK<^f5}V5!0AQaTV|LV5|LujT z=9OyGFMQv4LF@BM$|k#+)m3)m>@>O2(K4% zD&Ny%ti@wLf*M&DOeYj;4$Xv%`QhY@Pkx{5>8x=VGSMv>g9vGx#iB*O#qiA%&CJ00tAF|6^UT!y+NuS5t>aoP zTh*XclCAH-bnnNx``P2kiHq%u_Lq7e@!Fg_(Q-{X?Ply07uQ2Y2lm{V7Ni^0EjaQ* zc4qwJJu^H~Zu#B5-tP1w<%R0oFm0Xq$+4Fc_@;UpQ`M*P^}?neNp(A{cW0a4Wj29I ze3jakHa1P<>u*+S_T%KFYnpo&?3uks-we;r%Rij|Bwx$7%lA4vF>krg`eH|43!mn^ z(ZB93@XgO$_{vA$ho3hucXK{JSH!mYB`Tn2i(0@%w~L;vU%ax9t!S>O!Dw;xO2W+z zgLMkx*Tj&kXCJ%y@W-`g<*7Xe<=d?D^Y+tN77Hx=O1!&v^K8_cQ&)f3C-WHHW}1`I z6}9!rq}Owv&Cx$>=~hOBmImkVP1);T;9THU;PmP&rMM#}^YB@R@_b^OV3 z>~=xT(&m}Xp*5j32WP9zHk|G1{?ffO-P^tF@SMZ*+~&DmzIo&3ft&Zz$Qjne`=qvv zwv783O{Z2a4qt3unp=7rayj0z_;5gHX@xLuF)iSbzwhE@C5}azMYHae7nSFX&nfdr z_9)1@$G>>=_tLASd8hP_wmwj6C@u{xT@UgDb@`_*6<_R3KAXJ$%=({ttkrckKO9qF zu-G6?%x&H77k_qOBt{&nN(9#}M&PP{&+T9E0JamR_T%P*70b|q}v z;=1uVE`^E9(64!X*qa$;HJVTPnKs4|74pno`X;FE4qL5)SwX z>F*NaI-Q0yE2aoT&NY4R=-T`&^O;ujI^9(Km1W|H{k2tZ<8r3t;U<{V_s(}q@UYtb zU$*1Sa;I#c^=4w&tR0#WRR&djBYZujKH&jtso4yVH_m46k-PqtR6&lIdCB6Cd287w zlf0c3ZaQv{Gw4}U($``_N!IkU#MoU)J6GG~8@eZ#@?Y|w^VVK3gyN3(UJ`CQg`crU z{c3Q@&cg2lu$rZIhhMN4o8C85KhB5zc;|0!xklStkTv&a$BmL}4Lhm(UjN+JF`;V0 z(_N*9;$8i)2L8{_7OtWlXRMBB&}^Rk{oMFPYK4r`TT9JC?|K$=_@xv_ot+)&9vrj$ z!nKVTPO1dI((=`8ja&b!@qWiLPk($s(@F4Se5O8g@|LZ|lNxkWCU1CP+8Exdzgcwc zd|Kn~6L|&IW!yU6ZC?BHC)lhdWA^5!JWm-T)Oq;mgih0<6CLl~J2c=^Zkjff$Ck3n z4xVS6u7Gl`*4~_F!~TW+mi>`U>Ad~;BzXUWu)b4&UB!FLf8A|ZQqkSRyn3#|SH;); zF7Gb%$>mc?w@vYu{PqufKZPzU@(5ksaar}YYLB|{n9}=Yzuq;tZO!&hyf^oi)0oRY zoa@be9fsAR==lD$ujZMt*gm4Ay?b<1_Y58SqqW=D6+TtJ^TS#Lz5#xfUHY4J#|)qJ zPfG%qobkNDtiSj2N#tjzh9Ac6vt$HBEa+li6+CL+cqf_vrfz%Yp3L=8xIY?KHXJBj z*T$)BS~XVm`ph`l)7uVx+uG(;%&T4c=Cth1@rKrkey9D?kI+|yzLdRW^d{f&yj;Go zJiWMVX>eI*joA25z>1}-Qx^cs*%CPLN`bMX2wYb>2-lTVlV_DxPrX^mF z*NK0XWyPe?p4mux+CS&8>bP~Yvvhk8^jinkatK6A43&l>k||Ug)f_{DKjR5jcoG3i zpwY<|bOH(Ui5TCy?+Y z5*F6LN+X0aFdQqC8V@)b^kWZ6ITC?bCJ+fRa=&1pXpPL;$VlE1^7t~ZP%+YxQ2K=( zOc5Urit$7o0Y8!vmxI`d*GNM8hsNdLp%5q(63V2o9dSfE7^%BEVme}Xp`jyMN@Wgf z;Te1(GNPrF9U+GB-jGzZM#6y{*1{t(9%=AWnKv{97lkWWeMCp%!K2K`<3cWf6QfMP z`^G@zSH5Wmg$ur6CciRZ)*n*?x0(S{r?VswC=*H8B2fr)AY6wIV(>Xk9-bIecaS3x z%1>u=82I5vL!mR|53&bk5EHf~V~GT;1%XW<&@HKSB4I9pNGA{!oD66V^WhFJBQ7Wd zzv0D7(aTr5!~KZ30$v0vFGHFNKDZn@Pb3KiWlTXR$cOM^A)kRCYE;ndk6*frP$~n3 z9LU9<2{+&b0xsPu5VV9BItk`Lfv}b!fsCb*KoXW`1qE7BX%r6Cg4~b8-CfcAPp<7n zoHg<#1iK!{He3-0c8`P-on%EJP^lac8wk-jSR#>Xg#}4g5EkNsAdzZGh2Rf^9Vs~b zQ%9Z>0h|oM5Ct9iT)6VNkT_OW9EgCWQpiNCCBce>wc>EeSV|z50)Z4V*NVy+>|z8r zf9lFvAcZ3@LLnmIxa?1NKG5o~TL&+M2>R2O7?emM`Kq=y8eG;$oov08D_*XFhb{}Cuknpb-%7CkWt#3P#ig>axPy*TV z;Rr#uiU<6DZ8*FG2422Jgb4l@ZiN(F`_FDfAdN~RkU<_61VJ*qt|&ZgAcsSeOJp9% zBXIk}{h!|mB-i|3-iV<{<^+L4KE!3>2ZMO9;XioqI3nR%Nb+|U61-eNxHN(!QYKF# z3dMk8afpBe$`>Vmt&sbrwm@q%XY@{8r_lbzZeW2b zoS^#yVxSd1pTl1b;F0eJ6k-LbD*ye$(1iZ|z7dbgP7oAm1SKvsln@;yE(8S{L5T|u zB}7Mw3qgTKP~t*E3DHsFLQtR)l(^7PLUfe45EN(xB`!3S5FI5h1O*yFi3<%SL`R7W zL4ih4;zC0S(NW?;P@oZ%xX@5SbdB`yR78bOH*4JAZJi3>r2Mo{8HLkZDQ z;zCfM5tO*lP(pN+xDXU*1SKvsln@;yE(8S{L5T|uB}7Mw3qgTKP~t*E3DHsFLQtR) z{t}nw(7){=A^aEnF!;ap=Zs{2@c-~J9A|HL0EnCg0MW4k@JAo~-VOk32mtVMB>>P< z0YF!@YsDo;SXa-*-j*HyDDXpHpN(qlo;`Orz>Pp(pDHlz)2M=%r`{XOKf5@1*caQa G-1y%fgyDq% literal 0 HcmV?d00001 diff --git a/images/cli_backdrop.psd b/images/cli_backdrop.psd new file mode 100644 index 0000000000000000000000000000000000000000..c8b318784c70af4a187c58bd9449f2e7bb42daf0 GIT binary patch literal 21426 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 literal 0 HcmV?d00001 diff --git a/tabs/cli old.css b/tabs/cli old.css new file mode 100644 index 00000000..c019ebe4 --- /dev/null +++ b/tabs/cli old.css @@ -0,0 +1,53 @@ +.tab-cli { + height: 100%; +} +.tab-cli p { + padding: 5px; + border: 1px dotted silver; +} +.tab-cli .backdrop { + border: 1px solid silver; + background-color: rgba(0,0,0,0.75); + + margin-top: 10px; + height: calc(100% - 80px); /* - (p, textarea) */ + background-image: url("../images/light-wide-1.svg"); + background-repeat: no-repeat; + background-position: 50% 80%; + background-size: 600px; +} +.tab-cli .window { + height:100%; + padding: 5px; + + overflow-y: scroll; + overflow-x: hidden; + + font-family: monospace; + color: white; + + box-sizing: border-box; + -webkit-user-select: text; +} +.tab-cli textarea { + -webkit-box-sizing: border-box; + + width: 100%; + + margin-top: 8px; + + height: 22px; + line-height: 20px; + + padding-left: 5px; + + border: 1px solid silver; + + resize: none; +} +.tab-cli #content-watermark { + z-index:0; +} +.tab-cli .window .wrapper { + white-space: pre-wrap; +} \ No newline at end of file diff --git a/tabs/cli old.html b/tabs/cli old.html new file mode 100644 index 00000000..5bec1778 --- /dev/null +++ b/tabs/cli old.html @@ -0,0 +1,10 @@ +
+

+

+
+
+
+
+
+ +
\ No newline at end of file diff --git a/tabs/cli old.js b/tabs/cli old.js new file mode 100644 index 00000000..df8f3ebc --- /dev/null +++ b/tabs/cli old.js @@ -0,0 +1,202 @@ +'use strict'; + +TABS.cli = { + 'validateText': "", + 'sequenceElements': 0 +}; + +TABS.cli.initialize = function (callback) { + var self = this; + + if (GUI.active_tab != 'cli') { + GUI.active_tab = 'cli'; + googleAnalytics.sendAppView('CLI'); + } + + $('#content').load("./tabs/cli.html", function () { + // translate to user-selected language + localize(); + + CONFIGURATOR.cliActive = true; + + // Enter CLI mode + var bufferOut = new ArrayBuffer(1); + var bufView = new Uint8Array(bufferOut); + + bufView[0] = 0x23; // # + + serial.send(bufferOut); + + var textarea = $('.tab-cli textarea'); + + textarea.keypress(function (event) { + if (event.which == 13) { // enter + event.preventDefault(); // prevent the adding of new line + + var out_string = textarea.val(); + var out_arr = out_string.split("\n"); + self.history.add(out_string.trim()); + + var timeout_needle = 0; + for (var i = 0; i < out_arr.length; i++) { + self.sendSlowly(out_arr, i, timeout_needle++); + } + + textarea.val(''); + } + }); + + textarea.keyup(function (event) { + var keyUp = {38: true}, + keyDown = {40: true}; + + if (event.keyCode in keyUp) { + textarea.val(self.history.prev()); + } + + if (event.keyCode in keyDown) { + textarea.val(self.history.next()); + } + }); + + // give input element user focus + textarea.focus(); + + if (callback) callback(); + }); +}; + +TABS.cli.history = { + history: [], + index: 0 +}; + +TABS.cli.history.add = function (str) { + this.history.push(str); + this.index = this.history.length; +}; +TABS.cli.history.prev = function () { + if (this.index > 0) this.index -= 1; + return this.history[this.index]; +}; +TABS.cli.history.next = function () { + if (this.index < this.history.length) this.index += 1; + return this.history[this.index - 1]; +}; + +TABS.cli.sendSlowly = function (out_arr, i, timeout_needle) { + GUI.timeout_add('CLI_send_slowly', function () { + var bufferOut = new ArrayBuffer(out_arr[i].length + 1); + var bufView = new Uint8Array(bufferOut); + + for (var c_key = 0; c_key < out_arr[i].length; c_key++) { + bufView[c_key] = out_arr[i].charCodeAt(c_key); + } + + bufView[out_arr[i].length] = 0x0D; // enter (\n) + + serial.send(bufferOut); + }, timeout_needle * 5); +}; + +TABS.cli.read = function (readInfo) { + /* Some info about handling line feeds and carriage return + + line feed = LF = \n = 0x0A = 10 + carriage return = CR = \r = 0x0D = 13 + + MAC only understands CR + Linux and Unix only understand LF + Windows understands (both) CRLF + Chrome OS currenty unknown + */ + var data = new Uint8Array(readInfo.data), + text = ""; + + for (var i = 0; i < data.length; i++) { + if (CONFIGURATOR.cliValid) { + if (data[i] == 27 || this.sequenceElements > 0) { // ESC + other + this.sequenceElements++; + + // delete previous space + if (this.sequenceElements == 1) { + text = text.substring(0, text.length -1); + } + + // Reset + if (this.sequenceElements >= 5) { + this.sequenceElements = 0; + } + } + + if (this.sequenceElements == 0) { + switch (data[i]) { + case 10: // line feed + if (GUI.operating_system != "MacOS") { + text += "
"; + } + break; + case 13: // carriage return + if (GUI.operating_system == "MacOS") { + text += "
"; + } + break; + case 60: + text += '<'; + break; + case 62: + text += '>'; + break; + + default: + text += String.fromCharCode(data[i]); + } + } + } else { + // try to catch part of valid CLI enter message + this.validateText += String.fromCharCode(data[i]); + } + } + + if (!CONFIGURATOR.cliValid && this.validateText.indexOf('CLI') != -1) { + CONFIGURATOR.cliValid = true; + this.validateText = ""; + + text = "Entering CLI Mode, type 'exit' to return, or 'help'

# "; + } + + $('.tab-cli .window .wrapper').append(text); + $('.tab-cli .window').scrollTop($('.tab-cli .window .wrapper').height()); + + // there seems to be some sort of initial rendering glitch in 33+, we will force redraw/refill + $('.tab-cli .window .wrapper').css('webkitTransform', 'scale(1)'); +}; + +TABS.cli.cleanup = function (callback) { + if (!CONFIGURATOR.connectionValid) { + if (callback) callback(); + return; + } + + var bufferOut = new ArrayBuffer(5); + var bufView = new Uint8Array(bufferOut); + + bufView[0] = 0x65; // e + bufView[1] = 0x78; // x + bufView[2] = 0x69; // i + bufView[3] = 0x74; // t + bufView[4] = 0x0D; // enter + + serial.send(bufferOut, function (writeInfo) { + // we could handle this "nicely", but this will do for now + // (another approach is however much more complicated): + // we can setup an interval asking for data lets say every 200ms, when data arrives, callback will be triggered and tab switched + // we could probably implement this someday + GUI.timeout_add('waiting_for_bootup', function waiting_for_bootup() { + CONFIGURATOR.cliActive = false; + CONFIGURATOR.cliValid = false; + + if (callback) callback(); + }, 5000); // if we dont allow enough time to reboot, CRC of "first" command sent will fail, keep an eye for this one + }); +}; \ No newline at end of file diff --git a/tabs/cli.css b/tabs/cli.css index c019ebe4..65c10d9c 100644 --- a/tabs/cli.css +++ b/tabs/cli.css @@ -2,22 +2,29 @@ height: 100%; } .tab-cli p { - padding: 5px; - border: 1px dotted silver; + padding: 0px; + border: 0px dotted silver; } .tab-cli .backdrop { border: 1px solid silver; background-color: rgba(0,0,0,0.75); - margin-top: 10px; - height: calc(100% - 80px); /* - (p, textarea) */ - background-image: url("../images/light-wide-1.svg"); - background-repeat: no-repeat; + margin-top: 0px; + height: calc(100% - 90px); /* - (p, textarea) */ + /* background-image: url("../images/light-wide-1.svg");*/ + background-image: url("../images/cli_backdrop.png"); + /*background-repeat: no-repeat; background-position: 50% 80%; - background-size: 600px; + background-size: 600px;*/ + border-radius: 5px; + /* box-shadow: inset 0px 0px 30px rgba(0,0,0,0.80);*/ + float:left; + width:100%; + } .tab-cli .window { height:100%; + width:100%; padding: 5px; overflow-y: scroll; @@ -28,6 +35,8 @@ box-sizing: border-box; -webkit-user-select: text; + float:left; + } .tab-cli textarea { -webkit-box-sizing: border-box; diff --git a/tabs/cli.html b/tabs/cli.html index 5bec1778..5bae7795 100644 --- a/tabs/cli.html +++ b/tabs/cli.html @@ -1,6 +1,9 @@
-

-

+ +
+

+
+