 Chromium Code Reviews
 Chromium Code Reviews Issue 244313007:
  Move to using HTML templates when filling out the workspace history.  (Closed) 
  Base URL: https://skia.googlesource.com/skia.git@master
    
  
    Issue 244313007:
  Move to using HTML templates when filling out the workspace history.  (Closed) 
  Base URL: https://skia.googlesource.com/skia.git@master| OLD | NEW | 
|---|---|
| 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 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 339 match := imageLink.FindStringSubmatch(r.URL.Path) | 339 match := imageLink.FindStringSubmatch(r.URL.Path) | 
| 340 if len(match) != 2 { | 340 if len(match) != 2 { | 
| 341 http.NotFound(w, r) | 341 http.NotFound(w, r) | 
| 342 return | 342 return | 
| 343 } | 343 } | 
| 344 filename := match[1] | 344 filename := match[1] | 
| 345 http.ServeFile(w, r, fmt.Sprintf("../../../inout/%s", filename)) | 345 http.ServeFile(w, r, fmt.Sprintf("../../../inout/%s", filename)) | 
| 346 } | 346 } | 
| 347 | 347 | 
| 348 type Try struct { | 348 type Try struct { | 
| 349 » Hash string | 349 » Hash string `json:"hash"` | 
| 350 » CreateTS string | 350 » CreateTS string `json:"create_ts"` | 
| 351 } | 351 } | 
| 352 | 352 | 
| 353 type Recent struct { | 353 type Recent struct { | 
| 354 Tries []Try | 354 Tries []Try | 
| 355 } | 355 } | 
| 356 | 356 | 
| 357 // recentHandler shows the last 20 tries. | 357 // recentHandler shows the last 20 tries. | 
| 358 func recentHandler(w http.ResponseWriter, r *http.Request) { | 358 func recentHandler(w http.ResponseWriter, r *http.Request) { | 
| 359 log.Printf("Recent Handler: %q\n", r.URL.Path) | 359 log.Printf("Recent Handler: %q\n", r.URL.Path) | 
| 360 | 360 | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 411 } | 411 } | 
| 412 | 412 | 
| 413 func workspaceHandler(w http.ResponseWriter, r *http.Request) { | 413 func workspaceHandler(w http.ResponseWriter, r *http.Request) { | 
| 414 log.Printf("Workspace Handler: %q\n", r.URL.Path) | 414 log.Printf("Workspace Handler: %q\n", r.URL.Path) | 
| 415 if r.Method == "GET" { | 415 if r.Method == "GET" { | 
| 416 tries := []Try{} | 416 tries := []Try{} | 
| 417 match := workspaceLink.FindStringSubmatch(r.URL.Path) | 417 match := workspaceLink.FindStringSubmatch(r.URL.Path) | 
| 418 name := "" | 418 name := "" | 
| 419 if len(match) == 2 { | 419 if len(match) == 2 { | 
| 420 name = match[1] | 420 name = match[1] | 
| 421 » » » rows, err := db.Query("SELECT create_ts, hash FROM works pacetry WHERE name=? ORDER BY create_ts DESC ", name) | 421 » » » rows, err := db.Query("SELECT create_ts, hash FROM works pacetry WHERE name=? ORDER BY create_ts", name) | 
| 422 if err != nil { | 422 if err != nil { | 
| 423 reportError(w, r, err, "Failed to select.") | 423 reportError(w, r, err, "Failed to select.") | 
| 424 return | 424 return | 
| 425 } | 425 } | 
| 426 for rows.Next() { | 426 for rows.Next() { | 
| 427 var hash string | 427 var hash string | 
| 428 var create_ts time.Time | 428 var create_ts time.Time | 
| 429 if err := rows.Scan(&create_ts, &hash); err != n il { | 429 if err := rows.Scan(&create_ts, &hash); err != n il { | 
| 430 log.Printf("Error: failed to fetch from database: %q", err) | 430 log.Printf("Error: failed to fetch from database: %q", err) | 
| 431 continue | 431 continue | 
| 432 } | 432 } | 
| 433 tries = append(tries, Try{Hash: hash, CreateTS: create_ts.Format("2006-02-01")}) | 433 tries = append(tries, Try{Hash: hash, CreateTS: create_ts.Format("2006-02-01")}) | 
| 434 } | 434 } | 
| 435 } | 435 } | 
| 436 var code string | 436 var code string | 
| 437 if len(tries) == 0 { | 437 if len(tries) == 0 { | 
| 438 code = DEFAULT_SAMPLE | 438 code = DEFAULT_SAMPLE | 
| 439 } else { | 439 } else { | 
| 440 » » » code = getCode(tries[0].Hash) | 440 » » » code = getCode(tries[len(tries)-1].Hash) | 
| 
mtklein
2014/04/21 16:19:01
Undo?
 
jcgregorio
2014/04/21 16:26:24
This was intentional, the history list is construc
 
mtklein
2014/04/21 16:31:14
Ah!  Missed the DESC change.  Thanks.
 | |
| 441 } | 441 } | 
| 442 if err := workspaceTemplate.Execute(w, Workspace{Tries: tries, C ode: code, Name: name}); err != nil { | 442 if err := workspaceTemplate.Execute(w, Workspace{Tries: tries, C ode: code, Name: name}); err != nil { | 
| 443 log.Printf("ERROR: Failed to expand template: %q\n", err ) | 443 log.Printf("ERROR: Failed to expand template: %q\n", err ) | 
| 444 } | 444 } | 
| 445 } else if r.Method == "POST" { | 445 } else if r.Method == "POST" { | 
| 446 name, err := newWorkspace() | 446 name, err := newWorkspace() | 
| 447 if err != nil { | 447 if err != nil { | 
| 448 http.Error(w, "Failed to create a new workspace.", 500) | 448 http.Error(w, "Failed to create a new workspace.", 500) | 
| 449 return | 449 return | 
| 450 } | 450 } | 
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 600 flag.Parse() | 600 flag.Parse() | 
| 601 http.HandleFunc("/i/", imageHandler) | 601 http.HandleFunc("/i/", imageHandler) | 
| 602 http.HandleFunc("/w/", workspaceHandler) | 602 http.HandleFunc("/w/", workspaceHandler) | 
| 603 http.HandleFunc("/recent/", recentHandler) | 603 http.HandleFunc("/recent/", recentHandler) | 
| 604 http.HandleFunc("/iframe/", iframeHandler) | 604 http.HandleFunc("/iframe/", iframeHandler) | 
| 605 http.HandleFunc("/css/", cssHandler) | 605 http.HandleFunc("/css/", cssHandler) | 
| 606 http.HandleFunc("/js/", jsHandler) | 606 http.HandleFunc("/js/", jsHandler) | 
| 607 http.HandleFunc("/", mainHandler) | 607 http.HandleFunc("/", mainHandler) | 
| 608 log.Fatal(http.ListenAndServe(*port, nil)) | 608 log.Fatal(http.ListenAndServe(*port, nil)) | 
| 609 } | 609 } | 
| OLD | NEW |