Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: experimental/webtry/webtry.go

Issue 242613005: iframe (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « experimental/webtry/templates/workspace.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 package main 1 package main
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "crypto/md5" 5 "crypto/md5"
6 "database/sql" 6 "database/sql"
7 "encoding/base64" 7 "encoding/base64"
8 "encoding/json" 8 "encoding/json"
9 "flag" 9 "flag"
10 "fmt" 10 "fmt"
(...skipping 28 matching lines...) Expand all
39 MAX_TRY_SIZE = 64000 39 MAX_TRY_SIZE = 64000
40 ) 40 )
41 41
42 var ( 42 var (
43 // codeTemplate is the cpp code template the user's code is copied into. 43 // codeTemplate is the cpp code template the user's code is copied into.
44 codeTemplate *template.Template = nil 44 codeTemplate *template.Template = nil
45 45
46 // indexTemplate is the main index.html page we serve. 46 // indexTemplate is the main index.html page we serve.
47 indexTemplate *htemplate.Template = nil 47 indexTemplate *htemplate.Template = nil
48 48
49 // iframeTemplate is the main index.html page we serve.
50 iframeTemplate *htemplate.Template = nil
51
49 // recentTemplate is a list of recent images. 52 // recentTemplate is a list of recent images.
50 recentTemplate *htemplate.Template = nil 53 recentTemplate *htemplate.Template = nil
51 54
52 // workspaceTemplate is the page for workspaces, a series of webtrys. 55 // workspaceTemplate is the page for workspaces, a series of webtrys.
53 workspaceTemplate *htemplate.Template = nil 56 workspaceTemplate *htemplate.Template = nil
54 57
55 // db is the database, nil if we don't have an SQL database to store dat a into. 58 // db is the database, nil if we don't have an SQL database to store dat a into.
56 db *sql.DB = nil 59 db *sql.DB = nil
57 60
58 // directLink is the regex that matches URLs paths that are direct links . 61 // directLink is the regex that matches URLs paths that are direct links .
59 directLink = regexp.MustCompile("^/c/([a-f0-9]+)$") 62 directLink = regexp.MustCompile("^/c/([a-f0-9]+)$")
60 63
64 // iframeLink is the regex that matches URLs paths that are links to ifr ames.
65 iframeLink = regexp.MustCompile("^/iframe/([a-f0-9]+)$")
66
61 // imageLink is the regex that matches URLs paths that are direct links to PNGs. 67 // imageLink is the regex that matches URLs paths that are direct links to PNGs.
62 imageLink = regexp.MustCompile("^/i/([a-f0-9]+.png)$") 68 imageLink = regexp.MustCompile("^/i/([a-f0-9]+.png)$")
63 69
64 // workspaceLink is the regex that matches URLs paths for workspaces. 70 // workspaceLink is the regex that matches URLs paths for workspaces.
65 workspaceLink = regexp.MustCompile("^/w/([a-z0-9-]+)$") 71 workspaceLink = regexp.MustCompile("^/w/([a-z0-9-]+)$")
66 72
67 // workspaceNameAdj is a list of adjectives for building workspace names . 73 // workspaceNameAdj is a list of adjectives for building workspace names .
68 workspaceNameAdj = []string{ 74 workspaceNameAdj = []string{
69 "autumn", "hidden", "bitter", "misty", "silent", "empty", "dry", "dark", 75 "autumn", "hidden", "bitter", "misty", "silent", "empty", "dry", "dark",
70 "summer", "icy", "delicate", "quiet", "white", "cool", "spring", "winter", 76 "summer", "icy", "delicate", "quiet", "white", "cool", "spring", "winter",
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 lines := strings.Split(c, "\n") 108 lines := strings.Split(c, "\n")
103 ret := []string{} 109 ret := []string{}
104 for i, line := range lines { 110 for i, line := range lines {
105 ret = append(ret, fmt.Sprintf("#line %d", i+1)) 111 ret = append(ret, fmt.Sprintf("#line %d", i+1))
106 ret = append(ret, line) 112 ret = append(ret, line)
107 } 113 }
108 return strings.Join(ret, "\n") 114 return strings.Join(ret, "\n")
109 } 115 }
110 116
111 func init() { 117 func init() {
118 rand.Seed(time.Now().UnixNano())
mtklein 2014/04/18 16:43:55 Goes with the other CL?
jcgregorio 2014/04/18 17:00:11 Yeah, caught this in this CL. Since their both goi
mtklein 2014/04/18 17:03:01 SGTM
112 119
113 // Change the current working directory to the directory of the executab le. 120 // Change the current working directory to the directory of the executab le.
114 var err error 121 var err error
115 cwd, err := filepath.Abs(filepath.Dir(os.Args[0])) 122 cwd, err := filepath.Abs(filepath.Dir(os.Args[0]))
116 if err != nil { 123 if err != nil {
117 log.Fatal(err) 124 log.Fatal(err)
118 } 125 }
119 os.Chdir(cwd) 126 os.Chdir(cwd)
120 127
121 codeTemplate, err = template.ParseFiles(filepath.Join(cwd, "templates/te mplate.cpp")) 128 codeTemplate, err = template.ParseFiles(filepath.Join(cwd, "templates/te mplate.cpp"))
122 if err != nil { 129 if err != nil {
123 panic(err) 130 panic(err)
124 } 131 }
125 // Convert index.html into a template, which is expanded with the code.
126 indexTemplate, err = htemplate.ParseFiles( 132 indexTemplate, err = htemplate.ParseFiles(
127 filepath.Join(cwd, "templates/index.html"), 133 filepath.Join(cwd, "templates/index.html"),
128 filepath.Join(cwd, "templates/titlebar.html"), 134 filepath.Join(cwd, "templates/titlebar.html"),
129 ) 135 )
130 if err != nil { 136 if err != nil {
131 panic(err) 137 panic(err)
132 } 138 }
139 iframeTemplate, err = htemplate.ParseFiles(
140 filepath.Join(cwd, "templates/iframe.html"),
141 )
142 if err != nil {
143 panic(err)
144 }
133 recentTemplate, err = htemplate.ParseFiles( 145 recentTemplate, err = htemplate.ParseFiles(
134 filepath.Join(cwd, "templates/recent.html"), 146 filepath.Join(cwd, "templates/recent.html"),
135 filepath.Join(cwd, "templates/titlebar.html"), 147 filepath.Join(cwd, "templates/titlebar.html"),
136 ) 148 )
137 if err != nil { 149 if err != nil {
138 panic(err) 150 panic(err)
139 } 151 }
140 workspaceTemplate, err = htemplate.ParseFiles( 152 workspaceTemplate, err = htemplate.ParseFiles(
141 filepath.Join(cwd, "templates/workspace.html"), 153 filepath.Join(cwd, "templates/workspace.html"),
142 filepath.Join(cwd, "templates/titlebar.html"), 154 filepath.Join(cwd, "templates/titlebar.html"),
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 FOREIGN KEY (name) REFERENCES workspace(name) 210 FOREIGN KEY (name) REFERENCES workspace(name)
199 )` 211 )`
200 _, err = db.Exec(sql) 212 _, err = db.Exec(sql)
201 log.Printf("Info: status creating sqlite table for workspace try : %q\n", err) 213 log.Printf("Info: status creating sqlite table for workspace try : %q\n", err)
202 } 214 }
203 } 215 }
204 216
205 // userCode is used in template expansion. 217 // userCode is used in template expansion.
206 type userCode struct { 218 type userCode struct {
207 UserCode string 219 UserCode string
220 Hash string
208 } 221 }
209 222
210 // expandToFile expands the template and writes the result to the file. 223 // expandToFile expands the template and writes the result to the file.
211 func expandToFile(filename string, code string, t *template.Template) error { 224 func expandToFile(filename string, code string, t *template.Template) error {
212 f, err := os.Create(filename) 225 f, err := os.Create(filename)
213 if err != nil { 226 if err != nil {
214 return err 227 return err
215 } 228 }
216 defer f.Close() 229 defer f.Close()
217 return t.Execute(f, userCode{UserCode: code}) 230 return t.Execute(f, userCode{UserCode: code})
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 } 460 }
448 } 461 }
449 return false 462 return false
450 } 463 }
451 464
452 type TryRequest struct { 465 type TryRequest struct {
453 Code string `json:"code"` 466 Code string `json:"code"`
454 Name string `json:"name"` 467 Name string `json:"name"`
455 } 468 }
456 469
470 // iframeHandler handles the GET and POST of the main page.
471 func iframeHandler(w http.ResponseWriter, r *http.Request) {
472 log.Printf("IFrame Handler: %q\n", r.URL.Path)
473 if r.Method != "GET" {
474 http.NotFound(w, r)
475 return
476 }
477 match := iframeLink.FindStringSubmatch(r.URL.Path)
478 if len(match) != 2 {
479 http.NotFound(w, r)
480 return
481 }
482 hash := match[1]
483 if db == nil {
484 http.NotFound(w, r)
485 return
486 }
487 var code string
488 // Load 'code' with the code found in the database.
489 if err := db.QueryRow("SELECT code FROM webtry WHERE hash=?", hash).Scan (&code); err != nil {
490 http.NotFound(w, r)
491 return
492 }
493 // Expand the template.
494 if err := iframeTemplate.Execute(w, userCode{UserCode: code, Hash: hash} ); err != nil {
495 log.Printf("ERROR: Failed to expand template: %q\n", err)
496 }
497 }
498
457 // mainHandler handles the GET and POST of the main page. 499 // mainHandler handles the GET and POST of the main page.
458 func mainHandler(w http.ResponseWriter, r *http.Request) { 500 func mainHandler(w http.ResponseWriter, r *http.Request) {
459 log.Printf("Main Handler: %q\n", r.URL.Path) 501 log.Printf("Main Handler: %q\n", r.URL.Path)
460 if r.Method == "GET" { 502 if r.Method == "GET" {
461 code := DEFAULT_SAMPLE 503 code := DEFAULT_SAMPLE
462 match := directLink.FindStringSubmatch(r.URL.Path) 504 match := directLink.FindStringSubmatch(r.URL.Path)
463 if len(match) == 2 && r.URL.Path != "/" { 505 if len(match) == 2 && r.URL.Path != "/" {
464 hash := match[1] 506 hash := match[1]
465 if db == nil { 507 if db == nil {
466 http.NotFound(w, r) 508 http.NotFound(w, r)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 } 593 }
552 w.Write(resp) 594 w.Write(resp)
553 } 595 }
554 } 596 }
555 597
556 func main() { 598 func main() {
557 flag.Parse() 599 flag.Parse()
558 http.HandleFunc("/i/", imageHandler) 600 http.HandleFunc("/i/", imageHandler)
559 http.HandleFunc("/w/", workspaceHandler) 601 http.HandleFunc("/w/", workspaceHandler)
560 http.HandleFunc("/recent/", recentHandler) 602 http.HandleFunc("/recent/", recentHandler)
603 http.HandleFunc("/iframe/", iframeHandler)
561 http.HandleFunc("/css/", cssHandler) 604 http.HandleFunc("/css/", cssHandler)
562 http.HandleFunc("/js/", jsHandler) 605 http.HandleFunc("/js/", jsHandler)
563 http.HandleFunc("/", mainHandler) 606 http.HandleFunc("/", mainHandler)
564 log.Fatal(http.ListenAndServe(*port, nil)) 607 log.Fatal(http.ListenAndServe(*port, nil))
565 } 608 }
OLDNEW
« no previous file with comments | « experimental/webtry/templates/workspace.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698