Reviewed-by: berry <senluowanxiangt@gmail.com>master
@@ -307,6 +307,9 @@ func NewFuncMap() []template.FuncMap { | |||||
"tasks": tasks, | "tasks": tasks, | ||||
"categories": categories, | "categories": categories, | ||||
"licenses": licenses, | "licenses": licenses, | ||||
"DatasetPathJoin": func(arr []string, index int, seq string) string { | |||||
return strings.Join(arr[0:index+1], seq) | |||||
}, | |||||
}} | }} | ||||
} | } | ||||
@@ -647,6 +647,7 @@ private = private | |||||
public = public | public = public | ||||
back = back | back = back | ||||
copy_url=copy download url | copy_url=copy download url | ||||
directory=check directory of the datasets | |||||
visibility = visibility | visibility = visibility | ||||
visibility_description = Only the owner or the organization members if they have rights, will be able to see it. | visibility_description = Only the owner or the organization members if they have rights, will be able to see it. | ||||
visibility_helper = Make Dataset Private | visibility_helper = Make Dataset Private | ||||
@@ -752,6 +753,10 @@ unit_disabled = The site administrator has disabled this repository section. | |||||
language_other = Other | language_other = Other | ||||
datasets = Datasets | datasets = Datasets | ||||
datasets.desc = Enable Dataset | datasets.desc = Enable Dataset | ||||
cloudbrain=cloudbrain | |||||
cloudbrain.new=New cloudbrain | |||||
cloudbrain.desc=cloudbrain | |||||
cloudbrain.cancel=Cancel | |||||
template.items = Template Items | template.items = Template Items | ||||
template.git_content = Git Content (Default Branch) | template.git_content = Git Content (Default Branch) | ||||
@@ -1420,7 +1425,8 @@ settings.use_external_wiki = Use External Wiki | |||||
settings.external_wiki_url = External Wiki URL | settings.external_wiki_url = External Wiki URL | ||||
settings.external_wiki_url_error = The external wiki URL is not a valid URL. | settings.external_wiki_url_error = The external wiki URL is not a valid URL. | ||||
settings.external_wiki_url_desc = Visitors are redirected to the external wiki URL when clicking the wiki tab. | settings.external_wiki_url_desc = Visitors are redirected to the external wiki URL when clicking the wiki tab. | ||||
settings.dataset_desc= Enable Repository Dataset | |||||
settings.dataset_desc = Enable Repository Dataset | |||||
settings.cloudbrain_desc = Enable Cloudbarin | |||||
settings.issues_desc = Enable Repository Issue Tracker | settings.issues_desc = Enable Repository Issue Tracker | ||||
settings.use_internal_issue_tracker = Use Built-In Issue Tracker | settings.use_internal_issue_tracker = Use Built-In Issue Tracker | ||||
settings.use_external_issue_tracker = Use External Issue Tracker | settings.use_external_issue_tracker = Use External Issue Tracker | ||||
@@ -2434,6 +2440,7 @@ md5_computing = MD5 computing | |||||
loading_file = Loading | loading_file = Loading | ||||
uploading = Uploading | uploading = Uploading | ||||
upload_complete = Uploading complete | upload_complete = Uploading complete | ||||
falied = Upload Failed | |||||
enable_minio_support = Enable minio support to use the dataset service | enable_minio_support = Enable minio support to use the dataset service | ||||
[notification] | [notification] | ||||
@@ -648,6 +648,7 @@ public=公有 | |||||
dir=目录 | dir=目录 | ||||
back=返回 | back=返回 | ||||
copy_url=复制下载链接 | copy_url=复制下载链接 | ||||
directory=查看数据集目录结构 | |||||
visibility=可见性 | visibility=可见性 | ||||
visibility_description=只有组织所有人或拥有权利的组织成员才能看到。 | visibility_description=只有组织所有人或拥有权利的组织成员才能看到。 | ||||
visibility_helper=将数据集设为私有 | visibility_helper=将数据集设为私有 | ||||
@@ -751,8 +752,12 @@ pick_reaction=选择你的表情 | |||||
reactions_more=再加载 %d | reactions_more=再加载 %d | ||||
unit_disabled=站点管理员已禁用此项目单元。 | unit_disabled=站点管理员已禁用此项目单元。 | ||||
language_other=其它 | language_other=其它 | ||||
datasets = 数据集 | |||||
datasets.desc = 数据集功能 | |||||
datasets=数据集 | |||||
datasets.desc=数据集功能 | |||||
cloudbrain=云脑 | |||||
cloudbrain.new=新建任务 | |||||
cloudbrain.desc=云脑功能 | |||||
cloudbrain.cancel=取消 | |||||
template.items=模板选项 | template.items=模板选项 | ||||
template.git_content=Git数据(默认分支) | template.git_content=Git数据(默认分支) | ||||
@@ -1423,6 +1428,7 @@ settings.external_wiki_url=外部 Wiki 链接 | |||||
settings.external_wiki_url_error=外部百科链接无效 | settings.external_wiki_url_error=外部百科链接无效 | ||||
settings.external_wiki_url_desc=当点击工单标签时,访问者将被重定向到外部工单系统的URL。 | settings.external_wiki_url_desc=当点击工单标签时,访问者将被重定向到外部工单系统的URL。 | ||||
settings.dataset_desc=启用数据集 | settings.dataset_desc=启用数据集 | ||||
settings.cloudbrain_desc = 启用云脑 | |||||
settings.issues_desc=启用工单系统 | settings.issues_desc=启用工单系统 | ||||
settings.use_internal_issue_tracker=使用内置的轻量级工单管理系统 | settings.use_internal_issue_tracker=使用内置的轻量级工单管理系统 | ||||
settings.use_external_issue_tracker=使用外部的工单管理系统 | settings.use_external_issue_tracker=使用外部的工单管理系统 | ||||
@@ -2436,6 +2442,7 @@ md5_computing=计算MD5 | |||||
loading_file=加载文件 | loading_file=加载文件 | ||||
uploading=正在上传 | uploading=正在上传 | ||||
upload_complete=上传完成 | upload_complete=上传完成 | ||||
failed=上传失败 | |||||
enable_minio_support=启用minio支持以使用数据集服务 | enable_minio_support=启用minio支持以使用数据集服务 | ||||
[notification] | [notification] | ||||
@@ -29,6 +29,7 @@ type FileInfo struct { | |||||
func DirIndex(ctx *context.Context) { | func DirIndex(ctx *context.Context) { | ||||
uuid := ctx.Params("uuid") | uuid := ctx.Params("uuid") | ||||
parentDir := ctx.Query("parentDir") | parentDir := ctx.Query("parentDir") | ||||
dirArray := strings.Split(parentDir, "/") | |||||
if parentDir == "" { | if parentDir == "" { | ||||
attachment, err := models.GetAttachmentByUUID(uuid) | attachment, err := models.GetAttachmentByUUID(uuid) | ||||
@@ -41,15 +42,13 @@ func DirIndex(ctx *context.Context) { | |||||
log.Error("The file is not zip file, can not query the dir") | log.Error("The file is not zip file, can not query the dir") | ||||
ctx.ServerError("The file is not zip file, can not query the dir", errors.New("The file is not zip file, can not query the dir")) | ctx.ServerError("The file is not zip file, can not query the dir", errors.New("The file is not zip file, can not query the dir")) | ||||
return | return | ||||
} else { | |||||
if attachment.DecompressState != models.DecompressStateDone { | |||||
log.Error("The file has not been decompressed completely now") | |||||
ctx.ServerError("The file has not been decompressed completely now", errors.New("The file has not been decompressed completely now")) | |||||
return | |||||
} | |||||
} else if attachment.DecompressState != models.DecompressStateDone { | |||||
log.Error("The file has not been decompressed completely now") | |||||
ctx.ServerError("The file has not been decompressed completely now", errors.New("The file has not been decompressed completely now")) | |||||
return | |||||
} | } | ||||
ctx.Data["Title"] = attachment.Name | |||||
// ctx.Data["OriginName"] = attachment.Name | |||||
} | } | ||||
files, err := ioutil.ReadDir(setting.Attachment.Minio.RealPath + setting.Attachment.Minio.Bucket + "/" + setting.Attachment.Minio.BasePath + | files, err := ioutil.ReadDir(setting.Attachment.Minio.RealPath + setting.Attachment.Minio.Bucket + "/" + setting.Attachment.Minio.BasePath + | ||||
@@ -87,7 +86,9 @@ func DirIndex(ctx *context.Context) { | |||||
i++ | i++ | ||||
} | } | ||||
ctx.Data["Path"] = dirArray | |||||
ctx.Data["Dirs"] = fileInfos | ctx.Data["Dirs"] = fileInfos | ||||
ctx.Data["PageIsDataset"] = true | |||||
ctx.HTML(200, tplDirIndex) | ctx.HTML(200, tplDirIndex) | ||||
} | } |
@@ -880,8 +880,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
m.Get("", reqRepoDatasetReader, repo.DatasetIndex) | m.Get("", reqRepoDatasetReader, repo.DatasetIndex) | ||||
m.Post("", reqRepoDatasetWriter, bindIgnErr(auth.EditDatasetForm{}), repo.EditDatasetPost) | m.Post("", reqRepoDatasetWriter, bindIgnErr(auth.EditDatasetForm{}), repo.EditDatasetPost) | ||||
m.Group("/dirs/:uuid", func() { | |||||
m.Get("", reqRepoDatasetReader, repo.DirIndex) | |||||
m.Group("/dirs", func() { | |||||
m.Get("/:uuid", reqRepoDatasetReader, repo.DirIndex) | |||||
}) | }) | ||||
}, context.RepoRef()) | }, context.RepoRef()) | ||||
@@ -4,7 +4,7 @@ | |||||
{{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | {{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | ||||
</a> | </a> | ||||
<a class="{{if .PageIsDatasets}}active{{end}} item" href="{{AppSubUrl}}/explore/datasets"> | <a class="{{if .PageIsDatasets}}active{{end}} item" href="{{AppSubUrl}}/explore/datasets"> | ||||
{{svg "octicon-file-submodule" 16}} {{.i18n.Tr "datasets"}} | |||||
{{svg "octicon-inbox" 16}} {{.i18n.Tr "datasets"}} | |||||
</a> | </a> | ||||
{{/* <a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | {{/* <a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | ||||
{{svg "octicon-person" 16}} {{.i18n.Tr "explore.users"}} | {{svg "octicon-person" 16}} {{.i18n.Tr "explore.users"}} | ||||
@@ -28,7 +28,7 @@ | |||||
{{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | {{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | ||||
</a> | </a> | ||||
<a class="{{if .PageIsDatasets}}active{{end}} item" href="{{AppSubUrl}}/explore/datasets"> | <a class="{{if .PageIsDatasets}}active{{end}} item" href="{{AppSubUrl}}/explore/datasets"> | ||||
{{svg "octicon-file-submodule" 16}} {{.i18n.Tr "datasets"}} | |||||
{{svg "octicon-inbox" 16}} {{.i18n.Tr "datasets"}} | |||||
</a> | </a> | ||||
{{/* <a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | {{/* <a class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | ||||
{{svg "octicon-person" 16}} {{.i18n.Tr "explore.users"}} | {{svg "octicon-person" 16}} {{.i18n.Tr "explore.users"}} | ||||
@@ -4,7 +4,7 @@ | |||||
<div class="ui container"> | <div class="ui container"> | ||||
<div class="ui three column stackable grid"> | <div class="ui three column stackable grid"> | ||||
<div class="column"> | <div class="column"> | ||||
<h2>{{.i18n.Tr "cloudbrain"}}</h2> | |||||
<h2>{{.i18n.Tr "repo.cloudbrain"}}</h2> | |||||
</div> | </div> | ||||
<div class="column"> | <div class="column"> | ||||
</div> | </div> | ||||
@@ -1,13 +1,13 @@ | |||||
{{template "base/head" .}} | {{template "base/head" .}} | ||||
<div class="repository new repo"> | <div class="repository new repo"> | ||||
{{template "repo/header" .}} | |||||
{{template "repo/header" .}} | |||||
<div class="ui middle very relaxed page grid"> | <div class="ui middle very relaxed page grid"> | ||||
<div class="column"> | <div class="column"> | ||||
{{template "base/alert" .}} | {{template "base/alert" .}} | ||||
<form class="ui form" action="{{.Link}}" method="post"> | <form class="ui form" action="{{.Link}}" method="post"> | ||||
{{.CsrfTokenHtml}} | {{.CsrfTokenHtml}} | ||||
<h3 class="ui top attached header"> | <h3 class="ui top attached header"> | ||||
New Cloudbrain task | |||||
{{.i18n.Tr "repo.cloudbrain.new"}} | |||||
</h3> | </h3> | ||||
<div class="ui attached segment"> | <div class="ui attached segment"> | ||||
<br> | <br> | ||||
@@ -27,7 +27,7 @@ | |||||
<div class="inline field"> | <div class="inline field"> | ||||
<label></label> | <label></label> | ||||
<button class="ui green button"> | <button class="ui green button"> | ||||
Create Cloudbrain | |||||
{{.i18n.Tr "repo.cloudbrain.new"}} | |||||
</button> | </button> | ||||
<a class="ui button" href="/">Cancel</a> | <a class="ui button" href="/">Cancel</a> | ||||
</div> | </div> | ||||
@@ -2,7 +2,7 @@ | |||||
{{range .Attachments}} | {{range .Attachments}} | ||||
<div class="ui grid item" id="{{.UUID}}"> | <div class="ui grid item" id="{{.UUID}}"> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="{{if $.Permission.CanWrite $.UnitTypeDatasets}}six{{else}}ten{{end}} wide column"> | |||||
<div class="{{if $.Permission.CanWrite $.UnitTypeDatasets}}five{{else}}nine{{end}} wide column"> | |||||
<a class="title" href="{{.DownloadURL}}"> | <a class="title" href="{{.DownloadURL}}"> | ||||
<span class="fitted">{{svg "octicon-cloud-download" 16}}</span> {{.Name}} | <span class="fitted">{{svg "octicon-cloud-download" 16}}</span> {{.Name}} | ||||
</a> | </a> | ||||
@@ -18,8 +18,8 @@ | |||||
<span class="ui text center clipboard" data-clipboard-text="{{.DownloadURL}}" data-tooltip='{{$.i18n.Tr "dataset.copy_url"}}' data-clipboard-action="copy">{{svg "octicon-file" 16}}</span> | <span class="ui text center clipboard" data-clipboard-text="{{.DownloadURL}}" data-tooltip='{{$.i18n.Tr "dataset.copy_url"}}' data-clipboard-action="copy">{{svg "octicon-file" 16}}</span> | ||||
</div> | </div> | ||||
<div class="two wide column" style="{{if ne .DecompressState 1}}visibility: hidden{{end}}"> | |||||
<a class="ui button mini" href="datasets/dirs/{{.UUID}}" data-uuid={{.UUID}} data-dataset-dir data-dir-url="{{AppSubUrl}}/attachments/dir" data-csrf="{{$.CsrfToken}}">{{$.i18n.Tr "dataset.dir"}}</a> | |||||
<div class="wide column one" style="{{if ne .DecompressState 1}}display:none{{end}}"> | |||||
<a class="ui text center" href="datasets/dirs/{{.UUID}}" data-tooltip='{{$.i18n.Tr "dataset.directory"}}'>{{svg "octicon-file-directory" 16}}</a> | |||||
</div> | </div> | ||||
{{if $.Permission.CanWrite $.UnitTypeDatasets}} | {{if $.Permission.CanWrite $.UnitTypeDatasets}} | ||||
@@ -1,20 +1,27 @@ | |||||
{{if .Dirs}} | {{if .Dirs}} | ||||
{{range .Dirs}} | |||||
<div class="ui grid item"> | |||||
<div class="row"> | |||||
<div class="six wide column"> | |||||
<a class="title" href="{{if .IsDir}}{{$.RepoLink}}/datasets/dirs/{{.UUID}}?parentDir={{.ParenDir}}{{end}}"> | |||||
<span class="fitted">{{if .IsDir}} {{svg "octicon-file-directory" 16}}{{else}}{{svg "octicon-file" 16}}{{end}}</span> {{.FileName}} | |||||
</a> | |||||
</div> | |||||
<div class="two wide column"> | |||||
{{.Size | FileSize}} | |||||
</div> | |||||
<div class="six wide column"> | |||||
<span>{{.ModTime}}</span> | |||||
</div> | |||||
<table id="repo-files-table" class="ui single line table"> | |||||
<tbody> | |||||
{{range .Dirs}} | |||||
<tr> | |||||
<td class="name four wide"> | |||||
<span class="truncate"> | |||||
<span class="octicon octicon-file-directory"></span> | |||||
<a class="title" href="{{if .IsDir}}{{$.RepoLink}}/datasets/dirs/{{.UUID}}?parentDir={{.ParenDir}}{{end}}"> | |||||
<span class="fitted">{{if .IsDir}} {{svg "octicon-file-directory" 16}}{{else}}{{svg "octicon-file" 16}}{{end}}</span> {{.FileName}} | |||||
</a> | |||||
</span> | |||||
</td> | |||||
<td class="message nine wide"> | |||||
<span class="truncate has-emoji"> | |||||
{{.Size | FileSize}} | |||||
</span> | |||||
</td> | |||||
<td class="text right age three wide"> | |||||
<span class="time-since poping up">{{.ModTime}}</span> | |||||
</td> | |||||
</tr> | |||||
{{end}} | |||||
</tbody> | |||||
</table> | |||||
</div> | |||||
</div> | |||||
{{end}} | |||||
{{end}} | {{end}} |
@@ -1,26 +1,22 @@ | |||||
{{template "base/head" .}} | {{template "base/head" .}} | ||||
<div class="repository dataset dir-list view"> | <div class="repository dataset dir-list view"> | ||||
{{template "repo/header" .}} | |||||
<form class="ui container"> | <form class="ui container"> | ||||
<div class="ui stackable grid {{if .Error}}hide{{end}}" id="dir-content"> | <div class="ui stackable grid {{if .Error}}hide{{end}}" id="dir-content"> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="column sixteen wide"> | <div class="column sixteen wide"> | ||||
<h2>{{.Title}}</h2> | |||||
<p> | |||||
{{ range $index, $item := .Path }} | |||||
<a href='{{$.Link}}/?parentDir={{if gt $index 0}}{{DatasetPathJoin $.Path $index "/"}}{{else}}{{$item}}{{end}}'>{{ $item }}</a>/ | |||||
{{ end }} | |||||
</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="ui divider"></div> | |||||
<div class="ui grid"> | <div class="ui grid"> | ||||
<div class="row"> | <div class="row"> | ||||
<div class="ui twelve wide column"> | |||||
<div class="ui sixteen wide column"> | |||||
<div class="ui two column stackable grid"> | |||||
<div class="column"> | |||||
<h2>{{.i18n.Tr "dataset.dir"}}</h2> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="ui sixteen wide column"> | |||||
<div class="dir list"> | <div class="dir list"> | ||||
{{template "repo/datasets/dirs/dir_list" .}} | {{template "repo/datasets/dirs/dir_list" .}} | ||||
</div> | </div> | ||||
@@ -92,6 +92,7 @@ | |||||
data-loading-file='{{.i18n.Tr "dropzone.loading_file"}}' | data-loading-file='{{.i18n.Tr "dropzone.loading_file"}}' | ||||
data-upload-complete='{{.i18n.Tr "dropzone.upload_complete"}}' | data-upload-complete='{{.i18n.Tr "dropzone.upload_complete"}}' | ||||
data-uploading='{{.i18n.Tr "dropzone.uploading"}}' | data-uploading='{{.i18n.Tr "dropzone.uploading"}}' | ||||
data-failed='{{.i18n.Tr "dropzone.failed"}}' | |||||
> | > | ||||
</div> | </div> | ||||
{{if eq .StoreType "minio"}} | {{if eq .StoreType "minio"}} | ||||
@@ -99,7 +99,7 @@ | |||||
{{if .Permission.CanRead $.UnitTypeDatasets}} | {{if .Permission.CanRead $.UnitTypeDatasets}} | ||||
<a class="{{if .PageIsDataset}}active{{end}} item" href="{{.RepoLink}}/datasets"> | <a class="{{if .PageIsDataset}}active{{end}} item" href="{{.RepoLink}}/datasets"> | ||||
{{svg "octicon-file-submodule" 16}} {{.i18n.Tr "datasets"}} | |||||
{{svg "octicon-inbox" 16}} {{.i18n.Tr "datasets"}} | |||||
</a> | </a> | ||||
{{end}} | {{end}} | ||||
@@ -141,7 +141,7 @@ | |||||
{{if .Permission.CanRead $.UnitTypeCloudBrain}} | {{if .Permission.CanRead $.UnitTypeCloudBrain}} | ||||
<a class="{{if .PageIsCloudBrain}}active{{end}} item" href="{{.RepoLink}}/cloudbrain"> | <a class="{{if .PageIsCloudBrain}}active{{end}} item" href="{{.RepoLink}}/cloudbrain"> | ||||
{{svg "octicon-file-submodule" 16}} {{.i18n.Tr "cloudbrains"}} | |||||
{{svg "octicon-server" 16}} {{.i18n.Tr "repo.cloudbrain"}} | |||||
</a> | </a> | ||||
{{end}} | {{end}} | ||||
@@ -143,7 +143,7 @@ | |||||
{{$isDatasetEnabled := .Repository.UnitEnabled $.UnitTypeDatasets }} | {{$isDatasetEnabled := .Repository.UnitEnabled $.UnitTypeDatasets }} | ||||
<div class="inline field"> | <div class="inline field"> | ||||
<label>{{.i18n.Tr "repo.dataset"}}</label> | |||||
<label>{{.i18n.Tr "repo.datasets"}}</label> | |||||
<div class="ui checkbox"> | <div class="ui checkbox"> | ||||
<input class="enable-system" name="enable_dataset" type="checkbox" {{if $isDatasetEnabled}}checked{{end}}> | <input class="enable-system" name="enable_dataset" type="checkbox" {{if $isDatasetEnabled}}checked{{end}}> | ||||
<label>{{.i18n.Tr "repo.settings.dataset_desc"}}</label> | <label>{{.i18n.Tr "repo.settings.dataset_desc"}}</label> | ||||
@@ -63,7 +63,7 @@ | |||||
{{if $entry.IsSubModule}} | {{if $entry.IsSubModule}} | ||||
<td> | <td> | ||||
<span class="truncate"> | <span class="truncate"> | ||||
{{svg "octicon-file-submodule" 16}} | |||||
{{svg "octicon-inbox" 16}} | |||||
{{$refURL := $commit.RefURL AppUrl $.Repository.FullName}} | {{$refURL := $commit.RefURL AppUrl $.Repository.FullName}} | ||||
{{if $refURL}} | {{if $refURL}} | ||||
<a href="{{$refURL}}">{{$entry.Name}}</a> @ <a href="{{$refURL}}/commit/{{$commit.RefID}}">{{ShortSha $commit.RefID}}</a> | <a href="{{$refURL}}">{{$entry.Name}}</a> @ <a href="{{$refURL}}/commit/{{$commit.RefID}}">{{ShortSha $commit.RefID}}</a> | ||||
@@ -87,7 +87,7 @@ | |||||
{{svg "octicon-repo" 16}} {{.i18n.Tr "user.repositories"}} | {{svg "octicon-repo" 16}} {{.i18n.Tr "user.repositories"}} | ||||
</a> | </a> | ||||
<a class='{{if eq .TabName "datasets"}}active{{end}} item' href="{{.Owner.HomeLink}}?tab=datasets"> | <a class='{{if eq .TabName "datasets"}}active{{end}} item' href="{{.Owner.HomeLink}}?tab=datasets"> | ||||
{{svg "octicon-file-submodule" 16}} {{.i18n.Tr "user.datasets"}} | |||||
{{svg "octicon-inbox" 16}} {{.i18n.Tr "user.datasets"}} | |||||
</a> | </a> | ||||
<a class='{{if eq .TabName "activity"}}active{{end}} item' href="{{.Owner.HomeLink}}?tab=activity"> | <a class='{{if eq .TabName "activity"}}active{{end}} item' href="{{.Owner.HomeLink}}?tab=activity"> | ||||
{{svg "octicon-rss" 16}} {{.i18n.Tr "user.activity"}} | {{svg "octicon-rss" 16}} {{.i18n.Tr "user.activity"}} | ||||
@@ -37,6 +37,10 @@ export default { | |||||
}, | }, | ||||
async mounted() { | async mounted() { | ||||
this.dropzoneParams = $('div#minioUploader-params'); | |||||
this.file_status_text = this.dropzoneParams.data('file-status'); | |||||
this.status = this.dropzoneParams.data('file-init-status'); | |||||
let previewTemplate = ''; | let previewTemplate = ''; | ||||
previewTemplate += '<div class="dz-preview dz-file-preview">\n '; | previewTemplate += '<div class="dz-preview dz-file-preview">\n '; | ||||
previewTemplate += ' <div class="dz-details">\n '; | previewTemplate += ' <div class="dz-details">\n '; | ||||
@@ -61,9 +65,6 @@ export default { | |||||
previewTemplate += ' </div>\n'; | previewTemplate += ' </div>\n'; | ||||
previewTemplate += '</div>'; | previewTemplate += '</div>'; | ||||
this.dropzoneParams = $('div#minioUploader-params'); | |||||
this.file_status_text = this.dropzoneParams.data('file-status'); | |||||
this.status = this.dropzoneParams.data('file-init-status'); | |||||
const $dropzone = $('div#dataset'); | const $dropzone = $('div#dataset'); | ||||
console.log('createDropzone'); | console.log('createDropzone'); | ||||
const dropzoneUploader = await createDropzone($dropzone[0], { | const dropzoneUploader = await createDropzone($dropzone[0], { | ||||
@@ -111,6 +112,12 @@ export default { | |||||
this.dropzoneUploader.emit('success', file); | this.dropzoneUploader.emit('success', file); | ||||
this.dropzoneUploader.emit('complete', file); | this.dropzoneUploader.emit('complete', file); | ||||
}, | }, | ||||
emitDropzoneFailed(file) { | |||||
this.status = this.dropzoneParams.data('falied'); | |||||
file.status = 'error'; | |||||
this.dropzoneUploader.emit('error', file); | |||||
// this.dropzoneUploader.emit('complete', file); | |||||
}, | |||||
onFileAdded(file) { | onFileAdded(file) { | ||||
file.datasetId = document | file.datasetId = document | ||||
.getElementById('datasetId') | .getElementById('datasetId') | ||||
@@ -188,33 +195,38 @@ export default { | |||||
async computeMD5Success(md5edFile) { | async computeMD5Success(md5edFile) { | ||||
const file = await this.getSuccessChunks(md5edFile); | const file = await this.getSuccessChunks(md5edFile); | ||||
if (file.uploadID == '' || file.uuid == '') { | |||||
try { | |||||
if (file.uploadID == '' || file.uuid == '') { | |||||
// 未上传过 | // 未上传过 | ||||
await this.newMultiUpload(file); | |||||
if (file.uploadID != '' && file.uuid != '') { | |||||
file.chunks = ''; | |||||
this.multipartUpload(file); | |||||
} else { | |||||
await this.newMultiUpload(file); | |||||
if (file.uploadID != '' && file.uuid != '') { | |||||
file.chunks = ''; | |||||
this.multipartUpload(file); | |||||
} else { | |||||
// 失败如何处理 | // 失败如何处理 | ||||
return; | |||||
} | |||||
return; | return; | ||||
} | } | ||||
return; | |||||
} | |||||
if (file.uploaded == '1') { | |||||
if (file.uploaded == '1') { | |||||
// 已上传成功 | // 已上传成功 | ||||
// 秒传 | // 秒传 | ||||
if (file.attachID == '0') { | |||||
if (file.attachID == '0') { | |||||
// 删除数据集记录,未删除文件 | // 删除数据集记录,未删除文件 | ||||
await addAttachment(file); | |||||
} | |||||
console.log('文件已上传完成'); | |||||
this.progress = 100; | |||||
this.status = this.dropzoneParams.data('upload-complete'); | |||||
this.finishUpload(file); | |||||
} else { | |||||
await addAttachment(file); | |||||
} | |||||
console.log('文件已上传完成'); | |||||
this.progress = 100; | |||||
this.status = this.dropzoneParams.data('upload-complete'); | |||||
this.finishUpload(file); | |||||
} else { | |||||
// 断点续传 | // 断点续传 | ||||
this.multipartUpload(file); | |||||
this.multipartUpload(file); | |||||
} | |||||
} catch (error) { | |||||
this.emitDropzoneFailed(file); | |||||
console.log(error); | |||||
} | } | ||||
async function addAttachment(file) { | async function addAttachment(file) { | ||||
@@ -247,6 +259,7 @@ export default { | |||||
file.attachID = response.data.attachID; | file.attachID = response.data.attachID; | ||||
return file; | return file; | ||||
} catch (error) { | } catch (error) { | ||||
this.emitDropzoneFailed(file); | |||||
console.log('getSuccessChunks catch: ', error); | console.log('getSuccessChunks catch: ', error); | ||||
return null; | return null; | ||||
} | } | ||||
@@ -323,24 +336,29 @@ export default { | |||||
); | ); | ||||
} | } | ||||
async function uploadChunk(e) { | async function uploadChunk(e) { | ||||
if (!checkSuccessChunks()) { | |||||
const start = currentChunk * chunkSize; | |||||
const partSize = | |||||
try { | |||||
if (!checkSuccessChunks()) { | |||||
const start = currentChunk * chunkSize; | |||||
const partSize = | |||||
start + chunkSize >= file.size ? file.size - start : chunkSize; | start + chunkSize >= file.size ? file.size - start : chunkSize; | ||||
// 获取分片上传url | |||||
await getUploadChunkUrl(currentChunk, partSize); | |||||
if (urls[currentChunk] != '') { | |||||
// 获取分片上传url | |||||
await getUploadChunkUrl(currentChunk, partSize); | |||||
if (urls[currentChunk] != '') { | |||||
// 上传到minio | // 上传到minio | ||||
await uploadMinio(urls[currentChunk], e); | |||||
if (etags[currentChunk] != '') { | |||||
await uploadMinio(urls[currentChunk], e); | |||||
if (etags[currentChunk] != '') { | |||||
// 更新数据库:分片上传结果 | // 更新数据库:分片上传结果 | ||||
await updateChunk(currentChunk); | |||||
await updateChunk(currentChunk); | |||||
} else { | |||||
console.log("上传到minio uploadChunk etags[currentChunk] == ''");// TODO | |||||
} | |||||
} else { | } else { | ||||
console.log("上传到minio uploadChunk etags[currentChunk] == ''");// TODO | |||||
console.log("uploadChunk urls[currentChunk] != ''");// TODO | |||||
} | } | ||||
} else { | |||||
console.log("uploadChunk urls[currentChunk] != ''");// TODO | |||||
} | } | ||||
} catch (error) { | |||||
this.emitDropzoneFailed(file); | |||||
console.log(error); | |||||
} | } | ||||
} | } | ||||
@@ -51,7 +51,10 @@ | |||||
} | } | ||||
} | } | ||||
.dz-preview .dz-error-message { | .dz-preview .dz-error-message { | ||||
top: 30px; | |||||
background: none; | |||||
} | |||||
.dz-preview .dz-error-message::after { | |||||
border: none !important; | |||||
} | } | ||||
} | } | ||||
.upload-info { | .upload-info { | ||||
@@ -1,6 +1,5 @@ | |||||
.repository { | .repository { | ||||
padding-top: 15px; | |||||
// padding-top: 15px; | |||||
.repo-header { | .repo-header { | ||||
.ui.compact.menu { | .ui.compact.menu { | ||||
@@ -154,7 +153,7 @@ | |||||
&.labels { | &.labels { | ||||
.label-filter .menu .info { | .label-filter .menu .info { | ||||
display: inline-block; | display: inline-block; | ||||
padding: .5rem .25rem; | |||||
padding: 0.5rem 0.25rem; | |||||
border-bottom: 1px solid #cccccc; | border-bottom: 1px solid #cccccc; | ||||
font-size: 12px; | font-size: 12px; | ||||
width: 100%; | width: 100%; | ||||
@@ -171,7 +170,7 @@ | |||||
} | } | ||||
.text { | .text { | ||||
margin-left: .9em; | |||||
margin-left: 0.9em; | |||||
} | } | ||||
.menu { | .menu { | ||||
@@ -227,7 +226,7 @@ | |||||
padding: 0 5px; | padding: 0 5px; | ||||
&:first-child { | &:first-child { | ||||
border-radius: .28571429rem 0 0 .28571429rem; | |||||
border-radius: 0.28571429rem 0 0 0.28571429rem; | |||||
} | } | ||||
} | } | ||||
@@ -259,7 +258,6 @@ | |||||
} | } | ||||
.repo-path { | .repo-path { | ||||
.section, | .section, | ||||
.divider { | .divider { | ||||
display: inline; | display: inline; | ||||
@@ -377,11 +375,11 @@ | |||||
} | } | ||||
.small.icon { | .small.icon { | ||||
font-size: .75em; | |||||
font-size: 0.75em; | |||||
} | } | ||||
.tiny.icon { | .tiny.icon { | ||||
font-size: .5em; | |||||
font-size: 0.5em; | |||||
} | } | ||||
.file-actions { | .file-actions { | ||||
@@ -464,7 +462,7 @@ | |||||
input { | input { | ||||
vertical-align: middle; | vertical-align: middle; | ||||
box-shadow: rgba(0, 0, 0, .0745098) 0 1px 2px inset; | |||||
box-shadow: rgba(0, 0, 0, 0.0745098) 0 1px 2px inset; | |||||
width: inherit; | width: inherit; | ||||
padding: 7px 8px; | padding: 7px 8px; | ||||
margin-right: 5px; | margin-right: 5px; | ||||
@@ -504,8 +502,8 @@ | |||||
display: inline-block; | display: inline-block; | ||||
padding: 3px 6px; | padding: 3px 6px; | ||||
font: 12px @monospaced-fonts, monospace; | font: 12px @monospaced-fonts, monospace; | ||||
color: rgba(0, 0, 0, .65); | |||||
background-color: rgba(209, 227, 237, .45); | |||||
color: rgba(0, 0, 0, 0.65); | |||||
background-color: rgba(209, 227, 237, 0.45); | |||||
border-radius: 3px; | border-radius: 3px; | ||||
} | } | ||||
@@ -582,7 +580,6 @@ | |||||
overflow-x: auto; | overflow-x: auto; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -596,7 +593,7 @@ | |||||
margin-bottom: 5px; | margin-bottom: 5px; | ||||
.ui.input { | .ui.input { | ||||
font-size: .5em; | |||||
font-size: 0.5em; | |||||
vertical-align: top; | vertical-align: top; | ||||
width: 50%; | width: 50%; | ||||
min-width: 600px; | min-width: 600px; | ||||
@@ -660,7 +657,6 @@ | |||||
} | } | ||||
.review-item { | .review-item { | ||||
.avatar, | .avatar, | ||||
.type-icon { | .type-icon { | ||||
float: none; | float: none; | ||||
@@ -675,7 +671,7 @@ | |||||
} | } | ||||
.text { | .text { | ||||
margin: .3em 0 .5em .5em; | |||||
margin: 0.3em 0 0.5em 0.5em; | |||||
} | } | ||||
.type-icon { | .type-icon { | ||||
@@ -684,7 +680,7 @@ | |||||
} | } | ||||
.divider { | .divider { | ||||
margin: .5rem 0; | |||||
margin: 0.5rem 0; | |||||
} | } | ||||
.review-content { | .review-content { | ||||
@@ -696,7 +692,7 @@ | |||||
.comment-list { | .comment-list { | ||||
&:not(.prevent-before-timeline):before { | &:not(.prevent-before-timeline):before { | ||||
display: block; | display: block; | ||||
content: ""; | |||||
content: ''; | |||||
position: absolute; | position: absolute; | ||||
margin-top: 12px; | margin-top: 12px; | ||||
margin-bottom: 14px; | margin-bottom: 14px; | ||||
@@ -714,9 +710,10 @@ | |||||
margin-left: 40px; | margin-left: 40px; | ||||
padding-left: 16px; | padding-left: 16px; | ||||
&:before { //ciara | |||||
&:before { | |||||
//ciara | |||||
display: block; | display: block; | ||||
content: ""; | |||||
content: ''; | |||||
position: absolute; | position: absolute; | ||||
margin-top: 12px; | margin-top: 12px; | ||||
margin-bottom: 14px; | margin-bottom: 14px; | ||||
@@ -810,13 +807,12 @@ | |||||
} | } | ||||
.comment { | .comment { | ||||
.tag { | .tag { | ||||
color: #767676; | color: #767676; | ||||
margin-top: 3px; | margin-top: 3px; | ||||
padding: 2px 5px; | padding: 2px 5px; | ||||
font-size: 12px; | font-size: 12px; | ||||
border: 1px solid rgba(0, 0, 0, .1); | |||||
border: 1px solid rgba(0, 0, 0, 0.1); | |||||
border-radius: 3px; | border-radius: 3px; | ||||
&.review { | &.review { | ||||
margin-left: 5px; | margin-left: 5px; | ||||
@@ -888,10 +884,10 @@ | |||||
} | } | ||||
.actions a { | .actions a { | ||||
color: rgba(0, 0, 0, .4); | |||||
color: rgba(0, 0, 0, 0.4); | |||||
&:hover { | &:hover { | ||||
color: rgba(0, 0, 0, .8); | |||||
color: rgba(0, 0, 0, 0.8); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -998,7 +994,8 @@ | |||||
padding-left: 15px; | padding-left: 15px; | ||||
& > .svg:not(.issue-symbol) { | & > .svg:not(.issue-symbol) { | ||||
text-shadow: -2px 0 #fff, 0 2px #fff, 2px 0 #fff, 0 -2px #fff; | |||||
text-shadow: -2px 0 #fff, 0 2px #fff, 2px 0 #fff, | |||||
0 -2px #fff; | |||||
} | } | ||||
& > .svg.issue-symbol { | & > .svg.issue-symbol { | ||||
@@ -1037,7 +1034,7 @@ | |||||
} | } | ||||
.detail { | .detail { | ||||
font-size: .9rem; | |||||
font-size: 0.9rem; | |||||
margin-top: 5px; | margin-top: 5px; | ||||
margin-left: 35px; | margin-left: 35px; | ||||
@@ -1134,9 +1131,8 @@ | |||||
} | } | ||||
.orglabel { | .orglabel { | ||||
opacity: .7; | |||||
opacity: 0.7; | |||||
} | } | ||||
} | } | ||||
.milestone.list { | .milestone.list { | ||||
@@ -1315,7 +1311,7 @@ | |||||
} | } | ||||
&.ui.basic.striped.table tbody tr:nth-child(2n) { | &.ui.basic.striped.table tbody tr:nth-child(2n) { | ||||
background-color: rgba(0, 0, 0, .02) !important; | |||||
background-color: rgba(0, 0, 0, 0.02) !important; | |||||
} | } | ||||
} | } | ||||
@@ -1434,7 +1430,7 @@ | |||||
> div:after { | > div:after { | ||||
clear: both; | clear: both; | ||||
content: ""; | |||||
content: ''; | |||||
display: block; | display: block; | ||||
} | } | ||||
@@ -1590,14 +1586,12 @@ | |||||
} | } | ||||
.code-diff-split { | .code-diff-split { | ||||
table, | table, | ||||
tbody { | tbody { | ||||
width: 100%; | width: 100%; | ||||
} | } | ||||
tbody tr { | tbody tr { | ||||
// light gray for empty lines before / after commit | // light gray for empty lines before / after commit | ||||
&.add-code td:nth-child(1), | &.add-code td:nth-child(1), | ||||
&.add-code td:nth-child(2), | &.add-code td:nth-child(2), | ||||
@@ -1650,7 +1644,6 @@ | |||||
} | } | ||||
.diff-stats { | .diff-stats { | ||||
clear: both; | clear: both; | ||||
margin-bottom: 5px; | margin-bottom: 5px; | ||||
max-height: 400px; | max-height: 400px; | ||||
@@ -1697,7 +1690,7 @@ | |||||
} | } | ||||
.clone.button:first-child { | .clone.button:first-child { | ||||
border-radius: .28571429rem 0 0 .28571429rem; | |||||
border-radius: 0.28571429rem 0 0 0.28571429rem; | |||||
} | } | ||||
.ui.action.small.input { | .ui.action.small.input { | ||||
@@ -1825,7 +1818,6 @@ | |||||
} | } | ||||
.field { | .field { | ||||
button, | button, | ||||
input { | input { | ||||
@media only screen and (max-width: 438px) { | @media only screen and (max-width: 438px) { | ||||
@@ -2158,7 +2150,7 @@ | |||||
} | } | ||||
&.active { | &.active { | ||||
background: rgba(0, 0, 0, .05); | |||||
background: rgba(0, 0, 0, 0.05); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -2172,12 +2164,12 @@ | |||||
min-width: 15em; | min-width: 15em; | ||||
> .header { | > .header { | ||||
margin: .75rem 0 .5rem; | |||||
margin: 0.75rem 0 0.5rem; | |||||
} | } | ||||
> .item { | > .item { | ||||
float: left; | float: left; | ||||
padding: .5rem .5rem !important; | |||||
padding: 0.5rem 0.5rem !important; | |||||
font-size: 1.5em; | font-size: 1.5em; | ||||
width: 45px; | width: 45px; | ||||
left: 13px; | left: 13px; | ||||
@@ -2206,7 +2198,7 @@ | |||||
&.disabled { | &.disabled { | ||||
cursor: default; | cursor: default; | ||||
opacity: .5; | |||||
opacity: 0.5; | |||||
} | } | ||||
} | } | ||||
@@ -2221,7 +2213,7 @@ | |||||
.select-reaction { | .select-reaction { | ||||
float: left; | float: left; | ||||
padding: .6em; | |||||
padding: 0.6em; | |||||
line-height: 21px; | line-height: 21px; | ||||
&:not(.active) a { | &:not(.active) a { | ||||
@@ -2462,11 +2454,11 @@ | |||||
border-radius: 4px; | border-radius: 4px; | ||||
.dz-button { | .dz-button { | ||||
color: rgba(0, 0, 0, .6); | |||||
color: rgba(0, 0, 0, 0.6); | |||||
} | } | ||||
&:hover .dz-button { | &:hover .dz-button { | ||||
color: rgba(0, 0, 0, .8); | |||||
color: rgba(0, 0, 0, 0.8); | |||||
} | } | ||||
.dz-error-message { | .dz-error-message { | ||||
@@ -2481,7 +2473,7 @@ | |||||
> .header, | > .header, | ||||
.segment { | .segment { | ||||
box-shadow: 0 1px 2px 0 rgba(34, 36, 38, .15); | |||||
box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15); | |||||
} | } | ||||
} | } | ||||
@@ -2503,7 +2495,7 @@ | |||||
> .svg + .content { | > .svg + .content { | ||||
display: table-cell; | display: table-cell; | ||||
padding: 0 0 0 .5em; | |||||
padding: 0 0 0 0.5em; | |||||
vertical-align: top; | vertical-align: top; | ||||
} | } | ||||
@@ -2590,13 +2582,12 @@ | |||||
} | } | ||||
#avatar-arrow { | #avatar-arrow { | ||||
&:before, | &:before, | ||||
&:after { | &:after { | ||||
right: 100%; | right: 100%; | ||||
top: 20px; | top: 20px; | ||||
border: solid transparent; | border: solid transparent; | ||||
content: " "; | |||||
content: ' '; | |||||
height: 0; | height: 0; | ||||
width: 0; | width: 0; | ||||
position: absolute; | position: absolute; | ||||
@@ -2642,7 +2633,7 @@ | |||||
display: table-cell; | display: table-cell; | ||||
&.tiny { | &.tiny { | ||||
height: .5em; | |||||
height: 0.5em; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -2799,18 +2790,18 @@ tbody.commit-list { | |||||
} | } | ||||
.repo-buttons .disabled-repo-button .label { | .repo-buttons .disabled-repo-button .label { | ||||
opacity: .5; | |||||
opacity: 0.5; | |||||
} | } | ||||
.repo-buttons .disabled-repo-button a.button { | .repo-buttons .disabled-repo-button a.button { | ||||
opacity: .5; | |||||
opacity: 0.5; | |||||
cursor: not-allowed; | cursor: not-allowed; | ||||
} | } | ||||
.repo-buttons .disabled-repo-button a.button:hover { | .repo-buttons .disabled-repo-button a.button:hover { | ||||
background: none !important; | background: none !important; | ||||
color: rgba(0, 0, 0, .6) !important; | |||||
box-shadow: 0 0 0 1px rgba(34, 36, 38, .15) inset !important; | |||||
color: rgba(0, 0, 0, 0.6) !important; | |||||
box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset !important; | |||||
} | } | ||||
.repo-buttons .ui.labeled.button > .label { | .repo-buttons .ui.labeled.button > .label { | ||||
@@ -2857,12 +2848,12 @@ td.blob-excerpt { | |||||
margin-top: 1em; | margin-top: 1em; | ||||
} | } | ||||
.diff-file-box[data-folded="true"] .diff-file-body { | |||||
.diff-file-box[data-folded='true'] .diff-file-body { | |||||
display: none; | display: none; | ||||
} | } | ||||
.diff-file-box[data-folded="true"] .diff-file-header { | |||||
border-radius: .28571429rem !important; | |||||
.diff-file-box[data-folded='true'] .diff-file-header { | |||||
border-radius: 0.28571429rem !important; | |||||
} | } | ||||
/* prevent page shaking on language bar click */ | /* prevent page shaking on language bar click */ | ||||
@@ -2872,7 +2863,7 @@ td.blob-excerpt { | |||||
} | } | ||||
.ui.form .right .ui.button { | .ui.form .right .ui.button { | ||||
margin-left: .25em; | |||||
margin-left: 0.25em; | |||||
margin-right: 0; | margin-right: 0; | ||||
} | } | ||||