@@ -1279,7 +1279,7 @@ func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, opts ...Cr | |||||
} | } | ||||
if setting.Service.AutoWatchNewRepos { | if setting.Service.AutoWatchNewRepos { | ||||
if err = watchRepo(ctx.e, doer.ID, repo.ID, true); err != nil { | |||||
if err = watchRepo(ctx.e, doer.ID, repo.ID, true, ReceiveAllNotification); err != nil { | |||||
return fmt.Errorf("watchRepo: %v", err) | return fmt.Errorf("watchRepo: %v", err) | ||||
} | } | ||||
} | } | ||||
@@ -24,6 +24,14 @@ const ( | |||||
RepoWatchModeAuto // 3 | RepoWatchModeAuto // 3 | ||||
) | ) | ||||
// NotifyType specifies what kind of watch the user has on a repository | |||||
type NotifyType int8 | |||||
const ( | |||||
RejectAllNotification NotifyType = 0 | |||||
ReceiveAllNotification NotifyType = 9 | |||||
) | |||||
var ActionChan = make(chan *Action, 200) | var ActionChan = make(chan *Action, 200) | ||||
var ActionChan4Task = make(chan Action, 200) | var ActionChan4Task = make(chan Action, 200) | ||||
@@ -34,6 +42,7 @@ type Watch struct { | |||||
RepoID int64 `xorm:"UNIQUE(watch)"` | RepoID int64 `xorm:"UNIQUE(watch)"` | ||||
Mode RepoWatchMode `xorm:"SMALLINT NOT NULL DEFAULT 1"` | Mode RepoWatchMode `xorm:"SMALLINT NOT NULL DEFAULT 1"` | ||||
CreatedUnix int64 `xorm:"created"` | CreatedUnix int64 `xorm:"created"` | ||||
NotifyType NotifyType `xorm:"SMALLINT NOT NULL DEFAULT 0"` | |||||
} | } | ||||
// getWatch gets what kind of subscription a user has on a given repository; returns dummy record if none found | // getWatch gets what kind of subscription a user has on a given repository; returns dummy record if none found | ||||
@@ -60,8 +69,20 @@ func IsWatching(userID, repoID int64) bool { | |||||
return err == nil && isWatchMode(watch.Mode) | return err == nil && isWatchMode(watch.Mode) | ||||
} | } | ||||
// GetWatchNotifyType | |||||
func GetWatchNotifyType(userID, repoID int64) NotifyType { | |||||
watch, err := getWatch(x, userID, repoID) | |||||
if err != nil { | |||||
return RejectAllNotification | |||||
} | |||||
return watch.NotifyType | |||||
} | |||||
func watchRepoMode(e Engine, watch Watch, mode RepoWatchMode) (err error) { | func watchRepoMode(e Engine, watch Watch, mode RepoWatchMode) (err error) { | ||||
if watch.Mode == mode { | if watch.Mode == mode { | ||||
if _, err := e.ID(watch.ID).Cols("notify_type").Update(watch); err != nil { | |||||
return err | |||||
} | |||||
return nil | return nil | ||||
} | } | ||||
if mode == RepoWatchModeAuto && (watch.Mode == RepoWatchModeDont || isWatchMode(watch.Mode)) { | if mode == RepoWatchModeAuto && (watch.Mode == RepoWatchModeDont || isWatchMode(watch.Mode)) { | ||||
@@ -109,7 +130,7 @@ func WatchRepoMode(userID, repoID int64, mode RepoWatchMode) (err error) { | |||||
return watchRepoMode(x, watch, mode) | return watchRepoMode(x, watch, mode) | ||||
} | } | ||||
func watchRepo(e Engine, userID, repoID int64, doWatch bool) (err error) { | |||||
func watchRepo(e Engine, userID, repoID int64, doWatch bool, notifyTypes ...NotifyType) (err error) { | |||||
var watch Watch | var watch Watch | ||||
if watch, err = getWatch(e, userID, repoID); err != nil { | if watch, err = getWatch(e, userID, repoID); err != nil { | ||||
return err | return err | ||||
@@ -119,14 +140,19 @@ func watchRepo(e Engine, userID, repoID int64, doWatch bool) (err error) { | |||||
} else if !doWatch { | } else if !doWatch { | ||||
err = watchRepoMode(e, watch, RepoWatchModeNone) | err = watchRepoMode(e, watch, RepoWatchModeNone) | ||||
} else { | } else { | ||||
notifyType := RejectAllNotification | |||||
if len(notifyTypes) > 0 { | |||||
notifyType = notifyTypes[0] | |||||
} | |||||
watch.NotifyType = notifyType | |||||
err = watchRepoMode(e, watch, RepoWatchModeNormal) | err = watchRepoMode(e, watch, RepoWatchModeNormal) | ||||
} | } | ||||
return err | return err | ||||
} | } | ||||
// WatchRepo watch or unwatch repository. | // WatchRepo watch or unwatch repository. | ||||
func WatchRepo(userID, repoID int64, watch bool) (err error) { | |||||
return watchRepo(x, userID, repoID, watch) | |||||
func WatchRepo(userID, repoID int64, watch bool, notifyType ...NotifyType) (err error) { | |||||
return watchRepo(x, userID, repoID, watch, notifyType...) | |||||
} | } | ||||
func getWatchers(e Engine, repoID int64) ([]*Watch, error) { | func getWatchers(e Engine, repoID int64) ([]*Watch, error) { | ||||
@@ -156,6 +182,7 @@ func getRepoWatchersIDs(e Engine, repoID int64) ([]int64, error) { | |||||
return ids, e.Table("watch"). | return ids, e.Table("watch"). | ||||
Where("watch.repo_id=?", repoID). | Where("watch.repo_id=?", repoID). | ||||
And("watch.mode<>?", RepoWatchModeDont). | And("watch.mode<>?", RepoWatchModeDont). | ||||
And("watch.notify_type > ?", RejectAllNotification). | |||||
Select("user_id"). | Select("user_id"). | ||||
Find(&ids) | Find(&ids) | ||||
} | } | ||||
@@ -474,6 +474,7 @@ func RepoAssignment() macaron.Handler { | |||||
if ctx.IsSigned { | if ctx.IsSigned { | ||||
ctx.Data["IsWatchingRepo"] = models.IsWatching(ctx.User.ID, repo.ID) | ctx.Data["IsWatchingRepo"] = models.IsWatching(ctx.User.ID, repo.ID) | ||||
ctx.Data["WatchNotifyType"] = models.GetWatchNotifyType(ctx.User.ID, repo.ID) | |||||
ctx.Data["IsStaringRepo"] = models.IsStaring(ctx.User.ID, repo.ID) | ctx.Data["IsStaringRepo"] = models.IsStaring(ctx.User.ID, repo.ID) | ||||
ctx.Data["IsStaringDataset"] = models.IsDatasetStaringByRepoId(ctx.User.ID, repo.ID) | ctx.Data["IsStaringDataset"] = models.IsDatasetStaringByRepoId(ctx.User.ID, repo.ID) | ||||
@@ -1394,6 +1394,11 @@ star = Star | |||||
fork = Fork | fork = Fork | ||||
download_archive = Download Repository | download_archive = Download Repository | ||||
star_fail=Failed to %s the dataset. | star_fail=Failed to %s the dataset. | ||||
watched=Watched | |||||
notWatched=Not watched | |||||
un_watch=Unwatch | |||||
watch_all=Watch all | |||||
watch_no_notify=Watch but not notify | |||||
no_desc = No Description | no_desc = No Description | ||||
no_label = No labels | no_label = No labels | ||||
@@ -1411,6 +1411,11 @@ star=点赞 | |||||
fork=派生 | fork=派生 | ||||
download_archive=下载此项目 | download_archive=下载此项目 | ||||
star_fail=%s失败。 | star_fail=%s失败。 | ||||
watched=已关注 | |||||
notWatched=未关注 | |||||
un_watch=不关注 | |||||
watch_all=关注所有动态 | |||||
watch_no_notify=关注但不提醒动态 | |||||
no_desc=暂无描述 | no_desc=暂无描述 | ||||
@@ -123,8 +123,9 @@ func GetOverviewDuration(ctx *context.Context) { | |||||
recordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix | recordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix | ||||
now := time.Now() | now := time.Now() | ||||
endTime := now | endTime := now | ||||
// worker_server_num := 1 | |||||
// cardNum := 1 | |||||
var workServerNumber int64 | |||||
var cardNum int64 | |||||
durationAllSum := int64(0) | durationAllSum := int64(0) | ||||
cardDuSum := int64(0) | cardDuSum := int64(0) | ||||
@@ -138,52 +139,60 @@ func GetOverviewDuration(ctx *context.Context) { | |||||
c2NetDuration := int64(0) | c2NetDuration := int64(0) | ||||
cDCenterDuration := int64(0) | cDCenterDuration := int64(0) | ||||
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{ | |||||
Type: models.TypeCloudBrainAll, | |||||
BeginTimeUnix: int64(recordBeginTime), | |||||
EndTimeUnix: endTime.Unix(), | |||||
}) | |||||
if err != nil { | |||||
ctx.ServerError("Get cloudbrains failed:", err) | |||||
return | |||||
} | |||||
models.LoadSpecs4CloudbrainInfo(cloudbrains) | |||||
for _, cloudbrain := range cloudbrains { | |||||
cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain) | |||||
CardDurationString := repo.GetCloudbrainCardDuration(cloudbrain.Cloudbrain) | |||||
CardDuration := models.ConvertStrToDuration(CardDurationString) | |||||
// if cloudbrain.Cloudbrain.WorkServerNumber >= 1 { | |||||
// worker_server_num = cloudbrain.Cloudbrain.WorkServerNumber | |||||
// } else { | |||||
// worker_server_num = 1 | |||||
// } | |||||
// if cloudbrain.Cloudbrain.Spec == nil { | |||||
// cardNum = 1 | |||||
// } else { | |||||
// cardNum = cloudbrain.Cloudbrain.Spec.AccCardsNum | |||||
// } | |||||
// duration := cloudbrain.Duration | |||||
// duration := cloudbrain.Duration | |||||
duration := models.ConvertStrToDuration(cloudbrain.TrainJobDuration) | |||||
// CardDuration := cloudbrain.Duration * int64(worker_server_num) * int64(cardNum) | |||||
if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne { | |||||
cloudBrainOneDuration += duration | |||||
cloudBrainOneCardDuSum += CardDuration | |||||
} else if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo { | |||||
cloudBrainTwoDuration += duration | |||||
cloudBrainTwoCardDuSum += CardDuration | |||||
} else if cloudbrain.Cloudbrain.Type == models.TypeC2Net { | |||||
c2NetDuration += duration | |||||
c2NetCardDuSum += CardDuration | |||||
} else if cloudbrain.Cloudbrain.Type == models.TypeCDCenter { | |||||
cDCenterDuration += duration | |||||
cDNetCardDuSum += CardDuration | |||||
page := 1 | |||||
pagesize := 10000 | |||||
count := pagesize | |||||
// Each time a maximum of 10000 pieces of data are detected to the memory, batch processing | |||||
for count == pagesize && count != 0 { | |||||
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{ | |||||
ListOptions: models.ListOptions{ | |||||
Page: page, | |||||
PageSize: pagesize, | |||||
}, | |||||
Type: models.TypeCloudBrainAll, | |||||
BeginTimeUnix: int64(recordBeginTime), | |||||
EndTimeUnix: endTime.Unix(), | |||||
}) | |||||
if err != nil { | |||||
ctx.ServerError("Get cloudbrains failed:", err) | |||||
return | |||||
} | } | ||||
models.LoadSpecs4CloudbrainInfo(cloudbrains) | |||||
for _, cloudbrain := range cloudbrains { | |||||
cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain) | |||||
if cloudbrain.Cloudbrain.Spec != nil { | |||||
cardNum = int64(cloudbrain.Cloudbrain.Spec.AccCardsNum) | |||||
} else { | |||||
cardNum = 1 | |||||
} | |||||
if cloudbrain.Cloudbrain.WorkServerNumber >= 1 { | |||||
workServerNumber = int64(cloudbrain.Cloudbrain.WorkServerNumber) | |||||
} else { | |||||
workServerNumber = 1 | |||||
} | |||||
duration := models.ConvertStrToDuration(cloudbrain.TrainJobDuration) | |||||
CardDuration := workServerNumber * int64(cardNum) * duration | |||||
if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne { | |||||
cloudBrainOneDuration += duration | |||||
cloudBrainOneCardDuSum += CardDuration | |||||
} else if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo { | |||||
cloudBrainTwoDuration += duration | |||||
cloudBrainTwoCardDuSum += CardDuration | |||||
} else if cloudbrain.Cloudbrain.Type == models.TypeC2Net { | |||||
c2NetDuration += duration | |||||
c2NetCardDuSum += CardDuration | |||||
} else if cloudbrain.Cloudbrain.Type == models.TypeCDCenter { | |||||
cDCenterDuration += duration | |||||
cDNetCardDuSum += CardDuration | |||||
} | |||||
durationAllSum += duration | |||||
cardDuSum += CardDuration | |||||
durationAllSum += duration | |||||
cardDuSum += CardDuration | |||||
} | |||||
count = len(cloudbrains) | |||||
page += 1 | |||||
} | } | ||||
ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
"cloudBrainOneCardDuSum": cloudBrainOneCardDuSum, | "cloudBrainOneCardDuSum": cloudBrainOneCardDuSum, | ||||
@@ -246,13 +246,20 @@ func getcloudBrainCenterCodeAndCardTypeInfo(ciTasks []*models.CloudbrainInfo, be | |||||
func CloudbrainUpdateHistoryData(ctx *context.Context) { | func CloudbrainUpdateHistoryData(ctx *context.Context) { | ||||
beginTimeStr := ctx.QueryTrim("beginTime") | beginTimeStr := ctx.QueryTrim("beginTime") | ||||
endTimeStr := ctx.QueryTrim("endTime") | endTimeStr := ctx.QueryTrim("endTime") | ||||
beginTime, _ := time.ParseInLocation("2006-01-02 15:04:05", beginTimeStr, time.Local) | |||||
endTime, _ := time.ParseInLocation("2006-01-02 15:04:05", endTimeStr, time.Local) | |||||
beginTimeUnix := timeutil.TimeStamp(beginTime.Unix()) | |||||
endTimeUnix := timeutil.TimeStamp(endTime.Unix()) | |||||
var count int64 | |||||
var err error | |||||
if beginTimeStr != "" && endTimeStr != "" { | |||||
beginTime, _ := time.ParseInLocation("2006-01-02 15:04:05", beginTimeStr, time.Local) | |||||
endTime, _ := time.ParseInLocation("2006-01-02 15:04:05", endTimeStr, time.Local) | |||||
if time.Now().Before(endTime) { | |||||
endTime = time.Now() | |||||
} | |||||
beginTimeUnix := timeutil.TimeStamp(beginTime.Unix()) | |||||
endTimeUnix := timeutil.TimeStamp(endTime.Unix()) | |||||
err := models.DeleteCloudbrainDurationStatistic(beginTimeUnix, endTimeUnix) | |||||
count := UpdateDurationStatisticHistoryData(beginTime, endTime) | |||||
err = models.DeleteCloudbrainDurationStatistic(beginTimeUnix, endTimeUnix) | |||||
count = UpdateDurationStatisticHistoryData(beginTime.Add(+1*time.Hour), endTime) | |||||
} | |||||
ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
"message": 0, | "message": 0, | ||||
"count": count, | "count": count, | ||||
@@ -414,7 +414,9 @@ func Action(ctx *context.Context) { | |||||
var err error | var err error | ||||
switch ctx.Params(":action") { | switch ctx.Params(":action") { | ||||
case "watch": | case "watch": | ||||
err = models.WatchRepo(ctx.User.ID, ctx.Repo.Repository.ID, true) | |||||
err = models.WatchRepo(ctx.User.ID, ctx.Repo.Repository.ID, true, models.ReceiveAllNotification) | |||||
case "watch_but_reject": | |||||
err = models.WatchRepo(ctx.User.ID, ctx.Repo.Repository.ID, true, models.RejectAllNotification) | |||||
case "unwatch": | case "unwatch": | ||||
err = models.WatchRepo(ctx.User.ID, ctx.Repo.Repository.ID, false) | err = models.WatchRepo(ctx.User.ID, ctx.Repo.Repository.ID, false) | ||||
case "star": | case "star": | ||||
@@ -362,7 +362,7 @@ | |||||
</tr> | </tr> | ||||
<tr class="ti-no-ng-animate"> | <tr class="ti-no-ng-animate"> | ||||
<td class="ti-no-ng-animate ti-text-form-label text-width80"> | <td class="ti-no-ng-animate ti-text-form-label text-width80"> | ||||
创建人 | |||||
{{$.i18n.Tr "repo.cloudbrain_creator"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
@@ -444,6 +444,7 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w"> | <div class="text-span text-span-w"> | ||||
{{.BranchName}} | {{.BranchName}} | ||||
<span style="margin-left:1rem" class="ui label">{{SubStr .CommitID 0 10}}</span> | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -337,6 +337,7 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w" id="{{.VersionName}}-code"> | <div class="text-span text-span-w" id="{{.VersionName}}-code"> | ||||
{{.BranchName}} | {{.BranchName}} | ||||
<span style="margin-left:1rem" class="ui label">{{SubStr .CommitID 0 10}}</span> | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -410,6 +410,7 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w"> | <div class="text-span text-span-w"> | ||||
{{.BranchName}} | {{.BranchName}} | ||||
<span style="margin-left:1rem" class="ui label">{{SubStr .CommitID 0 10}}</span> | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -422,6 +422,7 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w"> | <div class="text-span text-span-w"> | ||||
{{.BranchName}} | {{.BranchName}} | ||||
<span style="margin-left:1rem" class="ui label">{{SubStr .CommitID 0 10}}</span> | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -51,6 +51,49 @@ | |||||
</div> | </div> | ||||
{{if not .IsBeingCreated}} | {{if not .IsBeingCreated}} | ||||
<div class="repo-buttons"> | <div class="repo-buttons"> | ||||
<div class="ui labeled button" tabindex="0"> | |||||
<div class="ui compact basic button" onclick="$('.__watch_btn__').dropdown('show')"> | |||||
<i class="icon fa-eye{{if not $.IsWatchingRepo}}-slash{{end}}"></i>{{if $.IsWatchingRepo}}{{$.i18n.Tr "repo.watched"}}{{else}}{{$.i18n.Tr "repo.notWatched"}}{{end}} | |||||
<i class="dropdown icon" style="margin:0 -8px 0 4px"></i> | |||||
<div class="ui dropdown floating __watch_btn__" onclick="event.stopPropagation();"> | |||||
<div class="text" style="display:none;"></div> | |||||
{{$WatchNotifyType := or $.WatchNotifyType 0}} | |||||
<div class="menu" style="margin-left:-64px;"> | |||||
<div class="item {{if not $.IsWatchingRepo}}active selected{{end}}"> | |||||
<form method="post" style="margin: 0;" action="{{$.RepoLink}}/action/unwatch?redirect_to={{$.Link}}"> | |||||
{{$.CsrfTokenHtml}} | |||||
<button type="submit" style="border:none;background:transparent;width:100%;text-align:left;font-weight:inherit;cursor:pointer;"> | |||||
<i class="check icon" style="{{if $.IsWatchingRepo}}opacity:0{{end}}"></i> | |||||
{{$.i18n.Tr "repo.un_watch"}} | |||||
</button> | |||||
</form> | |||||
</div> | |||||
<div class="item {{if and $.IsWatchingRepo (eq $WatchNotifyType 9)}}active selected{{end}}"> | |||||
<form method="post" style="margin: 0;" action="{{$.RepoLink}}/action/watch?redirect_to={{$.Link}}"> | |||||
{{$.CsrfTokenHtml}} | |||||
<button type="submit" style="border:none;background:transparent;width:100%;text-align:left;font-weight:inherit;cursor:pointer;"> | |||||
<i class="check icon" style="{{if not (and $.IsWatchingRepo (eq $WatchNotifyType 9))}}opacity:0{{end}}"></i> | |||||
{{$.i18n.Tr "repo.watch_all"}} | |||||
</button> | |||||
</form> | |||||
</div> | |||||
<div class="item {{if and $.IsWatchingRepo (eq $WatchNotifyType 0)}}active selected{{end}}"> | |||||
<form method="post" style="margin: 0;" action="{{$.RepoLink}}/action/watch_but_reject?redirect_to={{$.Link}}"> | |||||
{{$.CsrfTokenHtml}} | |||||
<button type="submit" style="border:none;background:transparent;width:100%;text-align:left;font-weight:inherit;cursor:pointer;"> | |||||
<i class="check icon" style="{{if not (and $.IsWatchingRepo (eq $WatchNotifyType 0))}}opacity:0{{end}}"></i> | |||||
{{$.i18n.Tr "repo.watch_no_notify"}} | |||||
</button> | |||||
</form> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<a class="ui basic label" href="{{.Link}}/watchers"> | |||||
{{.NumWatches}} | |||||
</a> | |||||
</div> | |||||
<!-- | |||||
<form method="post" style="margin: 0;" action="{{$.RepoLink}}/action/{{if $.IsWatchingRepo}}un{{end}}watch?redirect_to={{$.Link}}"> | <form method="post" style="margin: 0;" action="{{$.RepoLink}}/action/{{if $.IsWatchingRepo}}un{{end}}watch?redirect_to={{$.Link}}"> | ||||
{{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
<div class="ui labeled button" tabindex="0"> | <div class="ui labeled button" tabindex="0"> | ||||
@@ -61,7 +104,7 @@ | |||||
{{.NumWatches}} | {{.NumWatches}} | ||||
</a> | </a> | ||||
</div> | </div> | ||||
</form> | |||||
</form> --> | |||||
<form method="post" style="margin: 0;" action="{{$.RepoLink}}/action/{{if $.IsStaringRepo}}un{{end}}star?redirect_to={{$.Link}}"> | <form method="post" style="margin: 0;" action="{{$.RepoLink}}/action/{{if $.IsStaringRepo}}un{{end}}star?redirect_to={{$.Link}}"> | ||||
{{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
<div class="ui labeled button" tabindex="0"> | <div class="ui labeled button" tabindex="0"> | ||||
@@ -388,6 +388,7 @@ td, th { | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w"> | <div class="text-span text-span-w"> | ||||
{{.BranchName}} | {{.BranchName}} | ||||
<span style="margin-left:1rem" class="ui label">{{SubStr .CommitID 0 10}}</span> | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -442,6 +442,7 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w"> | <div class="text-span text-span-w"> | ||||
{{.BranchName}} | {{.BranchName}} | ||||
<span style="margin-left:1rem" class="ui label">{{SubStr .CommitID 0 10}}</span> | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -833,6 +833,7 @@ | |||||
$(`[vfield="Description"]`).text(res['Description'] || '--'); | $(`[vfield="Description"]`).text(res['Description'] || '--'); | ||||
$(`[vfield="Parameters"]`).text(res['Parameters'] || '--'); | $(`[vfield="Parameters"]`).text(res['Parameters'] || '--'); | ||||
$(`[vfield="BranchName"]`).html(res['BranchName'] + '<span style="margin-left:1rem" class="ui label">' + res['CommitID'].slice(0, 10) + '</span>'); | |||||
var imageName = res['Image'] || res['EngineName']; | var imageName = res['Image'] || res['EngineName']; | ||||
$(`[vimagetitle="Image"] span`).hide(); | $(`[vimagetitle="Image"] span`).hide(); | ||||
@@ -200,7 +200,7 @@ const en = { | |||||
local: 'Local', | local: 'Local', | ||||
online: 'Online', | online: 'Online', | ||||
createModel: 'Create Model', | createModel: 'Create Model', | ||||
importLocalModel: 'Import Lacal Model', | |||||
importLocalModel: 'Import Local Model', | |||||
importOnlineModel: 'Import Online Model', | importOnlineModel: 'Import Online Model', | ||||
modifyModelInfo: 'Modify model information', | modifyModelInfo: 'Modify model information', | ||||
addModelFiles: 'Add model files', | addModelFiles: 'Add model files', | ||||