aboutsummaryrefslogtreecommitdiff
path: root/_content
diff options
context:
space:
mode:
Diffstat (limited to '_content')
-rw-r--r--_content/index.html33
-rw-r--r--_content/index.js106
-rw-r--r--_content/kbbiclient.js35
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)
+ }
+}