forked from Gitlink/gitea-1156
Support Editorconfig on web editor (#3512)
This commit is contained in:
commit
cd9b926af7
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -827,6 +827,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>
|
||||||
|
|
Loading…
Reference in New Issue