From 7b81cf1be85619cebd3d29df14c5ef98dec70cbe Mon Sep 17 00:00:00 2001 From: Chen Meng Date: Sun, 14 Jun 2020 16:23:42 -0700 Subject: [PATCH 1/5] Create proposal --- IMC_Electron/IMC_Chen/.DS_Store | Bin 0 -> 6148 bytes .../.DS_Store | Bin 0 -> 6148 bytes .../proposal.md | 46 ++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 IMC_Electron/IMC_Chen/.DS_Store create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/.DS_Store create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/proposal.md diff --git a/IMC_Electron/IMC_Chen/.DS_Store b/IMC_Electron/IMC_Chen/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9b69894f660dd50466764921239b5e429ff98404 GIT binary patch literal 6148 zcmeHKOHRW;41I zJxShT90QQmp}GJT0OnLhysMdt?yFAZ#3Mqa@{9^gyrIPb-6Z>XKx;2?%Ze>_qxvQ8 z8SC(jo~Kr*={?bJvFG}RcF&3}?&$Z#77gRC^m;tftGQcqx91t$d)ai&u5BLdU5~#^ zM1z4~AQ%V+f`Na)fc9R>{LCNx|R|icQ0f;k(i_kB#1TkrV zm>ma0Mkr#XL@N~^F~rIlPo9?@2SY1|`0yeAWbp|_%F}s%D(R4H7&aIP2F47W+H#@& z|BCv<{68*=RWJ|?{3!-xw%)8){3P$KlaJG0o2b{+PhoCJrzx$NSXwa`+KSJ=3_L@JN?kfKzL5!unI)>qz|0?j(lIC%sCy=U7yqn1e+VfGEJ!TqEZO&- zo?|4R!8@$e{zfU-Kg#+HmJxuuf zhkkh3^}~)8{&;uv>r)t4GASShq<|EV0#e|23V83OEmw((Qa}nwfiDI8`_Sl)UE!D* zpALo?0f-Bx!?=!Fg4jGk> Outline your learning/teaching structure: + +**Beginning (2-3+ sentences):** +{{Introduction to Electron with it's features, advantages, and requirements. + Electron installation, environment setup and configuration. +}} + +**Middle (2-3+ sentences):** +{{A step-by-step guide to front-end-only Hello World example. Source code provided. }} + +**End (2-3+ sentences):** +{{A step-by-step guide to a more elaborated Electron application that has a Node.js backend. + Source code provided. Links to Electron documents and APIs. }} From 7dacbc3d0156440bc6b4f648a546ac3d2c095119 Mon Sep 17 00:00:00 2001 From: Chen Meng Date: Sun, 14 Jun 2020 18:50:56 -0700 Subject: [PATCH 2/5] Add solution code --- .../solution/.DS_Store | Bin 0 -> 6148 bytes .../solution/index.html | 47 +++++++++++ .../solution/main.js | 27 +++++++ .../solution/timer.js | 74 ++++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/.DS_Store create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/index.html create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/main.js create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/timer.js diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/.DS_Store b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..222490f902d174b41d9331dc78f01babb2e2b870 GIT binary patch literal 6148 zcmeH~%}PTt5QWcZ!HaIX(`A;f3a;IRQWvg$0j(|Aa<$+OxV*39Q|g%?#openA~FNX zNt2o6=7S~~05W}9oB?A14U4L1W5Bd~aA+@__o-rYykdeoJmVhiz(jwsOTYaPD?DI< zCBA+CWxKhZx0^Y~70x-!>AM+QzybGoV{sF#@znEv>v=b1vSP#%k0i9?FULK9T_G(A zB!MK51d_nd5a6Ay)*QKJodl9V68IvZ=R;vpt)ZQ(9UZJJ1)z@DZN|1fmo=t@*3izC zBQ)_)s)tIX7~k+^odXAjfppO@A)31hh Vt~!hMTR1fz0tO_jB=8FaJ^)>EGo=6k literal 0 HcmV?d00001 diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/index.html b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/index.html new file mode 100644 index 0000000..26b10db --- /dev/null +++ b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/index.html @@ -0,0 +1,47 @@ + + + + + + My Timer + + + + + + +
+ +
    +
  • +
  • minutes
  • +
  • +
  • seconds
  • +
+ +
    +
  • +
  • +
+ +

00:00

+
+ + + + \ No newline at end of file diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/main.js b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/main.js new file mode 100644 index 0000000..8688fad --- /dev/null +++ b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/main.js @@ -0,0 +1,27 @@ +/* +Author: Chen Meng +Date: 5/18/2020 +*/ +const { app, BrowserWindow } = require('electron') + +function createWindow() { + // Create the browser window. + win = new BrowserWindow({ + // Dimension of the window + width: 230, + height: 170, + // Starting position of the window: topleft + x: 0, + y: 0, + // Window is not resizable, minimizable, or maximizable + resizable: false, + minimizable: false, + maximizable: false, + webPreferences: { + nodeIntegration: true + } + }) + // Load index.html upon creation + win.loadFile('index.html') +} +app.whenReady().then(createWindow) \ No newline at end of file diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/timer.js b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/timer.js new file mode 100644 index 0000000..ace8c3b --- /dev/null +++ b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/solution/timer.js @@ -0,0 +1,74 @@ +/* +Author: Chen Meng +Date: 5/18/2020 +*/ + +// dialog is used to show message box in the app +const { dialog } = require('electron').remote; + +// Input and display fields +var minutesField = document.getElementById('minutes'); +var secondsField = document.getElementById('seconds'); +var display = document.getElementById('display'); +// Stores the timer used to count time +var myTimer; + +// Start Button +const startBtn = document.getElementById('startBtn'); +startBtn.addEventListener('click', function(){ + let minutes = parseInt(minutesField.value, 10); + let seconds = parseInt(secondsField.value, 10); + // Check for valid inputs, if not valid then timer won't start + if(minutes >= 0 && minutes <= 59 && seconds >=0 && seconds <=59){ + minutesField.disabled = true; + secondsField.disabled = true; + startBtn.disabled = true; + stopBtn.disabled = false; + var timer = minutes*60 + seconds; + // Start timer + myTimer = startTimer(timer, display); + } +}); + +//Stop button +const stopBtn = document.getElementById('stopBtn'); +// Disabled at first +stopBtn.disabled = true; +stopBtn.addEventListener('click', function(){ + // Stop the timer + clearInterval(myTimer); + clearTimer(); +}); + +// Function to start the timer +function startTimer(time, display) { + const timer = setInterval(function () { + let minutes = Math.floor(time/60); + let seconds = time%60; + minutes = minutes < 10 ? "0" + minutes : minutes; + seconds = seconds < 10 ? "0" + seconds : seconds; + + display.textContent = minutes + ":" + seconds; + // Time's up when time == -1 + if (--time < 0) { + dialog.showMessageBox({ + title: "Time's Up!", + message: "Buzzzzzzz, time's up" + }); + clearTimer(); + clearInterval(timer); + } + }, 1000); //set the interval to 1000ms (1s) + return timer; +} + +//Resets the fields and buttons +function clearTimer(){ + display.textContent = "00:00"; + minutesField.value = "0"; + secondsField.value = "0"; + startBtn.disabled = false; + stopBtn.disabled = true; + minutesField.disabled = false; + secondsField.disabled = false; +} \ No newline at end of file From d2370946e2f828083d5621e9f3e06c9b489fed85 Mon Sep 17 00:00:00 2001 From: Chen Meng Date: Mon, 15 Jun 2020 10:57:20 -0700 Subject: [PATCH 3/5] Add written deliverable --- .../.DS_Store | Bin 6148 -> 6148 bytes .../1.png | Bin 0 -> 20100 bytes .../2.png | Bin 0 -> 15365 bytes .../3.png | Bin 0 -> 15827 bytes .../4.png | Bin 0 -> 17812 bytes .../blog.md | 281 ++++++++++++++++++ 6 files changed, 281 insertions(+) create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/1.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/2.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/3.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/4.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/blog.md diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/.DS_Store b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/.DS_Store index d5ab928b8e305c337334e2fedf7f30503b1b4cfe..f327864fea6d75e737f0893a13606793e75edcea 100644 GIT binary patch literal 6148 zcmeHK&5P4O6o0eZy2%D4g0L%i2zXczMY`>->*6KUT|p2Ov$zL8x`_#GAkLJ0Y!9Un z1h1Y&uYTaaq5cv6AL3cxd=%QoT-`3u(s(kGmJ#8`p^8T-NGI2!lu%Xb*f z{g_6ns3&VYJ&tL}#ywWhFcW-LT*MFke28_7Ywk&juL58iX5ZeNOgj6wT25!TJ8e0W zy}fqJ+3DV#PEEtOvUT^-^WxQ;cke%Z{Pg+jH<1MdH+*526wcr~1{G0Gy_6=54sdLi zH{)wOGX>O7VOVFj0zI)-Kr3)w72x}WgU-=aSV|OI2R7mgfY`upVHoqnnCCbOU4^AY z96=*86;Y-Vb;Teu9s3={a}|~nWjYXb`5CJzu~2NHo}wrt0|NsP3otO`GZZrM-#jN diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/1.png b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/1.png new file mode 100644 index 0000000000000000000000000000000000000000..12db2acca8ef2d1d53772e5dc7571124a9440b7c GIT binary patch literal 20100 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 o#Rf)=#Ak{=h?-E+?K+<)NaN%ron?&|KU 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 HUcmnYTOvoJ literal 0 HcmV?d00001 diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/3.png b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/3.png new file mode 100644 index 0000000000000000000000000000000000000000..aed726ad58679442220eade2cf0079e661ba88c9 GIT binary patch literal 15827 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 z + + + Hello World! + + + +

Hello Electron and hello world!

+ + +``` +### Running Your Application +After finishing our hello world project, it’s time to run it! To run, simply type this command. It will execute the “electron .” command we have set in package.json. +``` +npm start +``` + +A window will show up in your computer: +![screenshot](./1.png) + +Watching the window show up is very exciting! yet … a bit boring. So, why not create a more interesting program? + +## What Electron Can Do: Build A More Complicated Application + +For a more complicated application, we are going to build a small timer widget that lives on the top corner of the screen. The source code can be found in this Github repo. + +### Step1: Start With the UI + +First, let’s build a basic UI for the timer in index.html. It should have two input fields, one for minutes and the other for seconds. It should also have two buttons to start and stop the timer, and a text field to display the timer: + +``` + +
+
    +
  • +
  • minutes
  • +
  • +
  • seconds
  • +
+
    +
  • +
  • +
+ +

00:00

+
+ + + +``` + +Then, we can add some styles to the fields and buttons to rearrange them. This is a very basic UI, feel free to make it look nicer: +``` +.container{ width: 300px; } +ul{ padding-left: 0px; } +li { display: inline; } +input { width: 50px; } +button { width: 80px; } +#display{ + font-size: 50px; + margin-top: 20px; + margin-bottom: 20px; + margin-left: 40px; +} +``` + +### Step2: Implement the Body of the Timer +The next step is to implement the body of the timer in timer.js, which contains the button listeners to start and stop the timer. It also has the timer function which counts down and update the UI accordingly: + +``` +// dialog is used to show message box in the app +const { dialog } = require('electron').remote; +// Input fields and display fields +var minutesField = document.getElementById('minutes'); +var secondsField = document.getElementById('seconds'); +var display = document.getElementById('display'); +var myTimer; // Stores the timer used to count time + +// Start Button +const startBtn = document.getElementById('startBtn'); +startBtn.addEventListener('click', function(){ + minutes = parseInt(minutesField.value, 10); + seconds = parseInt(secondsField.value, 10); + // Check for valid inputs, if not valid then timer won't start + if(minutes >= 0 && minutes <= 59 && seconds >=0 && seconds <=59){ + minutesField.disabled = true; + secondsField.disabled = true; + startBtn.disabled = true; + stopBtn.disabled = false; + var timer = minutes*60 + seconds; + // Start timer + myTimer = startTimer(timer, display); + } +}); +const stopBtn = document.getElementById('stopBtn'); +// Disabled at first +stopBtn.disabled = true; +stopBtn.addEventListener('click', function(){ + clearInterval(myTimer); + clearTimer(); +}); +// Function to start the timer +function startTimer(time, display) { + const timer = setInterval(function () { + minutes = Math.floor(time/60); + seconds = time%60; + minutes = minutes < 10 ? "0" + minutes : minutes; + seconds = seconds < 10 ? "0" + seconds : seconds; + + display.textContent = minutes + ":" + seconds; + // Time's up when time == -1 + if (--time < 0) { + dialog.showMessageBox({ + title: "Time's Up!", + message: "Buzzzzzzz, time's up!" + }); + clearTimer(); + clearInterval(timer); + } + }, 1000); //set the interval to 1000ms (1s), function body is executed once per second + return timer; +} + +//Resets the fields and buttons +function clearTimer(){ + display.textContent = "00:00"; + minutesField.value = "0"; + secondsField.value = "0"; + startBtn.disabled = false; + stopBtn.disabled = true; + minutesField.disabled = false; + secondsField.disabled = false; +} +``` + +### Step3: Configure the Electron Window +The last step is to configure main.js, the entry portal of the program: + +``` +const { app, BrowserWindow } = require('electron') + +function createWindow() { + // Create the browser window. + win = new BrowserWindow({ + // Dimension of the window + width: 230, + height: 170, + // Starting position of the window on screen: topleft + x: 0, + y: 0, + // Window is not resizable, minimizable, or maximizable + resizable: false, + minimizable: false, + maximizable: false, + webPreferences: { + nodeIntegration: true + } + }) + // Load index.html upon creation + win.loadFile('index.html') +} +app.whenReady().then(createWindow) +``` + +With index.html, timer.js, and main.js ready, our timer app is good to go! Let’s run it and see how it behaves. + +Step 4: Play With It +By running npm start, this window should pop up on the top left corner on your screen. It has two text input fields for entering desired minutes and seconds. +![2](./2.png) +We can set a countdown for 1 minute and 5 seconds, then press the start button. The countdown begins. +![3](./3.png) +After counting down to 0, the alert message shows up and the timer is reset. Our timer widget seems to work well! +![4](./4.png) + +## Conclusion + +This guide should have given you an overview of how to build a simple cross-platform desktop application with Electron. If you have trouble following this guide, I suggest learning more about node.js before moving forward. Happy hacking! + +Relevant Resources: +Electron Official Beginner's Guide: https://www.electronjs.org/docs/tutorial/first-app +Electron Official Documentation: https://www.electronjs.org/docs +Electron APIs: https://www.electronjs.org/docs/api +Node.js Introduction: https://nodejs.dev/learn From 90e68c2cc361cafbe1a98f04bcc4ddd55aebb0db Mon Sep 17 00:00:00 2001 From: Chen Meng Date: Mon, 15 Jun 2020 10:57:20 -0700 Subject: [PATCH 4/5] Add written deliverable --- .../.DS_Store | Bin 6148 -> 6148 bytes .../1.png | Bin 0 -> 20100 bytes .../2.png | Bin 0 -> 15365 bytes .../3.png | Bin 0 -> 15827 bytes .../4.png | Bin 0 -> 17812 bytes .../blog.md | 280 ++++++++++++++++++ 6 files changed, 280 insertions(+) create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/1.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/2.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/3.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/4.png create mode 100644 IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/blog.md diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/.DS_Store b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/.DS_Store index d5ab928b8e305c337334e2fedf7f30503b1b4cfe..f327864fea6d75e737f0893a13606793e75edcea 100644 GIT binary patch literal 6148 zcmeHK&5P4O6o0eZy2%D4g0L%i2zXczMY`>->*6KUT|p2Ov$zL8x`_#GAkLJ0Y!9Un z1h1Y&uYTaaq5cv6AL3cxd=%QoT-`3u(s(kGmJ#8`p^8T-NGI2!lu%Xb*f z{g_6ns3&VYJ&tL}#ywWhFcW-LT*MFke28_7Ywk&juL58iX5ZeNOgj6wT25!TJ8e0W zy}fqJ+3DV#PEEtOvUT^-^WxQ;cke%Z{Pg+jH<1MdH+*526wcr~1{G0Gy_6=54sdLi zH{)wOGX>O7VOVFj0zI)-Kr3)w72x}WgU-=aSV|OI2R7mgfY`upVHoqnnCCbOU4^AY z96=*86;Y-Vb;Teu9s3={a}|~nWjYXb`5CJzu~2NHo}wrt0|NsP3otO`GZZrM-#jN diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/1.png b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/1.png new file mode 100644 index 0000000000000000000000000000000000000000..12db2acca8ef2d1d53772e5dc7571124a9440b7c GIT binary patch literal 20100 zcmeIZWmJ@1)G&;SAR>aKNJ@7|HxeQs(j6l;G)U(RND4?dNO$+pj7Ui{!~ipd(lvAr z_2GR#-}Am}eZRi{_pF(-`dE^swv9K(yF;Q0d4FpF);K(lJs$ewHIcVHs;gpvNpW`er4CwT#S#2 zXHuf8<7u5)- zhD%_4W=)`@lQH$d`1v!R^$Zw#UFEoU-Rz0+@FakA{DC^52;0veaQIW&weu^fp=G{c z3f7=E8FjY{w@^|n0F>noMl5F_$S?nw>61<@41*-fx8YbAe39cJ%X#z!-{c!Ghl%Ch zV&Xb22RKx8hJzrr)1)!^9WMeq9{eCuWKhDuXvpw6?2ms$AkvWbp2ED@Nlo~t!M9Jw zF0=z=7^A$w3ZfkL_<=27pOBtkhJ6pXi`_a_UmMspH*Ds}|BA4D654Y*ExQsQ6sIDbj&p*$^T1=ch2$?SYLCev5zpQDm-ZqN@=Oj}ebK)^L0NRmmweD@ z@(lYi+@xKyy%S}BEgiXr+#BxOy02;)P@vwfzCb>Y<5=Xm<$!Tt+MERMGL}PzwPXz-N4QVk~J#fb`=>c08e*)@VBq$-D1V2E=h?fr4^7v_~)ItabRAW8bpV z)05|%#@1>RY)iREUGl9!9WIqg-)3PD%|1b69^SzNbmDc^ViHx9Zzf5RK9|?E$*}C? zyR0yn)b2)PJLg>nkvpb4$#m4V+-VL%O(lTFooM>owtS=0vQ+J%BfB6t1_&)weL}~) z30R2(N43~AvRo=3O&*m)5z-9+zms({UIbBX3L!DU%Mqu5T{!rf^pAzU4Ore=-Wx;k z{1#Pd*#)*!4b!{2E4pOC$mtBVcj)k+{HgPxMCEb7`Q8#gjLqV57yGxy1Cda|HWgVX zNuGeGBI>CRuz$;+aXDMOi;yOe7Ur2jYhh1k=a67>p}2Z_&= zs4Ro)-nQgls}oOwwM5ylwFArK8|kvB<)U(d>QXR0exh_5&Y+%h5d@CPJB7USd_I`> zrji>y`neB*M0A#HwYfFV{7cqvOnnbmB5;26m`?DBq`C~d4;x#cKA4f#>T$5^JSz{a zkPx!x@t_eTGW=TEz4-I_C+3bv4T!?f;PK^8Zmyu!%#5sS=3Sl~R-PIZ*ALHRA~p6Aru9Gc7YMQLSjL zF0HTAJtdwYIl*JK8;D-bd8s z8oePn#=*^AE$PJLB^I;2rj8~#$0n;V_oN7w_JN(Y+yD&9)4_w$@Sy} zr{YNjjwlWjE*z(mFpp4!?1*fTbek}pXq^Z``jNPk;aVn`Hjj&t#YLyUa5bzXwIp)W z6vhN&<@Mmjt;MWWHp^e;U-ns!TV`CACDg-l4<`th3Ga`uDTuJhvFNmb5_1%?kuYep z2+&5w!DFANaK(YSWD|K~!;@MV__&7H>=-jRkPKJ)AN59!_Y#eo=3Cn%{7U@Nu9Y9Z z3!!>C@U-$NfP|4`AmTDYR*7G!NC`VJJ!w6uF!3gFj2*w6r&O<;QfEs;UsGGNumoQA zu^gw|yPTv%Lf1;CNqbBSTKxsaGbNk@D>~HF)aEm&e|sF6{7vVpP9r=Kk_yT8NIMIT z&Uvo55jdL41+8jwtldk^3ZPc3mfNrFjP0xjx7=bs!U_5mG=!Cnw}!_WI)mr`(&iN- z`NErbB4ENY3+g}{CGSa7NS-~W{|PnWRbr4iR;8mS6ph`I{BpD`R9#P zieh_ugq&0y#~e!riU#Tx29>5eRPf?T1<#1xXG?PykL)?@KO)=fNa~{+I!wbF>l=rf ze4VO4Wm_+yeyr9Ya}lO6*!W@aiZZiv@ylW^D^V-e4Ymy$u0Ae(F7qmvD#a@N1>uFj z`SbC{Zd2zY|_lX-F~>`n0)&9+dfuZ&1BrK z#{0ASK@34gY(#97TFQ7Uk6)^%p0cpH*ZYf1iFV)R^JjAJXV7#)rlmpqnSX zoZEBA5LAGBm3t$3)%N@e)q4pZ@A2JFYp=^>Ux!gM4l!FX`YSst+Ni84N~DS&rpy6S zCafn}Y{u~IsJKJ}B?;XM_Dd#Ut_m}gph+5wUskIY6~K5t8cI#!WMBK0=DWjAqB7>u z?4GP=QkT1li=~4cp%uXu;gj%Uiu%j?$$Dt!9H@v{L8N$-V|p&N-n>PpWn?3GEK|HG zohDUbEA+aSfCmA*gK7glfT#wEmUNeF-iW3A_H-dxI zZ_Knsti0b{8pwO~>J@_4GT9o-%53+xiBf(m^QIJW`)KU^8?iT!x=D1ru$@N=&k)b@!*}80<8}Fk<=W+^XuLTJ5{HKl zmnaStvuKH^hM1ru)BH720=dJk>TmFm=wq?<#o!DoNM)Zkr*P3BHD{tgL?M86LDpFo&u>&hC{0T;<&r zdXBm~x@5h99tyaAG0$DjIBKfehb#fOLpiIi-vgHQ%C1Xq>wV`eFT0iI*&GEtRm>{g z7hFJY^!DcTfpV`Mj32AL54pK{aAEKOBZ>m!L(GGmquJ3BFbT2CWk6gL9|P{lk5U%- zDdN_bvNEHsB1U|Y2?WxG3L_s1icJd&i_MERfCQfs%_b}$z(dn0E3pxiA=r>e?`fuQ z6xmq+C^sD~cL}=%{VpdVqmNvLTKn7OIO2Ed43n?>xuL42?-eyfJ{BtDl{*%^sMIf; zF29jaQHpt+-5anF+x>MibtHH$arBuJ#PoK=4A@UG^tRj=t|G?naAY4dS2)WoEGPC( zR9>XNW!F<;IT>ZLtiGbZquo*N=UICGSR+oA_cG8a4Upt-EUo+-m2>-h=Jm1Z?B`Jl zjTh;0>%_$+#xO8%Zf%@%?V;~E6C>rkZt840fAihSms8n>0VCGD(mMar0-Jj$#LR1o zV}UCuUjK8&#>IqUxMr4q|3^=YvGtm)>A_QRvTV;c(1x7agRV3E4SA9f^^9vYxlMdd|=6{z0XAtDTJ(k|7Pxe;vX!047kAyVaG+M@)~(RUMx( z;m?V$`JylNuZ~Yli(hocm68c?(<>ysgLc?@Q60WJ96{(UdBKohac(@H?Js_WL#0l- zJR+R7Cr_ec6s#z%M1TsCnK!$)@|#0rE%?XBxP(g|Ig~hIoXE;iM|=BAz?0U8hFz{D zlntzCv7(1NK}3Bjf9!BzT3Azba#+i6MxLRRTl-Hu$wgmgq^74K^$_}Eb3U`!!mT36 zmRBu1-du+|M@h%oWWtLS>eH&3S{9w|k#?UrrZ z3T`t*eNw4Q&VV#Vf2pd=`YKuf!2Y23pb#dp!p`JfR0_;pKO-#@Yv%Z}hFvbXvm+L1 zAC2fk#Gz1B&!|W;gERGw54hN?vga3@@xA5`?Pcgc0Yyn=c=pZM8rsWNDZ(%RZQby)yN5ES%Qw`Yd@}pktNcb^p)X<*8j6GKral^4UVRTA6LE%cG@TmxFUsA<$o%vk zr7JZX!38po7Jjk3;s&P7Xw6sq>Edx68o|q)OADtgODq6l?T*Oy3eaYi_I}ziZz8%_LT zU&*s!@pP)|lS5qoenIY=X|Jv;!@+ZOZyF;iyO({pe0oR6@HXY4C#|ye%kThS7ThV# z1|c*B6CQhj!%valqz5FJ+-yu`{ZswnXZ+Xvt_}E`T$5IOlxE+6PfgFvV5XK<#?o}T zsr1Q{@yY=^*yr?FZx$IO$-s;ce7@iZa>^(KQ^|YD^~ovs{92}4-e)XhIDcQNoL`7- zab%(Bvg}fSbo#V5B0XY9DRZ!t4Or$ijcrT54S$6h<(tlGfHo*cjEKTok6LL?xwd^N zKEHZKPAyc&V<6ONOK3l6C2H+4YczD7AP;*kru?g}Yp_4P3%xhWK%tUB1DV-n`E~Or zQnu2(IpNzR^Tw+b9$lLm)+RzvA$(xWgRumY=WW6s9Sg=g9WfSL-KgWV`K^q#jVNZsU{~40&!J=kYFiIJ z3qSh7yBa`n^$>%C1Ovj4A#97`74|$JjR?cy=hen_Kx|LKQ=W&83`i~cH#TGh&z=X` zt37u7V#PGThcG@KQn6)!Q(heqtnBExKD*)5wkM% zike?7MAP0ox?&ChqxouhhS+BjP|1M1c68?w?}+$&~aqQQ2l z+GqFg3JCa-o)bbaGM-qoD6#wEHcmxd3s#Uy;VgbwiDMFeQIP!TMOZ<6u_pV(FNNlq z=RiuyBCyOKt&6QN5z-c-ONB9I;+d4EM)QU+z0d#nyk8XpP6-4sisC&W)3}`y=L3k38FM4BnLQ=`}JSuPn$*vyu2OW25|5-mY zxS+qV!sL~CXd0jtvCT3~*@*3quO8%;_Aa(4AURVoB|4!h)#UpvThN1U0&^asVXa>k zUE=rN=HLKgbiF&;3i|WUX!xJ@LHTvyAMlTa;quVB)_cK?LXanR-G zt(g%!Kf-wzejbm~uqw>A*tJYron3{mG82mu<0i%@DzcH54cf|VbG({Lf64itV)I9< zu*56Sx7)g|?|%wl$}7xF5=F*9)Osapr5J*9-vCc9X8+nzxq+x|#^tk&BQJAib@Q_p zt~OlnSug4X+gX7%&i4qErZjl3|F;v#XW<%lYrI1bKRwqAmtd3C7lUdIpFbGc`?nu0 z27+eglqN17Tm_xSyKAK1X(-!?UJX~kp6bkj%=0MyO{!185Ek(R|6J~ zq@EoFkUx2CxAgQPh*%BNF_8C3R0TRyjXx28Arxq;Gm8-&SpM6Y7=Q4Q_SaVmk-7Ba zLOfpIaEl1*qusk9zrCCloTUzPFPeU#sSE0gwsRpx)O0>X&~b)ImvNJP*BrwFZVMhO zJ<|%Sr^(toc1;Octd+Wu#E-S#)vnn=HI=st%Fe# zYg_7&WOXyy*L&8|0qw4vWF=Fd0eTX}V4DEjMBCTiKek|7Vt_h5F#SRk6eJ@V8WQRs z{q@^5DG6BzWd`wB?fF^fFNUrgReb7?I?8Dm>^C)2aeF5V`zkq*_Q4;=;63} zvz7(#+sCOtS;Fzm;c zB;5E$K~W=#my@sBErq{hWpJM&U*+>S8qo*Q!h?OSNea6{J(VM zEM3iAY(Bf$I62b(rE6;D;Ek4eu3P7d$@VIc)0(U z_C2cj-&RpI8!t4-K~FG@3%|xsW|ulZoTAFz)rCc1_r;jqTE|8uLr11PdDS<>8A7P4%=i4 zLx{b8Glk{{+}vO-8N!J#CyPj$El^>#pT2kfgpN-&dxtLV>s*G{1q8GNGC!IPt6Y*S z^o?6LkkGgo5aSTFxz|$aA>Yu<`J(Gt8sF8N>zNa9G*0VR`^(1<2?8)MX+KjEvAElB z2}dvVyFZb}ct{{@@`SkTsgAa`B?tt9e1`pWc1+>twQv!R#sSb`Ja{5a%lj}yrmGG% zJeY4;UR5Ret4*WDNRWcOb^?v3<2&7`(|Y=R2>79?E0Vh*H>-#9Z(w+?Dy$^Hyg zw@sB|SbCgZ<86WN6%@aEGh_>FbvO(twG>pNuCY5evC`e`KzKy&)!}ZB))s&4nEF_u zZ&oN{1LdTl{cKP8%YKSG3kFj!FD=DUp?vxBNw&bx;Yi5o>6!k@)VrPeX-m#}ph2zI zZ-bZh6m109VG0$URq#+O?20lyl*eNVYHBpD4a$PNoelY}~2*b0t-aR>`PPqZULqj%_Oqz#~N|{-)Ze#-?`O2aY?4_Bkx1iRBtXq^0yUm4b;3SC^Z`Hc;>W;;%)8Qe%XCjAzLlstITvsbg`*lNEpK}*ZHp(lS zY|{h-nzv+2OE>FH9s{mfW>Dyn zsP9AqwH2P`^9HN=F264rn0c6iFLmxvOyzb?O?gO4xw zP}jIPQyBFSIX!2`w{bFy5~^;%L!QlkZ&BVIPS}`r7n%nOG|Jm?JfHidoq(E$n+`d( z^?KmL^{)CjJ4^WNkxd@KbEX|S&MX80Kh$5a*jyIdc9WJL6>5|pS`J;$Y0OkDj~eTo zF;dN~7V^(;4e?6SCoV|x@;Bij{Q!li*s(WAhl~utZ*w~@X{OI~qGl1dXU-7sn|9gX zvvj|Q3b=$Rbe1gdSS}HvOH8vcK5H>Z1Jd2UZDD;h6UEoQgQ~#J+_>?!7jbV8xAk1` zsCS^MY6__@Mgl-Jm#GQ>YX`pK5XMpc#tsO$TXe@E)oJnyf+&ijsI2N-^zm?nwCOlB z)PI!fb!2K z9FUu>*EhLn!_LH4jVLO)^ozpm&ysQ{{C3!ktU2eVB?oqJ4eKiwQ>3^X{%nV=aQ#ZJ zuuv`aNd%d1zS?2Ed;;g5HCXaMtCdUSoxNVMKSq0p{iv0vtv7Rz8c7vEl5!dlCo5)T z6zjPvmkS8&*5Xp5F?Os0c6{l@EiCX0aJ{Ji6CnH>)76g3U2Xk_z-(4mJQ5yqYjP0w z3CJxmw1@6x6Nr%(Tkmt#jwN(hEqOi~Hc)ju3 zmp@fX)gb;iR!IVA0@sqLY2MsoTG9K|du^Q+y#y-!m=K#8p%^VJ~bj%sfRJcypV$Y2rVUUYTYJ z%s|W-mXE<9PK%#1#6*o*kQELeBbSut9ULUhk*&@dBbhU{<@@cEtzpBYT>AEvoFk^; zTKzH6(X-pyJNBhx2iKCp4qLMhBYakRnUM=R(=8oCA5)uV*Bb@V8xQOXs2n0sCyZwvFMmi)q=e;8Rrw#66!We8*Hyg+q*mjjhilk>!ig zDf_qOInF9noz1i3x6sLp?(bOp|0-c4Lg9lUk{IQ4=U4x#<=;?YtSA5UVSHK1#4z(} zKgYNZ`)3ef=*hp-1Ag2}v3QkiSpTGv6Yt>@#J&qp5Bj15&p@g|P`~M8?3FEz!$j$% zs?Rpgl912cDUr;~v3ygD-Ol0~Z3AO2pLQ%xKR{4FUYy6Mw%{vttMzYt#%&w>3mtxT zpO>;8S9)^oiG#^Yc?jrVmoj_7RWXRGMV59;S99y80{&Cl(t2=`zU(iBQX|XVF0Ih@ z_i9-5=YxXl!6w;|>C5a)k&Bp|zT6UUqyEM(Mb>|3{WGNZF1p$=BD!yck;Nfe;w z)7x2y_c8E}YSB{LSMB3ZYyk#~>sS}49srJhC)bnw zgQNNjUS%vcN=0*kxtL9Eyfs2FYehDta4xiKJv+zbg z|9dnjltyYte{4|DaXxkHLhAM~M&I1r96mlC3tFY8893XWkX41 z>zmrwI3Zq#W;@5NH3kX{r7#B?C`+{LEXbjd~IP8yQXKi=g_5V zGs)FqHF~|dmV*#-87C*FR1y<6nEd)f(s%8MqO=7VvFgLKx|ELLsgF^K0=S1g)--n) z{U}))bS!AcaOsU|yy;X0%-wMxXWDJi59rLlk>&Mm`)-*GY7MyA*6sf4zkI9JX-B%g zOlr3ODCUQHXSu2tX|MVH?AL?hYxF@%?HzVH>GDz=r|m~c)$@QDpjL4m1dP?qZAruxH#3z zfoyTzh$i~LSvi_6V0TxSyc=D#Id7YdsjvK@OhJ*!seD^}Em3oKjoaV*JzHH$48k8k z%D9nzvukyB-!|vx;RRJ1ROo(72`Zvl_H3SAYd-}$MWDY|>wPmc(}u>g(2UgWbl41m z+$)+(xy$wkp|VNeO*=8a<90&qKBtfwtDYyjnvm_^djdG$+F<tI7M5zPBP_@Wn;P zyXy@phmFz9qO_Su)CU-bbry=V5_7$h`c!Y=*5?qUBQCx1+=Ye%feFrWZp1EAmTdm6 z6Zkm8<4*`#sD25ia=2!FLO7&Mm(JsS!4pa4IsYP9+d=B?`Zy@H92_-2Q=xBu|5Bx7 z_!7U3iS4)lUcvXj=;qNpT9Y+wa?HG}s~*XglA_FaV0%Tdd3}eTf&P3Z%?F&bZt(BM z6AEsf2I9RLmAu;JA$Sq#e|NQXwI6xu;#zZDxISJLCcgUmcEdNBT7$sN@v=Za2uKtW zse^G6ue#iBH&Zn(iATU7Y#XU(9U{GZ!W?K(PCkG>-RTB18aK*+I9jD-6B+g|lRdXv z8$&fMQFG9o{dWX>c; z_}}&?>O~inNHQ97I%^o&?cc(=tRib)Xzx>-TSKn8h7b9!Y8Ko-@hTO?N*Y z^S?dDXMLq)v2=UZB-@r$z|ao%XXk*TK~ul4xcx7cuNKcc$$&|OxvHRTO;gBa2)Ezs zXAgUn6jj3&%{I?r!~5!3Sg&X~jGB3#MEYrZcj20R0xyl+OGnk&BwZ65@ZB2@*N&@& z{pYu6P+lxcb<6sztHT(7O2VS#4A0%!7nr)rL1ads-|7)2)86OR5M_n~=e#lAAM|u4 z39EqP;H4?9)=j$OE5EZsZV+obyT09)`oK+9+uqY~LtfB2Up6@~;GVl^cJF2M=l6Sr zyo|P&N#{Y~8`&4ep!YK6U7x~(8~(zGZra+jPa{>?_(MNQTEuEio!Qph6f6@e-93gu=SkbX?Ubr z;RRa4Z8E+R%Xh}u)7ZKmI1mwKwsy|fjS96AUm=H2Pm^FNZetU2o_@)2>J&Lqg=RZ| z#|~)0+Y0`dLx7(SIJ^@%Tj$U_(98F$4)8Wa<+1H=2H-20eT4**{fx-tqd znv58^nc(DLJs?c*D?-C!!2DnP*i8l78R=8h{Xo*M7_=>FcpS5B2W zAr7{C)A=gr{SWtVh}X3wy1nweBu+Sa$=g~@QY9}C6<0q9xf~`x$xu##4`G)Ll*L#5 z5mBksHZQPi!KF(<_Zm5y3h0#HvbIc{Ezq58eep=mW2-O)Yw;B&D_8AoIaL`z(tm|w z>B(7ZHV3rvdx>v9p(5TUTO<~C`iRYXmaEQp{#2Mtr(cS+VzU5+&W9<%)5@mK)5hRr0(CL zjA5hdnL*K%Mi!>=!%F>}XkGO@U&LeK#rbB2T~IT7$~0z?^?b zJ>wX&OmOoH@km}T04Z=hDZ-$aE)gDXpEyo~9uEtBAPv5@a44BCIz|)an)X$@t_IS= z35`ZtNvt^UY>KMR%KW$5Bch^XNP123D$N(*Ws%y=`G^qor$tpJ!~xa4iSF_+fh&Qnl---vW=Cc+ zq)b1=#2Y5a_#r$|((bH?QD$LD?dN#>WKWzI*nX`oK9n#gK2351|IvG+B#Xr6q=Lkp zsj5Lt4gDCxn0FW4r*mP+rTpDPG~%(FTLQHuAf-Ohu=p%sBH^pcg4Lp)R+qIw+KD6e z4V|Mz>Ft+|3Pbv}c?A^~?71)r+B;Z4Y^rwlS!qcnnqzVKHE#t+UFC^!1p_*PWaNX? zaoQNBWBQ@BzV6Seyp>gDOZ5(-5S7~j9hBOKB)_$*4%Q@;E=3PunR`)mCi`9l)jX?k zWqE#2Cwq2r0FmP}6*lE~N^v-)e6FP3gpS2>A{eCWhX{G2^{35wx#;S0}^SAW&oT}T#@*BEWj11@sId=8f4#GGS1;ZoP?F%J; zc2HGAOYw%fSR;Rlr4^$#r^B|5?ufyjjfmFOo{dCUUG<43exP-lT0NqD^ZJ!|PsH}X zj)s3a%id*Y_^EZ9oNkcR2*%yL4H{-?zMwE=8`5()1HE-`PGRlR8rT_~`%s~|gzw%t zV1Mi&$|O})$Gv*RzBG+h`Te~S<2>;b>EDYlQr*({bqcxUj2j3$ua~t6VQ&)UWRUz% zW9}y-UZ$+9k}k3(JkoHK_8l06sJ19vLtGoxp4r?{EM4@~d@oLmOV(#5TKD7U_8sYS zt5!kjy2Ry_+@vd7XY3Je{R!2JpST^=|FWH>$FCf#T1QfR{qiuu%TA|q?i5D4AT)XN z-gzqi`(EV0Og^jkPhAQD+Gg&^W!C2rwGqkk?lCIujVkqZ^qJ%lDL}0HHP9%+1b1>OI)Rwgo#)lKb(!*&!_c<;JX}Cl}X1o-Bi_@7ip-(@#WQ z@tv|`>wAG6ucL%)%H*(~|+%HaUX@&z)0pR=Aur8tx7@^TjR$f2yhZZ(f>G#zCPEc9(=Tju&RW}ZnS#Jjb= zF&>l3apYTArrBvTr*+Ox!rTaOn6ayiADe3AuC6{3M}NnSN){yHzL~(3z$?S{a*NUM zn+kK|BH@KuIg^=#X1se)?$y4=dO%(1q_mRYc6mfSIt8u2b}1Wjn=SXA7v9Z7C_ZQF z{@TC!-QfgiqFwy7R2A>a9o(q0Z&qd}ccYEJzxmz!daASi#+wRJPqk^4)P>a4Ew{vD6K#(Pt&c zbVkL1#0t0CtuOe--&?%|kQ2Sd%yVu*QvTy_mE(Nsv~ZR)_x-F0s3nq0_ge#!C=*ZI zU$76bzGi>DxmXZim3(-T6Bw)zbG)O#aFUn>^j7jnl0Rh;u@h0wD_zZVIFes34%2pX z3~wOJq?V4uS9){wc4K<%>2~gu5ji)m>3oH`-nSdt6GQ&Vs!|>~VYUp(Qun@bx3o0W zRDMA9EL~(>m0`PSdGofE`q>L*oEpEGvCsjNdVY}3L_+4pMfJ>6O808bUKn8&)+_Yo+rvbf^bRd9l_8yV2Kl4c_> zzcDZvA*w=@Fp~=Cjql1j!@->f%NuLuTAqnKyEG{AFXp3WAOH58Q|QuS7xX@0*WY4K?h)2 zq`NCkok+)=MP{NaF?CgMw>#^wOqYu+4NgTQP6}EX*Ud`N(^kZ|(}m!&9i9!Ez#sni zacT)VwF8FCEwib|DcqMOSd3VlGd4Y0F+NG-TKw@kGUNEsLmzR>JEXL7d>9NO{g`qw z%YsYgl4yzxIDHwh895ng=afHd6_3*UGTM_wjh+_dBVHp1<8e#nWU}x1C&!h=d7JTt z1|2L>%EM3{l#zMGh`m$vv-wAGIBB6OqbpuihJ%2jg=`! zJW2*7Z*@8%qVV{L`1I{*^9!X!+wxI%f6MZfX(nflxB#}eK^?lXyqDIBA0H(T=IMX$ zF$}`JQmLL4VogHjeBDktt zD{6B4ONgp`zfRMaguPK!K8V0sD}$J<*90Ve%5fygFj`ky!R%DLt$lUu!!R%U(T^Da zRFS07zxIysL2brtSYTJ@9Ya~Viqh|so^k{`%@kAPTRLrhH*luxqi3fywFyy(im`|e zKXoe6YCkenULsd#xbns{7^Ueys6S-YD=))w){3>-rdR&_6c?w~%T}#eGCx)Q-rCEj zC+IoYd`{(`$o1KHmXN69d5TvbjmT}rHcVN5K-&EVK-_4|O~RNIj+&9Y7f~Rywgyh8 zV~c+3s+%(1pCxZ<7rUv*kSSO6QumWm-w;7ute&o+5~1fzqX~`BBg*qcb4ySeb4=1U zZ0Efab^oAiIaksE+SD<-UhSIcEQ9|3#!`m3PMNZM86Mh5zv*6+@7Lx2jp0Q905OH0 zSCLcV{Tpb!*ne>WP4l=pzg`*spO_@egC3rUCy)M#a=yQhPp0|=AL9QLy3E5Q=w_jN z_HU}t{oz;B?H7Gg|G<4Elzx`~mFI8P5#!4g4sB?u!ppmV;gm3VztR2tH?pe19PqM; z+Vnc;AGrSp`Ws08Z|nYJhX2mdf0E&!`iuXB>R%=FA2a;N4FA~-_k}tCnOpZYY5y6J ze`Vr-%FyW$k1yhUFL<4WFaE9c>8F3NM@}81-f#8S)9vSdAi=JwEdb{F`jWbz>fy}mzokJ= zm<++Pva&h=fYj*e;e@aw*}wI)7!S7yVhNt(<0IEcGVoo>_<49fB}tj^9v=VtRg*L% zS;#?J`LZY}&GNRx{_)*jOp(tTJw5$;M#ZM!l@oaMmQE9lU}!X4!ygftRp8s^h9|s$v9KYMGXR~ zZF|PbA+{Na!ZCA7tsyaa6nHO@N9sfWn1u8l`fO_b%p=3bA`y z*0H7@)0QoLYVGStCV5r+u^azb@IKwQgw85 zG_MKlt1D}Wof_wXYh=o3OSL+>;yUNH!YB@aYimLK$3qlo0e~h%jaGwMR{y*@ZpIBo zyTZn_xnjI-%z1x}<=^B=P)`nLs%Q9h-+F~gt~X*X$=JI`*Y3QjHs^q6dA2*WM)z%x zd-osB>KXQpvIEYuC(nmESyI2C_59Y_qO~z)jBgbwSDQYuSNX82l1fNfwlYn5%NTFZ zn4fLuw~iiP=hn~bGG2%(TAE+GXU6nu@XlQJzP~zJY2Y+6PndFM$Z$C$a*&u>WFEfC zMwg{2%WpPyjjo95OsV(#G!;jD65^*k&~L;>WQcb*bGP1>DQmyhjp(>@1-RjTLqwyH z_A7l+5Vx%f=l-O>rBwtBkCjGuNP0$y7JnTCRJN~VLo7X^jiZM4#|WUIsoO8nCWnSU z2%U@tBPV)U5M()8tkRdKz9lkw_FG>(3bj{jrwL(@}{D zDSAs)D4=`PV)EOe2zR)euBDxBRn6Y5x|q$}mJVREe!3j#(4f}P*Y~d6Ce^mSNb3@E z3ZF-q=}ekcPDVh$(`-AtG|o$;dWNn+?oK;3rN?fgFOUtU8I2IZxuvR(u8-aa-IWeH zuGYTmMp)+_h_ep)j7g)0HFh|1J_NVIX~P2vDIa>3ZfL(19$C@%C@y7j6eXy&@QJ>| zcyZCku7uNIKURO}1PciPH#*G1ETbkj5aE%?iYj=1NA;$Wuc(;)_;h`Lgs%s(HI&f*f#=B%1RWJh5q9_*?gKx5zd|0a#}|BVtcaT|;CwZJ1d+JtEO9 z*pb_3d)+$shc^?ZWiA1d)j4?!L~YhM%&$Bewbj--z%+$;C|93~R?Fit+I`n>z|AN} zB_lm&;oGk=q^6sulkB_PXmWh~5fdWTkrGvGbH8#bm*!1J?#rZ3n9gU$gl3n_*@fJZ z`G#o&1mga#LqnDXsLOGGloL|c z(QRAIk2oPBMa-8@-`C{7LbiDR076EN1&7bP@DQy@D9A-ag2dQ`fDzKHzDU5UZhppB zA|LN;zc$Hp$)Tg$9kTmPv$D*osq)k-`R0|~k>Ct`+7P8yEihudd1F0Q9aISyZ5k;n z7f=&K?(i;-*N%jqo$0x2mS?uQeX&}7Ygm8nxN{URn$`AWeI(P8k+qBr=jW$=$2Ql? zSLJ0kHNBDRh=BU)Y|)V-pZ2TvP7-z28M>H)dW?+xmEc<*29F zYo^7`#>z=I>wqkcGTgJ-`UvVrD&NmKC=p+2&a+1zc`VjlLYAvYva%&;$U-Z8_f71q o#Rf)=#Ak{=h?-E+?K+<)NaN%ron?&|KU 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
Yk;ct)QX)lI^jOhR7EzgRii=Xa2uferiaMOG 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 HUcmnYTOvoJ literal 0 HcmV?d00001 diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/3.png b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/3.png new file mode 100644 index 0000000000000000000000000000000000000000..aed726ad58679442220eade2cf0079e661ba88c9 GIT binary patch literal 15827 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 z +May 19, 2020 + +**Objective:** +This guide introduces Electron and will help you develop your first Electron application. + +**Audience:** +This guide targets people interested in Electron but have little to no experience with it. It is recommended that readers have some experience in html, css and javascript since knowing them is very essential to build an Electron application. + +## What is Electron? +Electron is a framework for creating cross-platform desktop applications with web programming languages like html, css, and javascript. By cross-platform, it means that you can build and deploy your application on all major operating systems(OS) including Windows, Linux, and MacOS with the same source code. The reason why you don’t have to adapt your program to different operating systems is that Electron runs your code in a Chromium environment independent of your OS. So, let’s jump into our first Electron app! + +## Get Started: Hello World Application! +Of course, the easiest and simplest way to learn a new technology is to create a hello world project of your own, so we are going to build one. + +### Prerequisite: Installation and Setup +Before diving into our hello world application, make sure you have node.js installed on your computer. node.js is a javascript runtime environment that can execute javascript code outside of a web browser, and Electron also uses it to run your javascript code. + +An Electron application is essentially a node.js application, so the first step is to create a node project. Open your command line client and create a new folder to store your project, and in that folder, run: + +``` +npm init +``` + +npm will guide you to create a basic package.json file, in the end it might look like this: +```javascript +{ + "name": "Hello World", + "version": "1.0.0", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "your-name", +} +``` + +Make sure you remember the main field, since it directs to the file being executed when the program starts. In this case, the main field directs to file main.js. + +Next, we need to add a start script as instruction for Electron to execute current package: +```javascript +{ + "name": "Hello World", + "version": "1.0.0", + "main": "main.js", + "scripts": { + "start": "electron ." + }, + "author": "my-name", +} +``` + +With package.json configured, we have to install Electron into our project. It is recommended to install it as a development dependency: +``` +npm install --save-dev electron +``` + +### Writing Our Hello World App +First let’s look into main.js, the entry portal into our hello world application. For Electron, all of its APIs and features can be accessed via the electron module by using the require() function, just like every node module: +```javascript +const electron = require('electron') +``` + +The require function stores all of Electron’s features into the variable electron as namespaces, and each feature can be accessed via calling electron.feature_name. For every application, its life cycle is managed through electron.app. A window can be created using the electron.BrowserWindow class. We can access the features by calling: +```javascript +const app = electron.app; +const BrowserWindow = electron.BrowserWindow; +``` + +Or alternatively: +```javascript +const { app, BrowserWindow } = require('electron'); +``` + +For our hello world application, a simple main.js file can wait for app to be ready and then open a BrowserWindow, which then loads an html file as the main UI: +```javascript +const { app, BrowserWindow } = require('electron'); +function createWindow() { + // Create the browser window. + win = new BrowserWindow({ + // Set options for the window + width: 800, + height: 600, + webPreferences: { + nodeIntegration: true + } + }) + // BrowserWindow will load index.html upon creation + win.loadFile('index.html') +} +// BrowserWindow is created when app is ready +app.whenReady().then(createWindow) +``` + +Finally, we write a simple index.html to display our hello world page: +```html + + + + Hello World! + + + +

Hello Electron and hello world!

+ + +``` +### Running Your Application +After finishing our hello world project, it’s time to run it! To run, simply type this command. It will execute the “electron .” command we have set in package.json. +``` +npm start +``` +
+A window will show up in your computer:
+![screenshot](./1.png) + +Watching the window show up is very exciting! yet … a bit boring. So, why not create a more interesting program? + +## What Electron Can Do: Build A More Complicated Application + +For a more complicated application, we are going to build a small timer widget that lives on the top corner of the screen. The source code can be found in this Github repo. + +### Step1: Start With the UI + +First, let’s build a basic UI for the timer in index.html. It should have two input fields, one for minutes and the other for seconds. It should also have two buttons to start and stop the timer, and a text field to display the timer: +```html + +
+
    +
  • +
  • minutes
  • +
  • +
  • seconds
  • +
+
    +
  • +
  • +
+ +

00:00

+
+ + + +``` + +Then, we can add some styles to the fields and buttons to rearrange them. This is a very basic UI, feel free to make it look nicer: +```css +ul{ padding-left: 0px; } +li { display: inline; } +input { width: 50px; } +button { width: 80px; } +#display{ + font-size: 50px; + margin-top: 20px; + margin-bottom: 20px; + margin-left: 40px; +} +.container{ width: 300px; } +``` + +### Step2: Implement the Body of the Timer +The next step is to implement the body of the timer in timer.js, which contains the button listeners to start and stop the timer. It also has the timer function which counts down and update the UI accordingly: + +```javascript +// dialog is used to show message box in the app +const { dialog } = require('electron').remote; +// Input fields and display fields +var minutesField = document.getElementById('minutes'); +var secondsField = document.getElementById('seconds'); +var display = document.getElementById('display'); +var myTimer; // Stores the timer used to count time + +// Start Button +const startBtn = document.getElementById('startBtn'); +startBtn.addEventListener('click', function(){ + minutes = parseInt(minutesField.value, 10); + seconds = parseInt(secondsField.value, 10); + // Check for valid inputs, if not valid then timer won't start + if(minutes >= 0 && minutes <= 59 && seconds >=0 && seconds <=59){ + minutesField.disabled = true; + secondsField.disabled = true; + startBtn.disabled = true; + stopBtn.disabled = false; + var timer = minutes*60 + seconds; + // Start timer + myTimer = startTimer(timer, display); + } +}); +const stopBtn = document.getElementById('stopBtn'); +// Disabled at first +stopBtn.disabled = true; +stopBtn.addEventListener('click', function(){ + clearInterval(myTimer); + clearTimer(); +}); +// Function to start the timer +function startTimer(time, display) { + const timer = setInterval(function () { + minutes = Math.floor(time/60); + seconds = time%60; + minutes = minutes < 10 ? "0" + minutes : minutes; + seconds = seconds < 10 ? "0" + seconds : seconds; + + display.textContent = minutes + ":" + seconds; + // Time's up when time == -1 + if (--time < 0) { + dialog.showMessageBox({ + title: "Time's Up!", + message: "Buzzzzzzz, time's up!" + }); + clearTimer(); + clearInterval(timer); + } + }, 1000); //set the interval to 1000ms (1s), function body is executed once per second + return timer; +} + +//Resets the fields and buttons +function clearTimer(){ + display.textContent = "00:00"; + minutesField.value = "0"; + secondsField.value = "0"; + startBtn.disabled = false; + stopBtn.disabled = true; + minutesField.disabled = false; + secondsField.disabled = false; +} +``` + +### Step3: Configure the Electron Window +The last step is to configure main.js, the entry portal of the program: + +```javascript +const { app, BrowserWindow } = require('electron') + +function createWindow() { + // Create the browser window. + win = new BrowserWindow({ + // Dimension of the window + width: 230, + height: 170, + // Starting position of the window on screen: topleft + x: 0, + y: 0, + // Window is not resizable, minimizable, or maximizable + resizable: false, + minimizable: false, + maximizable: false, + webPreferences: { + nodeIntegration: true + } + }) + // Load index.html upon creation + win.loadFile('index.html') +} +app.whenReady().then(createWindow) +``` + +With index.html, timer.js, and main.js ready, our timer app is good to go! Let’s run it and see how it behaves. + +Step 4: Play With It +By running npm start, this window should pop up on the top left corner on your screen. It has two text input fields for entering desired minutes and seconds.
+![2](./2.png)
+We can set a countdown for 1 minute and 5 seconds, then press the start button. The countdown begins. +![3](./3.png)
+After counting down to 0, the alert message shows up and the timer is reset. Our timer widget seems to work well! +![4](./4.png) + +## Conclusion + +This guide should have given you an overview of how to build a simple cross-platform desktop application with Electron. If you have trouble following this guide, I suggest learning more about node.js before moving forward. Happy hacking! + +Relevant Resources:
+Electron Official Beginner's Guide: https://www.electronjs.org/docs/tutorial/first-app
+Electron Official Documentation: https://www.electronjs.org/docs
+Electron APIs: https://www.electronjs.org/docs/api
+Node.js Introduction: https://nodejs.dev/learn
From 6472d89139d00ad624deb217304f143e33bf279a Mon Sep 17 00:00:00 2001 From: Chen Meng Date: Mon, 15 Jun 2020 11:33:31 -0700 Subject: [PATCH 5/5] Adjust styles --- .../blog.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/blog.md b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/blog.md index ba529c6..180b4fe 100644 --- a/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/blog.md +++ b/IMC_Electron/IMC_Chen/build-your-first-desktop-application-with-electron/blog.md @@ -9,13 +9,13 @@ This guide introduces Electron and will help you develop your first Electron app This guide targets people interested in Electron but have little to no experience with it. It is recommended that readers have some experience in html, css and javascript since knowing them is very essential to build an Electron application. ## What is Electron? -Electron is a framework for creating cross-platform desktop applications with web programming languages like html, css, and javascript. By cross-platform, it means that you can build and deploy your application on all major operating systems(OS) including Windows, Linux, and MacOS with the same source code. The reason why you don’t have to adapt your program to different operating systems is that Electron runs your code in a ![Chromium](https://www.chromium.org) environment independent of your OS. So, let’s jump into our first Electron app! +Electron is a framework for creating cross-platform desktop applications with web programming languages like html, css, and javascript. By cross-platform, it means that you can build and deploy your application on all major operating systems(OS) including Windows, Linux, and MacOS with the same source code. The reason why you don’t have to adapt your program to different operating systems is that Electron runs your code in a [Chromium](https://www.chromium.org) environment independent of your OS. So, let’s jump into our first Electron app! ## Get Started: Hello World Application! Of course, the easiest and simplest way to learn a new technology is to create a hello world project of your own, so we are going to build one. ### Prerequisite: Installation and Setup -Before diving into our hello world application, make sure you have ![node.js](https://nodejs.org/en/download/) installed on your computer. node.js is a javascript runtime environment that can execute javascript code outside of a web browser, and Electron also uses it to run your javascript code. +Before diving into our hello world application, make sure you have [node.js](https://nodejs.org/en/download/) installed on your computer. node.js is a javascript runtime environment that can execute javascript code outside of a web browser, and Electron also uses it to run your javascript code. An Electron application is essentially a node.js application, so the first step is to create a node project. Open your command line client and create a new folder to store your project, and in that folder, run: @@ -119,7 +119,7 @@ Watching the window show up is very exciting! yet … a bit boring. So, why not ## What Electron Can Do: Build A More Complicated Application -For a more complicated application, we are going to build a small timer widget that lives on the top corner of the screen. The source code can be found in this ![Github](https://github.com/MCharming98/myTimer) repo. +For a more complicated application, we are going to build a small timer widget that lives on the top corner of the screen. The source code can be found in this [Github](https://github.com/MCharming98/myTimer) repo. ### Step1: Start With the UI