mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Add USE_SERVICE_WORKER setting (#9110)
* Add USE_SERVICE_WORKER setting This will be very useful setting for anyone doing frontend work. Fixes: https://github.com/go-gitea/gitea/issues/9044 * prevent potential syntax error on old browsers
This commit is contained in:
		 silverwind
					silverwind
				
			
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			 techknowlogick
						techknowlogick
					
				
			
						parent
						
							cbaa1de9ec
						
					
				
				
					commit
					f0aaffeedc
				
			| @@ -153,6 +153,8 @@ THEMES = gitea,arc-green | |||||||
| DEFAULT_SHOW_FULL_NAME = false | DEFAULT_SHOW_FULL_NAME = false | ||||||
| ; Whether to search within description at repository search on explore page. | ; Whether to search within description at repository search on explore page. | ||||||
| SEARCH_REPO_DESCRIPTION = true | SEARCH_REPO_DESCRIPTION = true | ||||||
|  | ; Whether to enable a Service Worker to cache frontend assets | ||||||
|  | USE_SERVICE_WORKER = true | ||||||
|  |  | ||||||
| [ui.admin] | [ui.admin] | ||||||
| ; Number of users that are displayed on one page | ; Number of users that are displayed on one page | ||||||
|   | |||||||
| @@ -118,8 +118,9 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. | |||||||
| - `DEFAULT_THEME`: **gitea**: \[gitea, arc-green\]: Set the default theme for the Gitea install. | - `DEFAULT_THEME`: **gitea**: \[gitea, arc-green\]: Set the default theme for the Gitea install. | ||||||
| - `THEMES`:  **gitea,arc-green**: All available themes. Allow users select personalized themes | - `THEMES`:  **gitea,arc-green**: All available themes. Allow users select personalized themes | ||||||
|   regardless of the value of `DEFAULT_THEME`. |   regardless of the value of `DEFAULT_THEME`. | ||||||
| - `DEFAULT_SHOW_FULL_NAME`: false: Whether the full name of the users should be shown where possible. If the full name isn't set, the username will be used. | - `DEFAULT_SHOW_FULL_NAME`: **false**: Whether the full name of the users should be shown where possible. If the full name isn't set, the username will be used. | ||||||
| - `SEARCH_REPO_DESCRIPTION`: true: Whether to search within description at repository search on explore page. | - `SEARCH_REPO_DESCRIPTION`: **true**: Whether to search within description at repository search on explore page. | ||||||
|  | - `USE_SERVICE_WORKER`: **true**: Whether to enable a Service Worker to cache frontend assets. | ||||||
|  |  | ||||||
| ### UI - Admin (`ui.admin`) | ### UI - Admin (`ui.admin`) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -138,9 +138,9 @@ make revive vet misspell-check | |||||||
|  |  | ||||||
| ### Updating CSS | ### Updating CSS | ||||||
|  |  | ||||||
| To generate the CSS, you will need [Node.js](https://nodejs.org/) 8.0 or greater with npm. At present we use [less](http://lesscss.org/) and [postcss](https://postcss.org) to generate our CSS. Do **not** edit the files in `public/css` directly, as they are generated from `lessc` from the files in `public/less`. | To generate the CSS, you need [Node.js](https://nodejs.org/) 8.0 or greater with npm. We use [less](http://lesscss.org/) and [postcss](https://postcss.org) to generate our CSS. Do **not** edit the files in `public/css` directly, as they are generated from `lessc` from the files in `public/less`. | ||||||
|  |  | ||||||
| Edit files in `public/less`, run the linter, regenerate the CSS and commit all changed files: | Edit files in `public/less`, and then run the linter and build the CSS files via: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| make css | make css | ||||||
| @@ -148,12 +148,14 @@ make css | |||||||
|  |  | ||||||
| ### Updating JS | ### Updating JS | ||||||
|  |  | ||||||
| To run the JavaScript linter you will need [Node.js](https://nodejs.org/) 8.0 or greater with npm. Edit files in `public/js` and run the linter: | To generate the JS files, you need [Node.js](https://nodejs.org/) 8.0 or greater with npm. Edit files in `public/js`, run the linter and build the JS files via: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| make js | make js | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | Note: When working on frontend code, it is advisable to set `USE_SERVICE_WORKER` to `false` in `app.ini` which will prevent undesirable caching of frontend assets. | ||||||
|  |  | ||||||
| ### Updating the API | ### Updating the API | ||||||
|  |  | ||||||
| When creating new API routes or modifying existing API routes, you **MUST** | When creating new API routes or modifying existing API routes, you **MUST** | ||||||
|   | |||||||
| @@ -170,6 +170,7 @@ var ( | |||||||
| 		DefaultTheme          string | 		DefaultTheme          string | ||||||
| 		Themes                []string | 		Themes                []string | ||||||
| 		SearchRepoDescription bool | 		SearchRepoDescription bool | ||||||
|  | 		UseServiceWorker      bool | ||||||
|  |  | ||||||
| 		Admin struct { | 		Admin struct { | ||||||
| 			UserPagingNum   int | 			UserPagingNum   int | ||||||
| @@ -969,6 +970,7 @@ func NewContext() { | |||||||
| 	UI.ShowUserEmail = Cfg.Section("ui").Key("SHOW_USER_EMAIL").MustBool(true) | 	UI.ShowUserEmail = Cfg.Section("ui").Key("SHOW_USER_EMAIL").MustBool(true) | ||||||
| 	UI.DefaultShowFullName = Cfg.Section("ui").Key("DEFAULT_SHOW_FULL_NAME").MustBool(false) | 	UI.DefaultShowFullName = Cfg.Section("ui").Key("DEFAULT_SHOW_FULL_NAME").MustBool(false) | ||||||
| 	UI.SearchRepoDescription = Cfg.Section("ui").Key("SEARCH_REPO_DESCRIPTION").MustBool(true) | 	UI.SearchRepoDescription = Cfg.Section("ui").Key("SEARCH_REPO_DESCRIPTION").MustBool(true) | ||||||
|  | 	UI.UseServiceWorker = Cfg.Section("ui").Key("USE_SERVICE_WORKER").MustBool(true) | ||||||
|  |  | ||||||
| 	HasRobotsTxt = com.IsFile(path.Join(CustomPath, "robots.txt")) | 	HasRobotsTxt = com.IsFile(path.Join(CustomPath, "robots.txt")) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -148,6 +148,9 @@ func NewFuncMap() []template.FuncMap { | |||||||
| 		"MetaKeywords": func() string { | 		"MetaKeywords": func() string { | ||||||
| 			return setting.UI.Meta.Keywords | 			return setting.UI.Meta.Keywords | ||||||
| 		}, | 		}, | ||||||
|  | 		"UseServiceWorker": func() bool { | ||||||
|  | 			return setting.UI.UseServiceWorker | ||||||
|  | 		}, | ||||||
| 		"FilenameIsImage": func(filename string) bool { | 		"FilenameIsImage": func(filename string) bool { | ||||||
| 			mimeType := mime.TypeByExtension(filepath.Ext(filename)) | 			mimeType := mime.TypeByExtension(filepath.Ext(filename)) | ||||||
| 			return strings.HasPrefix(mimeType, "image/") | 			return strings.HasPrefix(mimeType, "image/") | ||||||
|   | |||||||
| @@ -6,22 +6,30 @@ | |||||||
| 	<meta http-equiv="x-ua-compatible" content="ie=edge"> | 	<meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||||
| 	<title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | 	<title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | ||||||
| 	<link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | 	<link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | ||||||
|  | 	{{if UseServiceWorker}} | ||||||
| 	<script> | 	<script> | ||||||
| 		if ('serviceWorker' in navigator) { | 		if ('serviceWorker' in navigator) { | ||||||
|   			window.addEventListener('load', function() { |  | ||||||
| 			navigator.serviceWorker.register('{{AppSubUrl}}/serviceworker.js').then(function(registration) { | 			navigator.serviceWorker.register('{{AppSubUrl}}/serviceworker.js').then(function(registration) { | ||||||
| 				// Registration was successful | 				// Registration was successful | ||||||
|       				console.log('ServiceWorker registration successful with scope: ', registration.scope); | 				console.info('ServiceWorker registration successful with scope: ', registration.scope); | ||||||
| 			}, function(err) { | 			}, function(err) { | ||||||
| 				// registration failed :( | 				// registration failed :( | ||||||
|       				console.log('ServiceWorker registration failed: ', err); | 				console.info('ServiceWorker registration failed: ', err); | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 	</script> | ||||||
|  | 	{{else}} | ||||||
|  | 	<script> | ||||||
|  | 		if ('serviceWorker' in navigator) { | ||||||
|  | 			navigator.serviceWorker.getRegistrations().then(function(registrations) { | ||||||
|  | 				registrations.forEach(function(registration) { | ||||||
|  | 					registration.unregister(); | ||||||
|  | 					console.info('ServiceWorker unregistered'); | ||||||
| 				}); | 				}); | ||||||
| 			}); | 			}); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	</script> | 	</script> | ||||||
|  | 	{{end}} | ||||||
| 	<meta name="theme-color" content="{{ThemeColorMetaTag}}"> | 	<meta name="theme-color" content="{{ThemeColorMetaTag}}"> | ||||||
| 	<meta name="author" content="{{if .Repository}}{{.Owner.Name}}{{else}}{{MetaAuthor}}{{end}}" /> | 	<meta name="author" content="{{if .Repository}}{{.Owner.Name}}{{else}}{{MetaAuthor}}{{end}}" /> | ||||||
| 	<meta name="description" content="{{if .Repository}}{{.Repository.Name}}{{if .Repository.Description}} - {{.Repository.Description}}{{end}}{{else}}{{MetaDescription}}{{end}}" /> | 	<meta name="description" content="{{if .Repository}}{{.Repository.Name}}{{if .Repository.Description}} - {{.Repository.Description}}{{end}}{{else}}{{MetaDescription}}{{end}}" /> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user