<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Faiz Byputra</title>
    <description>The latest articles on DEV Community by Faiz Byputra (@faizbyp).</description>
    <link>https://dev.to/faizbyp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1019951%2F7dfe117c-9c2b-4cb3-aee1-f8e18782ba46.png</url>
      <title>DEV Community: Faiz Byputra</title>
      <link>https://dev.to/faizbyp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/faizbyp"/>
    <language>en</language>
    <item>
      <title>Menggambar pakai JavaScript! Emang bisa?</title>
      <dc:creator>Faiz Byputra</dc:creator>
      <pubDate>Thu, 07 Dec 2023 06:09:17 +0000</pubDate>
      <link>https://dev.to/faizbyp/menggambar-pakai-javascript-emang-bisa-1fed</link>
      <guid>https://dev.to/faizbyp/menggambar-pakai-javascript-emang-bisa-1fed</guid>
      <description>&lt;p&gt;Halo, teman-teman! Kamu pernah kebayang gak sih, bikin gambar kayak di aplikasi Paint, tapi menggunakan kode? Yap! Kamu bisa mulai menggambar dengan menulis kode dari artikel ini. Pada artikel ini, kita akan belajar sedikit tentang grafika komputer menggunakan bahasa pemrograman JavaScript.&lt;/p&gt;

&lt;p&gt;Menggambar dengan bahasa pemrograman JavaScript bisa dilakukan menggunakan &lt;a href="https://www.w3schools.com/graphics/canvas_intro.asp"&gt;HTML5 Canvas API&lt;/a&gt;. Pada artikel ini kita akan menggunakan &lt;em&gt;code editor&lt;/em&gt; daring, Codepen sehingga kita tidak perlu melakukan konfigurasi apa-apa. Hal pertama yang harus dilakukan adalah membuka situs &lt;a href="https://codepen.io/"&gt;codepen.io&lt;/a&gt;, lalu mendaftarkan akun dan membuat &lt;em&gt;pen&lt;/em&gt; baru. Jika &lt;em&gt;pen&lt;/em&gt; baru sudah dibuat, maka tampilannya akan menjadi seperti di bawah ini:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7GGznxbG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9i61e1g2q3slhzqmgtk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7GGznxbG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9i61e1g2q3slhzqmgtk6.png" alt="Tampilan pen baru" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jika &lt;em&gt;layout&lt;/em&gt;-nya berbeda dengan di atas, kamu cukup menggantinya di pojok kanan atas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0aRcatyX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/exe9offxoglfju7i6gbp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0aRcatyX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/exe9offxoglfju7i6gbp.png" alt="Mengganti layout tampilan" width="571" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Membuat elemen &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; pada HTML
&lt;/h2&gt;

&lt;p&gt;Hal selanjutnya yang harus kita lakukan adalah membuat elemen &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; sebagai elemen tempat gambar kita akan di-&lt;em&gt;render&lt;/em&gt; nantinya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;canvas&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"canvasku"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"512"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"512"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/canvas&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pada elemen tersebut, terdapat atribut &lt;code&gt;id&lt;/code&gt; sebagai selector yang akan kita gunakan pada kode JavaScript. Selain itu terdapat pula atribut &lt;code&gt;width&lt;/code&gt; dan &lt;code&gt;height&lt;/code&gt; untuk mendefinisikan ukuran kanvas yang kita inginkan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mempersiapkan kode JavaScript
&lt;/h2&gt;

&lt;p&gt;Salah satu fungsi dasar JavaScript adalah memanipulasi DOM (&lt;em&gt;document object model&lt;/em&gt;) yang ada pada HTML. Maka dari itu, yang harus kita tulis pertama kali pada kode JavaScript adalah &lt;em&gt;selector&lt;/em&gt; untuk memilih elemen HTML apa yang akan kita manipulasi. Pada kasus ini, kita menggunakan &lt;code&gt;id&lt;/code&gt; sebagai &lt;em&gt;selector&lt;/em&gt; elemen kanvas kita. Setelah kita memilih elemen dengan &lt;em&gt;selector&lt;/em&gt;, maka kita akan menyimpannya ke dalam variabel &lt;code&gt;context&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;canvasku&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Untuk memeriksa apakah elemen kanvas sudah di-&lt;em&gt;select&lt;/em&gt; dengan benar, kita cetak variabel &lt;code&gt;context&lt;/code&gt; menggunakan &lt;code&gt;console.log()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eZmfCLTl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oz6idcjw2jtop2dqky6e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eZmfCLTl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oz6idcjw2jtop2dqky6e.png" alt="Log variabel context" width="782" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Menu &lt;em&gt;console&lt;/em&gt; dapat dibuka dari menu yang ada di pojok kiri bawah&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Selanjutnya, kita akan memanggil Context API 2D ke dalam variabel &lt;code&gt;ctx&lt;/code&gt;. Context ini digunakan untuk memanggil API agar kita bisa menggambar menggunakan fungsi-fungsi yang ada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu, kita sudah dapat menggunakan fungsi-fungsi yang ada pada HTML Canvas API.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hal dasar yang perlu diketahui dalam grafika komputer adalah:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Berbeda dengan koordinat kartesius, koordinat &lt;code&gt;(0, 0)&lt;/code&gt; pada layar komputer berada pada kiri atas. Sehingga sumbu x positif berada di sebelah kanan, dan sumbu y positif berada di bawah&lt;/li&gt;
&lt;li&gt;Seluruh gambar yang di-&lt;em&gt;render&lt;/em&gt; pada komputer didasarkan pada fungsi-fungsi matematis. Sering juga disebut sebagai &lt;em&gt;vector&lt;/em&gt; atau &lt;em&gt;path&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Meskipun gambar di-&lt;em&gt;render&lt;/em&gt; sebagai &lt;em&gt;vector&lt;/em&gt;, luaran yang dihasilkan dan dilihat oleh mata kita pada layar berbentuk &lt;em&gt;pixel&lt;/em&gt; atau &lt;em&gt;bitmap&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Menggambar garis
&lt;/h2&gt;

&lt;p&gt;Untuk menggambar garis pada HTML Canvas, gunakan kode seperti di bawah ini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Membersihkan atribut path sebelumnya&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;beginPath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// Memindahkan "pena" ke titik (x, y)&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;moveTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Membuat garis dari (x, y) ke (xa, ya)&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lineTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Membuat garis dari (xa, ya) ke (xb, yb)&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lineTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Menggambar garis&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stroke&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari kode di atas, terdapat 4 fungsi yang kita gunakan. Yang pertama adalah &lt;code&gt;beginPath()&lt;/code&gt;. Fungsi ini digunakan untuk menghapus atau membersihkan atribut yang digunakan pada path sebelumnya, sehingga &lt;em&gt;path&lt;/em&gt; yang akan kita gambar setelahnya tidak menggunakan atribut pada &lt;em&gt;path&lt;/em&gt; sebelumnya.&lt;/p&gt;

&lt;p&gt;Kemudian yang kedua adalah fungsi &lt;code&gt;moveTo(x, y)&lt;/code&gt;. Fungsi ini berguna untuk memindahkan posisi kursor atau "pena" yang akan digunakan nanti saat menggambar. Jadi, garis yang akan digambarkan dimulai dari titik &lt;code&gt;(x, y)&lt;/code&gt; pada parameter fungsi &lt;code&gt;moveTo(x, y)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Yang ketiga adalah fungsi &lt;code&gt;lineTo(xa, ya)&lt;/code&gt;. Fungsi inilah yang akan membuat garis dari titik awal &lt;code&gt;(x, y)&lt;/code&gt; menuju titik &lt;code&gt;(xa, ya)&lt;/code&gt;. Fungsi &lt;code&gt;lineTo()&lt;/code&gt; selanjutnya akan dimulai dari titik &lt;code&gt;(xa, ya)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Dan yang terakhir adalah fungsi &lt;code&gt;stroke()&lt;/code&gt;. Fungsi ini digunakan untuk me-&lt;em&gt;render&lt;/em&gt; atau menggambar seluruh garis yang telah didefinisikan sebelumnya. Pada fungsi ini, &lt;em&gt;line&lt;/em&gt; atau &lt;em&gt;path&lt;/em&gt; yang sudah didefinisikan sebelumnya akan di-&lt;em&gt;render&lt;/em&gt; pada kanvas.&lt;/p&gt;

&lt;p&gt;Hasil akhir gambar akan terlihat seperti ini:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pcxj1JNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7lm8yzvp8z9p9knyn22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pcxj1JNE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7lm8yzvp8z9p9knyn22.png" alt="Gambar akhir garis" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Menggambar persegi panjang
&lt;/h2&gt;

&lt;p&gt;Hal paling mudah pada HTML Canvas adalah menggambar persegi panjang menggunakan fungsi &lt;code&gt;fillRect()&lt;/code&gt;. Cukup masukkan kode berikut ke dalam file JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// fillRect(x, y, width, height);&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fillRect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dari kode di atas, kita menggambarkan persegi panjang dari titik &lt;code&gt;(0, 0)&lt;/code&gt; dengan lebar &lt;code&gt;200px&lt;/code&gt; ke arah kanan dan tinggi &lt;code&gt;100px&lt;/code&gt; ke arah bawah sesuai dengan koordinat pada grafika komputer.&lt;/p&gt;

&lt;p&gt;Dari sini akan tampak persegi panjang berwarna hitam dengan atribut panjang dan lebar sesuai ketentuan kode di atas. Agar lebih menarik, kita ubah warna dari persegi panjang tersebut. Untuk mengubah warna, gunakan atribut &lt;code&gt;fillStyle = "&amp;lt;WARNA&amp;gt;"&lt;/code&gt;. Letakkan kode berikut di atas baris fungsi gambar persegi panjang.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Mengatur warna fill menjadi hijau&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fillStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;green&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wU6IWuI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nat6miqy5ufrngtmg5kv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wU6IWuI4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nat6miqy5ufrngtmg5kv.png" alt="Persegi panjang hijau" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seluruh elemen yang kita gambar setelah baris kode di atas akan memiliki atribut &lt;code&gt;fillStyle&lt;/code&gt; dengan warna hijau. Jika kita menginginkan warna lain untuk elemen lain setelahnya, maka atribut &lt;code&gt;fillStyle&lt;/code&gt; harus di-&lt;em&gt;override&lt;/em&gt; dengan warna yang diinginkan selanjutnya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Menggambar lingkaran
&lt;/h2&gt;

&lt;p&gt;Setelah itu, kita akan menggambar lingkaran menggunakan fungsi &lt;code&gt;arc()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Membersihkan atribut path sebelumnya&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;beginPath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// Mengatur warna stroke menjadi biru&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strokeStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Membuat lingkaran dengan arc(x, y, r, start, end)&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Menggambar lingkaran&lt;/span&gt;
&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stroke&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fungsi &lt;code&gt;arc()&lt;/code&gt; digunakan untuk menggambar lingkaran dengan parameter titik pusat lingkaran, radius, serta derajat awal dan akhir dari lingkaran. 0 derajat dari lingkaran dimulai dari sebelah kanan titik pusat lingkaran sejauh radius dan terus berputar searah jarum jam. Gambar lingkaran akan terlihat seperti ini:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kme9pp6a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5cq6qpy7z6kl3iwrmk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kme9pp6a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5cq6qpy7z6kl3iwrmk1.png" alt="Lingkaran biru" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Menggabungkan gambar dengan konsep pemrograman
&lt;/h2&gt;

&lt;p&gt;Dari lingkaran yang sudah kita buat sebelumnya, kita duplikasi lingkaran tersebut menggunakan &lt;code&gt;for loop&lt;/code&gt;. Kita cukup membungkus kode pembuatan lingkaran ke dalam &lt;code&gt;for loop&lt;/code&gt; seperti ini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Membersihkan atribut path sebelumnya&lt;/span&gt;
  &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;beginPath&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Mengatur warna stroke menjadi biru&lt;/span&gt;
  &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strokeStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Membuat lingkaran dengan arc(x, y, r, start, end)&lt;/span&gt;
  &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Menggambar lingkaran&lt;/span&gt;
  &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stroke&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maka lingkaran akan terlihat seperti gambar berikut:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LvVIRDjr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/73t9v6we61cd0gjl5c06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LvVIRDjr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/73t9v6we61cd0gjl5c06.png" alt="Lingkaran for loop" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apakah kamu bisa menjelaskan kenapa posisi keempat lingkaran bisa berbeda? Tulis di kolom komentar, ya!&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Referensi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/graphics/canvas_intro.asp"&gt;https://www.w3schools.com/graphics/canvas_intro.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D"&gt;https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kode lengkap dan &lt;em&gt;preview&lt;/em&gt; dari Codepen dapat dilihat &lt;a href="https://codepen.io/faizbyp/pen/BaMMpYZ"&gt;di sini&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>beginners</category>
      <category>indonesia</category>
    </item>
    <item>
      <title>Cara Memasang Bootstrap 5 Pada Proyek React JS</title>
      <dc:creator>Faiz Byputra</dc:creator>
      <pubDate>Wed, 06 Dec 2023 07:08:34 +0000</pubDate>
      <link>https://dev.to/faizbyp/cara-memasang-bootstrap-5-pada-proyek-react-js-2j3p</link>
      <guid>https://dev.to/faizbyp/cara-memasang-bootstrap-5-pada-proyek-react-js-2j3p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Konten ini merupakan konten &lt;em&gt;mirroring&lt;/em&gt; dari situs Medium dengan beberapa perubahan. Lihat konten orisinal &lt;a href="https://medium.com/@faizbyp/cara-memasang-bootstrap-5-pada-proyek-react-js-a600be3e98a9"&gt;di sini&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bootstrap adalah &lt;em&gt;framework&lt;/em&gt; CSS yang sangat populer. Bootstrap dapat membuat &lt;em&gt;styling&lt;/em&gt; UI pada situs web dengan cepat melalui pendekatan &lt;em&gt;component-based&lt;/em&gt;. Selain itu, saat ini Bootstrap juga mendukung &lt;em&gt;styling&lt;/em&gt; dengan pendekatan &lt;em&gt;class-based&lt;/em&gt; sehingga tampilan UI dapat lebih dimodifikasi sesuai keinginan kita. Jika nantinya diperlukan, Bootstrap juga dapat dikustomisasi lebih lanjut menggunakan &lt;a href="https://sass-lang.com/"&gt;SASS&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YfQzrMI1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcpp77d2s9o9zcfu3cgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YfQzrMI1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcpp77d2s9o9zcfu3cgu.png" alt="Landing Page Bootstrap" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jika kamu sudah familier dengan Bootstrap dan ingin menggunakannya pada aplikasi React JS, banyak opsi yang bisa dipilih. Salah satunya adalah menginstal Bootstrap melalui &lt;a href="https://www.npmjs.com/"&gt;NPM&lt;/a&gt; pada terminal. &lt;/p&gt;

&lt;h3&gt;
  
  
  Mengapa Bootstrap standar? Bukan react-bootstrap?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;react-bootstrap&lt;/code&gt; menggunakan komponen dengan &lt;em&gt;syntax&lt;/em&gt; JSX beserta atribut-atribut &lt;em&gt;style&lt;/em&gt; yang harus dipelajari. Jadi jika kamu sudah familier dengan Bootstrap standar, kamu bisa lebih fokus mempelajari struktur React JS tanpa perlu mempelajari atribut-atribut yang belum perlu dipelajari.&lt;/p&gt;

&lt;p&gt;Berikut akan saya jelaskan sedikit mengenai cara memasang Bootstrap 5 melalui NPM pada aplikasi React JS.&lt;/p&gt;




&lt;h2&gt;
  
  
  Membuat Aplikasi React dengan Vite
&lt;/h2&gt;

&lt;p&gt;Vite adalah &lt;em&gt;tools frontend&lt;/em&gt; yang terkenal akan kecepatannya dalam membangun aplikasi. Dan karena &lt;em&gt;command&lt;/em&gt; &lt;code&gt;create-react-app&lt;/code&gt; sudah tidak lagi direkomendasikan untuk membuat aplikasi React JS, maka saat ini saya akan menggunakan Vite.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu, tulis nama proyek, pilih &lt;em&gt;framework&lt;/em&gt; React, lalu pilih varian bahasa (saat ini saya menggunakan JavaScript).&lt;/p&gt;

&lt;p&gt;Instal &lt;em&gt;dependencies&lt;/em&gt; yang dibutuhkan dengan menjalankan &lt;em&gt;command&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian buka proyek dengan &lt;em&gt;code editor&lt;/em&gt;/IDE pilihan kamu. Struktur foldernya akan terlihat seperti ini:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K5syP7xa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bl4fqmux0pyic98e9uk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K5syP7xa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bl4fqmux0pyic98e9uk1.png" alt="Tampilan Struktur Folder Pada VSCode" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Menghapus CSS Bawaan
&lt;/h2&gt;

&lt;p&gt;Kita tidak akan menggunakan CSS bawaan dari Vite. Maka dari itu, kita akan menghapus kedua &lt;em&gt;file&lt;/em&gt; &lt;code&gt;App.css&lt;/code&gt; dan &lt;code&gt;index.css&lt;/code&gt; pada folder &lt;code&gt;src&lt;/code&gt;. Kemudian hapus beberapa baris kode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.jsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// main.jsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./index.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Menginstal Bootstrap!
&lt;/h2&gt;

&lt;p&gt;Kita masuk pada bagian utama. Kita akan menginstal Bootstrap versi 5.2.3 melalui NPM.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;bootstrap@5.2.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kemudian &lt;em&gt;import&lt;/em&gt; Bootstrap pada &lt;em&gt;file&lt;/em&gt; main.jsx&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../node_modules/bootstrap/dist/css/bootstrap.min.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Jalankan Proyek
&lt;/h2&gt;

&lt;p&gt;Masukkan &lt;em&gt;command&lt;/em&gt; berikut untuk menjalankan &lt;em&gt;development server&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--epk7bCZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d43eurp8q2s3bpj9rbos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--epk7bCZR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d43eurp8q2s3bpj9rbos.png" alt="Tampilan Aplikasi" width="645" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jika tampilan sudah seperti di atas, selamat! Bootstrap sudah berhasil terpasang. Berubahnya jenis &lt;em&gt;font&lt;/em&gt; yang ditampilkan menunjukkan bahwa &lt;em&gt;framework&lt;/em&gt; Bootstrap sudah terpasang pada aplikasi React-mu.&lt;/p&gt;




&lt;p&gt;Terima kasih banyak sudah menyempatkan waktumu untuk membaca. Ikuti akun ini atau follow saya di &lt;a href="https://twitter.com/faizbyp"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>bootstrap</category>
      <category>webdev</category>
      <category>indonesia</category>
    </item>
    <item>
      <title>Create a modal without JavaScript!</title>
      <dc:creator>Faiz Byputra</dc:creator>
      <pubDate>Thu, 01 Jun 2023 10:01:31 +0000</pubDate>
      <link>https://dev.to/faizbyp/create-a-modal-without-javascript-6eh</link>
      <guid>https://dev.to/faizbyp/create-a-modal-without-javascript-6eh</guid>
      <description>&lt;p&gt;Hi there! Recently I found out that HTML has a tag named dialog. So what is it and how to use it? Let's find out together and make a modal with it!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; is an HTML tag that represents dialog box which can be used for many thing such as alert, subwindow, or a modal. Commonly, people use JavaScript to make an interactive element that manipulate the actual DOM. But now HTML has a tag so that you can make a modal easily! So let's get into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the modal window
&lt;/h2&gt;

&lt;p&gt;First, you need to declare the &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; tag with an id that will be used to target it when we want to open it with a button.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;dialog&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"modal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Click Close or press esc to close modal&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"dialog"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&amp;gt;&lt;/span&gt;Close&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dialog&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Anything inside the &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; tag will be shown in the dialog box. Here we have an &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, a &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag, and a &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; tag with a &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; wrapped inside.&lt;/p&gt;

&lt;p&gt;A form with &lt;code&gt;dialog&lt;/code&gt; method is used to close the modal when the button inside it is clicked. Same as any other method, a default type of a button is &lt;code&gt;submit&lt;/code&gt; so it will trigger the modal to close.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make a button to show the modal
&lt;/h2&gt;

&lt;p&gt;At this moment, you will not see anything on your window. It's because the dialog box (modal) is closed or not visible by default. Now we'll make a button to open it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"modal.show()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Show Modal&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Notice there's an &lt;code&gt;onclick&lt;/code&gt; attribute with value of &lt;code&gt;modal.show()&lt;/code&gt;. This means it will target an id of modal and runs a &lt;code&gt;show()&lt;/code&gt; function.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Even we didn't write any JS, but the &lt;code&gt;show()&lt;/code&gt; function is still a JavaScript function&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8hwcoi1v0b2bn6ydp3bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8hwcoi1v0b2bn6ydp3bw.png" alt="Dialog box with the button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations! we just built our own modal without writing any script. Now if you click the button you will see the modal a.k.a. the dialog box on your window.&lt;/p&gt;

&lt;h2&gt;
  
  
  Styling it with Bootstrap
&lt;/h2&gt;

&lt;p&gt;The modal that we made earlier is pretty boring. So we'll style it using Bootstrap 5.3.&lt;/p&gt;

&lt;p&gt;Here's the final code below:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;data-bs-theme=&lt;/span&gt;&lt;span class="s"&gt;"dark"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"m-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;dialog&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"modal"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"rounded"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Click Close or press esc to close modal&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"dialog"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-end"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Close&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/dialog&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"modal.show()"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Show Modal&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1iqmw1mzdtgs3ghcxka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1iqmw1mzdtgs3ghcxka.png" alt="Styled dialog box"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above is the final output of the modal. You can check it live on my Codepen &lt;a href="https://codepen.io/faizbyp/pen/ExdBeGe" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thank you very much 😁&lt;/p&gt;




&lt;p&gt;References:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=q1fsBWLpYW4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=q1fsBWLpYW4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>html</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Make a website and deploy it to GitHub Pages!</title>
      <dc:creator>Faiz Byputra</dc:creator>
      <pubDate>Wed, 24 May 2023 05:08:29 +0000</pubDate>
      <link>https://dev.to/faizbyp/make-a-website-and-deploy-it-to-github-pages-3i1m</link>
      <guid>https://dev.to/faizbyp/make-a-website-and-deploy-it-to-github-pages-3i1m</guid>
      <description>&lt;p&gt;Ever wondered how you can deploy your static HTML site for free and seamlessly? Now you can do it with GitHub Pages!&lt;/p&gt;

&lt;p&gt;GitHub Pages is a feature of GitHub that enables you to deploy your static site and get a free domain based on your username. The domain name format is &lt;code&gt;&amp;lt;USERNAME&amp;gt;.github.io&lt;/code&gt;. So if your username is faizbyp, it will be &lt;code&gt;faizbyp.github.io&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In this article we'll use Visual Studio Code. &lt;strong&gt;So let's get started!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's make the site
&lt;/h2&gt;

&lt;p&gt;First, make a directory named &lt;code&gt;&amp;lt;USERNAME&amp;gt;.github.io&lt;/code&gt;, this will also be the name of your repository. Then open the folder in Visual Studio Code or any text editor that you prefered.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you already have a repo named &lt;code&gt;&amp;lt;USERNAME&amp;gt;.github.io&lt;/code&gt;, the next repo you deploy to GitHub Pages will be available in the same domain in &lt;code&gt;&amp;lt;USERNAME&amp;gt;.github.io/&amp;lt;REPO_NAME&amp;gt;&lt;/code&gt; format.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then, create an &lt;code&gt;index.html&lt;/code&gt; file and make changes to the file as you want. I will make a simple 3 section site page with Bootstrap 5.3 Alpha.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv=&lt;/span&gt;&lt;span class="s"&gt;"X-UA-Compatible"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"IE=edge"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;A Site Page&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"vh-100 d-flex justify-content-center align-items-center bg-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-white"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello, DEV!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"vh-100 d-flex justify-content-center align-items-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;This is just a simple site&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"vh-100 d-flex justify-content-center align-items-center bg-dark"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-white"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;A simple footer&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Preview the code &lt;a href="https://codepen.io/faizbyp/pen/KKGJooy"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Publishing to GitHub
&lt;/h2&gt;

&lt;p&gt;Now the HTML is done. The next thing is, initialize the repo and publish it to GitHub.&lt;/p&gt;

&lt;p&gt;Simply go to &lt;code&gt;Source Control&lt;/code&gt; tab in VS Code, and then click &lt;code&gt;Publish to GitHub&lt;/code&gt;. Don't forget to login to your GitHub account (if you haven't). Then publish it as a public repository.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Free GitHub account doesn't allow a private repo to be deployed to GitHub Pages. So don't forget to make it public if your account is on a free tier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then go to your GitHub repo link. Go to &lt;code&gt;Settings&lt;/code&gt;. Click &lt;code&gt;Pages&lt;/code&gt; menu in "Code and automation". Select your deployment source and wait for a few seconds.&lt;/p&gt;

&lt;p&gt;Voila! Your site is now live on the internet. Now share it to your friends and colleagues so they know you've made a site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There are a lot of opportunity to the GitHub Pages. Technologies are growing so fast nowadays, so it's up to you to utilize the technologies available. Keep learning, and as Steve Jobs said, &lt;strong&gt;"Stay hungry, stay foolish"&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>github</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I made a todo-list with Preact</title>
      <dc:creator>Faiz Byputra</dc:creator>
      <pubDate>Sat, 29 Apr 2023 03:13:11 +0000</pubDate>
      <link>https://dev.to/faizbyp/i-made-a-todo-list-with-preact-26oj</link>
      <guid>https://dev.to/faizbyp/i-made-a-todo-list-with-preact-26oj</guid>
      <description>&lt;p&gt;Hello! I'm Faiz, a Computer Science student. Recently I made a todo-list with Preact, localStorage, and PWA. This is one of my side project to learn about web development, especially in the frontend world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WLYQFYtX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptky5zi13qxchjoaxy4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WLYQFYtX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptky5zi13qxchjoaxy4b.png" alt="Prudoo List Icon" width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Preact?
&lt;/h2&gt;

&lt;p&gt;I'm introduced to Preact by Vite's CLI. There's an option to make a project with Preact template. So I was curious about this. The name is very similar to React.&lt;/p&gt;

&lt;p&gt;And... yeah, after a bit of research, as far as I know, Preact is simply a smaller React alternative. Not much I know about it but here I am. I'm planning to make a simple todo-list so I think React would be an overkill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storing the data
&lt;/h2&gt;

&lt;p&gt;I'm not the "Backend Guy". Making an API and tinkering with database is very difficult for me. And then I found this &lt;a href="https://dev.to/joelynn/series/12791"&gt;series&lt;/a&gt; about making todo-list with localStorage by Joseph Lynn and give it a shot.&lt;/p&gt;

&lt;p&gt;So I know that localStorage is a key-value-based storage system stored in the client's browser. It's very interesting for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the app installable
&lt;/h2&gt;

&lt;p&gt;The last thing I add is Progressive Web App or PWA. I tried it with vite-plugin-pwa for adding the service worker into the app. So the app is now installable on your devices!&lt;/p&gt;




&lt;p&gt;Here's the GitHub repository of the project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/faizbyp/prudoo-list"&gt;https://github.com/faizbyp/prudoo-list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here's the live app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://prudoo-list.vercel.app/"&gt;https://prudoo-list.vercel.app/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;I'd love to hear some feedback and suggestion so that I can grow more in the learning process. Thank you very much :D&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
