| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | package plugins | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"net/url" | 
					
						
							|  |  |  | 	"path" | 
					
						
							| 
									
										
										
										
											2016-01-10 06:56:39 +08:00
										 |  |  | 	"path/filepath" | 
					
						
							| 
									
										
										
										
											2016-02-10 05:10:36 +08:00
										 |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/util" | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type FrontendPluginBase struct { | 
					
						
							|  |  |  | 	PluginBase | 
					
						
							| 
									
										
										
										
											2016-01-20 01:18:53 +08:00
										 |  |  | 	Module        string `json:"module"` | 
					
						
							| 
									
										
										
										
											2016-02-10 01:17:32 +08:00
										 |  |  | 	BaseUrl       string `json:"baseUrl"` | 
					
						
							| 
									
										
										
										
											2016-01-20 01:18:53 +08:00
										 |  |  | 	StaticRoot    string `json:"staticRoot"` | 
					
						
							|  |  |  | 	StaticRootAbs string `json:"-"` | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (fp *FrontendPluginBase) initFrontendPlugin() { | 
					
						
							|  |  |  | 	if fp.StaticRoot != "" { | 
					
						
							| 
									
										
										
										
											2016-01-20 01:18:53 +08:00
										 |  |  | 		fp.StaticRootAbs = filepath.Join(fp.PluginDir, fp.StaticRoot) | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | 		StaticRoutes = append(StaticRoutes, &PluginStaticRoute{ | 
					
						
							| 
									
										
										
										
											2016-01-20 01:18:53 +08:00
										 |  |  | 			Directory: fp.StaticRootAbs, | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | 			PluginId:  fp.Id, | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-10 05:10:36 +08:00
										 |  |  | 	fp.handleModuleDefaults() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | 	fp.Info.Logos.Small = evalRelativePluginUrlPath(fp.Info.Logos.Small, fp.Id) | 
					
						
							|  |  |  | 	fp.Info.Logos.Large = evalRelativePluginUrlPath(fp.Info.Logos.Large, fp.Id) | 
					
						
							| 
									
										
										
										
											2016-02-10 05:10:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	for i := 0; i < len(fp.Info.Screenshots); i++ { | 
					
						
							| 
									
										
										
										
											2016-02-09 22:36:42 +08:00
										 |  |  | 		fp.Info.Screenshots[i].Path = evalRelativePluginUrlPath(fp.Info.Screenshots[i].Path, fp.Id) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-10 05:10:36 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (fp *FrontendPluginBase) setPathsBasedOnApp(app *AppPlugin) { | 
					
						
							|  |  |  | 	appSubPath := strings.Replace(fp.PluginDir, app.StaticRootAbs, "", 1) | 
					
						
							|  |  |  | 	fp.IncludedInAppId = app.Id | 
					
						
							|  |  |  | 	fp.BaseUrl = app.BaseUrl | 
					
						
							|  |  |  | 	fp.Module = util.JoinUrlFragments("plugins/"+app.Id, appSubPath) + "/module" | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (fp *FrontendPluginBase) handleModuleDefaults() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if fp.StaticRoot != "" { | 
					
						
							| 
									
										
										
										
											2016-01-10 06:56:39 +08:00
										 |  |  | 		fp.Module = path.Join("plugins", fp.Id, "module") | 
					
						
							| 
									
										
										
										
											2016-02-10 01:17:32 +08:00
										 |  |  | 		fp.BaseUrl = path.Join("public/plugins", fp.Id) | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fp.Module = path.Join("app/plugins", fp.Type, fp.Id, "module") | 
					
						
							| 
									
										
										
										
											2016-02-10 01:17:32 +08:00
										 |  |  | 	fp.BaseUrl = path.Join("public/app/plugins", fp.Type, fp.Id) | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func evalRelativePluginUrlPath(pathStr string, pluginId string) string { | 
					
						
							| 
									
										
										
										
											2016-02-27 01:25:39 +08:00
										 |  |  | 	if pathStr == "" { | 
					
						
							|  |  |  | 		return "" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-10 06:34:20 +08:00
										 |  |  | 	u, _ := url.Parse(pathStr) | 
					
						
							|  |  |  | 	if u.IsAbs() { | 
					
						
							|  |  |  | 		return pathStr | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return path.Join("public/plugins", pluginId, pathStr) | 
					
						
							|  |  |  | } |