Reviewed-by: berry <senluowanxiangt@gmail.com>master
@@ -307,6 +307,9 @@ func NewFuncMap() []template.FuncMap { | |||
"tasks": tasks, | |||
"categories": categories, | |||
"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 | |||
back = back | |||
copy_url=copy download url | |||
directory=check directory of the datasets | |||
visibility = visibility | |||
visibility_description = Only the owner or the organization members if they have rights, will be able to see it. | |||
visibility_helper = Make Dataset Private | |||
@@ -752,6 +753,10 @@ unit_disabled = The site administrator has disabled this repository section. | |||
language_other = Other | |||
datasets = Datasets | |||
datasets.desc = Enable Dataset | |||
cloudbrain=cloudbrain | |||
cloudbrain.new=New cloudbrain | |||
cloudbrain.desc=cloudbrain | |||
cloudbrain.cancel=Cancel | |||
template.items = Template Items | |||
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_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.dataset_desc= Enable Repository Dataset | |||
settings.dataset_desc = Enable Repository Dataset | |||
settings.cloudbrain_desc = Enable Cloudbarin | |||
settings.issues_desc = Enable Repository Issue Tracker | |||
settings.use_internal_issue_tracker = Use Built-In Issue Tracker | |||
settings.use_external_issue_tracker = Use External Issue Tracker | |||
@@ -2434,6 +2440,7 @@ md5_computing = MD5 computing | |||
loading_file = Loading | |||
uploading = Uploading | |||
upload_complete = Uploading complete | |||
falied = Upload Failed | |||
enable_minio_support = Enable minio support to use the dataset service | |||
[notification] | |||
@@ -648,6 +648,7 @@ public=公有 | |||
dir=目录 | |||
back=返回 | |||
copy_url=复制下载链接 | |||
directory=查看数据集目录结构 | |||
visibility=可见性 | |||
visibility_description=只有组织所有人或拥有权利的组织成员才能看到。 | |||
visibility_helper=将数据集设为私有 | |||
@@ -751,8 +752,12 @@ pick_reaction=选择你的表情 | |||
reactions_more=再加载 %d | |||
unit_disabled=站点管理员已禁用此项目单元。 | |||
language_other=其它 | |||
datasets = 数据集 | |||
datasets.desc = 数据集功能 | |||
datasets=数据集 | |||
datasets.desc=数据集功能 | |||
cloudbrain=云脑 | |||
cloudbrain.new=新建任务 | |||
cloudbrain.desc=云脑功能 | |||
cloudbrain.cancel=取消 | |||
template.items=模板选项 | |||
template.git_content=Git数据(默认分支) | |||
@@ -1423,6 +1428,7 @@ settings.external_wiki_url=外部 Wiki 链接 | |||
settings.external_wiki_url_error=外部百科链接无效 | |||
settings.external_wiki_url_desc=当点击工单标签时,访问者将被重定向到外部工单系统的URL。 | |||
settings.dataset_desc=启用数据集 | |||
settings.cloudbrain_desc = 启用云脑 | |||
settings.issues_desc=启用工单系统 | |||
settings.use_internal_issue_tracker=使用内置的轻量级工单管理系统 | |||
settings.use_external_issue_tracker=使用外部的工单管理系统 | |||
@@ -2436,6 +2442,7 @@ md5_computing=计算MD5 | |||
loading_file=加载文件 | |||
uploading=正在上传 | |||
upload_complete=上传完成 | |||
failed=上传失败 | |||
enable_minio_support=启用minio支持以使用数据集服务 | |||
[notification] | |||
@@ -29,6 +29,7 @@ type FileInfo struct { | |||
func DirIndex(ctx *context.Context) { | |||
uuid := ctx.Params("uuid") | |||
parentDir := ctx.Query("parentDir") | |||
dirArray := strings.Split(parentDir, "/") | |||
if parentDir == "" { | |||
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") | |||
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 | |||
} 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 + | |||
@@ -87,7 +86,9 @@ func DirIndex(ctx *context.Context) { | |||
i++ | |||
} | |||
ctx.Data["Path"] = dirArray | |||
ctx.Data["Dirs"] = fileInfos | |||
ctx.Data["PageIsDataset"] = true | |||
ctx.HTML(200, tplDirIndex) | |||
} |
@@ -880,8 +880,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
m.Get("", reqRepoDatasetReader, repo.DatasetIndex) | |||
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()) | |||
@@ -4,7 +4,7 @@ | |||
{{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | |||
</a> | |||
<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 class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | |||
{{svg "octicon-person" 16}} {{.i18n.Tr "explore.users"}} | |||
@@ -28,7 +28,7 @@ | |||
{{svg "octicon-repo" 16}} {{.i18n.Tr "explore.repos"}} | |||
</a> | |||
<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 class="{{if .PageIsExploreUsers}}active{{end}} item" href="{{AppSubUrl}}/explore/users"> | |||
{{svg "octicon-person" 16}} {{.i18n.Tr "explore.users"}} | |||
@@ -4,7 +4,7 @@ | |||
<div class="ui container"> | |||
<div class="ui three column stackable grid"> | |||
<div class="column"> | |||
<h2>{{.i18n.Tr "cloudbrain"}}</h2> | |||
<h2>{{.i18n.Tr "repo.cloudbrain"}}</h2> | |||
</div> | |||
<div class="column"> | |||
</div> | |||
@@ -1,13 +1,13 @@ | |||
{{template "base/head" .}} | |||
<div class="repository new repo"> | |||
{{template "repo/header" .}} | |||
{{template "repo/header" .}} | |||
<div class="ui middle very relaxed page grid"> | |||
<div class="column"> | |||
{{template "base/alert" .}} | |||
<form class="ui form" action="{{.Link}}" method="post"> | |||
{{.CsrfTokenHtml}} | |||
<h3 class="ui top attached header"> | |||
New Cloudbrain task | |||
{{.i18n.Tr "repo.cloudbrain.new"}} | |||
</h3> | |||
<div class="ui attached segment"> | |||
<br> | |||
@@ -27,7 +27,7 @@ | |||
<div class="inline field"> | |||
<label></label> | |||
<button class="ui green button"> | |||
Create Cloudbrain | |||
{{.i18n.Tr "repo.cloudbrain.new"}} | |||
</button> | |||
<a class="ui button" href="/">Cancel</a> | |||
</div> | |||
@@ -2,7 +2,7 @@ | |||
{{range .Attachments}} | |||
<div class="ui grid item" id="{{.UUID}}"> | |||
<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}}"> | |||
<span class="fitted">{{svg "octicon-cloud-download" 16}}</span> {{.Name}} | |||
</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> | |||
</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> | |||
{{if $.Permission.CanWrite $.UnitTypeDatasets}} | |||
@@ -1,20 +1,27 @@ | |||
{{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}} |
@@ -1,26 +1,22 @@ | |||
{{template "base/head" .}} | |||
<div class="repository dataset dir-list view"> | |||
{{template "repo/header" .}} | |||
<form class="ui container"> | |||
<div class="ui stackable grid {{if .Error}}hide{{end}}" id="dir-content"> | |||
<div class="row"> | |||
<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 class="ui divider"></div> | |||
<div class="ui grid"> | |||
<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"> | |||
{{template "repo/datasets/dirs/dir_list" .}} | |||
</div> | |||
@@ -92,6 +92,7 @@ | |||
data-loading-file='{{.i18n.Tr "dropzone.loading_file"}}' | |||
data-upload-complete='{{.i18n.Tr "dropzone.upload_complete"}}' | |||
data-uploading='{{.i18n.Tr "dropzone.uploading"}}' | |||
data-failed='{{.i18n.Tr "dropzone.failed"}}' | |||
> | |||
</div> | |||
{{if eq .StoreType "minio"}} | |||
@@ -99,7 +99,7 @@ | |||
{{if .Permission.CanRead $.UnitTypeDatasets}} | |||
<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> | |||
{{end}} | |||
@@ -141,7 +141,7 @@ | |||
{{if .Permission.CanRead $.UnitTypeCloudBrain}} | |||
<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> | |||
{{end}} | |||
@@ -143,7 +143,7 @@ | |||
{{$isDatasetEnabled := .Repository.UnitEnabled $.UnitTypeDatasets }} | |||
<div class="inline field"> | |||
<label>{{.i18n.Tr "repo.dataset"}}</label> | |||
<label>{{.i18n.Tr "repo.datasets"}}</label> | |||
<div class="ui checkbox"> | |||
<input class="enable-system" name="enable_dataset" type="checkbox" {{if $isDatasetEnabled}}checked{{end}}> | |||
<label>{{.i18n.Tr "repo.settings.dataset_desc"}}</label> | |||
@@ -63,7 +63,7 @@ | |||
{{if $entry.IsSubModule}} | |||
<td> | |||
<span class="truncate"> | |||
{{svg "octicon-file-submodule" 16}} | |||
{{svg "octicon-inbox" 16}} | |||
{{$refURL := $commit.RefURL AppUrl $.Repository.FullName}} | |||
{{if $refURL}} | |||
<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"}} | |||
</a> | |||
<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 class='{{if eq .TabName "activity"}}active{{end}} item' href="{{.Owner.HomeLink}}?tab=activity"> | |||
{{svg "octicon-rss" 16}} {{.i18n.Tr "user.activity"}} | |||
@@ -37,6 +37,10 @@ export default { | |||
}, | |||
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 = ''; | |||
previewTemplate += '<div class="dz-preview dz-file-preview">\n '; | |||
previewTemplate += ' <div class="dz-details">\n '; | |||
@@ -61,9 +65,6 @@ export default { | |||
previewTemplate += ' </div>\n'; | |||
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'); | |||
console.log('createDropzone'); | |||
const dropzoneUploader = await createDropzone($dropzone[0], { | |||
@@ -111,6 +112,12 @@ export default { | |||
this.dropzoneUploader.emit('success', 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) { | |||
file.datasetId = document | |||
.getElementById('datasetId') | |||
@@ -188,33 +195,38 @@ export default { | |||
async computeMD5Success(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; | |||
} | |||
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) { | |||
@@ -247,6 +259,7 @@ export default { | |||
file.attachID = response.data.attachID; | |||
return file; | |||
} catch (error) { | |||
this.emitDropzoneFailed(file); | |||
console.log('getSuccessChunks catch: ', error); | |||
return null; | |||
} | |||
@@ -323,24 +336,29 @@ export default { | |||
); | |||
} | |||
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; | |||
// 获取分片上传url | |||
await getUploadChunkUrl(currentChunk, partSize); | |||
if (urls[currentChunk] != '') { | |||
// 获取分片上传url | |||
await getUploadChunkUrl(currentChunk, partSize); | |||
if (urls[currentChunk] != '') { | |||
// 上传到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 { | |||
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 { | |||
top: 30px; | |||
background: none; | |||
} | |||
.dz-preview .dz-error-message::after { | |||
border: none !important; | |||
} | |||
} | |||
.upload-info { | |||
@@ -1,6 +1,5 @@ | |||
.repository { | |||
padding-top: 15px; | |||
// padding-top: 15px; | |||
.repo-header { | |||
.ui.compact.menu { | |||
@@ -154,7 +153,7 @@ | |||
&.labels { | |||
.label-filter .menu .info { | |||
display: inline-block; | |||
padding: .5rem .25rem; | |||
padding: 0.5rem 0.25rem; | |||
border-bottom: 1px solid #cccccc; | |||
font-size: 12px; | |||
width: 100%; | |||
@@ -171,7 +170,7 @@ | |||
} | |||
.text { | |||
margin-left: .9em; | |||
margin-left: 0.9em; | |||
} | |||
.menu { | |||
@@ -227,7 +226,7 @@ | |||
padding: 0 5px; | |||
&:first-child { | |||
border-radius: .28571429rem 0 0 .28571429rem; | |||
border-radius: 0.28571429rem 0 0 0.28571429rem; | |||
} | |||
} | |||
@@ -259,7 +258,6 @@ | |||
} | |||
.repo-path { | |||
.section, | |||
.divider { | |||
display: inline; | |||
@@ -377,11 +375,11 @@ | |||
} | |||
.small.icon { | |||
font-size: .75em; | |||
font-size: 0.75em; | |||
} | |||
.tiny.icon { | |||
font-size: .5em; | |||
font-size: 0.5em; | |||
} | |||
.file-actions { | |||
@@ -464,7 +462,7 @@ | |||
input { | |||
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; | |||
padding: 7px 8px; | |||
margin-right: 5px; | |||
@@ -504,8 +502,8 @@ | |||
display: inline-block; | |||
padding: 3px 6px; | |||
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; | |||
} | |||
@@ -582,7 +580,6 @@ | |||
overflow-x: auto; | |||
} | |||
} | |||
} | |||
} | |||
@@ -596,7 +593,7 @@ | |||
margin-bottom: 5px; | |||
.ui.input { | |||
font-size: .5em; | |||
font-size: 0.5em; | |||
vertical-align: top; | |||
width: 50%; | |||
min-width: 600px; | |||
@@ -660,7 +657,6 @@ | |||
} | |||
.review-item { | |||
.avatar, | |||
.type-icon { | |||
float: none; | |||
@@ -675,7 +671,7 @@ | |||
} | |||
.text { | |||
margin: .3em 0 .5em .5em; | |||
margin: 0.3em 0 0.5em 0.5em; | |||
} | |||
.type-icon { | |||
@@ -684,7 +680,7 @@ | |||
} | |||
.divider { | |||
margin: .5rem 0; | |||
margin: 0.5rem 0; | |||
} | |||
.review-content { | |||
@@ -696,7 +692,7 @@ | |||
.comment-list { | |||
&:not(.prevent-before-timeline):before { | |||
display: block; | |||
content: ""; | |||
content: ''; | |||
position: absolute; | |||
margin-top: 12px; | |||
margin-bottom: 14px; | |||
@@ -714,9 +710,10 @@ | |||
margin-left: 40px; | |||
padding-left: 16px; | |||
&:before { //ciara | |||
&:before { | |||
//ciara | |||
display: block; | |||
content: ""; | |||
content: ''; | |||
position: absolute; | |||
margin-top: 12px; | |||
margin-bottom: 14px; | |||
@@ -810,13 +807,12 @@ | |||
} | |||
.comment { | |||
.tag { | |||
color: #767676; | |||
margin-top: 3px; | |||
padding: 2px 5px; | |||
font-size: 12px; | |||
border: 1px solid rgba(0, 0, 0, .1); | |||
border: 1px solid rgba(0, 0, 0, 0.1); | |||
border-radius: 3px; | |||
&.review { | |||
margin-left: 5px; | |||
@@ -888,10 +884,10 @@ | |||
} | |||
.actions a { | |||
color: rgba(0, 0, 0, .4); | |||
color: rgba(0, 0, 0, 0.4); | |||
&:hover { | |||
color: rgba(0, 0, 0, .8); | |||
color: rgba(0, 0, 0, 0.8); | |||
} | |||
} | |||
} | |||
@@ -998,7 +994,8 @@ | |||
padding-left: 15px; | |||
& > .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 { | |||
@@ -1037,7 +1034,7 @@ | |||
} | |||
.detail { | |||
font-size: .9rem; | |||
font-size: 0.9rem; | |||
margin-top: 5px; | |||
margin-left: 35px; | |||
@@ -1134,9 +1131,8 @@ | |||
} | |||
.orglabel { | |||
opacity: .7; | |||
opacity: 0.7; | |||
} | |||
} | |||
.milestone.list { | |||
@@ -1315,7 +1311,7 @@ | |||
} | |||
&.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 { | |||
clear: both; | |||
content: ""; | |||
content: ''; | |||
display: block; | |||
} | |||
@@ -1590,14 +1586,12 @@ | |||
} | |||
.code-diff-split { | |||
table, | |||
tbody { | |||
width: 100%; | |||
} | |||
tbody tr { | |||
// light gray for empty lines before / after commit | |||
&.add-code td:nth-child(1), | |||
&.add-code td:nth-child(2), | |||
@@ -1650,7 +1644,6 @@ | |||
} | |||
.diff-stats { | |||
clear: both; | |||
margin-bottom: 5px; | |||
max-height: 400px; | |||
@@ -1697,7 +1690,7 @@ | |||
} | |||
.clone.button:first-child { | |||
border-radius: .28571429rem 0 0 .28571429rem; | |||
border-radius: 0.28571429rem 0 0 0.28571429rem; | |||
} | |||
.ui.action.small.input { | |||
@@ -1825,7 +1818,6 @@ | |||
} | |||
.field { | |||
button, | |||
input { | |||
@media only screen and (max-width: 438px) { | |||
@@ -2158,7 +2150,7 @@ | |||
} | |||
&.active { | |||
background: rgba(0, 0, 0, .05); | |||
background: rgba(0, 0, 0, 0.05); | |||
} | |||
} | |||
} | |||
@@ -2172,12 +2164,12 @@ | |||
min-width: 15em; | |||
> .header { | |||
margin: .75rem 0 .5rem; | |||
margin: 0.75rem 0 0.5rem; | |||
} | |||
> .item { | |||
float: left; | |||
padding: .5rem .5rem !important; | |||
padding: 0.5rem 0.5rem !important; | |||
font-size: 1.5em; | |||
width: 45px; | |||
left: 13px; | |||
@@ -2206,7 +2198,7 @@ | |||
&.disabled { | |||
cursor: default; | |||
opacity: .5; | |||
opacity: 0.5; | |||
} | |||
} | |||
@@ -2221,7 +2213,7 @@ | |||
.select-reaction { | |||
float: left; | |||
padding: .6em; | |||
padding: 0.6em; | |||
line-height: 21px; | |||
&:not(.active) a { | |||
@@ -2462,11 +2454,11 @@ | |||
border-radius: 4px; | |||
.dz-button { | |||
color: rgba(0, 0, 0, .6); | |||
color: rgba(0, 0, 0, 0.6); | |||
} | |||
&:hover .dz-button { | |||
color: rgba(0, 0, 0, .8); | |||
color: rgba(0, 0, 0, 0.8); | |||
} | |||
.dz-error-message { | |||
@@ -2481,7 +2473,7 @@ | |||
> .header, | |||
.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 { | |||
display: table-cell; | |||
padding: 0 0 0 .5em; | |||
padding: 0 0 0 0.5em; | |||
vertical-align: top; | |||
} | |||
@@ -2590,13 +2582,12 @@ | |||
} | |||
#avatar-arrow { | |||
&:before, | |||
&:after { | |||
right: 100%; | |||
top: 20px; | |||
border: solid transparent; | |||
content: " "; | |||
content: ' '; | |||
height: 0; | |||
width: 0; | |||
position: absolute; | |||
@@ -2642,7 +2633,7 @@ | |||
display: table-cell; | |||
&.tiny { | |||
height: .5em; | |||
height: 0.5em; | |||
} | |||
} | |||
} | |||
@@ -2799,18 +2790,18 @@ tbody.commit-list { | |||
} | |||
.repo-buttons .disabled-repo-button .label { | |||
opacity: .5; | |||
opacity: 0.5; | |||
} | |||
.repo-buttons .disabled-repo-button a.button { | |||
opacity: .5; | |||
opacity: 0.5; | |||
cursor: not-allowed; | |||
} | |||
.repo-buttons .disabled-repo-button a.button:hover { | |||
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 { | |||
@@ -2857,12 +2848,12 @@ td.blob-excerpt { | |||
margin-top: 1em; | |||
} | |||
.diff-file-box[data-folded="true"] .diff-file-body { | |||
.diff-file-box[data-folded='true'] .diff-file-body { | |||
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 */ | |||
@@ -2872,7 +2863,7 @@ td.blob-excerpt { | |||
} | |||
.ui.form .right .ui.button { | |||
margin-left: .25em; | |||
margin-left: 0.25em; | |||
margin-right: 0; | |||
} | |||