| Index: experimental/webtry/webtry.go
|
| diff --git a/experimental/webtry/webtry.go b/experimental/webtry/webtry.go
|
| index bf352fb13178b0573a4128365f8695a1ac255c19..4c340142fb70a7ce3078c3babec9107d87a52ea9 100644
|
| --- a/experimental/webtry/webtry.go
|
| +++ b/experimental/webtry/webtry.go
|
| @@ -8,8 +8,6 @@ import (
|
| "encoding/json"
|
| "flag"
|
| "fmt"
|
| - _ "github.com/go-sql-driver/mysql"
|
| - _ "github.com/mattn/go-sqlite3"
|
| htemplate "html/template"
|
| "io/ioutil"
|
| "log"
|
| @@ -24,6 +22,12 @@ import (
|
| "time"
|
| )
|
|
|
| +import (
|
| + "github.com/fiorix/go-web/autogzip"
|
| + _ "github.com/go-sql-driver/mysql"
|
| + _ "github.com/mattn/go-sqlite3"
|
| +)
|
| +
|
| const (
|
| RESULT_COMPILE = `../../experimental/webtry/safec++ -DSK_GAMMA_SRGB -DSK_GAMMA_APPLY_TO_A8 -DSK_SCALAR_TO_FLOAT_EXCLUDED -DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 -DSK_SUPPORT_GPU=0 -DSK_SUPPORT_OPENCL=0 -DSK_FORCE_DISTANCEFIELD_FONTS=0 -DSK_SCALAR_IS_FLOAT -DSK_CAN_USE_FLOAT -DSK_SAMPLES_FOR_X -DSK_BUILD_FOR_UNIX -DSK_USE_POSIX_THREADS -DSK_SYSTEM_ZLIB=1 -DSK_DEBUG -DSK_DEVELOPER=1 -I../../src/core -I../../src/images -I../../tools/flags -I../../include/config -I../../include/core -I../../include/pathops -I../../include/pipe -I../../include/effects -I../../include/ports -I../../src/sfnt -I../../include/utils -I../../src/utils -I../../include/images -g -fno-exceptions -fstrict-aliasing -Wall -Wextra -Winit-self -Wpointer-arith -Wno-unused-parameter -m64 -fno-rtti -Wnon-virtual-dtor -c ../../../cache/%s.cpp -o ../../../cache/%s.o`
|
| LINK = `../../experimental/webtry/safec++ -m64 -lstdc++ -lm -o ../../../inout/%s -Wl,--start-group ../../../cache/%s.o obj/experimental/webtry/webtry.main.o obj/gyp/libflags.a libskia_images.a libskia_core.a libskia_effects.a obj/gyp/libjpeg.a obj/gyp/libwebp_dec.a obj/gyp/libwebp_demux.a obj/gyp/libwebp_dsp.a obj/gyp/libwebp_enc.a obj/gyp/libwebp_utils.a libskia_utils.a libskia_opts.a libskia_opts_ssse3.a libskia_ports.a libskia_sfnt.a -Wl,--end-group -lpng -lz -lgif -lpthread -lfontconfig -ldl -lfreetype`
|
| @@ -328,6 +332,7 @@ func doCmd(commandLine string, moveToDebug bool) (string, error) {
|
| // reportError formats an HTTP error response and also logs the detailed error message.
|
| func reportError(w http.ResponseWriter, r *http.Request, err error, message string) {
|
| log.Printf("Error: %s\n%s", message, err.Error())
|
| + w.Header().Set("Content-Type", "text/plain")
|
| http.Error(w, message, 500)
|
| }
|
|
|
| @@ -343,6 +348,7 @@ func reportTryError(w http.ResponseWriter, r *http.Request, err error, message,
|
| http.Error(w, "Failed to serialize a response", 500)
|
| return
|
| }
|
| + w.Header().Set("Content-Type", "text/plain")
|
| w.Write(resp)
|
| }
|
|
|
| @@ -373,6 +379,7 @@ func imageHandler(w http.ResponseWriter, r *http.Request) {
|
| return
|
| }
|
| filename := match[1]
|
| + w.Header().Set("Content-Type", "image/png")
|
| http.ServeFile(w, r, fmt.Sprintf("../../../inout/%s", filename))
|
| }
|
|
|
| @@ -406,6 +413,7 @@ func recentHandler(w http.ResponseWriter, r *http.Request) {
|
| }
|
| recent = append(recent, Try{Hash: hash, CreateTS: create_ts.Format("2006-02-01")})
|
| }
|
| + w.Header().Set("Content-Type", "text/html")
|
| if err := recentTemplate.Execute(w, Recent{Tries: recent, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil {
|
| log.Printf("ERROR: Failed to expand template: %q\n", err)
|
| }
|
| @@ -476,6 +484,7 @@ func workspaceHandler(w http.ResponseWriter, r *http.Request) {
|
| hash = tries[len(tries)-1].Hash
|
| code, _ = getCode(hash)
|
| }
|
| + w.Header().Set("Content-Type", "text/html")
|
| if err := workspaceTemplate.Execute(w, Workspace{Tries: tries, Code: code, Name: name, Hash: hash, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil {
|
| log.Printf("ERROR: Failed to expand template: %q\n", err)
|
| }
|
| @@ -529,6 +538,7 @@ func iframeHandler(w http.ResponseWriter, r *http.Request) {
|
| return
|
| }
|
| // Expand the template.
|
| + w.Header().Set("Content-Type", "text/html")
|
| if err := iframeTemplate.Execute(w, userCode{Code: code, Hash: hash}); err != nil {
|
| log.Printf("ERROR: Failed to expand template: %q\n", err)
|
| }
|
| @@ -596,6 +606,7 @@ func mainHandler(w http.ResponseWriter, r *http.Request) {
|
| }
|
| }
|
| // Expand the template.
|
| + w.Header().Set("Content-Type", "text/html")
|
| if err := indexTemplate.Execute(w, userCode{Code: code, Hash: hash, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil {
|
| log.Printf("ERROR: Failed to expand template: %q\n", err)
|
| }
|
| @@ -675,23 +686,24 @@ func mainHandler(w http.ResponseWriter, r *http.Request) {
|
| reportTryError(w, r, err, "Failed to serialize a response.", hash)
|
| return
|
| }
|
| + w.Header().Set("Content-Type", "application/json")
|
| w.Write(resp)
|
| }
|
| }
|
|
|
| func main() {
|
| flag.Parse()
|
| - http.HandleFunc("/i/", imageHandler)
|
| - http.HandleFunc("/w/", workspaceHandler)
|
| - http.HandleFunc("/recent/", recentHandler)
|
| - http.HandleFunc("/iframe/", iframeHandler)
|
| - http.HandleFunc("/json/", tryInfoHandler)
|
| + http.HandleFunc("/i/", autogzip.HandleFunc(imageHandler))
|
| + http.HandleFunc("/w/", autogzip.HandleFunc(workspaceHandler))
|
| + http.HandleFunc("/recent/", autogzip.HandleFunc(recentHandler))
|
| + http.HandleFunc("/iframe/", autogzip.HandleFunc(iframeHandler))
|
| + http.HandleFunc("/json/", autogzip.HandleFunc(tryInfoHandler))
|
|
|
| // Resources are served directly
|
| // TODO add support for caching/etags/gzip
|
| - http.Handle("/res/", http.FileServer(http.Dir("./")))
|
| + http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./"))))
|
|
|
| // TODO Break out /c/ as it's own handler.
|
| - http.HandleFunc("/", mainHandler)
|
| + http.HandleFunc("/", autogzip.HandleFunc(mainHandler))
|
| log.Fatal(http.ListenAndServe(*port, nil))
|
| }
|
|
|