From 2489e4efd9a3cb70a8031ae2a1829e8380462800 Mon Sep 17 00:00:00 2001 From: Shulhan Date: Tue, 7 Apr 2020 08:49:26 +0700 Subject: _content: tambah deskripsi program dan berkas tautan unduh Disebabkan server www-kbbi sekarang melayani tautan ke program, maka server tidak men-generate berkas static.go lagi, namun konten dari situs di salin langsung ke server. --- .gitignore | 1 + Makefile | 39 +++++--- _content/index.html | 33 ------- _content/index.js | 106 ---------------------- _content/kbbiclient.js | 35 -------- _www-kbbi/assets/github.svg | 1 + _www-kbbi/assets/linux.svg | 7 ++ _www-kbbi/assets/macos.svg | 7 ++ _www-kbbi/assets/windows.svg | 7 ++ _www-kbbi/index.html | 205 +++++++++++++++++++++++++++++++++++++++++++ _www-kbbi/index.js | 106 ++++++++++++++++++++++ _www-kbbi/kbbiclient.js | 35 ++++++++ internal/generate/main.go | 31 ------- server.go | 3 +- 14 files changed, 399 insertions(+), 217 deletions(-) delete mode 100644 _content/index.html delete mode 100644 _content/index.js delete mode 100644 _content/kbbiclient.js create mode 100644 _www-kbbi/assets/github.svg create mode 100644 _www-kbbi/assets/linux.svg create mode 100644 _www-kbbi/assets/macos.svg create mode 100644 _www-kbbi/assets/windows.svg create mode 100644 _www-kbbi/index.html create mode 100644 _www-kbbi/index.js create mode 100644 _www-kbbi/kbbiclient.js delete mode 100644 internal/generate/main.go diff --git a/.gitignore b/.gitignore index 135b2f5..e8d0b52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /cmd/www-kbbi/static.go +/_www-kbbi/bin/* /internal/cmd/mergedic/id_ID.dic /internal/cmd/mergedic/id_ID.dic.new /kamus.gob diff --git a/Makefile b/Makefile index 8cc8884..15a9875 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,8 @@ ## Use of this source code is governed by a BSD-style ## license that can be found in the LICENSE file. -.PHONY: all build lint test install generate deploy - -LINT_OPTS = - -GENERATE_INPUTS = _content/index.html \ - _content/index.js \ - _content/kbbiclient.js +.PHONY: all build lint test install release deploy +.PHONY: dev-server all: build lint test @@ -31,10 +26,32 @@ test: install: go install ./cmd/kbbi/ -cmd/www-kbbi/static.go: $(GENERATE_INPUTS) - go generate - -deploy: cmd/www-kbbi/static.go +## +## Release tasks +## + +release: + mkdir -p _content/bin/ + rm _content/bin/kbbi-* + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ./cmd/kbbi && \ + gzip kbbi && \ + mv kbbi.gz _content/bin/kbbi-linux-amd64.gz + CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build ./cmd/kbbi && \ + gzip kbbi && \ + mv kbbi.gz _content/bin/kbbi-darwin-amd64.gz + CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build ./cmd/kbbi && \ + zip -m kbbi.zip kbbi.exe && \ + mv kbbi.zip _content/bin/kbbi-windows-amd64.zip + +deploy: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -o www-kbbi-linux-amd64 ./cmd/www-kbbi/ rsync --progress ./www-kbbi-linux-amd64 www-kbbi:~/bin/www-kbbi + rsync --progress --recursive ./_www-kbbi/ www-kbbi:~/bin/_www-kbbi/ + +## +## Development task +## + +dev-server: + DEBUG=1 go run ./cmd/www-kbbi diff --git a/_content/index.html b/_content/index.html deleted file mode 100644 index 328e00a..0000000 --- a/_content/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - Project KBBI - - - - - - -

Proyek KBBI

-

- Proyek implementasi API untuk Kamus Besar Bahasa Indonesia. -

- -

Definisi kata

- - -

- Catatan: gunakan koma untuk mencari lebih dari satu kata. -

- -
- - diff --git a/_content/index.js b/_content/index.js deleted file mode 100644 index 72482e9..0000000 --- a/_content/index.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Copyright 2020, Shulhan . 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 deleted file mode 100644 index ab35633..0000000 --- a/_content/kbbiclient.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright 2020, Shulhan . 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) - } -} diff --git a/_www-kbbi/assets/github.svg b/_www-kbbi/assets/github.svg new file mode 100644 index 0000000..3899712 --- /dev/null +++ b/_www-kbbi/assets/github.svg @@ -0,0 +1 @@ +GitHub icon \ No newline at end of file diff --git a/_www-kbbi/assets/linux.svg b/_www-kbbi/assets/linux.svg new file mode 100644 index 0000000..4c2bbed --- /dev/null +++ b/_www-kbbi/assets/linux.svg @@ -0,0 +1,7 @@ + + +IcoFont Icons +brand-linux + + + \ No newline at end of file diff --git a/_www-kbbi/assets/macos.svg b/_www-kbbi/assets/macos.svg new file mode 100644 index 0000000..701ef59 --- /dev/null +++ b/_www-kbbi/assets/macos.svg @@ -0,0 +1,7 @@ + + +IcoFont Icons +brand-mac-os + + + \ No newline at end of file diff --git a/_www-kbbi/assets/windows.svg b/_www-kbbi/assets/windows.svg new file mode 100644 index 0000000..8995329 --- /dev/null +++ b/_www-kbbi/assets/windows.svg @@ -0,0 +1,7 @@ + + +IcoFont Icons +brand-windows + + + \ No newline at end of file diff --git a/_www-kbbi/index.html b/_www-kbbi/index.html new file mode 100644 index 0000000..4fc9edd --- /dev/null +++ b/_www-kbbi/index.html @@ -0,0 +1,205 @@ + + + + Project KBBI + + + + + + + + + +
+
+ Proyek KBBI +
+ +
+

+ Proyek implementasi antar-muka perintah dan API untuk Kamus Besar + Bahasa Indonesia. +

+ +

Program kbbi

+

+ Program kbbi yaitu antar-muka untuk mencari definisi dari kata + lewat baris perintah. +

+

+ Program ini sangat sederhana, cara menggunakannya cukup dengan + memberikan kata yang dicari setelah nama program, misalnya, +

+
+$ kbbi bahasa
+
+

+ maka akan mencetak definisi dari kata "bahasa" ke layar, +

+
+=== bahasa
+  Definisi #1: sistem lambang bunyi yang arbitrer, yang digunakan oleh
+  anggota suatu masyarakat untuk bekerja sama, berinteraksi, dan
+  mengidentifikasikan diri
+    Kelas #1: Nomina: kata benda
+    Kelas #2: Linguistik: -
+
+  Definisi #2: percakapan (perkataan) yang baik; tingkah laku yang baik; sopan santun
+    Kelas #1: Nomina: kata benda
+    Contoh #1: baik budi --nya
+
+  ...
+
+ +

+ Unduh program KBBI untuk sistem operasi Anda, +

+ + + +

+ Sumber kode dapat diunduh di + + tautan berikut + +

+ +

Definisi kata

+ +
+
+ +
+
+ +
+
+ +

+ Catatan: Pisahkan kata dengan koma untuk mencari lebih dari satu + kata. +

+ +
+ + diff --git a/_www-kbbi/index.js b/_www-kbbi/index.js new file mode 100644 index 0000000..5e0749e --- /dev/null +++ b/_www-kbbi/index.js @@ -0,0 +1,106 @@ +/** + * Copyright 2020, Shulhan . 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("h3") + 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/_www-kbbi/kbbiclient.js b/_www-kbbi/kbbiclient.js new file mode 100644 index 0000000..ab35633 --- /dev/null +++ b/_www-kbbi/kbbiclient.js @@ -0,0 +1,35 @@ +/** + * Copyright 2020, Shulhan . 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) + } +} diff --git a/internal/generate/main.go b/internal/generate/main.go deleted file mode 100644 index cb12ccf..0000000 --- a/internal/generate/main.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2020, Shulhan . All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import ( - "log" - - "github.com/shuLhan/share/lib/memfs" -) - -func main() { - includes := []string{ - "index.html", - "index.js", - "kbbiclient.js", - } - - mfs, err := memfs.New(includes, nil, true) - if err != nil { - log.Fatal(err) - } - - err = mfs.Mount("./_content") - if err != nil { - log.Fatal(err) - } - - mfs.GoGenerate("main", "./cmd/www-kbbi/static.go", memfs.EncodingGzip) -} diff --git a/server.go b/server.go index 7969ca2..f4401e8 100644 --- a/server.go +++ b/server.go @@ -17,6 +17,7 @@ import ( ) const ( + defRootDir = "_www-kbbi" defListen = ":3394" emptyResponse = "{}" ) @@ -45,7 +46,7 @@ type Server struct { // func NewServer(kamusStorage string) (server *Server, err error) { opts := &http.ServerOptions{ - Root: "_content", + Root: defRootDir, Address: defListen, } -- cgit v1.3