Exemplo n.º 1
0
func specialHandles(ctx *middleware.Context, pinfo *models.PkgInfo) bool {
	// Only show imports.
	if strings.HasSuffix(ctx.Req.RequestURI, "?imports") {
		ctx.Data["Packages"] = models.GetPkgInfosByPaths(strings.Split(pinfo.ImportPaths, "|"))
		ctx.HTML(200, DOCS_IMPORTS)
		return true
	}

	// Refresh documentation.
	if strings.HasSuffix(ctx.Req.RequestURI, "?refresh") {
		if !pinfo.CanRefresh() {
			ctx.Flash.Info(ctx.Tr("docs.refresh.too_often"))
		} else {
			importPath := ctx.Params("*")
			_, err := doc.CheckPackage(importPath, ctx.Render, doc.REQUEST_TYPE_REFRESH)
			if err != nil {
				handleError(ctx, err)
				return true
			}
		}
		ctx.Redirect(ctx.Data["Link"].(string))
		return true
	}

	return false
}
Exemplo n.º 2
0
func handleError(ctx *middleware.Context, err error) {
	importPath := ctx.Params("*")
	if err == doc.ErrInvalidRemotePath {
		ctx.Redirect("/search?q=" + importPath)
		return
	}
	ctx.Flash.Error(importPath+": "+err.Error(), true)
	ctx.Flash.Info(ctx.Tr("form.click_to_search", importPath), true)
	Home(ctx)
}
Exemplo n.º 3
0
func handleError(ctx *middleware.Context, err error) {
	importPath := ctx.Params("*")
	if err == doc.ErrInvalidRemotePath {
		ctx.Redirect("/search?q=" + importPath)
		return
	}
	ctx.Flash.Error(importPath+": "+strings.Replace(err.Error(), setting.GitHubCredentials, "<GitHubCredentials>", -1), true)
	ctx.Flash.Info(ctx.Tr("form.click_to_search", importPath), true)
	Home(ctx)
}
Exemplo n.º 4
0
func handleError(ctx *middleware.Context, err error) {
	importPath := ctx.Params("*")
	if err == doc.ErrInvalidRemotePath {
		ctx.Redirect("/search?q=" + importPath)
		return
	}

	if strings.Contains(err.Error(), "<meta> not found") ||
		strings.Contains(err.Error(), "resource not found") {
		models.DeletePackageByPath(importPath)
	}

	ctx.Flash.Error(importPath+": "+strings.Replace(err.Error(), setting.GitHubCredentials, "<GitHubCredentials>", -1), true)
	ctx.Flash.Info(ctx.Tr("form.click_to_search", importPath), true)
	Home(ctx)
}
Exemplo n.º 5
0
func Docs(ctx *middleware.Context) {
	importPath := ctx.Params("*")
	pinfo, err := doc.CheckPackage(importPath, ctx.Render, doc.REQUEST_TYPE_HUMAN)
	if err != nil {
		handleError(ctx, err)
		return
	}

	ctx.Data["PageIsDocs"] = true
	ctx.Data["Title"] = pinfo.ImportPath
	ctx.Data["ParentPath"] = path.Dir(pinfo.ImportPath)
	ctx.Data["ProjectName"] = path.Base(pinfo.ImportPath)
	ctx.Data["ProjectPath"] = pinfo.ProjectPath

	if specialHandles(ctx, pinfo) {
		return
	}

	if pinfo.IsGoRepo {
		ctx.Flash.Info(ctx.Tr("docs.turn_into_search", importPath), true)
	}

	ctx.Data["PkgDesc"] = pinfo.Synopsis

	// README.
	lang := ctx.Data["Lang"].(string)[:2]
	readmePath := setting.DocsJsPath + pinfo.ImportPath + "_RM_" + lang + ".js"
	if com.IsFile(readmePath) {
		ctx.Data["IsHasReadme"] = true
		ctx.Data["ReadmePath"] = readmePath
	} else {
		readmePath := setting.DocsJsPath + pinfo.ImportPath + "_RM_en.js"
		if com.IsFile(readmePath) {
			ctx.Data["IsHasReadme"] = true
			ctx.Data["ReadmePath"] = readmePath
		}
	}

	// Documentation.
	docJS := make([]string, 0, pinfo.JsNum+1)
	docJS = append(docJS, setting.DocsJsPath+importPath+".js")
	for i := 1; i <= pinfo.JsNum; i++ {
		docJS = append(docJS, fmt.Sprintf("%s%s-%d.js", setting.DocsJsPath, importPath, i))
	}
	ctx.Data["DocJS"] = docJS
	ctx.Data["Timestamp"] = pinfo.Created
	if time.Now().UTC().Add(-5*time.Second).Unix() < pinfo.Created {
		ctx.Flash.Success(ctx.Tr("docs.generate_success"), true)
	}

	// Notes.
	if len(pinfo.Subdirs) > 0 {
		ctx.Data["IsHasSubdirs"] = true
		ctx.Data["ViewDirPath"] = pinfo.ViewDirPath
		ctx.Data["Subdirs"] = models.GetSubPkgs(pinfo.ImportPath, strings.Split(pinfo.Subdirs, "|"))
	}

	ctx.Data["ImportNum"] = len(strings.Split(pinfo.ImportPaths, "|"))

	// Tools.
	ctx.Data["CanRefresh"] = pinfo.CanRefresh()

	updateHistory(ctx, pinfo.Id)

	ctx.HTML(200, DOCS)
}