frontend_plugin.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package plugins
  2. import (
  3. "net/url"
  4. "path"
  5. "strings"
  6. "github.com/grafana/grafana/pkg/setting"
  7. "github.com/grafana/grafana/pkg/util"
  8. )
  9. type FrontendPluginBase struct {
  10. PluginBase
  11. }
  12. func (fp *FrontendPluginBase) initFrontendPlugin() {
  13. if isExternalPlugin(fp.PluginDir) {
  14. StaticRoutes = append(StaticRoutes, &PluginStaticRoute{
  15. Directory: fp.PluginDir,
  16. PluginId: fp.Id,
  17. })
  18. }
  19. fp.handleModuleDefaults()
  20. fp.Info.Logos.Small = getPluginLogoUrl(fp.Type, fp.Info.Logos.Small, fp.BaseUrl)
  21. fp.Info.Logos.Large = getPluginLogoUrl(fp.Type, fp.Info.Logos.Large, fp.BaseUrl)
  22. for i := 0; i < len(fp.Info.Screenshots); i++ {
  23. fp.Info.Screenshots[i].Path = evalRelativePluginUrlPath(fp.Info.Screenshots[i].Path, fp.BaseUrl)
  24. }
  25. }
  26. func getPluginLogoUrl(pluginType, path, baseUrl string) string {
  27. if path == "" {
  28. return "public/img/icn-" + pluginType + ".svg"
  29. }
  30. return evalRelativePluginUrlPath(path, baseUrl)
  31. }
  32. func (fp *FrontendPluginBase) setPathsBasedOnApp(app *AppPlugin) {
  33. appSubPath := strings.Replace(fp.PluginDir, app.PluginDir, "", 1)
  34. fp.IncludedInAppId = app.Id
  35. fp.BaseUrl = app.BaseUrl
  36. fp.Module = util.JoinUrlFragments("plugins/"+app.Id, appSubPath) + "/module"
  37. }
  38. func (fp *FrontendPluginBase) handleModuleDefaults() {
  39. if isExternalPlugin(fp.PluginDir) {
  40. fp.Module = path.Join("plugins", fp.Id, "module")
  41. fp.BaseUrl = path.Join("public/plugins", fp.Id)
  42. return
  43. }
  44. fp.IsCorePlugin = true
  45. fp.Module = path.Join("app/plugins", fp.Type, fp.Id, "module")
  46. fp.BaseUrl = path.Join("public/app/plugins", fp.Type, fp.Id)
  47. }
  48. func isExternalPlugin(pluginDir string) bool {
  49. return !strings.Contains(pluginDir, setting.StaticRootPath)
  50. }
  51. func evalRelativePluginUrlPath(pathStr string, baseUrl string) string {
  52. if pathStr == "" {
  53. return ""
  54. }
  55. u, _ := url.Parse(pathStr)
  56. if u.IsAbs() {
  57. return pathStr
  58. }
  59. return path.Join(baseUrl, pathStr)
  60. }