mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-27 14:13:52 +03:00
Frontend refactor, PascalCase to camelCase, remove unused code (#17365)
* Frontend refactor, PascalCase to camelCase, remove unused code * fix
This commit is contained in:
parent
5879ab83b5
commit
2add8fe9be
42 changed files with 162 additions and 182 deletions
|
@ -9,7 +9,6 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/PuerkitoBio/goquery"
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/unknwon/i18n"
|
"github.com/unknwon/i18n"
|
||||||
)
|
)
|
||||||
|
@ -62,7 +61,7 @@ func branchAction(t *testing.T, button string) (*HTMLDoc, string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
req = NewRequestWithValues(t, "POST", link, map[string]string{
|
req = NewRequestWithValues(t, "POST", link, map[string]string{
|
||||||
"_csrf": getCsrf(t, htmlDoc.doc),
|
"_csrf": htmlDoc.GetCSRF(),
|
||||||
})
|
})
|
||||||
session.MakeRequest(t, req, http.StatusOK)
|
session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
|
@ -73,9 +72,3 @@ func branchAction(t *testing.T, button string) (*HTMLDoc, string) {
|
||||||
|
|
||||||
return NewHTMLParser(t, resp.Body), url.Query().Get("name")
|
return NewHTMLParser(t, resp.Body), url.Query().Get("name")
|
||||||
}
|
}
|
||||||
|
|
||||||
func getCsrf(t *testing.T, doc *goquery.Document) string {
|
|
||||||
csrf, exists := doc.Find("meta[name=\"_csrf\"]").Attr("content")
|
|
||||||
assert.True(t, exists)
|
|
||||||
return csrf
|
|
||||||
}
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ func (doc *HTMLDoc) Find(selector string) *goquery.Selection {
|
||||||
return doc.doc.Find(selector)
|
return doc.doc.Find(selector)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCSRF for get CSRC token value from input
|
// GetCSRF for getting CSRF token value from input
|
||||||
func (doc *HTMLDoc) GetCSRF() string {
|
func (doc *HTMLDoc) GetCSRF() string {
|
||||||
return doc.GetInputValueByName("_csrf")
|
return doc.GetInputValueByName("_csrf")
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,7 @@ func testUIDeleteBranch(t *testing.T, session *TestSession, ownerName, repoName,
|
||||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||||
|
|
||||||
req = NewRequestWithValues(t, "POST", relURL+"/delete", map[string]string{
|
req = NewRequestWithValues(t, "POST", relURL+"/delete", map[string]string{
|
||||||
"_csrf": getCsrf(t, htmlDoc.doc),
|
"_csrf": htmlDoc.GetCSRF(),
|
||||||
"name": branchName,
|
"name": branchName,
|
||||||
})
|
})
|
||||||
session.MakeRequest(t, req, http.StatusOK)
|
session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
@ -127,7 +127,7 @@ func testDeleteRepository(t *testing.T, session *TestSession, ownerName, repoNam
|
||||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||||
|
|
||||||
req = NewRequestWithValues(t, "POST", relURL+"?action=delete", map[string]string{
|
req = NewRequestWithValues(t, "POST", relURL+"?action=delete", map[string]string{
|
||||||
"_csrf": getCsrf(t, htmlDoc.doc),
|
"_csrf": htmlDoc.GetCSRF(),
|
||||||
"repo_name": repoName,
|
"repo_name": repoName,
|
||||||
})
|
})
|
||||||
session.MakeRequest(t, req, http.StatusFound)
|
session.MakeRequest(t, req, http.StatusFound)
|
||||||
|
|
|
@ -645,7 +645,7 @@ func Contexter() func(next http.Handler) http.Handler {
|
||||||
"CurrentURL": setting.AppSubURL + req.URL.RequestURI(),
|
"CurrentURL": setting.AppSubURL + req.URL.RequestURI(),
|
||||||
"PageStartTime": startTime,
|
"PageStartTime": startTime,
|
||||||
"Link": link,
|
"Link": link,
|
||||||
"IsProd": setting.IsProd,
|
"RunModeIsProd": setting.IsProd,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
// PageData is passed by reference, and it will be rendered to `window.config.pageData` in `head.tmpl` for JavaScript modules
|
// PageData is passed by reference, and it will be rendered to `window.config.pageData` in `head.tmpl` for JavaScript modules
|
||||||
|
|
|
@ -205,7 +205,6 @@ func DeleteProject(ctx *context.Context) {
|
||||||
// EditProject allows a project to be edited
|
// EditProject allows a project to be edited
|
||||||
func EditProject(ctx *context.Context) {
|
func EditProject(ctx *context.Context) {
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.projects.edit")
|
ctx.Data["Title"] = ctx.Tr("repo.projects.edit")
|
||||||
ctx.Data["PageIsProjects"] = true
|
|
||||||
ctx.Data["PageIsEditProjects"] = true
|
ctx.Data["PageIsEditProjects"] = true
|
||||||
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(models.UnitTypeProjects)
|
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(models.UnitTypeProjects)
|
||||||
|
|
||||||
|
@ -233,7 +232,6 @@ func EditProject(ctx *context.Context) {
|
||||||
func EditProjectPost(ctx *context.Context) {
|
func EditProjectPost(ctx *context.Context) {
|
||||||
form := web.GetForm(ctx).(*forms.CreateProjectForm)
|
form := web.GetForm(ctx).(*forms.CreateProjectForm)
|
||||||
ctx.Data["Title"] = ctx.Tr("repo.projects.edit")
|
ctx.Data["Title"] = ctx.Tr("repo.projects.edit")
|
||||||
ctx.Data["PageIsProjects"] = true
|
|
||||||
ctx.Data["PageIsEditProjects"] = true
|
ctx.Data["PageIsEditProjects"] = true
|
||||||
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(models.UnitTypeProjects)
|
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(models.UnitTypeProjects)
|
||||||
|
|
||||||
|
@ -335,8 +333,6 @@ func ViewProject(ctx *context.Context) {
|
||||||
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(models.UnitTypeProjects)
|
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(models.UnitTypeProjects)
|
||||||
ctx.Data["Project"] = project
|
ctx.Data["Project"] = project
|
||||||
ctx.Data["Boards"] = boards
|
ctx.Data["Boards"] = boards
|
||||||
ctx.Data["PageIsProjects"] = true
|
|
||||||
ctx.Data["RequiresDraggable"] = true
|
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplProjectsView)
|
ctx.HTML(http.StatusOK, tplProjectsView)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>{{if .Title}}{{.Title | RenderEmojiPlain}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}} </title>
|
<title>{{if .Title}}{{.Title | RenderEmojiPlain}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title>
|
||||||
<link rel="manifest" href="data:{{.ManifestData}}"/>
|
<link rel="manifest" href="data:{{.ManifestData}}"/>
|
||||||
<meta name="theme-color" content="{{ThemeColorMetaTag}}">
|
<meta name="theme-color" content="{{ThemeColorMetaTag}}">
|
||||||
<meta name="default-theme" content="{{DefaultTheme}}" />
|
<meta name="default-theme" content="{{DefaultTheme}}" />
|
||||||
|
@ -11,7 +11,6 @@
|
||||||
<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}}" />
|
||||||
<meta name="keywords" content="{{MetaKeywords}}">
|
<meta name="keywords" content="{{MetaKeywords}}">
|
||||||
<meta name="referrer" content="no-referrer" />
|
<meta name="referrer" content="no-referrer" />
|
||||||
<meta name="_csrf" content="{{.CsrfToken}}" />
|
|
||||||
{{if .GoGetImport}}
|
{{if .GoGetImport}}
|
||||||
<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">
|
<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}">
|
||||||
<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}">
|
<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}">
|
||||||
|
@ -19,25 +18,17 @@
|
||||||
<script>
|
<script>
|
||||||
<!-- /* eslint-disable */ -->
|
<!-- /* eslint-disable */ -->
|
||||||
window.config = {
|
window.config = {
|
||||||
AppVer: '{{AppVer}}',
|
appVer: '{{AppVer}}',
|
||||||
AppSubUrl: '{{AppSubUrl}}',
|
appSubUrl: '{{AppSubUrl}}',
|
||||||
AssetUrlPrefix: '{{AssetUrlPrefix}}',
|
assetUrlPrefix: '{{AssetUrlPrefix}}',
|
||||||
IsProd: {{.IsProd}},
|
runModeIsProd: {{.RunModeIsProd}},
|
||||||
CustomEmojis: {{CustomEmojis}},
|
customEmojis: {{CustomEmojis}},
|
||||||
UseServiceWorker: {{UseServiceWorker}},
|
useServiceWorker: {{UseServiceWorker}},
|
||||||
csrf: '{{.CsrfToken}}',
|
csrfToken: '{{.CsrfToken}}',
|
||||||
pageData: {{ .PageData }},
|
pageData: {{.PageData}},
|
||||||
HighlightJS: {{if .RequireHighlightJS}}true{{else}}false{{end}},
|
requireTribute: {{.RequireTribute}},
|
||||||
SimpleMDE: {{if .RequireSimpleMDE}}true{{else}}false{{end}},
|
notificationSettings: {{NotificationSettings}}, {{/*a map provided by NewFuncMap in helper.go*/}}
|
||||||
Tribute: {{if .RequireTribute}}true{{else}}false{{end}},
|
enableTimeTracking: {{EnableTimetracking}},
|
||||||
NotificationSettings: {
|
|
||||||
MinTimeout: {{NotificationSettings.MinTimeout}},
|
|
||||||
TimeoutStep: {{NotificationSettings.TimeoutStep}},
|
|
||||||
MaxTimeout: {{NotificationSettings.MaxTimeout}},
|
|
||||||
EventSourceUpdateTime: {{NotificationSettings.EventSourceUpdateTime}},
|
|
||||||
},
|
|
||||||
EnableTimetracking: {{if EnableTimetracking}}true{{else}}false{{end}},
|
|
||||||
PageIsProjects: {{if .PageIsProjects }}true{{else}}false{{end}},
|
|
||||||
{{if .RequireTribute}}
|
{{if .RequireTribute}}
|
||||||
tributeValues: Array.from(new Map([
|
tributeValues: Array.from(new Map([
|
||||||
{{ range .Participants }}
|
{{ range .Participants }}
|
||||||
|
@ -54,7 +45,7 @@
|
||||||
{{ end }}
|
{{ end }}
|
||||||
]).values()),
|
]).values()),
|
||||||
{{end}}
|
{{end}}
|
||||||
MermaidMaxSourceCharacters: {{MermaidMaxSourceCharacters}},
|
mermaidMaxSourceCharacters: {{MermaidMaxSourceCharacters}},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<link rel="icon" href="{{AssetUrlPrefix}}/img/logo.svg" type="image/svg+xml">
|
<link rel="icon" href="{{AssetUrlPrefix}}/img/logo.svg" type="image/svg+xml">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{{template "base/head" .}}
|
{{template "base/head" .}}
|
||||||
<div class="page-content repository milestones">
|
<div class="page-content repository projects milestones">
|
||||||
{{template "repo/header" .}}
|
{{template "repo/header" .}}
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="navbar">
|
<div class="navbar">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{{template "base/head" .}}
|
{{template "base/head" .}}
|
||||||
<div class="page-content repository new milestone">
|
<div class="page-content repository projects edit-project new milestone">
|
||||||
{{template "repo/header" .}}
|
{{template "repo/header" .}}
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="navbar">
|
<div class="navbar">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{{template "base/head" .}}
|
{{template "base/head" .}}
|
||||||
<div class="page-content repository">
|
<div class="page-content repository projects view-project">
|
||||||
{{template "repo/header" .}}
|
{{template "repo/header" .}}
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="ui two column stackable grid">
|
<div class="ui two column stackable grid">
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
{{template "repo/issue/navbar" .}}
|
{{template "repo/issue/navbar" .}}
|
||||||
</div>
|
</div>
|
||||||
<div class="column right aligned">
|
<div class="column right aligned">
|
||||||
{{if and .CanWriteProjects (not .Repository.IsArchived) .PageIsProjects}}
|
{{if and .CanWriteProjects (not .Repository.IsArchived)}}
|
||||||
<a class="ui green button show-modal item" href="{{$.RepoLink}}/issues/new?project={{$.Project.ID}}">{{.i18n.Tr "repo.issues.new"}}</a>
|
<a class="ui green button show-modal item" href="{{$.RepoLink}}/issues/new?project={{$.Project.ID}}">{{.i18n.Tr "repo.issues.new"}}</a>
|
||||||
<a class="ui green button show-modal item" data-modal="#new-board-item">{{.i18n.Tr "new_project_board"}}</a>
|
<a class="ui green button show-modal item" data-modal="#new-board-item">{{.i18n.Tr "new_project_board"}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
@ -80,10 +80,10 @@
|
||||||
<div class="board">
|
<div class="board">
|
||||||
{{ range $board := .Boards }}
|
{{ range $board := .Boards }}
|
||||||
|
|
||||||
<div class="ui segment board-column" style="background: {{.Color}}!important;" data-id="{{.ID}}" data-sorting="{{.Sorting}}" data-url="{{$.RepoLink}}/projects/{{$.Project.ID}}/{{.ID}}">
|
<div class="ui segment board-column" style="background: {{.Color}} !important;" data-id="{{.ID}}" data-sorting="{{.Sorting}}" data-url="{{$.RepoLink}}/projects/{{$.Project.ID}}/{{.ID}}">
|
||||||
<div class="board-column-header df ac sb">
|
<div class="board-column-header df ac sb">
|
||||||
<div class="ui large label board-label py-2">{{.Title}}</div>
|
<div class="ui large label board-label py-2">{{.Title}}</div>
|
||||||
{{if and $.CanWriteProjects (not $.Repository.IsArchived) $.PageIsProjects (ne .ID 0)}}
|
{{if and $.CanWriteProjects (not $.Repository.IsArchived) (ne .ID 0)}}
|
||||||
<div class="ui dropdown jump item poping up" data-variation="tiny inverted">
|
<div class="ui dropdown jump item poping up" data-variation="tiny inverted">
|
||||||
<div class="not-mobile px-3" tabindex="-1">
|
<div class="not-mobile px-3" tabindex="-1">
|
||||||
{{svg "octicon-kebab-horizontal"}}
|
{{svg "octicon-kebab-horizontal"}}
|
||||||
|
@ -232,7 +232,7 @@
|
||||||
{{if .Labels}}
|
{{if .Labels}}
|
||||||
<div class="extra content labels-list p-0 pt-2">
|
<div class="extra content labels-list p-0 pt-2">
|
||||||
{{ range .Labels }}
|
{{ range .Labels }}
|
||||||
<a class="ui label" href="{{$.RepoLink}}/issues?labels={{.ID}}" style="color: {{.ForegroundColor}}; background-color: {{.Color}}" title="{{.Description | RenderEmojiPlain}}">{{.Name | RenderEmoji}}</a>
|
<a class="ui label" href="{{$.RepoLink}}/issues?labels={{.ID}}" style="color: {{.ForegroundColor}}; background-color: {{.Color}};" title="{{.Description | RenderEmojiPlain}}">{{.Name | RenderEmoji}}</a>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<script>
|
<script>
|
||||||
import {SvgIcon} from '../svg.js';
|
import {SvgIcon} from '../svg.js';
|
||||||
|
|
||||||
const {AppSubUrl} = window.config;
|
const {appSubUrl} = window.config;
|
||||||
|
|
||||||
// NOTE: see models/issue_label.go for similar implementation
|
// NOTE: see models/issue_label.go for similar implementation
|
||||||
const srgbToLinear = (color) => {
|
const srgbToLinear = (color) => {
|
||||||
|
@ -112,7 +112,7 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
load(data, callback) {
|
load(data, callback) {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
$.get(`${AppSubUrl}/api/v1/repos/${data.owner}/${data.repo}/issues/${data.index}`, (issue) => {
|
$.get(`${appSubUrl}/api/v1/repos/${data.owner}/${data.repo}/issues/${data.index}`, (issue) => {
|
||||||
this.issue = issue;
|
this.issue = issue;
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import {initVueSvg, vueDelimiters} from './VueComponentLoader.js';
|
import {initVueSvg, vueDelimiters} from './VueComponentLoader.js';
|
||||||
|
|
||||||
const {AppSubUrl, AssetUrlPrefix, pageData} = window.config;
|
const {appSubUrl, assetUrlPrefix, pageData} = window.config;
|
||||||
|
|
||||||
function initVueComponents() {
|
function initVueComponents() {
|
||||||
Vue.component('repo-search', {
|
Vue.component('repo-search', {
|
||||||
|
@ -95,7 +95,7 @@ function initVueComponents() {
|
||||||
finalPage: 1,
|
finalPage: 1,
|
||||||
searchQuery,
|
searchQuery,
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
staticPrefix: AssetUrlPrefix,
|
staticPrefix: assetUrlPrefix,
|
||||||
counts: {},
|
counts: {},
|
||||||
repoTypes: {
|
repoTypes: {
|
||||||
all: {
|
all: {
|
||||||
|
@ -361,7 +361,7 @@ export function initDashboardRepoList() {
|
||||||
data: () => {
|
data: () => {
|
||||||
return {
|
return {
|
||||||
searchLimit: dashboardRepoListData.searchLimit || 0,
|
searchLimit: dashboardRepoListData.searchLimit || 0,
|
||||||
subUrl: AppSubUrl,
|
subUrl: appSubUrl,
|
||||||
uid: dashboardRepoListData.uid || 0,
|
uid: dashboardRepoListData.uid || 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@ export function initVueEnv() {
|
||||||
if (vueEnvInited) return;
|
if (vueEnvInited) return;
|
||||||
vueEnvInited = true;
|
vueEnvInited = true;
|
||||||
|
|
||||||
const isProd = window.config.IsProd;
|
const isProd = window.config.runModeIsProd;
|
||||||
Vue.config.productionTip = false;
|
Vue.config.productionTip = false;
|
||||||
Vue.config.devtools = !isProd;
|
Vue.config.devtools = !isProd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export function initAdminCommon() {
|
export function initAdminCommon() {
|
||||||
if ($('.admin').length === 0) {
|
if ($('.admin').length === 0) {
|
||||||
|
@ -204,7 +204,7 @@ export function initAdminCommon() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$.post($this.data('link'), {
|
$.post($this.data('link'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
ids
|
ids
|
||||||
}).done(() => {
|
}).done(() => {
|
||||||
window.location.href = $this.data('redirect');
|
window.location.href = $this.data('redirect');
|
||||||
|
|
|
@ -4,7 +4,7 @@ import {initCompColorPicker} from './comp/ColorPicker.js';
|
||||||
|
|
||||||
import 'jquery.are-you-sure';
|
import 'jquery.are-you-sure';
|
||||||
|
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export function initGlobalFormDirtyLeaveConfirm() {
|
export function initGlobalFormDirtyLeaveConfirm() {
|
||||||
// Warn users that try to leave a page after entering data into a form.
|
// Warn users that try to leave a page after entering data into a form.
|
||||||
|
@ -136,7 +136,7 @@ export async function initGlobalDropzone() {
|
||||||
const $dropzone = $(el);
|
const $dropzone = $(el);
|
||||||
await createDropzone(el, {
|
await createDropzone(el, {
|
||||||
url: $dropzone.data('upload-url'),
|
url: $dropzone.data('upload-url'),
|
||||||
headers: {'X-Csrf-Token': csrf},
|
headers: {'X-Csrf-Token': csrfToken},
|
||||||
maxFiles: $dropzone.data('max-file'),
|
maxFiles: $dropzone.data('max-file'),
|
||||||
maxFilesize: $dropzone.data('max-size'),
|
maxFilesize: $dropzone.data('max-size'),
|
||||||
acceptedFiles: (['*/*', ''].includes($dropzone.data('accepts'))) ? null : $dropzone.data('accepts'),
|
acceptedFiles: (['*/*', ''].includes($dropzone.data('accepts'))) ? null : $dropzone.data('accepts'),
|
||||||
|
@ -159,7 +159,7 @@ export async function initGlobalDropzone() {
|
||||||
if ($dropzone.data('remove-url')) {
|
if ($dropzone.data('remove-url')) {
|
||||||
$.post($dropzone.data('remove-url'), {
|
$.post($dropzone.data('remove-url'), {
|
||||||
file: file.uuid,
|
file: file.uuid,
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -194,7 +194,7 @@ export function initGlobalLinkActions() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const postData = {
|
const postData = {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
};
|
};
|
||||||
for (const [key, value] of Object.entries(dataArray)) {
|
for (const [key, value] of Object.entries(dataArray)) {
|
||||||
if (key && key.startsWith('data')) {
|
if (key && key.startsWith('data')) {
|
||||||
|
@ -232,7 +232,7 @@ export function initGlobalLinkActions() {
|
||||||
}
|
}
|
||||||
|
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
id: $this.data('id')
|
id: $this.data('id')
|
||||||
}).done((data) => {
|
}).done((data) => {
|
||||||
window.location.href = data.redirect;
|
window.location.href = data.redirect;
|
||||||
|
@ -247,7 +247,7 @@ export function initGlobalLinkActions() {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
const redirect = $this.data('redirect');
|
const redirect = $this.data('redirect');
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf
|
_csrf: csrfToken
|
||||||
}).done((data) => {
|
}).done((data) => {
|
||||||
if (data.redirect) {
|
if (data.redirect) {
|
||||||
window.location.href = data.redirect;
|
window.location.href = data.redirect;
|
||||||
|
@ -270,7 +270,7 @@ export function initGlobalLinkActions() {
|
||||||
$('.undo-button').on('click', function () {
|
$('.undo-button').on('click', function () {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
id: $this.data('id')
|
id: $this.data('id')
|
||||||
}).done((data) => {
|
}).done((data) => {
|
||||||
window.location.href = data.redirect;
|
window.location.href = data.redirect;
|
||||||
|
@ -298,7 +298,7 @@ export function initGlobalButtons() {
|
||||||
$('.delete-post.button').on('click', function () {
|
$('.delete-post.button').on('click', function () {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
$.post($this.data('request-url'), {
|
$.post($this.data('request-url'), {
|
||||||
_csrf: csrf
|
_csrf: csrfToken
|
||||||
}).done(() => {
|
}).done(() => {
|
||||||
window.location.href = $this.data('done-url');
|
window.location.href = $this.data('done-url');
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {AppSubUrl, csrf} = window.config;
|
const {appSubUrl, csrfToken} = window.config;
|
||||||
|
|
||||||
async function uploadFile(file, uploadUrl) {
|
async function uploadFile(file, uploadUrl) {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
@ -6,7 +6,7 @@ async function uploadFile(file, uploadUrl) {
|
||||||
|
|
||||||
const res = await fetch(uploadUrl, {
|
const res = await fetch(uploadUrl, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {'X-Csrf-Token': csrf},
|
headers: {'X-Csrf-Token': csrfToken},
|
||||||
body: formData,
|
body: formData,
|
||||||
});
|
});
|
||||||
return await res.json();
|
return await res.json();
|
||||||
|
@ -67,7 +67,7 @@ export function initCompImagePaste($target) {
|
||||||
const name = img.name.substr(0, img.name.lastIndexOf('.'));
|
const name = img.name.substr(0, img.name.lastIndexOf('.'));
|
||||||
insertAtCursor(textarea, `![${name}]()`);
|
insertAtCursor(textarea, `![${name}]()`);
|
||||||
const data = await uploadFile(img, uploadUrl);
|
const data = await uploadFile(img, uploadUrl);
|
||||||
replaceAndKeepCursor(textarea, `![${name}]()`, `![${name}](${AppSubUrl}/attachments/${data.uuid})`);
|
replaceAndKeepCursor(textarea, `![${name}]()`, `![${name}](${appSubUrl}/attachments/${data.uuid})`);
|
||||||
const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid);
|
const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid);
|
||||||
dropzoneFiles.appendChild(input[0]);
|
dropzoneFiles.appendChild(input[0]);
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,7 @@ export function initSimpleMDEImagePaste(simplemde, dropzone, files) {
|
||||||
const name = img.name.substr(0, img.name.lastIndexOf('.'));
|
const name = img.name.substr(0, img.name.lastIndexOf('.'));
|
||||||
const data = await uploadFile(img, uploadUrl);
|
const data = await uploadFile(img, uploadUrl);
|
||||||
const pos = simplemde.codemirror.getCursor();
|
const pos = simplemde.codemirror.getCursor();
|
||||||
simplemde.codemirror.replaceRange(`![${name}](${AppSubUrl}/attachments/${data.uuid})`, pos);
|
simplemde.codemirror.replaceRange(`![${name}](${appSubUrl}/attachments/${data.uuid})`, pos);
|
||||||
const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid);
|
const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid);
|
||||||
files.append(input);
|
files.append(input);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import {initMarkupContent} from '../../markup/content.js';
|
import {initMarkupContent} from '../../markup/content.js';
|
||||||
|
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export function initCompMarkupContentPreviewTab($form) {
|
export function initCompMarkupContentPreviewTab($form) {
|
||||||
const $tabMenu = $form.find('.tabular.menu');
|
const $tabMenu = $form.find('.tabular.menu');
|
||||||
|
@ -8,7 +8,7 @@ export function initCompMarkupContentPreviewTab($form) {
|
||||||
$tabMenu.find(`.item[data-tab="${$tabMenu.data('preview')}"]`).on('click', function () {
|
$tabMenu.find(`.item[data-tab="${$tabMenu.data('preview')}"]`).on('click', function () {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
mode: 'comment',
|
mode: 'comment',
|
||||||
context: $this.data('context'),
|
context: $this.data('context'),
|
||||||
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export function initCompReactionSelector(parent) {
|
export function initCompReactionSelector(parent) {
|
||||||
let reactions = '';
|
let reactions = '';
|
||||||
|
@ -20,7 +20,7 @@ export function initCompReactionSelector(parent) {
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url,
|
url,
|
||||||
data: {
|
data: {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
content: $(this).data('content')
|
content: $(this).data('content')
|
||||||
}
|
}
|
||||||
}).done((resp) => {
|
}).done((resp) => {
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
import {htmlEscape} from 'escape-goat';
|
import {htmlEscape} from 'escape-goat';
|
||||||
|
|
||||||
const {AppSubUrl} = window.config;
|
const {appSubUrl} = window.config;
|
||||||
|
|
||||||
export function initSearchUserBox() {
|
export function initSearchUserBox() {
|
||||||
const $searchUserBox = $('#search-user-box');
|
const $searchUserBox = $('#search-user-box');
|
||||||
$searchUserBox.search({
|
$searchUserBox.search({
|
||||||
minCharacters: 2,
|
minCharacters: 2,
|
||||||
apiSettings: {
|
apiSettings: {
|
||||||
url: `${AppSubUrl}/api/v1/users/search?q={query}`,
|
url: `${appSubUrl}/api/v1/users/search?q={query}`,
|
||||||
onResponse(response) {
|
onResponse(response) {
|
||||||
const items = [];
|
const items = [];
|
||||||
const searchQueryUppercase = $searchUserBox.find('input').val().toUpperCase();
|
const searchQueryUppercase = $searchUserBox.find('input').val().toUpperCase();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export function initWebHookEditor() {
|
export function initWebHookEditor() {
|
||||||
if ($('.new.webhook').length === 0) {
|
if ($('.new.webhook').length === 0) {
|
||||||
|
@ -30,7 +30,7 @@ export function initWebHookEditor() {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
$this.addClass('loading disabled');
|
$this.addClass('loading disabled');
|
||||||
$.post($this.data('link'), {
|
$.post($this.data('link'), {
|
||||||
_csrf: csrf
|
_csrf: csrfToken
|
||||||
}).done(
|
}).done(
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href = $this.data('redirect');
|
window.location.href = $this.data('redirect');
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import emojis from '../../../assets/emoji.json';
|
import emojis from '../../../assets/emoji.json';
|
||||||
|
|
||||||
const {AssetUrlPrefix} = window.config;
|
const {assetUrlPrefix} = window.config;
|
||||||
const {CustomEmojis} = window.config;
|
const {customEmojis} = window.config;
|
||||||
|
|
||||||
const tempMap = {...CustomEmojis};
|
const tempMap = {...customEmojis};
|
||||||
for (const {emoji, aliases} of emojis) {
|
for (const {emoji, aliases} of emojis) {
|
||||||
for (const alias of aliases || []) {
|
for (const alias of aliases || []) {
|
||||||
tempMap[alias] = emoji;
|
tempMap[alias] = emoji;
|
||||||
|
@ -24,8 +24,8 @@ for (const key of emojiKeys) {
|
||||||
// retrieve HTML for given emoji name
|
// retrieve HTML for given emoji name
|
||||||
export function emojiHTML(name) {
|
export function emojiHTML(name) {
|
||||||
let inner;
|
let inner;
|
||||||
if (Object.prototype.hasOwnProperty.call(CustomEmojis, name)) {
|
if (Object.prototype.hasOwnProperty.call(customEmojis, name)) {
|
||||||
inner = `<img alt=":${name}:" src="${AssetUrlPrefix}/img/emoji/${name}.png">`;
|
inner = `<img alt=":${name}:" src="${assetUrlPrefix}/img/emoji/${name}.png">`;
|
||||||
} else {
|
} else {
|
||||||
inner = emojiString(name);
|
inner = emojiString(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import {svg} from '../svg.js';
|
import {svg} from '../svg.js';
|
||||||
|
|
||||||
const {AppSubUrl, csrf} = window.config;
|
const {appSubUrl, csrfToken} = window.config;
|
||||||
|
|
||||||
let i18nTextEdited;
|
let i18nTextEdited;
|
||||||
let i18nTextOptions;
|
let i18nTextOptions;
|
||||||
|
@ -37,7 +37,7 @@ function showContentHistoryDetail(issueBaseUrl, commentId, historyId, itemTitleH
|
||||||
if (optionItem === 'delete') {
|
if (optionItem === 'delete') {
|
||||||
if (window.confirm(i18nTextDeleteFromHistoryConfirm)) {
|
if (window.confirm(i18nTextDeleteFromHistoryConfirm)) {
|
||||||
$.post(`${issueBaseUrl}/content-history/soft-delete?comment_id=${commentId}&history_id=${historyId}`, {
|
$.post(`${issueBaseUrl}/content-history/soft-delete?comment_id=${commentId}&history_id=${historyId}`, {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
}).done((resp) => {
|
}).done((resp) => {
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
$dialog.modal('hide');
|
$dialog.modal('hide');
|
||||||
|
@ -59,7 +59,7 @@ function showContentHistoryDetail(issueBaseUrl, commentId, historyId, itemTitleH
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `${issueBaseUrl}/content-history/detail?comment_id=${commentId}&history_id=${historyId}`,
|
url: `${issueBaseUrl}/content-history/detail?comment_id=${commentId}&history_id=${historyId}`,
|
||||||
data: {
|
data: {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
},
|
},
|
||||||
}).done((resp) => {
|
}).done((resp) => {
|
||||||
$dialog.find('.content').html(resp.diffHtml);
|
$dialog.find('.content').html(resp.diffHtml);
|
||||||
|
@ -110,12 +110,12 @@ export function initIssueContentHistory() {
|
||||||
if (!issueIndex || !$itemIssue.length) return;
|
if (!issueIndex || !$itemIssue.length) return;
|
||||||
|
|
||||||
const repoLink = $('#repolink').val();
|
const repoLink = $('#repolink').val();
|
||||||
const issueBaseUrl = `${AppSubUrl}/${repoLink}/issues/${issueIndex}`;
|
const issueBaseUrl = `${appSubUrl}/${repoLink}/issues/${issueIndex}`;
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `${issueBaseUrl}/content-history/overview`,
|
url: `${issueBaseUrl}/content-history/overview`,
|
||||||
data: {
|
data: {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
},
|
},
|
||||||
}).done((resp) => {
|
}).done((resp) => {
|
||||||
i18nTextEdited = resp.i18n.textEdited;
|
i18nTextEdited = resp.i18n.textEdited;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export async function initLastCommitLoader() {
|
export async function initLastCommitLoader() {
|
||||||
const entryMap = {};
|
const entryMap = {};
|
||||||
|
@ -18,7 +18,7 @@ export async function initLastCommitLoader() {
|
||||||
|
|
||||||
if (entries.length > 200) {
|
if (entries.length > 200) {
|
||||||
$.post(lastCommitLoaderURL, {
|
$.post(lastCommitLoaderURL, {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
}, (data) => {
|
}, (data) => {
|
||||||
$('table#repo-files-table').replaceWith(data);
|
$('table#repo-files-table').replaceWith(data);
|
||||||
});
|
});
|
||||||
|
@ -26,7 +26,7 @@ export async function initLastCommitLoader() {
|
||||||
}
|
}
|
||||||
|
|
||||||
$.post(lastCommitLoaderURL, {
|
$.post(lastCommitLoaderURL, {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
'f': entries,
|
'f': entries,
|
||||||
}, (data) => {
|
}, (data) => {
|
||||||
$(data).find('tr').each((_, row) => {
|
$(data).find('tr').each((_, row) => {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {AppSubUrl, csrf, NotificationSettings} = window.config;
|
const {appSubUrl, csrfToken, notificationSettings} = window.config;
|
||||||
|
|
||||||
let notificationSequenceNumber = 0;
|
let notificationSequenceNumber = 0;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ export async function initNotificationCount() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NotificationSettings.EventSourceUpdateTime > 0 && !!window.EventSource && window.SharedWorker) {
|
if (notificationSettings.EventSourceUpdateTime > 0 && !!window.EventSource && window.SharedWorker) {
|
||||||
// Try to connect to the event source via the shared worker first
|
// Try to connect to the event source via the shared worker first
|
||||||
const worker = new SharedWorker(`${__webpack_public_path__}js/eventsource.sharedworker.js`, 'notification-worker');
|
const worker = new SharedWorker(`${__webpack_public_path__}js/eventsource.sharedworker.js`, 'notification-worker');
|
||||||
worker.addEventListener('error', (event) => {
|
worker.addEventListener('error', (event) => {
|
||||||
|
@ -58,7 +58,7 @@ export async function initNotificationCount() {
|
||||||
});
|
});
|
||||||
worker.port.postMessage({
|
worker.port.postMessage({
|
||||||
type: 'start',
|
type: 'start',
|
||||||
url: `${window.location.origin}${AppSubUrl}/user/events`,
|
url: `${window.location.origin}${appSubUrl}/user/events`,
|
||||||
});
|
});
|
||||||
worker.port.addEventListener('message', (event) => {
|
worker.port.addEventListener('message', (event) => {
|
||||||
if (!event.data || !event.data.type) {
|
if (!event.data || !event.data.type) {
|
||||||
|
@ -77,7 +77,7 @@ export async function initNotificationCount() {
|
||||||
type: 'close',
|
type: 'close',
|
||||||
});
|
});
|
||||||
worker.port.close();
|
worker.port.close();
|
||||||
window.location.href = AppSubUrl;
|
window.location.href = appSubUrl;
|
||||||
} else if (event.data.type === 'close') {
|
} else if (event.data.type === 'close') {
|
||||||
worker.port.postMessage({
|
worker.port.postMessage({
|
||||||
type: 'close',
|
type: 'close',
|
||||||
|
@ -99,7 +99,7 @@ export async function initNotificationCount() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NotificationSettings.MinTimeout <= 0) {
|
if (notificationSettings.MinTimeout <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,13 +109,13 @@ export async function initNotificationCount() {
|
||||||
}, timeout);
|
}, timeout);
|
||||||
};
|
};
|
||||||
|
|
||||||
fn(NotificationSettings.MinTimeout, notificationCount.text());
|
fn(notificationSettings.MinTimeout, notificationCount.text());
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateNotificationCountWithCallback(callback, timeout, lastCount) {
|
async function updateNotificationCountWithCallback(callback, timeout, lastCount) {
|
||||||
const currentCount = $('.notification_count').text();
|
const currentCount = $('.notification_count').text();
|
||||||
if (lastCount !== currentCount) {
|
if (lastCount !== currentCount) {
|
||||||
callback(NotificationSettings.MinTimeout, currentCount);
|
callback(notificationSettings.MinTimeout, currentCount);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,9 +124,9 @@ async function updateNotificationCountWithCallback(callback, timeout, lastCount)
|
||||||
|
|
||||||
if (lastCount !== newCount) {
|
if (lastCount !== newCount) {
|
||||||
needsUpdate = true;
|
needsUpdate = true;
|
||||||
timeout = NotificationSettings.MinTimeout;
|
timeout = notificationSettings.MinTimeout;
|
||||||
} else if (timeout < NotificationSettings.MaxTimeout) {
|
} else if (timeout < notificationSettings.MaxTimeout) {
|
||||||
timeout += NotificationSettings.TimeoutStep;
|
timeout += notificationSettings.TimeoutStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(timeout, newCount);
|
callback(timeout, newCount);
|
||||||
|
@ -140,7 +140,7 @@ async function updateNotificationTable() {
|
||||||
if (notificationDiv.length > 0) {
|
if (notificationDiv.length > 0) {
|
||||||
const data = await $.ajax({
|
const data = await $.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: `${AppSubUrl}/notifications?${notificationDiv.data('params')}`,
|
url: `${appSubUrl}/notifications?${notificationDiv.data('params')}`,
|
||||||
data: {
|
data: {
|
||||||
'div-only': true,
|
'div-only': true,
|
||||||
'sequence-number': ++notificationSequenceNumber,
|
'sequence-number': ++notificationSequenceNumber,
|
||||||
|
@ -156,9 +156,9 @@ async function updateNotificationTable() {
|
||||||
async function updateNotificationCount() {
|
async function updateNotificationCount() {
|
||||||
const data = await $.ajax({
|
const data = await $.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: `${AppSubUrl}/api/v1/notifications/new`,
|
url: `${appSubUrl}/api/v1/notifications/new`,
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ async function updateNotification(url, status, page, q, notificationID) {
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url,
|
url,
|
||||||
data: {
|
data: {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
notification_id: notificationID,
|
notification_id: notificationID,
|
||||||
status,
|
status,
|
||||||
page,
|
page,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {AppSubUrl} = window.config;
|
const {appSubUrl} = window.config;
|
||||||
|
|
||||||
export function initOrgTeamSettings() {
|
export function initOrgTeamSettings() {
|
||||||
// Change team access mode
|
// Change team access mode
|
||||||
|
@ -18,7 +18,7 @@ export function initOrgTeamSearchRepoBox() {
|
||||||
$searchRepoBox.search({
|
$searchRepoBox.search({
|
||||||
minCharacters: 2,
|
minCharacters: 2,
|
||||||
apiSettings: {
|
apiSettings: {
|
||||||
url: `${AppSubUrl}/api/v1/repos/search?q={query}&uid=${$searchRepoBox.data('uid')}`,
|
url: `${appSubUrl}/api/v1/repos/search?q={query}&uid=${$searchRepoBox.data('uid')}`,
|
||||||
onResponse(response) {
|
onResponse(response) {
|
||||||
const items = [];
|
const items = [];
|
||||||
$.each(response.data, (_i, item) => {
|
$.each(response.data, (_i, item) => {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const {csrf, PageIsProjects} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export default async function initProject() {
|
export default async function initProject() {
|
||||||
if (!PageIsProjects) {
|
if (!$('.repository.projects').length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ export default async function initProject() {
|
||||||
url: $(column).data('url'),
|
url: $(column).data('url'),
|
||||||
data: JSON.stringify({sorting: i, color: rgbToHex($(column).css('backgroundColor'))}),
|
data: JSON.stringify({sorting: i, color: rgbToHex($(column).css('backgroundColor'))}),
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
'X-Remote': true,
|
'X-Remote': true,
|
||||||
},
|
},
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
@ -47,7 +47,7 @@ export default async function initProject() {
|
||||||
onAdd: (e) => {
|
onAdd: (e) => {
|
||||||
$.ajax(`${e.to.dataset.url}/${e.item.dataset.issue}`, {
|
$.ajax(`${e.to.dataset.url}/${e.item.dataset.issue}`, {
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
'X-Remote': true,
|
'X-Remote': true,
|
||||||
},
|
},
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
@ -83,7 +83,7 @@ export default async function initProject() {
|
||||||
url: $(this).data('url'),
|
url: $(this).data('url'),
|
||||||
data: JSON.stringify({title: projectTitleInput.val(), color: projectColorInput.val()}),
|
data: JSON.stringify({title: projectTitleInput.val(), color: projectColorInput.val()}),
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
'X-Remote': true,
|
'X-Remote': true,
|
||||||
},
|
},
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
@ -107,7 +107,7 @@ export default async function initProject() {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
url: $(this).data('url'),
|
url: $(this).data('url'),
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
'X-Remote': true,
|
'X-Remote': true,
|
||||||
},
|
},
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
@ -123,7 +123,7 @@ export default async function initProject() {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: $(this).data('url'),
|
url: $(this).data('url'),
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
'X-Remote': true,
|
'X-Remote': true,
|
||||||
},
|
},
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
@ -144,7 +144,7 @@ export default async function initProject() {
|
||||||
url: $(this).data('url'),
|
url: $(this).data('url'),
|
||||||
data: JSON.stringify({title: boardTitle.val(), color: projectColorInput.val()}),
|
data: JSON.stringify({title: boardTitle.val(), color: projectColorInput.val()}),
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
'X-Remote': true,
|
'X-Remote': true,
|
||||||
},
|
},
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
function getArchive($target, url, first) {
|
function getArchive($target, url, first) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url,
|
url,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: {
|
data: {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
},
|
},
|
||||||
complete(xhr) {
|
complete(xhr) {
|
||||||
if (xhr.status === 200) {
|
if (xhr.status === 200) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import {initCompReactionSelector} from './comp/ReactionSelector.js';
|
import {initCompReactionSelector} from './comp/ReactionSelector.js';
|
||||||
|
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export function initRepoDiffReviewButton() {
|
export function initRepoDiffReviewButton() {
|
||||||
$(document).on('click', 'button[name="is_review"]', (e) => {
|
$(document).on('click', 'button[name="is_review"]', (e) => {
|
||||||
|
@ -45,7 +45,7 @@ export function initRepoDiffConversationForm() {
|
||||||
const action = $(this).data('action');
|
const action = $(this).data('action');
|
||||||
const url = $(this).data('update-url');
|
const url = $(this).data('update-url');
|
||||||
|
|
||||||
const data = await $.post(url, {_csrf: csrf, origin, action, comment_id});
|
const data = await $.post(url, {_csrf: csrfToken, origin, action, comment_id});
|
||||||
|
|
||||||
if ($(this).closest('.conversation-holder').length) {
|
if ($(this).closest('.conversation-holder').length) {
|
||||||
const conversation = $(data);
|
const conversation = $(data);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import {initMarkupContent} from '../markup/content.js';
|
import {initMarkupContent} from '../markup/content.js';
|
||||||
import {createCodeEditor} from './codeeditor.js';
|
import {createCodeEditor} from './codeeditor.js';
|
||||||
|
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
let previewFileModes;
|
let previewFileModes;
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ function initEditPreviewTab($form) {
|
||||||
}
|
}
|
||||||
context = context.substring(0, context.lastIndexOf('/'));
|
context = context.substring(0, context.lastIndexOf('/'));
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
mode,
|
mode,
|
||||||
context,
|
context,
|
||||||
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
||||||
|
@ -40,7 +40,7 @@ function initEditDiffTab($form) {
|
||||||
$tabMenu.find(`.item[data-tab="${$tabMenu.data('diff')}"]`).on('click', function () {
|
$tabMenu.find(`.item[data-tab="${$tabMenu.data('diff')}"]`).on('click', function () {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
context: $this.data('context'),
|
context: $this.data('context'),
|
||||||
content: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
content: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()
|
||||||
}, (data) => {
|
}, (data) => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import {stripTags} from '../utils.js';
|
import {stripTags} from '../utils.js';
|
||||||
|
|
||||||
const {AppSubUrl, csrf} = window.config;
|
const {appSubUrl, csrfToken} = window.config;
|
||||||
|
|
||||||
export function initRepoTopicBar() {
|
export function initRepoTopicBar() {
|
||||||
const mgrBtn = $('#manage_topic');
|
const mgrBtn = $('#manage_topic');
|
||||||
|
@ -30,7 +30,7 @@ export function initRepoTopicBar() {
|
||||||
const topics = $('input[name=topics]').val();
|
const topics = $('input[name=topics]').val();
|
||||||
|
|
||||||
$.post(saveBtn.data('link'), {
|
$.post(saveBtn.data('link'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
topics
|
topics
|
||||||
}, (_data, _textStatus, xhr) => {
|
}, (_data, _textStatus, xhr) => {
|
||||||
if (xhr.responseJSON.status === 'ok') {
|
if (xhr.responseJSON.status === 'ok') {
|
||||||
|
@ -41,7 +41,7 @@ export function initRepoTopicBar() {
|
||||||
const last = viewDiv.children('a').last();
|
const last = viewDiv.children('a').last();
|
||||||
for (let i = 0; i < topicArray.length; i++) {
|
for (let i = 0; i < topicArray.length; i++) {
|
||||||
const link = $('<a class="ui repo-topic large label topic"></a>');
|
const link = $('<a class="ui repo-topic large label topic"></a>');
|
||||||
link.attr('href', `${AppSubUrl}/explore/repos?q=${encodeURIComponent(topicArray[i])}&topic=1`);
|
link.attr('href', `${appSubUrl}/explore/repos?q=${encodeURIComponent(topicArray[i])}&topic=1`);
|
||||||
link.text(topicArray[i]);
|
link.text(topicArray[i]);
|
||||||
link.insertBefore(last);
|
link.insertBefore(last);
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ export function initRepoTopicBar() {
|
||||||
label: 'ui small label'
|
label: 'ui small label'
|
||||||
},
|
},
|
||||||
apiSettings: {
|
apiSettings: {
|
||||||
url: `${AppSubUrl}/api/v1/topics/search?q={query}`,
|
url: `${appSubUrl}/api/v1/topics/search?q={query}`,
|
||||||
throttle: 500,
|
throttle: 500,
|
||||||
cache: false,
|
cache: false,
|
||||||
onResponse(res) {
|
onResponse(res) {
|
||||||
|
|
|
@ -4,7 +4,7 @@ import {createCommentSimpleMDE} from './comp/CommentSimpleMDE.js';
|
||||||
import {initCompImagePaste} from './comp/ImagePaste.js';
|
import {initCompImagePaste} from './comp/ImagePaste.js';
|
||||||
import {initCompMarkupContentPreviewTab} from './comp/MarkupContentPreview.js';
|
import {initCompMarkupContentPreviewTab} from './comp/MarkupContentPreview.js';
|
||||||
|
|
||||||
const {AppSubUrl, csrf} = window.config;
|
const {appSubUrl, csrfToken} = window.config;
|
||||||
|
|
||||||
export function initRepoIssueTimeTracking() {
|
export function initRepoIssueTimeTracking() {
|
||||||
$(document).on('click', '.issue-add-time', () => {
|
$(document).on('click', '.issue-add-time', () => {
|
||||||
|
@ -58,7 +58,7 @@ function updateDeadline(deadlineString) {
|
||||||
due_date: realDeadline,
|
due_date: realDeadline,
|
||||||
}),
|
}),
|
||||||
headers: {
|
headers: {
|
||||||
'X-Csrf-Token': csrf,
|
'X-Csrf-Token': csrfToken,
|
||||||
'X-Remote': true,
|
'X-Remote': true,
|
||||||
},
|
},
|
||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
|
@ -91,9 +91,9 @@ export function initRepoIssueList() {
|
||||||
const repoId = $('#repoId').val();
|
const repoId = $('#repoId').val();
|
||||||
const crossRepoSearch = $('#crossRepoSearch').val();
|
const crossRepoSearch = $('#crossRepoSearch').val();
|
||||||
const tp = $('#type').val();
|
const tp = $('#type').val();
|
||||||
let issueSearchUrl = `${AppSubUrl}/api/v1/repos/${repolink}/issues?q={query}&type=${tp}`;
|
let issueSearchUrl = `${appSubUrl}/api/v1/repos/${repolink}/issues?q={query}&type=${tp}`;
|
||||||
if (crossRepoSearch === 'true') {
|
if (crossRepoSearch === 'true') {
|
||||||
issueSearchUrl = `${AppSubUrl}/api/v1/repos/issues/search?q={query}&priority_repo_id=${repoId}&type=${tp}`;
|
issueSearchUrl = `${appSubUrl}/api/v1/repos/issues/search?q={query}&priority_repo_id=${repoId}&type=${tp}`;
|
||||||
}
|
}
|
||||||
$('#new-dependency-drop-list')
|
$('#new-dependency-drop-list')
|
||||||
.dropdown({
|
.dropdown({
|
||||||
|
@ -157,7 +157,7 @@ export function initRepoIssueCommentDelete() {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
if (window.confirm($this.data('locale'))) {
|
if (window.confirm($this.data('locale'))) {
|
||||||
$.post($this.data('url'), {
|
$.post($this.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
}).done(() => {
|
}).done(() => {
|
||||||
const $conversationHolder = $this.closest('.conversation-holder');
|
const $conversationHolder = $this.closest('.conversation-holder');
|
||||||
$(`#${$this.data('comment-id')}`).remove();
|
$(`#${$this.data('comment-id')}`).remove();
|
||||||
|
@ -258,7 +258,7 @@ export function initRepoPullRequestUpdate() {
|
||||||
const redirect = $this.data('redirect');
|
const redirect = $this.data('redirect');
|
||||||
$this.addClass('loading');
|
$this.addClass('loading');
|
||||||
$.post($this.data('do'), {
|
$.post($this.data('do'), {
|
||||||
_csrf: csrf
|
_csrf: csrfToken
|
||||||
}).done((data) => {
|
}).done((data) => {
|
||||||
if (data.redirect) {
|
if (data.redirect) {
|
||||||
window.location.href = data.redirect;
|
window.location.href = data.redirect;
|
||||||
|
@ -291,7 +291,7 @@ export function initRepoIssueReferenceRepositorySearch() {
|
||||||
$('.issue_reference_repository_search')
|
$('.issue_reference_repository_search')
|
||||||
.dropdown({
|
.dropdown({
|
||||||
apiSettings: {
|
apiSettings: {
|
||||||
url: `${AppSubUrl}/api/v1/repos/search?q={query}&limit=20`,
|
url: `${appSubUrl}/api/v1/repos/search?q={query}&limit=20`,
|
||||||
onResponse(response) {
|
onResponse(response) {
|
||||||
const filteredResponse = {success: true, results: []};
|
const filteredResponse = {success: true, results: []};
|
||||||
$.each(response.data, (_r, repo) => {
|
$.each(response.data, (_r, repo) => {
|
||||||
|
@ -306,7 +306,7 @@ export function initRepoIssueReferenceRepositorySearch() {
|
||||||
},
|
},
|
||||||
onChange(_value, _text, $choice) {
|
onChange(_value, _text, $choice) {
|
||||||
const $form = $choice.closest('form');
|
const $form = $choice.closest('form');
|
||||||
$form.attr('action', `${AppSubUrl}/${_text}/issues/new`);
|
$form.attr('action', `${appSubUrl}/${_text}/issues/new`);
|
||||||
},
|
},
|
||||||
fullTextSearch: true
|
fullTextSearch: true
|
||||||
});
|
});
|
||||||
|
@ -338,7 +338,7 @@ export function updateIssuesMeta(url, action, issueIds, elementId) {
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url,
|
url,
|
||||||
data: {
|
data: {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
action,
|
action,
|
||||||
issue_ids: issueIds,
|
issue_ids: issueIds,
|
||||||
id: elementId,
|
id: elementId,
|
||||||
|
@ -556,7 +556,7 @@ export function initRepoIssueWipToggle() {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const {title, wipPrefix, updateUrl} = e.currentTarget.closest('.toggle-wip').dataset;
|
const {title, wipPrefix, updateUrl} = e.currentTarget.closest('.toggle-wip').dataset;
|
||||||
await $.post(updateUrl, {
|
await $.post(updateUrl, {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
title: title?.startsWith(wipPrefix) ? title.substr(wipPrefix.length).trim() : `${wipPrefix.trim()} ${title}`,
|
title: title?.startsWith(wipPrefix) ? title.substr(wipPrefix.length).trim() : `${wipPrefix.trim()} ${title}`,
|
||||||
});
|
});
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
|
@ -591,7 +591,7 @@ export function initRepoIssueTitleEdit() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$.post(update_url, {
|
$.post(update_url, {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
target_branch: targetBranch
|
target_branch: targetBranch
|
||||||
}).done((data) => {
|
}).done((data) => {
|
||||||
$branchTarget.text(data.base_branch);
|
$branchTarget.text(data.base_branch);
|
||||||
|
@ -606,7 +606,7 @@ export function initRepoIssueTitleEdit() {
|
||||||
pullrequest_targetbranch_change(pullrequest_target_update_url);
|
pullrequest_targetbranch_change(pullrequest_target_update_url);
|
||||||
} else {
|
} else {
|
||||||
$.post($(this).data('update-url'), {
|
$.post($(this).data('update-url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
title: $editInput.val()
|
title: $editInput.val()
|
||||||
}, (data) => {
|
}, (data) => {
|
||||||
$editInput.val(data.title);
|
$editInput.val(data.title);
|
||||||
|
|
|
@ -27,7 +27,7 @@ import {initCommentContent, initMarkupContent} from '../markup/content.js';
|
||||||
import {initCompReactionSelector} from './comp/ReactionSelector.js';
|
import {initCompReactionSelector} from './comp/ReactionSelector.js';
|
||||||
import {initRepoSettingBranches} from './repo-settings.js';
|
import {initRepoSettingBranches} from './repo-settings.js';
|
||||||
|
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
const commentMDEditors = {};
|
const commentMDEditors = {};
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ export function initRepoCommentForm() {
|
||||||
|
|
||||||
if (editMode === 'true') {
|
if (editMode === 'true') {
|
||||||
const form = $('#update_issueref_form');
|
const form = $('#update_issueref_form');
|
||||||
$.post(form.attr('action'), {_csrf: csrf, ref: selectedValue}, () => window.location.reload());
|
$.post(form.attr('action'), {_csrf: csrfToken, ref: selectedValue}, () => window.location.reload());
|
||||||
} else if (editMode === '') {
|
} else if (editMode === '') {
|
||||||
$selectBranch.find('.ui .branch-name').text(selectedValue);
|
$selectBranch.find('.ui .branch-name').text(selectedValue);
|
||||||
}
|
}
|
||||||
|
@ -370,7 +370,7 @@ export async function initRepository() {
|
||||||
const fileUuidDict = {};
|
const fileUuidDict = {};
|
||||||
dz = await createDropzone($dropzone[0], {
|
dz = await createDropzone($dropzone[0], {
|
||||||
url: $dropzone.data('upload-url'),
|
url: $dropzone.data('upload-url'),
|
||||||
headers: {'X-Csrf-Token': csrf},
|
headers: {'X-Csrf-Token': csrfToken},
|
||||||
maxFiles: $dropzone.data('max-file'),
|
maxFiles: $dropzone.data('max-file'),
|
||||||
maxFilesize: $dropzone.data('max-size'),
|
maxFilesize: $dropzone.data('max-size'),
|
||||||
acceptedFiles: (['*/*', ''].includes($dropzone.data('accepts'))) ? null : $dropzone.data('accepts'),
|
acceptedFiles: (['*/*', ''].includes($dropzone.data('accepts'))) ? null : $dropzone.data('accepts'),
|
||||||
|
@ -396,7 +396,7 @@ export async function initRepository() {
|
||||||
if ($dropzone.data('remove-url') && !fileUuidDict[file.uuid].submitted) {
|
if ($dropzone.data('remove-url') && !fileUuidDict[file.uuid].submitted) {
|
||||||
$.post($dropzone.data('remove-url'), {
|
$.post($dropzone.data('remove-url'), {
|
||||||
file: file.uuid,
|
file: file.uuid,
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -458,7 +458,7 @@ export async function initRepository() {
|
||||||
return $(this).val();
|
return $(this).val();
|
||||||
}).get();
|
}).get();
|
||||||
$.post($editContentZone.data('update-url'), {
|
$.post($editContentZone.data('update-url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
content: $textarea.val(),
|
content: $textarea.val(),
|
||||||
context: $editContentZone.data('context'),
|
context: $editContentZone.data('context'),
|
||||||
files: $attachments,
|
files: $attachments,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {AppSubUrl, csrf} = window.config;
|
const {appSubUrl, csrfToken} = window.config;
|
||||||
|
|
||||||
export function initRepoMigrationStatusChecker() {
|
export function initRepoMigrationStatusChecker() {
|
||||||
const migrating = $('#repo_migrating');
|
const migrating = $('#repo_migrating');
|
||||||
|
@ -12,9 +12,9 @@ export function initRepoMigrationStatusChecker() {
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: `${AppSubUrl}/user/task/${task}`,
|
url: `${appSubUrl}/user/task/${task}`,
|
||||||
data: {
|
data: {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
},
|
},
|
||||||
complete(xhr) {
|
complete(xhr) {
|
||||||
if (xhr.status === 200 && xhr.responseJSON) {
|
if (xhr.status === 200 && xhr.responseJSON) {
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
import {createMonaco} from './codeeditor.js';
|
import {createMonaco} from './codeeditor.js';
|
||||||
import {initRepoCommonFilterSearchDropdown} from './repo-common.js';
|
import {initRepoCommonFilterSearchDropdown} from './repo-common.js';
|
||||||
|
|
||||||
const {AppSubUrl, csrf} = window.config;
|
const {appSubUrl, csrfToken} = window.config;
|
||||||
|
|
||||||
export function initRepoSettingsCollaboration() {
|
export function initRepoSettingsCollaboration() {
|
||||||
// Change collaborator access mode
|
// Change collaborator access mode
|
||||||
$('.access-mode.menu .item').on('click', function () {
|
$('.access-mode.menu .item').on('click', function () {
|
||||||
const $menu = $(this).parent();
|
const $menu = $(this).parent();
|
||||||
$.post($menu.data('url'), {
|
$.post($menu.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
uid: $menu.data('uid'),
|
uid: $menu.data('uid'),
|
||||||
mode: $(this).data('value')
|
mode: $(this).data('value')
|
||||||
});
|
});
|
||||||
|
@ -20,8 +20,8 @@ export function initRepoSettingSearchTeamBox() {
|
||||||
$searchTeamBox.search({
|
$searchTeamBox.search({
|
||||||
minCharacters: 2,
|
minCharacters: 2,
|
||||||
apiSettings: {
|
apiSettings: {
|
||||||
url: `${AppSubUrl}/api/v1/orgs/${$searchTeamBox.data('org')}/teams/search?q={query}`,
|
url: `${appSubUrl}/api/v1/orgs/${$searchTeamBox.data('org')}/teams/search?q={query}`,
|
||||||
headers: {'X-Csrf-Token': csrf},
|
headers: {'X-Csrf-Token': csrfToken},
|
||||||
onResponse(response) {
|
onResponse(response) {
|
||||||
const items = [];
|
const items = [];
|
||||||
$.each(response.data, (_i, item) => {
|
$.each(response.data, (_i, item) => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import {htmlEscape} from 'escape-goat';
|
import {htmlEscape} from 'escape-goat';
|
||||||
|
|
||||||
const {AppSubUrl} = window.config;
|
const {appSubUrl} = window.config;
|
||||||
|
|
||||||
export function initRepoTemplateSearch() {
|
export function initRepoTemplateSearch() {
|
||||||
const $repoTemplate = $('#repo_template');
|
const $repoTemplate = $('#repo_template');
|
||||||
|
@ -22,7 +22,7 @@ export function initRepoTemplateSearch() {
|
||||||
$('#repo_template_search')
|
$('#repo_template_search')
|
||||||
.dropdown({
|
.dropdown({
|
||||||
apiSettings: {
|
apiSettings: {
|
||||||
url: `${AppSubUrl}/api/v1/repos/search?q={query}&template=true&priority_owner_id=${$('#uid').val()}`,
|
url: `${appSubUrl}/api/v1/repos/search?q={query}&template=true&priority_owner_id=${$('#uid').val()}`,
|
||||||
onResponse(response) {
|
onResponse(response) {
|
||||||
const filteredResponse = {success: true, results: []};
|
const filteredResponse = {success: true, results: []};
|
||||||
filteredResponse.results.push({
|
filteredResponse.results.push({
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import {initMarkupContent} from '../markup/content.js';
|
import {initMarkupContent} from '../markup/content.js';
|
||||||
import {initCompMarkupContentPreviewTab} from './comp/MarkupContentPreview.js';
|
import {initCompMarkupContentPreviewTab} from './comp/MarkupContentPreview.js';
|
||||||
|
|
||||||
const {csrf} = window.config;
|
const {csrfToken} = window.config;
|
||||||
|
|
||||||
export function initRepoWikiForm() {
|
export function initRepoWikiForm() {
|
||||||
const $editArea = $('.repository.wiki textarea#edit_area');
|
const $editArea = $('.repository.wiki textarea#edit_area');
|
||||||
|
@ -22,7 +22,7 @@ export function initRepoWikiForm() {
|
||||||
sideBySideTimeout = null;
|
sideBySideTimeout = null;
|
||||||
}
|
}
|
||||||
$.post($editArea.data('url'), {
|
$.post($editArea.data('url'), {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
mode: 'gfm',
|
mode: 'gfm',
|
||||||
context: $editArea.data('context'),
|
context: $editArea.data('context'),
|
||||||
text: plainText,
|
text: plainText,
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import {joinPaths} from '../utils.js';
|
import {joinPaths} from '../utils.js';
|
||||||
|
|
||||||
const {UseServiceWorker, AssetUrlPrefix, AppVer} = window.config;
|
const {useServiceWorker, assetUrlPrefix, appVer} = window.config;
|
||||||
const cachePrefix = 'static-cache-v'; // actual version is set in the service worker script
|
const cachePrefix = 'static-cache-v'; // actual version is set in the service worker script
|
||||||
const workerAssetPath = joinPaths(AssetUrlPrefix, 'serviceworker.js');
|
const workerAssetPath = joinPaths(assetUrlPrefix, 'serviceworker.js');
|
||||||
|
|
||||||
async function unregisterAll() {
|
async function unregisterAll() {
|
||||||
for (const registration of await navigator.serviceWorker.getRegistrations()) {
|
for (const registration of await navigator.serviceWorker.getRegistrations()) {
|
||||||
|
@ -24,7 +24,7 @@ async function invalidateCache() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkCacheValidity() {
|
async function checkCacheValidity() {
|
||||||
const cacheKey = AppVer;
|
const cacheKey = appVer;
|
||||||
const storedCacheKey = localStorage.getItem('staticCacheKey');
|
const storedCacheKey = localStorage.getItem('staticCacheKey');
|
||||||
|
|
||||||
// invalidate cache if it belongs to a different gitea version
|
// invalidate cache if it belongs to a different gitea version
|
||||||
|
@ -37,7 +37,7 @@ async function checkCacheValidity() {
|
||||||
export default async function initServiceWorker() {
|
export default async function initServiceWorker() {
|
||||||
if (!('serviceWorker' in navigator)) return;
|
if (!('serviceWorker' in navigator)) return;
|
||||||
|
|
||||||
if (UseServiceWorker) {
|
if (useServiceWorker) {
|
||||||
// unregister all service workers where scriptURL does not match the current one
|
// unregister all service workers where scriptURL does not match the current one
|
||||||
await unregisterOtherWorkers();
|
await unregisterOtherWorkers();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import prettyMilliseconds from 'pretty-ms';
|
import prettyMilliseconds from 'pretty-ms';
|
||||||
const {AppSubUrl, csrf, NotificationSettings, EnableTimetracking} = window.config;
|
const {appSubUrl, csrfToken, notificationSettings, enableTimeTracking} = window.config;
|
||||||
|
|
||||||
let updateTimeInterval = null; // holds setInterval id when active
|
let updateTimeInterval = null; // holds setInterval id when active
|
||||||
|
|
||||||
export async function initStopwatch() {
|
export async function initStopwatch() {
|
||||||
if (!EnableTimetracking) {
|
if (!enableTimeTracking) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ export async function initStopwatch() {
|
||||||
$(this).parent().trigger('submit');
|
$(this).parent().trigger('submit');
|
||||||
});
|
});
|
||||||
|
|
||||||
if (NotificationSettings.EventSourceUpdateTime > 0 && !!window.EventSource && window.SharedWorker) {
|
if (notificationSettings.EventSourceUpdateTime > 0 && !!window.EventSource && window.SharedWorker) {
|
||||||
// Try to connect to the event source via the shared worker first
|
// Try to connect to the event source via the shared worker first
|
||||||
const worker = new SharedWorker(`${__webpack_public_path__}js/eventsource.sharedworker.js`, 'notification-worker');
|
const worker = new SharedWorker(`${__webpack_public_path__}js/eventsource.sharedworker.js`, 'notification-worker');
|
||||||
worker.addEventListener('error', (event) => {
|
worker.addEventListener('error', (event) => {
|
||||||
|
@ -36,7 +36,7 @@ export async function initStopwatch() {
|
||||||
});
|
});
|
||||||
worker.port.postMessage({
|
worker.port.postMessage({
|
||||||
type: 'start',
|
type: 'start',
|
||||||
url: `${window.location.origin}${AppSubUrl}/user/events`,
|
url: `${window.location.origin}${appSubUrl}/user/events`,
|
||||||
});
|
});
|
||||||
worker.port.addEventListener('message', (event) => {
|
worker.port.addEventListener('message', (event) => {
|
||||||
if (!event.data || !event.data.type) {
|
if (!event.data || !event.data.type) {
|
||||||
|
@ -55,7 +55,7 @@ export async function initStopwatch() {
|
||||||
type: 'close',
|
type: 'close',
|
||||||
});
|
});
|
||||||
worker.port.close();
|
worker.port.close();
|
||||||
window.location.href = AppSubUrl;
|
window.location.href = appSubUrl;
|
||||||
} else if (event.data.type === 'close') {
|
} else if (event.data.type === 'close') {
|
||||||
worker.port.postMessage({
|
worker.port.postMessage({
|
||||||
type: 'close',
|
type: 'close',
|
||||||
|
@ -77,7 +77,7 @@ export async function initStopwatch() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NotificationSettings.MinTimeout <= 0) {
|
if (notificationSettings.MinTimeout <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ export async function initStopwatch() {
|
||||||
}, timeout);
|
}, timeout);
|
||||||
};
|
};
|
||||||
|
|
||||||
fn(NotificationSettings.MinTimeout);
|
fn(notificationSettings.MinTimeout);
|
||||||
|
|
||||||
const currSeconds = $('.stopwatch-time').data('seconds');
|
const currSeconds = $('.stopwatch-time').data('seconds');
|
||||||
if (currSeconds) {
|
if (currSeconds) {
|
||||||
|
@ -99,9 +99,9 @@ async function updateStopwatchWithCallback(callback, timeout) {
|
||||||
const isSet = await updateStopwatch();
|
const isSet = await updateStopwatch();
|
||||||
|
|
||||||
if (!isSet) {
|
if (!isSet) {
|
||||||
timeout = NotificationSettings.MinTimeout;
|
timeout = notificationSettings.MinTimeout;
|
||||||
} else if (timeout < NotificationSettings.MaxTimeout) {
|
} else if (timeout < notificationSettings.MaxTimeout) {
|
||||||
timeout += NotificationSettings.TimeoutStep;
|
timeout += notificationSettings.TimeoutStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(timeout);
|
callback(timeout);
|
||||||
|
@ -110,8 +110,8 @@ async function updateStopwatchWithCallback(callback, timeout) {
|
||||||
async function updateStopwatch() {
|
async function updateStopwatch() {
|
||||||
const data = await $.ajax({
|
const data = await $.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: `${AppSubUrl}/api/v1/user/stopwatches`,
|
url: `${appSubUrl}/api/v1/user/stopwatches`,
|
||||||
headers: {'X-Csrf-Token': csrf},
|
headers: {'X-Csrf-Token': csrfToken},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (updateTimeInterval) {
|
if (updateTimeInterval) {
|
||||||
|
@ -129,7 +129,7 @@ async function updateStopwatchData(data) {
|
||||||
btnEl.addClass('hidden');
|
btnEl.addClass('hidden');
|
||||||
} else {
|
} else {
|
||||||
const {repo_owner_name, repo_name, issue_index, seconds} = watch;
|
const {repo_owner_name, repo_name, issue_index, seconds} = watch;
|
||||||
const issueUrl = `${AppSubUrl}/${repo_owner_name}/${repo_name}/issues/${issue_index}`;
|
const issueUrl = `${appSubUrl}/${repo_owner_name}/${repo_name}/issues/${issue_index}`;
|
||||||
$('.stopwatch-link').attr('href', issueUrl);
|
$('.stopwatch-link').attr('href', issueUrl);
|
||||||
$('.stopwatch-commit').attr('action', `${issueUrl}/times/stopwatch/toggle`);
|
$('.stopwatch-commit').attr('action', `${issueUrl}/times/stopwatch/toggle`);
|
||||||
$('.stopwatch-cancel').attr('action', `${issueUrl}/times/stopwatch/cancel`);
|
$('.stopwatch-cancel').attr('action', `${issueUrl}/times/stopwatch/cancel`);
|
||||||
|
|
|
@ -49,7 +49,7 @@ function makeCollections({mentions, emoji}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function attachTribute(elementOrNodeList, {mentions, emoji} = {}) {
|
export default async function attachTribute(elementOrNodeList, {mentions, emoji} = {}) {
|
||||||
if (!window.config.Tribute || !elementOrNodeList) return;
|
if (!window.config.requireTribute || !elementOrNodeList) return;
|
||||||
const nodes = Array.from('length' in elementOrNodeList ? elementOrNodeList : [elementOrNodeList]);
|
const nodes = Array.from('length' in elementOrNodeList ? elementOrNodeList : [elementOrNodeList]);
|
||||||
if (!nodes.length) return;
|
if (!nodes.length) return;
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
const {AppSubUrl, csrf} = window.config;
|
const {appSubUrl, csrfToken} = window.config;
|
||||||
|
|
||||||
export function initUserAuthU2fAuth() {
|
export function initUserAuthU2fAuth() {
|
||||||
if ($('#wait-for-key').length === 0) {
|
if ($('#wait-for-key').length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
u2fApi.ensureSupport().then(() => {
|
u2fApi.ensureSupport().then(() => {
|
||||||
$.getJSON(`${AppSubUrl}/user/u2f/challenge`).done((req) => {
|
$.getJSON(`${appSubUrl}/user/u2f/challenge`).done((req) => {
|
||||||
u2fApi.sign(req.appId, req.challenge, req.registeredKeys, 30)
|
u2fApi.sign(req.appId, req.challenge, req.registeredKeys, 30)
|
||||||
.then(u2fSigned)
|
.then(u2fSigned)
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
|
@ -18,15 +18,15 @@ export function initUserAuthU2fAuth() {
|
||||||
});
|
});
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
// Fallback in case browser do not support U2F
|
// Fallback in case browser do not support U2F
|
||||||
window.location.href = `${AppSubUrl}/user/two_factor`;
|
window.location.href = `${appSubUrl}/user/two_factor`;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function u2fSigned(resp) {
|
function u2fSigned(resp) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `${AppSubUrl}/user/u2f/sign`,
|
url: `${appSubUrl}/user/u2f/sign`,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
headers: {'X-Csrf-Token': csrf},
|
headers: {'X-Csrf-Token': csrfToken},
|
||||||
data: JSON.stringify(resp),
|
data: JSON.stringify(resp),
|
||||||
contentType: 'application/json; charset=utf-8',
|
contentType: 'application/json; charset=utf-8',
|
||||||
}).done((res) => {
|
}).done((res) => {
|
||||||
|
@ -41,9 +41,9 @@ function u2fRegistered(resp) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `${AppSubUrl}/user/settings/security/u2f/register`,
|
url: `${appSubUrl}/user/settings/security/u2f/register`,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
headers: {'X-Csrf-Token': csrf},
|
headers: {'X-Csrf-Token': csrfToken},
|
||||||
data: JSON.stringify(resp),
|
data: JSON.stringify(resp),
|
||||||
contentType: 'application/json; charset=utf-8',
|
contentType: 'application/json; charset=utf-8',
|
||||||
success() {
|
success() {
|
||||||
|
@ -99,8 +99,8 @@ export function initUserAuthU2fRegister() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function u2fRegisterRequest() {
|
function u2fRegisterRequest() {
|
||||||
$.post(`${AppSubUrl}/user/settings/security/u2f/request_register`, {
|
$.post(`${appSubUrl}/user/settings/security/u2f/request_register`, {
|
||||||
_csrf: csrf,
|
_csrf: csrfToken,
|
||||||
name: $('#nickname').val()
|
name: $('#nickname').val()
|
||||||
}).done((req) => {
|
}).done((req) => {
|
||||||
$('#nickname').closest('div.field').removeClass('error');
|
$('#nickname').closest('div.field').removeClass('error');
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const {MermaidMaxSourceCharacters} = window.config;
|
const {mermaidMaxSourceCharacters} = window.config;
|
||||||
|
|
||||||
function displayError(el, err) {
|
function displayError(el, err) {
|
||||||
el.closest('pre').classList.remove('is-loading');
|
el.closest('pre').classList.remove('is-loading');
|
||||||
|
@ -26,8 +26,8 @@ export async function renderMermaid(els) {
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const el of els) {
|
for (const el of els) {
|
||||||
if (MermaidMaxSourceCharacters >= 0 && el.textContent.length > MermaidMaxSourceCharacters) {
|
if (mermaidMaxSourceCharacters >= 0 && el.textContent.length > mermaidMaxSourceCharacters) {
|
||||||
displayError(el, new Error(`Mermaid source of ${el.textContent.length} characters exceeds the maximum allowed length of ${MermaidMaxSourceCharacters}.`));
|
displayError(el, new Error(`Mermaid source of ${el.textContent.length} characters exceeds the maximum allowed length of ${mermaidMaxSourceCharacters}.`));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ export function initMarkupTasklist() {
|
||||||
|
|
||||||
await $.post(updateUrl, {
|
await $.post(updateUrl, {
|
||||||
ignore_attachments: true,
|
ignore_attachments: true,
|
||||||
_csrf: window.config.csrf,
|
_csrf: window.config.csrfToken,
|
||||||
content: newContent,
|
content: newContent,
|
||||||
context
|
context
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// This sets up the URL prefix used in webpack's chunk loading.
|
// This sets up the URL prefix used in webpack's chunk loading.
|
||||||
// This file must be imported before any lazy-loading is being attempted.
|
// This file must be imported before any lazy-loading is being attempted.
|
||||||
import {joinPaths} from './utils.js';
|
import {joinPaths} from './utils.js';
|
||||||
const {AssetUrlPrefix} = window.config;
|
const {assetUrlPrefix} = window.config;
|
||||||
|
|
||||||
__webpack_public_path__ = joinPaths(AssetUrlPrefix, '/');
|
__webpack_public_path__ = joinPaths(assetUrlPrefix, '/');
|
||||||
|
|
Loading…
Reference in a new issue