本文整理汇总了Golang中code/minty/io/wombat.Context类的典型用法代码示例。如果您正苦于以下问题:Golang Context类的具体用法?Golang Context怎么用?Golang Context使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Context类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ImageHandler
func ImageHandler(ctx wombat.Context, a *articles.Article, path, filename string) {
ctx.Response.Header().Set("Content-Type", "application/json")
// Save the image
img, err := web.SaveImage(ctx.Request, ctx.Response, path, filename)
if err != nil {
ctx.HttpError(http.StatusInternalServerError, GetError(ctx.Request, err))
return
}
s := img.Bounds().Size()
exists := false
// Add or Update the image
for _, v := range a.Imgs {
if v.Src == filename {
v.W, v.H = s.X, s.Y
exists = true
}
}
if !exists {
a.Imgs = append(a.Imgs, articles.Img{filename, "", s.X, s.Y})
}
// Update the article's images
if err = a.SetImgs(a.Imgs); err != nil {
log.Println("Failed to persit new image: ", filename, " for article: ", a.TitlePath)
ctx.HttpError(http.StatusInternalServerError, GetError(ctx.Request, err))
} else {
j := fmt.Sprintf(`{"image":"%s", "w":%d,"h":%d}`, filename, s.X, s.Y)
ctx.Response.Write([]byte(j))
}
}
示例2: ThumbHandler
func ThumbHandler(ctx wombat.Context, a *articles.Article, path, filename string) {
ctx.Response.Header().Set("Content-Type", "application/json")
// Save & resize the image to a thumbnail
img, err := web.SaveImage(ctx.Request, ctx.Response, path, filename)
if err == nil {
// Resize the image and save it
if img, err = imagery.ResizeWidth(img, 200); err == nil {
err = imagery.WriteTo(web.ImageType(ctx.Request), img, path, filename)
}
}
if err != nil {
ctx.HttpError(http.StatusInternalServerError, GetError(ctx.Request, err))
return
}
oldThumb := filepath.Join(path, a.TitlePath, a.Img.Src)
s := img.Bounds().Size()
// Update the article's thumbnail
if err = a.SetImg(articles.Img{filename, filename, s.X, s.Y}); err != nil {
log.Println("Failed to persit new thumbnail: ", filename, " for article: ", a.TitlePath)
ctx.HttpError(http.StatusInternalServerError, GetError(ctx.Request, err))
} else {
os.Remove(oldThumb)
j := fmt.Sprintf(`{"thumb":"%s", "w":%d,"h":%d}`, filename, s.X, s.Y)
ctx.Response.Write([]byte(j))
}
}
示例3: JSONHandler
func JSONHandler(ctx wombat.Context, a *articles.Article, imagePath string, data []byte) {
// Get the JSONMessage from the request
var msg JSONMessage
err := json.Unmarshal(data, &msg)
if err != nil {
ctx.HttpError(http.StatusBadRequest, GetError(ctx.Request, err))
return
}
// Perform the given action
switch msg.Action {
default:
// Invalid/missing action
err = errors.New("Invalid Action")
case "setSynopsis":
err = a.SetSynopsis(msg.Data)
case "setContent":
err = a.SetContent(msg.Data)
case "setActive":
// Toggle
err = a.Publish(!a.IsPublished)
case "deleteImage":
err = RemoveImage(a, msg.Data, imagePath)
}
// Report if the action resulted in an error
if err != nil {
ctx.HttpError(http.StatusInternalServerError, GetError(ctx.Request, err))
}
}
示例4: DeleteArticle
func (h Handler) DeleteArticle(ctx wombat.Context, titlePath string) {
ctx.Response.Header().Set("Content-Type", "application/json")
o, ok := h.Article(titlePath, true)
if !ok {
ctx.HttpError(http.StatusNotFound)
return
}
a := h.ItoArticle(o)
if err := a.Delete(); err != nil {
ctx.HttpError(http.StatusInternalServerError, GetError(ctx.Request, err))
}
}
示例5: PostArticles
func (h Handler) PostArticles(ctx wombat.Context) {
title := ctx.FormValue("title")
if request.IsApplicationJson(ctx.Request) {
ctx.Response.Header().Set("Content-Type", "application/json")
defer ctx.Body.Close()
if b, err := ioutil.ReadAll(ctx.Body); err != nil {
m := make(map[string]interface{})
json.Unmarshal(b, &m)
title, _ = m["title"].(string)
}
}
if title == "" {
// Missing title
ctx.HttpError(http.StatusBadRequest, GetErrorStr(ctx.Request, "Missing title"))
return
}
t, err := CreateArticle(ctx, title)
if err != nil {
ctx.HttpError(http.StatusInternalServerError, GetError(ctx.Request, err))
return
}
// When not a JSON request issue redirect to new article
if !request.IsApplicationJson(ctx.Request) {
ctx.Redirect(fmt.Sprintf("%s/%s?view=edit", h.BasePath, t))
}
}
示例6: ImagesHandler
func ImagesHandler(ctx wombat.Context, a *articles.Article, imagePath string) {
// Get the name of the image, or random name if missing/empty
filename := ctx.FormValue("name")
if filename == "" {
filename = web.RandName(5)
}
// Save the thumbnail, or image
path := filepath.Join(imagePath, a.TitlePath)
if t := ctx.FormValue("type"); t == "thumb" {
ThumbHandler(ctx, a, path, "thumb."+filename)
} else {
ImageHandler(ctx, a, path, filename)
}
}
示例7: GetArticle
/*----------Article-----------*/
func (h Handler) GetArticle(ctx wombat.Context, titlePath string) {
isAdmin := ctx.User.IsAdmin()
o, ok := h.Article(titlePath, isAdmin)
if !ok {
ctx.HttpError(http.StatusNotFound)
return
}
tmpl := "view"
if isAdmin && ctx.FormValue("view") == "edit" {
tmpl = "edit"
}
// Handle HTTP/JSON response
articleResponse(ctx, &h, o, tmpl, titlePath)
}
示例8: GetArticles
/*----------Articles----------*/
func (h Handler) GetArticles(ctx wombat.Context) {
var tmpl string
var o interface{}
switch view := ctx.FormValue("view"); {
default:
tmpl = "list"
page, err := strconv.Atoi(ctx.FormValue("page"))
if err != nil {
page = 0
}
o, _ = h.articles.Recent(h.PageCount, page, ctx.User.IsAdmin())
case view == "create" && ctx.User.IsAdmin():
tmpl = "create"
}
// Handle HTTP/JSON response
articleResponse(ctx, &h, o, tmpl, "")
}
示例9: PutArticle
func (h Handler) PutArticle(ctx wombat.Context, titlePath string) {
ctx.Response.Header().Set("Content-Type", "application/json")
o, ok := h.Article(titlePath, true)
if !ok {
ctx.HttpError(http.StatusNotFound)
return
}
a := h.ItoArticle(o)
// JSON message
if request.IsApplicationJson(ctx.Request) {
// Get the bytes for JSON processing
defer ctx.Body.Close()
if data, err := ioutil.ReadAll(ctx.Body); err != nil {
ctx.HttpError(http.StatusBadRequest, GetError(ctx.Request, err))
} else {
JSONHandler(ctx, a, h.ImagePath, data)
}
} else if IsImageRequest(ctx) {
ImagesHandler(ctx, a, h.ImagePath)
} else {
// Nothing could be done for the given request
ctx.HttpError(http.StatusBadRequest)
}
}