diff options
Diffstat (limited to '_content')
| -rw-r--r-- | _content/index.html | 33 | ||||
| -rw-r--r-- | _content/index.js | 106 | ||||
| -rw-r--r-- | _content/kbbiclient.js | 35 |
3 files changed, 174 insertions, 0 deletions
diff --git a/_content/index.html b/_content/index.html new file mode 100644 index 0000000..328e00a --- /dev/null +++ b/_content/index.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> + <head> + <title>Project KBBI</title> + + <script type="text/javascript" src="kbbiclient.js"></script> + <script type="text/javascript" src="index.js"></script> + <style> + .kelas-kata, + .contoh { + margin-left: 2em; + } + </style> + </head> + <body> + <h1>Proyek KBBI</h1> + <p> + Proyek implementasi API untuk Kamus Besar Bahasa Indonesia. + </p> + + <h2>Definisi kata</h2> + <label> + Daftar kata: + <input type="text" id="kata" maxlength="64" /> + </label> + <button onclick="cariDefinisi()">Cari definisi</button> + <p class="note"> + Catatan: gunakan koma untuk mencari lebih dari satu kata. + </p> + + <div id="definisi-result"></div> + </body> +</html> diff --git a/_content/index.js b/_content/index.js new file mode 100644 index 0000000..72482e9 --- /dev/null +++ b/_content/index.js @@ -0,0 +1,106 @@ +/** + * Copyright 2020, Shulhan <m.shulhan@gmail.com>. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + */ + +let kbbiClient = new KBBIClient("") + +function cariDefinisi() { + let kata = document.getElementById("kata").value + kbbiClient.getDefinitions(kata, cariDefinisiCallback) +} + +function cariDefinisiCallback(res) { + let out = document.getElementById("definisi-result") + out.innerHTML = "" + + for (let kata in res) { + let root = document.createElement("div") + printResultKata(root, kata, res[kata]) + out.appendChild(root) + } +} + +function printResultKata(out, kata, defKata) { + let el = document.createElement("b") + el.appendChild(document.createTextNode(kata)) + out.appendChild(el) + + printKataDasar(out, defKata.dasar) + printDefinitions(out, defKata.definisi) +} + +function printKataDasar(out, kataDasar) { + let root = document.createElement("div") + root.appendChild(document.createTextNode("Kata dasar: ")) + + if (kataDasar === "") { + root.appendChild(document.createTextNode("-")) + } else { + let italic = document.createElement("i") + italic.appendChild(document.createTextNode(kataDasar)) + root.appendChild(italic) + } + + out.appendChild(root) +} + +function printDefinitions(out, definitions) { + for (let x = 0; x < definitions.length; x++) { + let def = definitions[x] + + let root = document.createElement("div") + let el = document.createElement("p") + el.classList.add("definisi") + el.appendChild( + document.createTextNode( + "Definisi #" + (x + 1) + ": " + def.isi + ".", + ), + ) + root.appendChild(el) + + printKelasKata(root, def.kelas) + printContoh(root, def.contoh) + out.appendChild(root) + } +} + +function printKelasKata(out, daftarKelas) { + if (typeof daftarKelas === "undefined") { + return + } + + let root = document.createElement("div") + root.classList.add("kelas-kata") + root.appendChild(document.createTextNode("Kelas,")) + + let el = document.createElement("ul") + for (let x = 0; x < daftarKelas.length; x++) { + let li = document.createElement("li") + li.appendChild(document.createTextNode(daftarKelas[x])) + el.appendChild(li) + } + root.appendChild(el) + out.appendChild(root) +} + +function printContoh(out, examples) { + if (typeof examples === "undefined") { + return + } + + let root = document.createElement("div") + root.classList.add("contoh") + root.appendChild(document.createTextNode("Contoh,")) + + let ul = document.createElement("ul") + + for (let x = 0; x < examples.length; x++) { + let li = document.createElement("li") + li.appendChild(document.createTextNode(examples[x])) + ul.appendChild(li) + } + root.appendChild(ul) + out.appendChild(root) +} diff --git a/_content/kbbiclient.js b/_content/kbbiclient.js new file mode 100644 index 0000000..ab35633 --- /dev/null +++ b/_content/kbbiclient.js @@ -0,0 +1,35 @@ +/** + * Copyright 2020, Shulhan <m.shulhan@gmail.com>. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + */ + +class KBBIClient { + constructor(baseURL) { + if (baseURL.length === 0) { + baseURL = "https://kilabit.info/project/kbbi" + } + this.baseURL = baseURL + } + + getDefinitions(words, cb) { + if (words.length === 0) { + return + } + + let params = "kata=" + words + let xhr = new XMLHttpRequest() + + xhr.addEventListener("load", function() { + cb(JSON.parse(xhr.responseText)) + }) + + xhr.open("GET", this.baseURL + "/api/definisi?" + params) + xhr.setRequestHeader( + "Content-Type", + "application/x-www-form-urlencoded", + ) + + xhr.send(null) + } +} |
