Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pre-fill suggested New File 'name' and 'content' with Query Params #16556

Merged
merged 4 commits into from
Jul 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions docs/content/doc/developers/integrations.en-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,22 @@ If you are looking for [CI/CD](https://gitea.com/gitea/awesome-gitea#user-conten
an [SDK](https://gitea.com/gitea/awesome-gitea#user-content-sdk),
or even some extra [themes](https://gitea.com/gitea/awesome-gitea#user-content-themes),
you can find them listed in the [awesome-gitea](https://gitea.com/gitea/awesome-gitea) repository!

## Pre-Fill New File name and contents

If you'd like to open a new file with a given name and contents,
you can do so with query parameters:

```txt
GET /{{org}}/{{repo}}/_new/{{filepath}}
?filename={{filename}}
&value={{content}}
```

For example:

```txt
GET https://git.example.com/johndoe/bliss/_new/articles/
?filename=hello-world.md
&value=Hello%2C%20World!
```
9 changes: 7 additions & 2 deletions routers/web/repo/editor.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,11 @@ func editFile(ctx *context.Context, isNewFile bool) {
return
}

treeNames, treePaths := getParentTreeFields(ctx.Repo.TreePath)
// Check if the filename (and additional path) is specified in the querystring
// (filename is a misnomer, but kept for compatibility with Github)
filePath, fileName := path.Split(ctx.Req.URL.Query().Get("filename"))
6543 marked this conversation as resolved.
Show resolved Hide resolved
filePath = strings.Trim(filePath, "/")
treeNames, treePaths := getParentTreeFields(path.Join(ctx.Repo.TreePath, filePath))

if !isNewFile {
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
Expand Down Expand Up @@ -136,7 +140,8 @@ func editFile(ctx *context.Context, isNewFile bool) {
ctx.Data["FileContent"] = content
}
} else {
treeNames = append(treeNames, "") // Append empty string to allow user name the new file.
// Append filename from query, or empty string to allow user name the new file.
treeNames = append(treeNames, fileName)
}

ctx.Data["TreeNames"] = treeNames
Expand Down
10 changes: 9 additions & 1 deletion web_src/js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1825,7 +1825,7 @@ async function initEditor() {
const $editArea = $('.repository.editor textarea#edit_area');
if (!$editArea.length) return;

await createCodeEditor($editArea[0], $editFilename[0], previewFileModes);
const editor = await createCodeEditor($editArea[0], $editFilename[0], previewFileModes);

// Using events from https://github.com/codedance/jquery.AreYouSure#advanced-usage
// to enable or disable the commit button
Expand All @@ -1849,6 +1849,14 @@ async function initEditor() {
}
});

// Update the editor from query params, if available,
// only after the dirtyFileClass initialization
const params = new URLSearchParams(window.location.search);
const value = params.get('value');
if (value) {
editor.setValue(value);
}

$commitButton.on('click', (event) => {
// A modal which asks if an empty file should be committed
if ($editArea.val().length === 0) {
Expand Down