mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Support Editorconfig on web editor
This commit is contained in:
		| @@ -48,7 +48,7 @@ golang.org/x/text = commit:2910a50 | |||||||
| gopkg.in/alexcesaro/quotedprintable.v3 = commit:2caba25 | gopkg.in/alexcesaro/quotedprintable.v3 = commit:2caba25 | ||||||
| gopkg.in/asn1-ber.v1 = commit:4e86f43 | gopkg.in/asn1-ber.v1 = commit:4e86f43 | ||||||
| gopkg.in/bufio.v1 = commit:567b2bf | gopkg.in/bufio.v1 = commit:567b2bf | ||||||
| gopkg.in/editorconfig/editorconfig-core-go.v1 = commit:737b8e4 | gopkg.in/editorconfig/editorconfig-core-go.v1 = commit:a872f05 | ||||||
| gopkg.in/gomail.v2 = commit:81ebce5 | gopkg.in/gomail.v2 = commit:81ebce5 | ||||||
| gopkg.in/ini.v1 = commit:cf53f92 | gopkg.in/ini.v1 = commit:cf53f92 | ||||||
| gopkg.in/ldap.v2 = commit:d0a5ced | gopkg.in/ldap.v2 = commit:d0a5ced | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								glide.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								glide.lock
									
									
									
										generated
									
									
									
								
							| @@ -138,7 +138,7 @@ imports: | |||||||
| - name: gopkg.in/bufio.v1 | - name: gopkg.in/bufio.v1 | ||||||
|   version: 567b2bfa514e796916c4747494d6ff5132a1dfce |   version: 567b2bfa514e796916c4747494d6ff5132a1dfce | ||||||
| - name: gopkg.in/editorconfig/editorconfig-core-go.v1 | - name: gopkg.in/editorconfig/editorconfig-core-go.v1 | ||||||
|   version: 737b8e4491939fe2277d99b8e726a086266e549e |   version: a872f05c2e34b37b567401384d202aff11ba06d4 | ||||||
| - name: gopkg.in/gomail.v2 | - name: gopkg.in/gomail.v2 | ||||||
|   version: 81ebce5c23dfd25c6c67194b37d3dd3f338c98b1 |   version: 81ebce5c23dfd25c6c67194b37d3dd3f338c98b1 | ||||||
| - name: gopkg.in/ini.v1 | - name: gopkg.in/ini.v1 | ||||||
|   | |||||||
| @@ -850,6 +850,34 @@ function initEditor() { | |||||||
|         else { |         else { | ||||||
|             codeMirrorEditor.setOption("lineWrapping", false); |             codeMirrorEditor.setOption("lineWrapping", false); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         // get the filename without any folder | ||||||
|  |         var value = $editFilename.val(); | ||||||
|  |         if (value.length === 0) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         value = value.split('/'); | ||||||
|  |         value = value[value.length - 1]; | ||||||
|  |  | ||||||
|  |         $.getJSON($editFilename.data('ec-url-prefix')+value, function(editorconfig) { | ||||||
|  |             if (editorconfig.indent_style === 'tab') { | ||||||
|  |                 codeMirrorEditor.setOption("indentWithTabs", true); | ||||||
|  |                 codeMirrorEditor.setOption('extraKeys', {}); | ||||||
|  |             } else { | ||||||
|  |                 codeMirrorEditor.setOption("indentWithTabs", false); | ||||||
|  |                 // required because CodeMirror doesn't seems to use spaces correctly for {"indentWithTabs": false}: | ||||||
|  |                 // - https://github.com/codemirror/CodeMirror/issues/988 | ||||||
|  |                 // - https://codemirror.net/doc/manual.html#keymaps | ||||||
|  |                 codeMirrorEditor.setOption('extraKeys', { | ||||||
|  |                     Tab: function(cm) { | ||||||
|  |                         var spaces = Array(parseInt(cm.getOption("indentUnit")) + 1).join(" "); | ||||||
|  |                         cm.replaceSelection(spaces); | ||||||
|  |                     } | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |             codeMirrorEditor.setOption("indentUnit", editorconfig.indent_size || 4); | ||||||
|  |             codeMirrorEditor.setOption("tabSize", editorconfig.tab_width || 4); | ||||||
|  |         }); | ||||||
|     }).trigger('keyup'); |     }).trigger('keyup'); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -290,6 +290,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||||
| 						Patch(reqRepoWriter(), bind(api.EditMilestoneOption{}), repo.EditMilestone). | 						Patch(reqRepoWriter(), bind(api.EditMilestoneOption{}), repo.EditMilestone). | ||||||
| 						Delete(reqRepoWriter(), repo.DeleteMilestone) | 						Delete(reqRepoWriter(), repo.DeleteMilestone) | ||||||
| 				}) | 				}) | ||||||
|  | 				m.Get("/editorconfig/:filename", context.RepoRef(), repo.GetEditorconfig) | ||||||
| 			}, repoAssignment()) | 			}, repoAssignment()) | ||||||
| 		}, reqToken()) | 		}, reqToken()) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -45,3 +45,23 @@ func GetArchive(ctx *context.APIContext) { | |||||||
|  |  | ||||||
| 	repo.Download(ctx.Context) | 	repo.Download(ctx.Context) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func GetEditorconfig(ctx *context.APIContext) { | ||||||
|  | 	ec, err := ctx.Repo.GetEditorconfig() | ||||||
|  | 	if err != nil { | ||||||
|  | 		if git.IsErrNotExist(err) { | ||||||
|  | 			ctx.Error(404, "GetEditorconfig", err) | ||||||
|  | 		} else { | ||||||
|  | 			ctx.Error(500, "GetEditorconfig", err) | ||||||
|  | 		} | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	fileName := ctx.Params("filename") | ||||||
|  | 	def := ec.GetDefinitionForFilename(fileName) | ||||||
|  | 	if def == nil { | ||||||
|  | 		ctx.Error(404, "GetDefinitionForFilename", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	ctx.JSON(200, def) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -98,6 +98,7 @@ func editFile(ctx *context.Context, isNewFile bool) { | |||||||
| 	ctx.Data["MarkdownFileExts"] = strings.Join(setting.Markdown.FileExtensions, ",") | 	ctx.Data["MarkdownFileExts"] = strings.Join(setting.Markdown.FileExtensions, ",") | ||||||
| 	ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",") | 	ctx.Data["LineWrapExtensions"] = strings.Join(setting.Repository.Editor.LineWrapExtensions, ",") | ||||||
| 	ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") | 	ctx.Data["PreviewableFileModes"] = strings.Join(setting.Repository.Editor.PreviewableFileModes, ",") | ||||||
|  | 	ctx.Data["EditorconfigURLPrefix"] = fmt.Sprintf("%s/api/v1/repos/%s/editorconfig/", setting.AppSubUrl, ctx.Repo.Repository.FullName()) | ||||||
|  |  | ||||||
| 	ctx.HTML(200, EDIT_FILE) | 	ctx.HTML(200, EDIT_FILE) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ | |||||||
| 						{{range $i, $v := .TreeNames}} | 						{{range $i, $v := .TreeNames}} | ||||||
| 							<div class="divider"> / </div> | 							<div class="divider"> / </div> | ||||||
| 							{{if eq $i $l}} | 							{{if eq $i $l}} | ||||||
| 								<input id="file-name" value="{{$v}}" placeholder="{{$.i18n.Tr "repo.editor.name_your_file"}}" required autofocus>  | 								<input id="file-name" value="{{$v}}" placeholder="{{$.i18n.Tr "repo.editor.name_your_file"}}" data-ec-url-prefix="{{$.EditorconfigURLPrefix}}" required autofocus> | ||||||
| 								<span class="octicon octicon-info poping up" data-content="{{$.i18n.Tr "repo.editor.filename_help"}}" data-position="bottom center" data-variation="tiny inverted"></span> | 								<span class="octicon octicon-info poping up" data-content="{{$.i18n.Tr "repo.editor.filename_help"}}" data-position="bottom center" data-variation="tiny inverted"></span> | ||||||
| 							{{else}} | 							{{else}} | ||||||
| 								<span class="section"><a href="{{EscapePound $.BranchLink}}/{{EscapePound $v}}">{{$v}}</a></span> | 								<span class="section"><a href="{{EscapePound $.BranchLink}}/{{EscapePound $v}}">{{$v}}</a></span> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user