# Conflicts: # models/cloudbrain.gofix-2417
| @@ -56,6 +56,7 @@ coverage.all | |||||
| /custom/conf/app.ini | /custom/conf/app.ini | ||||
| !/custom/conf/app.ini.sample | !/custom/conf/app.ini.sample | ||||
| /custom/public/kanban | /custom/public/kanban | ||||
| /custom/public/annual-report | |||||
| /data | /data | ||||
| /indexers | /indexers | ||||
| /log | /log | ||||
| @@ -0,0 +1 @@ | |||||
| /* placeholder-home.css */ | |||||
| @@ -0,0 +1 @@ | |||||
| /* placeholder.css */ | |||||
| @@ -0,0 +1,45 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||||
| <svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | |||||
| viewBox="0 0 160 64" style="enable-background:new 0 0 160 64;" xml:space="preserve"> | |||||
| <style type="text/css"> | |||||
| .st0{fill:#FFFFFF;} | |||||
| .st1{display:none;fill:#FFFFFF;} | |||||
| </style> | |||||
| <g> | |||||
| <path class="st0" d="M105.3,33.3H87.1c-2.6,0.1-4,1.3-4,3.8v8.3c0.1,2.2,1.5,3.3,4,3.5h18c2.5-0.1,3.8-1.3,3.9-3.6v-8.2 | |||||
| c0.1-2-1.4-3.6-3.4-3.8C105.6,33.3,105.4,33.3,105.3,33.3z M104.6,43.9c-0.1,1-0.7,1.5-1.9,1.7H89.3c-1.3-0.3-1.8-0.7-1.9-1.7v-5.4 | |||||
| c0-1,0.8-1.9,1.8-1.9c0,0,0.1,0,0.1,0h13.1c1.1,0,2,0.8,2.1,2L104.6,43.9z"/> | |||||
| <path class="st0" d="M81,25.3v-4.7c0-1.1,0.9-2.1,2.1-2.1h19c1.4-0.1,2.1,0.5,2.1,1.8v3.3c0,1.1-0.7,1.7-1.9,1.7H82.8v3.2H105 | |||||
| c2.3,0,3.6-1.1,3.6-3.2v-6.4c0.2-1.8-1.1-3.4-2.8-3.6c-0.3,0-0.5,0-0.8,0h-9.7v-2.6h-4.6v2.6H80.3c-2.6,0-3.9,1.2-3.9,3.9v12.3 | |||||
| c0,5.8-0.9,11.6-2.6,17.1l4.3,0.8c1.8-5.5,2.7-11.3,2.8-17.1v-7.2H81z"/> | |||||
| <path class="st0" d="M116.2,30.4l4.4,2.4c2.6-1.9,4.4-4.6,5.1-7.6h7.8v-3.2h-7.1c0.2-1.3,0.3-2.6,0.3-3.9h6.6v-3.2h-12.3v-2h-4.6 | |||||
| V18h5.8c0,1.3-0.1,2.6-0.3,3.9h-6.7v3.3h5.8C120.4,27.5,118.6,29.4,116.2,30.4z"/> | |||||
| <path class="st0" d="M126.5,26.7c1.2,1.8,2.1,3.8,2.9,5.8h4.9c-0.8-2-1.8-4-2.9-5.8H126.5z"/> | |||||
| <path class="st0" d="M145.4,33.5h-24.7c-2.4,0.3-3.8,1.4-3.9,3.5v6.2h28.4v1.3c0,1.1-0.7,1.7-2.1,1.7h-19.7c-1.3,0-1.9-0.5-1.9-1.5 | |||||
| h-4.5V46c0,1.9,1.6,3.5,3.5,3.6h25.1c2.6-0.1,4-1.3,4-3.5v-9C149.2,35,147.5,33.5,145.4,33.5z M145,39.9h-23.7v-1.1 | |||||
| c0-1,0.8-1.9,1.8-1.9c0,0,0.1,0,0.1,0H143c1.3,0,2.1,0.7,2.1,1.9L145,39.9z"/> | |||||
| <path class="st0" d="M147.3,14h-8.2c-2.2,0.1-3.5,1.1-3.8,2.9v11.7c0.1,1.6,1.4,2.9,3.1,2.9h8.7c1.9-0.1,3.1-1.1,3.1-2.9V17 | |||||
| C150.4,15.4,149.4,14.3,147.3,14z M146,26.2c0,1.4-0.7,2.1-1.9,2.1h-2.4c-1,0-1.8-0.8-1.8-1.8c0-0.1,0-0.1,0-0.2v-7 | |||||
| c0-1,0.8-1.9,1.8-1.9c0,0,0.1,0,0.1,0h2c1.1,0,2.1,0.8,2.1,1.9l0,0L146,26.2z"/> | |||||
| </g> | |||||
| <path class="st1" d="M67.2,44.1V20c0-2.6-1.4-5.1-3.7-6.4l-20.9-12c-2.3-1.3-5.1-1.3-7.4,0l-20.9,12c-2.3,1.3-3.7,3.8-3.7,6.4v24.1 | |||||
| c0,2.6,1.4,5.1,3.7,6.4l20.9,12c2.3,1.3,5.1,1.3,7.4,0l20.9-12C65.8,49.2,67.2,46.7,67.2,44.1z"/> | |||||
| <path class="st0" d="M61.9,15.4L42,3.9c-1.9-1.1-4.3-1.1-6.2,0L15.9,15.4c-1.9,1.1-3.1,3.2-3.1,5.4v22.9c0,2.2,1.2,4.3,3.1,5.4 | |||||
| l3.8,2c0.8,0.4,0.8,1,0.8,1.9c0,0,0,0.1,0,0.1c0.1,1.6,1.8,3.5,4.2,3.5c2.3,0,4.3-1.9,4.4-4.2c0-1.6-0.8-3.1-2.3-3.9 | |||||
| c-0.6-0.3-1.7-0.5-2.9-0.4c-0.9,0.1-1,0.6-2.8-0.5l-2.8-1.6c-0.8-0.5-1.7-1.3-1.6-2.3V22c0-1.8,0.8-2.8,2.1-3.5L37,7.8 | |||||
| C38.1,7,40.2,7.2,41.5,8l16.4,9.5c2.9,1.6,3,3,3,4v19.7c0,2.3-1.5,4-2.3,4.5l-15.1,8.5C42.8,54.5,42,54,42,53.3l0-2.5 | |||||
| c0-0.1,0-0.3,0-0.4v-2.5c0-0.8,0.4-1.6,1.1-2l8.8-5.7c1.4-0.9,2-1.7,2-3.8L53.7,28c0-1,0.4-1.9,1.2-2.5c1.5-1.3,2-3.7,0.8-5.6 | |||||
| c-0.8-1.4-2.4-2.2-4-2c-1.6,0.1-2.8,1-3.5,2.4c-0.5,1-0.6,2.2-0.3,3.3c0.2,0.8,0.7,1.4,1.3,2c0.7,0.6,1.2,1.5,1.2,2.5v7.2 | |||||
| c0,1.1-0.5,2.1-1.5,2.7l-5.5,2.8c-0.7,0.5-1.6,0-1.6-0.8l-0.2-17.1c0-1,0.5-1.9,1.2-2.5c0.4-0.3,0.7-0.8,1-1.3 | |||||
| c0.7-1.3,0.7-2.9-0.1-4.3c-0.8-1.4-2.5-2.2-4.1-2.1c-2.9,0.3-4.6,3.1-3.8,5.7c0.2,0.8,0.7,1.4,1.3,2c0.7,0.6,1.2,1.5,1.2,2.5v9.9 | |||||
| c0,0.8-0.8,1.3-1.5,0.9L34,32.5c-0.7-0.4-1.2-1.2-1.2-2.1v-2.2c0-1,0.4-1.9,1.2-2.5c1.5-1.3,2-3.7,0.8-5.6c-0.8-1.3-2.4-2.1-4-2 | |||||
| c-2.9,0.2-4.7,3.1-3.8,5.7c0.2,0.8,0.7,1.5,1.3,2c0.7,0.6,1.2,1.5,1.2,2.5l0,3.5c0,1,0,2,1.6,3.1l5.5,3c0.7,0.4,1.2,1.2,1.2,2.1v4.5 | |||||
| c0,0.8-0.8,1.3-1.5,0.9L26.6,41c-0.7-0.4-1.2-1.2-1.2-2.1l-0.2-6.1c0-1,0.4-1.8,1.1-2.5c1.4-1.3,1.9-3.4,0.9-5.3 | |||||
| c-0.8-1.4-2.4-2.3-4-2.2c-2.9,0.2-4.6,3-3.8,5.6c0.2,0.7,0.7,1.4,1.2,1.9c0.7,0.6,1.1,1.5,1.1,2.5l-0.5,6.8c0,1.9,0.3,2.8,1.8,3.5 | |||||
| l11.8,6.3c1,0.6,1.6,1.7,1.6,2.8l0,3.1c0,3.1,4.3,5.7,8.7,3.3l16.4-9.8c1.9-1,3.2-3,3.4-5.2V20.7C65,18.5,63.8,16.5,61.9,15.4z | |||||
| M24.2,50.7c1.1,0,2,0.9,2,2c0,1.1-0.9,2-2,2c-1.1,0-2-0.9-2-2C22.2,51.7,23.1,50.7,24.2,50.7z M48.7,21.5c0-1.1,0.9-2,2-2 | |||||
| s2,0.9,2,2c0,1.1-0.9,2-2,2S48.7,22.6,48.7,21.5z M30.6,23.8c-1.1,0-2-0.9-2-2s0.9-2,2-2c1.1,0,2,0.9,2,2S31.8,23.8,30.6,23.8z | |||||
| M22.2,26.4c0-1.1,0.9-2,2-2c1.1,0,2,0.9,2,2s-0.9,2-2,2C23.1,28.4,22.2,27.5,22.2,26.4z M40,17.9c-1.1,0-2-0.9-2-2c0-1.1,0.9-2,2-2 | |||||
| c1.1,0,2,0.9,2,2C42,17,41.1,17.9,40,17.9z"/> | |||||
| </svg> | |||||
| @@ -0,0 +1 @@ | |||||
| /* placeholder-home.js */ | |||||
| @@ -0,0 +1 @@ | |||||
| /* placeholder.js */ | |||||
| @@ -30,6 +30,7 @@ const ( | |||||
| TypeCDCenter //成都智算中心 | TypeCDCenter //成都智算中心 | ||||
| TypeCloudBrainAll = -1 | TypeCloudBrainAll = -1 | ||||
| AccCardsNumAll = -1 | |||||
| ) | ) | ||||
| const ( | const ( | ||||
| @@ -139,6 +140,10 @@ const ( | |||||
| GCU = "GCU" | GCU = "GCU" | ||||
| ) | ) | ||||
| const ( | |||||
| AIModelPath = "aimodels/" | |||||
| ) | |||||
| type Cloudbrain struct { | type Cloudbrain struct { | ||||
| ID int64 `xorm:"pk autoincr"` | ID int64 `xorm:"pk autoincr"` | ||||
| JobID string `xorm:"INDEX NOT NULL"` | JobID string `xorm:"INDEX NOT NULL"` | ||||
| @@ -2657,6 +2662,7 @@ type DatasetInfo struct { | |||||
| DataLocalPath string | DataLocalPath string | ||||
| Name string | Name string | ||||
| FullName string | FullName string | ||||
| Type int | |||||
| Size int | Size int | ||||
| Type int | Type int | ||||
| } | } | ||||
| @@ -2720,8 +2726,8 @@ func GetDatasetInfo(uuidStr string, grampusType ...string) (map[string]DatasetIn | |||||
| DataLocalPath: dataLocalPath, | DataLocalPath: dataLocalPath, | ||||
| Name: fileName, | Name: fileName, | ||||
| FullName: attach.Name, | FullName: attach.Name, | ||||
| Size: int(attach.Size), | |||||
| Type: attach.Type, | Type: attach.Type, | ||||
| Size: int(attach.Size), | |||||
| } | } | ||||
| if i == 0 { | if i == 0 { | ||||
| datasetNames = attach.Name | datasetNames = attach.Name | ||||
| @@ -1,6 +1,7 @@ | |||||
| package models | package models | ||||
| import ( | import ( | ||||
| "encoding/json" | |||||
| "fmt" | "fmt" | ||||
| "time" | "time" | ||||
| @@ -450,19 +451,42 @@ func QueryUserLoginInfo(userIds []int64) []*UserLoginLog { | |||||
| return loginList | return loginList | ||||
| } | } | ||||
| var WeekBonusData = make(map[int64][]int) | |||||
| func QueryUserAnnualReport(userId int64) *UserSummaryCurrentYear { | func QueryUserAnnualReport(userId int64) *UserSummaryCurrentYear { | ||||
| statictisSess := xStatistic.NewSession() | statictisSess := xStatistic.NewSession() | ||||
| defer statictisSess.Close() | defer statictisSess.Close() | ||||
| log.Info("userId=" + fmt.Sprint(userId)) | log.Info("userId=" + fmt.Sprint(userId)) | ||||
| if len(WeekBonusData) == 0 { | |||||
| WeekBonusData = getBonusWeekDataMap() | |||||
| } | |||||
| reList := make([]*UserSummaryCurrentYear, 0) | reList := make([]*UserSummaryCurrentYear, 0) | ||||
| err := statictisSess.Select("*").Table(new(UserSummaryCurrentYear)).Where("id=" + fmt.Sprint(userId)).Find(&reList) | err := statictisSess.Select("*").Table(new(UserSummaryCurrentYear)).Where("id=" + fmt.Sprint(userId)).Find(&reList) | ||||
| if err == nil { | if err == nil { | ||||
| if len(reList) > 0 { | if len(reList) > 0 { | ||||
| record, ok := WeekBonusData[userId] | |||||
| if ok { | |||||
| bonusInfo := make(map[string]int) | |||||
| bonusInfo["order"] = record[0] | |||||
| bonusInfo["money"] = record[1] | |||||
| bonusInfo["week"] = record[2] | |||||
| bonusInfo["num"] = record[3] | |||||
| bonusInfoJson, _ := json.Marshal(bonusInfo) | |||||
| reList[0].WeekBonusData = string(bonusInfoJson) | |||||
| } | |||||
| return reList[0] | return reList[0] | ||||
| } | } | ||||
| } else { | } else { | ||||
| log.Info("error:=" + err.Error()) | log.Info("error:=" + err.Error()) | ||||
| } | } | ||||
| dbuser, err := GetUserByID(userId) | |||||
| if err == nil { | |||||
| return &UserSummaryCurrentYear{ | |||||
| ID: dbuser.ID, | |||||
| Name: dbuser.Name, | |||||
| RegistDate: dbuser.CreatedUnix, | |||||
| } | |||||
| } | |||||
| return nil | return nil | ||||
| } | } | ||||
| @@ -880,6 +880,76 @@ func isUserYearData(tableName string) bool { | |||||
| return false | return false | ||||
| } | } | ||||
| func getBonusWeekDataMap() map[int64][]int { | |||||
| bonusMap := make(map[int64][]int) | |||||
| url := setting.RecommentRepoAddr + "bonus/weekdata/record.txt" | |||||
| content, err := GetContentFromPromote(url) | |||||
| if err == nil { | |||||
| filenames := strings.Split(content, "\n") | |||||
| for i := 0; i < len(filenames); i++ { | |||||
| if strings.HasSuffix(filenames[i], "\r") { | |||||
| filenames[i] = filenames[i][0 : len(filenames[i])-len("\r")] | |||||
| } | |||||
| url = setting.RecommentRepoAddr + "bonus/weekdata/" + filenames[i] | |||||
| csvContent, err1 := GetContentFromPromote(url) | |||||
| if err1 == nil { | |||||
| //read csv | |||||
| lines := strings.Split(csvContent, "\n") | |||||
| for j := 1; j < len(lines); j++ { | |||||
| if strings.HasSuffix(lines[j], "\r") { | |||||
| lines[j] = lines[j][0 : len(lines[j])-len("\r")] | |||||
| } | |||||
| log.Info("aLine=" + lines[j]) | |||||
| aLine := strings.Split(lines[j], ",") | |||||
| if len(aLine) < 4 { | |||||
| continue | |||||
| } | |||||
| userId := getInt64Value(aLine[0]) | |||||
| order := getIntValue(aLine[2]) | |||||
| money := getIntValue(aLine[3]) | |||||
| week, num := getWeekAndNum(filenames[i]) | |||||
| //log.Info("userId=" + fmt.Sprint(userId) + " order=" + fmt.Sprint(order) + " money=" + fmt.Sprint(money) + " week=" + fmt.Sprint(week) + " num=" + fmt.Sprint(num)) | |||||
| //email := lines[2] | |||||
| record, ok := bonusMap[userId] | |||||
| if !ok { | |||||
| record = make([]int, 4) | |||||
| record[0] = order | |||||
| record[1] = money | |||||
| record[2] = week | |||||
| record[3] = num | |||||
| bonusMap[userId] = record | |||||
| } else { | |||||
| if record[0] > order { | |||||
| record[0] = order | |||||
| record[1] = money | |||||
| record[2] = week | |||||
| record[3] = num | |||||
| } else { | |||||
| if record[0] == order && record[1] < money { | |||||
| record[1] = money | |||||
| record[2] = week | |||||
| record[3] = num | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| return bonusMap | |||||
| } | |||||
| func getWeekAndNum(name string) (int, int) { | |||||
| name = name[0 : len(name)-4] | |||||
| tmp := strings.Split(name, "_") | |||||
| if len(tmp) == 2 { | |||||
| week := getIntValue(tmp[0]) | |||||
| num := getIntValue(tmp[1]) | |||||
| return week, num | |||||
| } | |||||
| return 0, 0 | |||||
| } | |||||
| func getBonusMap() map[string]map[string]int { | func getBonusMap() map[string]map[string]int { | ||||
| bonusMap := make(map[string]map[string]int) | bonusMap := make(map[string]map[string]int) | ||||
| url := setting.RecommentRepoAddr + "bonus/record.txt" | url := setting.RecommentRepoAddr + "bonus/record.txt" | ||||
| @@ -887,12 +957,18 @@ func getBonusMap() map[string]map[string]int { | |||||
| if err == nil { | if err == nil { | ||||
| filenames := strings.Split(content, "\n") | filenames := strings.Split(content, "\n") | ||||
| for i := 0; i < len(filenames); i++ { | for i := 0; i < len(filenames); i++ { | ||||
| if strings.HasSuffix(filenames[i], "\r") { | |||||
| filenames[i] = filenames[i][0 : len(filenames[i])-len("\r")] | |||||
| } | |||||
| url = setting.RecommentRepoAddr + "bonus/" + filenames[i] | url = setting.RecommentRepoAddr + "bonus/" + filenames[i] | ||||
| csvContent, err1 := GetContentFromPromote(url) | csvContent, err1 := GetContentFromPromote(url) | ||||
| if err1 == nil { | if err1 == nil { | ||||
| //read csv | //read csv | ||||
| lines := strings.Split(csvContent, "\n") | lines := strings.Split(csvContent, "\n") | ||||
| for j := 1; j < len(lines); j++ { | for j := 1; j < len(lines); j++ { | ||||
| if strings.HasSuffix(lines[j], "\r") { | |||||
| lines[j] = lines[j][0 : len(lines[j])-len("\r")] | |||||
| } | |||||
| aLine := strings.Split(lines[j], ",") | aLine := strings.Split(lines[j], ",") | ||||
| if len(aLine) < 7 { | if len(aLine) < 7 { | ||||
| continue | continue | ||||
| @@ -923,6 +999,14 @@ func getIntValue(val string) int { | |||||
| return 0 | return 0 | ||||
| } | } | ||||
| func getInt64Value(val string) int64 { | |||||
| i, err := strconv.ParseInt(val, 10, 64) | |||||
| if err == nil { | |||||
| return i | |||||
| } | |||||
| return 0 | |||||
| } | |||||
| func getPlayARoll(bonusMap map[string]map[string]int, userName string, scoreMap map[string]float64) string { | func getPlayARoll(bonusMap map[string]map[string]int, userName string, scoreMap map[string]float64) string { | ||||
| bonusInfo := make(map[string]string) | bonusInfo := make(map[string]string) | ||||
| record, ok := bonusMap[userName] | record, ok := bonusMap[userName] | ||||
| @@ -960,18 +1044,14 @@ func getCloudBrainInfo(dateRecordAll UserBusinessAnalysisAll, CloudBrainTaskItem | |||||
| } | } | ||||
| cloudBrainInfo["inference_task_num"] = fmt.Sprint(dateRecordAll.NpuInferenceJob + CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_GpuInferenceJob"]) | cloudBrainInfo["inference_task_num"] = fmt.Sprint(dateRecordAll.NpuInferenceJob + CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_GpuInferenceJob"]) | ||||
| cloudBrainInfo["card_runtime"] = fmt.Sprint(dateRecordAll.CloudBrainRunTime) | cloudBrainInfo["card_runtime"] = fmt.Sprint(dateRecordAll.CloudBrainRunTime) | ||||
| if dateRecordAll.CloudBrainRunTime >= 100 { | |||||
| runtime = float64(dateRecordAll.CloudBrainRunTime) / float64(100) | |||||
| } | |||||
| cloudBrainInfo["card_runtime_money"] = fmt.Sprint(dateRecordAll.CloudBrainRunTime * 5) | cloudBrainInfo["card_runtime_money"] = fmt.Sprint(dateRecordAll.CloudBrainRunTime * 5) | ||||
| cloudBrainInfo["CloudBrainOne"] = fmt.Sprint(CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_CloudBrainOne"]) | cloudBrainInfo["CloudBrainOne"] = fmt.Sprint(CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_CloudBrainOne"]) | ||||
| cloudBrainInfo["CloudBrainTwo"] = fmt.Sprint(CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_CloudBrainTwo"]) | cloudBrainInfo["CloudBrainTwo"] = fmt.Sprint(CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_CloudBrainTwo"]) | ||||
| cloudBrainInfo["C2Net"] = fmt.Sprint(CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_C2Net"]) | cloudBrainInfo["C2Net"] = fmt.Sprint(CloudBrainTaskItemMap[fmt.Sprint(dateRecordAll.ID)+"_C2Net"]) | ||||
| cloudBrainInfoJson, _ := json.Marshal(cloudBrainInfo) | cloudBrainInfoJson, _ := json.Marshal(cloudBrainInfo) | ||||
| scoreMap["trainscore"] = trainscore | scoreMap["trainscore"] = trainscore | ||||
| scoreMap["debugscore"] = debugscore | scoreMap["debugscore"] = debugscore | ||||
| scoreMap["runtime"] = runtime | |||||
| return string(cloudBrainInfoJson) | return string(cloudBrainInfoJson) | ||||
| } else { | } else { | ||||
| scoreMap["trainscore"] = trainscore | scoreMap["trainscore"] = trainscore | ||||
| @@ -2416,7 +2496,7 @@ func queryCloudBrainTask(start_unix int64, end_unix int64) (map[int64]int, map[s | |||||
| var indexTotal int64 | var indexTotal int64 | ||||
| indexTotal = 0 | indexTotal = 0 | ||||
| for { | for { | ||||
| sess.Select("id,job_type,user_id,duration,train_job_duration,type").Table("cloudbrain").Unscoped().Where(cond).OrderBy("id asc").Limit(PAGE_SIZE, int(indexTotal)) | |||||
| sess.Select("id,job_type,user_id,duration,train_job_duration,type,compute_resource").Table("cloudbrain").Unscoped().Where(cond).OrderBy("id asc").Limit(PAGE_SIZE, int(indexTotal)) | |||||
| cloudTaskList := make([]*Cloudbrain, 0) | cloudTaskList := make([]*Cloudbrain, 0) | ||||
| sess.Find(&cloudTaskList) | sess.Find(&cloudTaskList) | ||||
| log.Info("query cloudbrain size=" + fmt.Sprint(len(cloudTaskList))) | log.Info("query cloudbrain size=" + fmt.Sprint(len(cloudTaskList))) | ||||
| @@ -2449,7 +2529,7 @@ func queryCloudBrainTask(start_unix int64, end_unix int64) (map[int64]int, map[s | |||||
| } else { | } else { | ||||
| setMapKey("GpuDebugJob", cloudTaskRecord.UserID, 1, resultItemMap) | setMapKey("GpuDebugJob", cloudTaskRecord.UserID, 1, resultItemMap) | ||||
| } | } | ||||
| } else if cloudTaskRecord.Type == 2 { | |||||
| } else if cloudTaskRecord.Type == 2 || cloudTaskRecord.Type == 3 { | |||||
| setMapKey("C2Net", cloudTaskRecord.UserID, 1, resultItemMap) | setMapKey("C2Net", cloudTaskRecord.UserID, 1, resultItemMap) | ||||
| if cloudTaskRecord.ComputeResource == NPUResource { | if cloudTaskRecord.ComputeResource == NPUResource { | ||||
| if cloudTaskRecord.JobType == "TRAIN" { | if cloudTaskRecord.JobType == "TRAIN" { | ||||
| @@ -18,9 +18,9 @@ type UserSummaryCurrentYear struct { | |||||
| CodeInfo string `xorm:"varchar(500)"` //代码提交次数,提交总代码行数,最晚的提交时间 | CodeInfo string `xorm:"varchar(500)"` //代码提交次数,提交总代码行数,最晚的提交时间 | ||||
| CloudBrainInfo string `xorm:"varchar(1000)"` //,创建了XX 个云脑任务,调试任务XX 个,训练任务XX 个,推理任务XX 个,累计运行了XXXX 卡时,累计节省xxxxx 元 | CloudBrainInfo string `xorm:"varchar(1000)"` //,创建了XX 个云脑任务,调试任务XX 个,训练任务XX 个,推理任务XX 个,累计运行了XXXX 卡时,累计节省xxxxx 元 | ||||
| //这些免费的算力资源分别有,XX% 来自鹏城云脑1,XX% 来自鹏城云脑2,XX% 来自智算网络 | //这些免费的算力资源分别有,XX% 来自鹏城云脑1,XX% 来自鹏城云脑2,XX% 来自智算网络 | ||||
| PlayARoll string `xorm:"varchar(500)"` //你参加了XX 次“我为开源打榜狂”活动,累计上榜XX 次,总共获得了社区XXX 元的激励 | |||||
| Label string `xorm:"varchar(500)"` | |||||
| PlayARoll string `xorm:"varchar(500)"` //你参加了XX 次“我为开源打榜狂”活动,累计上榜XX 次,总共获得了社区XXX 元的激励 | |||||
| WeekBonusData string `xorm:"-"` | |||||
| Label string `xorm:"varchar(500)"` | |||||
| } | } | ||||
| type UserBusinessAnalysisCurrentYear struct { | type UserBusinessAnalysisCurrentYear struct { | ||||
| @@ -81,7 +81,12 @@ func Toggle(options *ToggleOptions) macaron.Handler { | |||||
| // Redirect to dashboard if user tries to visit any non-login page. | // Redirect to dashboard if user tries to visit any non-login page. | ||||
| if options.SignOutRequired && ctx.IsSigned && ctx.Req.URL.RequestURI() != "/" { | if options.SignOutRequired && ctx.IsSigned && ctx.Req.URL.RequestURI() != "/" { | ||||
| ctx.Redirect(setting.AppSubURL + "/") | |||||
| redirectTo := ctx.Query("redirect_to") | |||||
| if len(redirectTo) > 0 { | |||||
| ctx.Redirect(redirectTo) | |||||
| } else { | |||||
| ctx.Redirect(setting.AppSubURL + "/") | |||||
| } | |||||
| return | return | ||||
| } | } | ||||
| @@ -391,3 +391,19 @@ func GetPartInfos(objectName string, uploadID string) (string, error) { | |||||
| return chunks, nil | return chunks, nil | ||||
| } | } | ||||
| func IsObjectExist4Minio(bucket, objectName string) (bool, error) { | |||||
| _, core, err := getClients() | |||||
| if err != nil { | |||||
| log.Error("getClients failed:", err.Error()) | |||||
| return false, err | |||||
| } | |||||
| _, err = core.StatObject(bucket, objectName, miniov6.StatObjectOptions{}) | |||||
| if err != nil { | |||||
| log.Error("GetObjectMetadata error.%v", err) | |||||
| return false, err | |||||
| } | |||||
| return true, nil | |||||
| } | |||||
| @@ -614,7 +614,7 @@ func ObsCreateObject(path string) error { | |||||
| return nil | return nil | ||||
| } | } | ||||
| func GetObsLogFileName(prefix string) (string, error) { | |||||
| func GetObsLogFileName(prefix string) ([]FileInfo, error) { | |||||
| input := &obs.ListObjectsInput{} | input := &obs.ListObjectsInput{} | ||||
| input.Bucket = setting.Bucket | input.Bucket = setting.Bucket | ||||
| input.Prefix = prefix | input.Prefix = prefix | ||||
| @@ -622,10 +622,39 @@ func GetObsLogFileName(prefix string) (string, error) { | |||||
| output, err := ObsCli.ListObjects(input) | output, err := ObsCli.ListObjects(input) | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("PutObject failed:", err.Error()) | log.Error("PutObject failed:", err.Error()) | ||||
| return "", err | |||||
| return nil, err | |||||
| } | } | ||||
| if output == nil || len(output.Contents) == 0 { | if output == nil || len(output.Contents) == 0 { | ||||
| return "", errors.New("obs log files not exist") | |||||
| return nil, errors.New("obs log files not exist") | |||||
| } | |||||
| fileInfos := make([]FileInfo, 0) | |||||
| for _, val := range output.Contents { | |||||
| //result[num] = c.Key | |||||
| if strings.HasSuffix(val.Key, ".log") { | |||||
| log.Info("log fileName=" + val.Key) | |||||
| fileInfo := FileInfo{ | |||||
| ModTime: val.LastModified.Local().Format("2006-01-02 15:04:05"), | |||||
| FileName: val.Key[len(prefix)-3:], //加上 job | |||||
| Size: val.Size, | |||||
| IsDir: false, | |||||
| ParenDir: prefix[0 : len(prefix)-3], | |||||
| } | |||||
| fileInfos = append(fileInfos, fileInfo) | |||||
| } | |||||
| } | |||||
| return fileInfos, nil | |||||
| } | |||||
| func IsObjectExist4Obs(bucket, key string) (bool, error) { | |||||
| _, err := ObsCli.GetObjectMetadata(&obs.GetObjectMetadataInput{ | |||||
| Bucket: bucket, | |||||
| Key: key, | |||||
| }) | |||||
| if err != nil { | |||||
| log.Error("GetObjectMetadata error.%v", err) | |||||
| return false, err | |||||
| } | } | ||||
| return output.Contents[0].Key, nil | |||||
| return true, nil | |||||
| } | } | ||||
| @@ -106,7 +106,8 @@ func NewFuncMap() []template.FuncMap { | |||||
| "SafeJS": SafeJS, | "SafeJS": SafeJS, | ||||
| "Str2html": Str2html, | "Str2html": Str2html, | ||||
| "subOne": subOne, | "subOne": subOne, | ||||
| "addOne": addOne, | |||||
| "addOne": addOne, | |||||
| "TimeStampNow": timeutil.TimeStampNow, | |||||
| "TimeSince": timeutil.TimeSince, | "TimeSince": timeutil.TimeSince, | ||||
| "TimeSinceUnix": timeutil.TimeSinceUnix, | "TimeSinceUnix": timeutil.TimeSinceUnix, | ||||
| "TimeSinceUnix1": timeutil.TimeSinceUnix1, | "TimeSinceUnix1": timeutil.TimeSinceUnix1, | ||||
| @@ -367,6 +368,7 @@ func NewTextFuncMap() []texttmpl.FuncMap { | |||||
| "AppDomain": func() string { | "AppDomain": func() string { | ||||
| return setting.Domain | return setting.Domain | ||||
| }, | }, | ||||
| "TimeStampNow": timeutil.TimeStampNow, | |||||
| "TimeSince": timeutil.TimeSince, | "TimeSince": timeutil.TimeSince, | ||||
| "TimeSinceUnix": timeutil.TimeSinceUnix, | "TimeSinceUnix": timeutil.TimeSinceUnix, | ||||
| "TimeSinceUnix1": timeutil.TimeSinceUnix1, | "TimeSinceUnix1": timeutil.TimeSinceUnix1, | ||||
| @@ -1099,8 +1099,8 @@ image_delete_fail=Failed to delete image, please try again later. | |||||
| image_overwrite=You had submitted the same name image before, are you sure to overwrite the original image? | image_overwrite=You had submitted the same name image before, are you sure to overwrite the original image? | ||||
| download=Download | download=Download | ||||
| score=Score | score=Score | ||||
| wait_count_start = Your current queue position is | |||||
| wait_count_end = | |||||
| wait_count_start = Your current queue position is | |||||
| wait_count_end = | |||||
| file_limit_100 = Display up to 100 files or folders in a single directory | file_limit_100 = Display up to 100 files or folders in a single directory | ||||
| images.name = Image Tag | images.name = Image Tag | ||||
| images.name_placerholder = Please enter the image name | images.name_placerholder = Please enter the image name | ||||
| @@ -1360,6 +1360,7 @@ modelconvert.inputshapeerror=Format input error, please input such as: 1,1,32,32 | |||||
| modelconvert.manage.create_error1=A model transformation task with the same name already exists. | modelconvert.manage.create_error1=A model transformation task with the same name already exists. | ||||
| modelconvert.manage.create_error2=Only one running model transformation task can be created. | modelconvert.manage.create_error2=Only one running model transformation task can be created. | ||||
| modelconvert.manage.model_not_exist=The model in the task does not exist or has been deleted. | modelconvert.manage.model_not_exist=The model in the task does not exist or has been deleted. | ||||
| modelconvert.manage.model_file_not_exist=The model file in the task does not exist or has been deleted. | |||||
| modelconvert.manage.no_operate_right=You have no right to do the operation. | modelconvert.manage.no_operate_right=You have no right to do the operation. | ||||
| debug.manage.model_not_exist=The model in the task does not exist or has been deleted, please create a new debug job. | debug.manage.model_not_exist=The model in the task does not exist or has been deleted, please create a new debug job. | ||||
| @@ -3307,6 +3308,7 @@ point_hr = Point/hr | |||||
| DEBUG = DEBUG | DEBUG = DEBUG | ||||
| SNN4IMAGENET = BENCHMARK | SNN4IMAGENET = BENCHMARK | ||||
| BRAINSCORE = BENCHMARK | BRAINSCORE = BENCHMARK | ||||
| SNN4ECOSET = BENCHMARK | |||||
| MODELSAFETY = BENCHMARK | MODELSAFETY = BENCHMARK | ||||
| TRAIN = TRAIN | TRAIN = TRAIN | ||||
| INFERENCE = INFERENCE | INFERENCE = INFERENCE | ||||
| @@ -3321,6 +3323,7 @@ Stopped_success_update_status_fail=Succeed in stopping th job, but failed to upd | |||||
| load_code_failed=Fail to load code, please check if the right branch is selected. | load_code_failed=Fail to load code, please check if the right branch is selected. | ||||
| error.dataset_select = dataset select error:the count exceed the limit or has same name | error.dataset_select = dataset select error:the count exceed the limit or has same name | ||||
| error.partial_datasets_not_available = There are non-existent or deleted files in the selected dataset file, please select again | |||||
| new_train_gpu_tooltips = The code is storaged in <strong style="color:#010101">%s</strong>, the dataset is storaged in <strong style="color:#010101">%s</strong>, the pre-trained model is storaged in the run parameter <strong style="color:#010101">%s</strong>, and please put your model into <strong style="color:#010101">%s</strong> then you can download it online | new_train_gpu_tooltips = The code is storaged in <strong style="color:#010101">%s</strong>, the dataset is storaged in <strong style="color:#010101">%s</strong>, the pre-trained model is storaged in the run parameter <strong style="color:#010101">%s</strong>, and please put your model into <strong style="color:#010101">%s</strong> then you can download it online | ||||
| new_debug_gpu_tooltips = The code is storaged in <strong style="color:#010101">%s</strong>, the dataset is storaged in <strong style="color:#010101">%s</strong>, the pre-trained model is storaged in the <strong style="color:#010101">%s</strong>, and please put your model into <strong style="color:#010101">%s</strong> then you can download it online | new_debug_gpu_tooltips = The code is storaged in <strong style="color:#010101">%s</strong>, the dataset is storaged in <strong style="color:#010101">%s</strong>, the pre-trained model is storaged in the <strong style="color:#010101">%s</strong>, and please put your model into <strong style="color:#010101">%s</strong> then you can download it online | ||||
| new_debug_gpu_tooltips1 = The code is storaged in <strong style="color:#010101">%s</strong>, the dataset is storaged in <strong style="color:#010101">%s</strong>, the pre-trained model is storaged in the <strong style="color:#010101">%s</strong>. | new_debug_gpu_tooltips1 = The code is storaged in <strong style="color:#010101">%s</strong>, the dataset is storaged in <strong style="color:#010101">%s</strong>, the pre-trained model is storaged in the <strong style="color:#010101">%s</strong>. | ||||
| @@ -73,7 +73,7 @@ your_starred=已点赞 | |||||
| your_settings=设置 | your_settings=设置 | ||||
| invite_friends=邀请好友 | invite_friends=邀请好友 | ||||
| your_friend=您的好友 | your_friend=您的好友 | ||||
| invite_you_to_join_the_OpenI_AI_Collaboration_Platform_and_enjoy_abundant_free_computing_resources=邀请您加入启智社区AI协作平台,畅享充沛的免费算力资源! | |||||
| invite_you_to_join_the_OpenI_AI_Collaboration_Platform_and_enjoy_abundant_free_computing_resources=邀请您加入启智社区AI协作平台,畅享充沛的普惠算力资源! | |||||
| recommender=推荐人 | recommender=推荐人 | ||||
| all=所有 | all=所有 | ||||
| @@ -1085,7 +1085,7 @@ delete=删除 | |||||
| more=更多 | more=更多 | ||||
| gpu_type_all=全部 | gpu_type_all=全部 | ||||
| model_download=结果下载 | model_download=结果下载 | ||||
| all_result_download=全部结果下载 | |||||
| all_result_download=全部结果下载 | |||||
| submit_image=提交镜像 | submit_image=提交镜像 | ||||
| modify_image=修改镜像 | modify_image=修改镜像 | ||||
| image_exist=镜像Tag已被使用,请修改镜像Tag。 | image_exist=镜像Tag已被使用,请修改镜像Tag。 | ||||
| @@ -1374,6 +1374,7 @@ modelconvert.modelfileempty=请选择模型文件。 | |||||
| modelconvert.manage.create_error1=相同的名称模型转换任务已经存在。 | modelconvert.manage.create_error1=相同的名称模型转换任务已经存在。 | ||||
| modelconvert.manage.create_error2=只能创建一个正在运行的模型转换任务。 | modelconvert.manage.create_error2=只能创建一个正在运行的模型转换任务。 | ||||
| modelconvert.manage.model_not_exist=任务中选择的模型不存在或者已被删除。 | modelconvert.manage.model_not_exist=任务中选择的模型不存在或者已被删除。 | ||||
| modelconvert.manage.model_file_not_exist=任务中选择的模型文件不存在或者已被删除。 | |||||
| modelconvert.manage.no_operate_right=您没有操作权限。 | modelconvert.manage.no_operate_right=您没有操作权限。 | ||||
| @@ -3328,6 +3329,7 @@ point_hr = 积分/时 | |||||
| DEBUG = 调试任务 | DEBUG = 调试任务 | ||||
| SNN4IMAGENET = 评测任务 | SNN4IMAGENET = 评测任务 | ||||
| BRAINSCORE = 评测任务 | BRAINSCORE = 评测任务 | ||||
| SNN4ECOSET = 评测任务 | |||||
| MODELSAFETY = 评测任务 | MODELSAFETY = 评测任务 | ||||
| TRAIN = 训练任务 | TRAIN = 训练任务 | ||||
| INFERENCE = 推理任务 | INFERENCE = 推理任务 | ||||
| @@ -3343,6 +3345,7 @@ load_code_failed=代码加载失败,请确认选择了正确的分支。 | |||||
| error.debug_datasetsize = 数据集大小超过限制('%d'GB) | error.debug_datasetsize = 数据集大小超过限制('%d'GB) | ||||
| error.dataset_select = 数据集选择错误:数量超过限制或者有同名数据集 | error.dataset_select = 数据集选择错误:数量超过限制或者有同名数据集 | ||||
| error.partial_datasets_not_available = 选择的数据集文件中有不存在或已删除的文件,请重新选择 | |||||
| new_train_gpu_tooltips = 训练脚本存储在 <strong style="color:#010101">%s</strong> 中,数据集存储在 <strong style="color:#010101">%s</strong> 中,预训练模型存放在运行参数 <strong style="color:#010101">%s</strong> 中,训练输出请存储在 <strong style="color:#010101">%s</strong> 中以供后续下载。 | new_train_gpu_tooltips = 训练脚本存储在 <strong style="color:#010101">%s</strong> 中,数据集存储在 <strong style="color:#010101">%s</strong> 中,预训练模型存放在运行参数 <strong style="color:#010101">%s</strong> 中,训练输出请存储在 <strong style="color:#010101">%s</strong> 中以供后续下载。 | ||||
| new_debug_gpu_tooltips = 项目代码存储在 <strong style="color:#010101">%s</strong> 中,数据集存储在 <strong style="color:#010101">%s</strong> 中,选择的模型存储在 <strong style="color:#010101">%s</strong> 中,调试输出请存储在 <strong style="color:#010101">%s</strong> 中以供后续下载。 | new_debug_gpu_tooltips = 项目代码存储在 <strong style="color:#010101">%s</strong> 中,数据集存储在 <strong style="color:#010101">%s</strong> 中,选择的模型存储在 <strong style="color:#010101">%s</strong> 中,调试输出请存储在 <strong style="color:#010101">%s</strong> 中以供后续下载。 | ||||
| new_debug_gpu_tooltips1 = 项目代码存储在 <strong style="color:#010101">%s</strong> 中,数据集存储在 <strong style="color:#010101">%s</strong> 中,选择的模型存储在 <strong style="color:#010101">%s</strong> 中。 | new_debug_gpu_tooltips1 = 项目代码存储在 <strong style="color:#010101">%s</strong> 中,数据集存储在 <strong style="color:#010101">%s</strong> 中,选择的模型存储在 <strong style="color:#010101">%s</strong> 中。 | ||||
| @@ -1,22 +1,67 @@ | |||||
| package repo | package repo | ||||
| import ( | import ( | ||||
| "net/http" | |||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/models" | |||||
| "code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
| routeRepo "code.gitea.io/gitea/routers/repo" | routeRepo "code.gitea.io/gitea/routers/repo" | ||||
| ) | ) | ||||
| func GetSuccessChunks(ctx *context.APIContext) { | func GetSuccessChunks(ctx *context.APIContext) { | ||||
| if errStr := checkDatasetPermission(ctx); errStr != "" { | |||||
| ctx.JSON(http.StatusForbidden, ctx.Tr(errStr)) | |||||
| } | |||||
| routeRepo.GetSuccessChunks(ctx.Context) | routeRepo.GetSuccessChunks(ctx.Context) | ||||
| } | } | ||||
| func checkDatasetPermission(ctx *context.APIContext) string { | |||||
| datasetId := ctx.QueryInt64("dataset_id") | |||||
| dataset, err := models.GetDatasetByID(datasetId) | |||||
| if err != nil { | |||||
| log.Warn("can not find dataset", err) | |||||
| return "dataset.query_dataset_fail" | |||||
| } | |||||
| repo, err := models.GetRepositoryByID(dataset.RepoID) | |||||
| if err != nil { | |||||
| log.Warn("can not find repo", err) | |||||
| return "dataset.query_dataset_fail" | |||||
| } | |||||
| permission, err := models.GetUserRepoPermission(repo, ctx.User) | |||||
| if err != nil { | |||||
| log.Warn("can not find repo permission for user", err) | |||||
| return "dataset.query_dataset_fail" | |||||
| } | |||||
| if !permission.CanWrite(models.UnitTypeDatasets) { | |||||
| return "error.no_right" | |||||
| } | |||||
| return "" | |||||
| } | |||||
| func NewMultipart(ctx *context.APIContext) { | func NewMultipart(ctx *context.APIContext) { | ||||
| if errStr := checkDatasetPermission(ctx); errStr != "" { | |||||
| ctx.JSON(http.StatusForbidden, ctx.Tr(errStr)) | |||||
| } | |||||
| routeRepo.NewMultipart(ctx.Context) | routeRepo.NewMultipart(ctx.Context) | ||||
| } | } | ||||
| func GetMultipartUploadUrl(ctx *context.APIContext) { | func GetMultipartUploadUrl(ctx *context.APIContext) { | ||||
| if errStr := checkDatasetPermission(ctx); errStr != "" { | |||||
| ctx.JSON(http.StatusForbidden, ctx.Tr(errStr)) | |||||
| } | |||||
| routeRepo.GetMultipartUploadUrl(ctx.Context) | routeRepo.GetMultipartUploadUrl(ctx.Context) | ||||
| } | } | ||||
| func CompleteMultipart(ctx *context.APIContext) { | func CompleteMultipart(ctx *context.APIContext) { | ||||
| if errStr := checkDatasetPermission(ctx); errStr != "" { | |||||
| ctx.JSON(http.StatusForbidden, ctx.Tr(errStr)) | |||||
| } | |||||
| routeRepo.CompleteMultipart(ctx.Context) | routeRepo.CompleteMultipart(ctx.Context) | ||||
| } | } | ||||
| @@ -1260,8 +1260,8 @@ func DownloadCloudBrainBoard(ctx *context.Context) { | |||||
| Type: models.TypeCloudBrainAll, | Type: models.TypeCloudBrainAll, | ||||
| BeginTimeUnix: int64(recordBeginTime), | BeginTimeUnix: int64(recordBeginTime), | ||||
| EndTimeUnix: endTime.Unix(), | EndTimeUnix: endTime.Unix(), | ||||
| AccCardsNum: models.AccCardsNumAll, | |||||
| }) | }) | ||||
| log.Info("totalcountisis:", total) | |||||
| if err != nil { | if err != nil { | ||||
| log.Warn("Can not get cloud brain info", err) | log.Warn("Can not get cloud brain info", err) | ||||
| @@ -1290,6 +1290,7 @@ func DownloadCloudBrainBoard(ctx *context.Context) { | |||||
| BeginTimeUnix: int64(recordBeginTime), | BeginTimeUnix: int64(recordBeginTime), | ||||
| EndTimeUnix: endTime.Unix(), | EndTimeUnix: endTime.Unix(), | ||||
| NeedRepoInfo: true, | NeedRepoInfo: true, | ||||
| AccCardsNum: models.AccCardsNumAll, | |||||
| }) | }) | ||||
| if err != nil { | if err != nil { | ||||
| log.Warn("Can not get cloud brain info", err) | log.Warn("Can not get cloud brain info", err) | ||||
| @@ -214,6 +214,12 @@ func GrampusNotebookCreate(ctx *context.Context, form auth.CreateGrampusNotebook | |||||
| ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tpl, &form) | ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tpl, &form) | ||||
| return | return | ||||
| } | } | ||||
| uuidArray := strings.Split(uuid, ";") | |||||
| if datasetInfos == nil || len(datasetInfos) < len(uuidArray) { | |||||
| grampusNotebookNewDataPrepare(ctx, processType) | |||||
| ctx.RenderWithErr(ctx.Tr("cloudbrain.error.partial_datasets_not_available"), tpl, &form) | |||||
| return | |||||
| } | |||||
| } | } | ||||
| //prepare code and out path | //prepare code and out path | ||||
| @@ -277,6 +283,12 @@ func GrampusNotebookCreate(ctx *context.Context, form auth.CreateGrampusNotebook | |||||
| ctx.RenderWithErr(ctx.Tr("repo.modelconvert.manage.model_not_exist"), tpl, &form) | ctx.RenderWithErr(ctx.Tr("repo.modelconvert.manage.model_not_exist"), tpl, &form) | ||||
| return | return | ||||
| } | } | ||||
| if !cloudbrainTask.IsModelFileExists(m, form.CkptName) { | |||||
| log.Error("model file not exist.name = %s", form.CkptName) | |||||
| grampusNotebookNewDataPrepare(ctx, processType) | |||||
| ctx.RenderWithErr(ctx.Tr("repo.modelconvert.manage.model_file_not_exist"), tpl, &form) | |||||
| return | |||||
| } | |||||
| req.ModelName = form.ModelName | req.ModelName = form.ModelName | ||||
| req.LabelName = form.LabelName | req.LabelName = form.LabelName | ||||
| req.CkptName = form.CkptName | req.CkptName = form.CkptName | ||||
| @@ -2921,15 +2921,19 @@ func TrainJobDownloadLogFile(ctx *context.Context) { | |||||
| ctx.ServerError("GetObsLogFileName", err) | ctx.ServerError("GetObsLogFileName", err) | ||||
| return | return | ||||
| } | } | ||||
| url, err := storage.GetObsCreateSignedUrlByBucketAndKey(setting.Bucket, key) | |||||
| if err != nil { | |||||
| log.Error("GetObsCreateSignedUrlByBucketAndKey failed: %v", err.Error(), ctx.Data["msgID"]) | |||||
| ctx.ServerError("GetObsCreateSignedUrlByBucketAndKey", err) | |||||
| return | |||||
| if len(key) > 1 { | |||||
| ObsDownloadManyFile(prefix[0:len(prefix)-3], ctx, task.DisplayJobName+".zip", key) | |||||
| } else { | |||||
| url, err := storage.GetObsCreateSignedUrlByBucketAndKey(setting.Bucket, key[0].ParenDir+key[0].FileName) | |||||
| if err != nil { | |||||
| log.Error("GetObsCreateSignedUrlByBucketAndKey failed: %v", err.Error(), ctx.Data["msgID"]) | |||||
| ctx.ServerError("GetObsCreateSignedUrlByBucketAndKey", err) | |||||
| return | |||||
| } | |||||
| ctx.Resp.Header().Set("Cache-Control", "max-age=0") | |||||
| http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusTemporaryRedirect) | |||||
| } | } | ||||
| ctx.Resp.Header().Set("Cache-Control", "max-age=0") | |||||
| http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusTemporaryRedirect) | |||||
| } | } | ||||
| func getDatasUrlListByUUIDS(uuidStr string) ([]models.Datasurl, string, string, bool, error) { | func getDatasUrlListByUUIDS(uuidStr string) ([]models.Datasurl, string, string, bool, error) { | ||||
| var isMultiDataset bool | var isMultiDataset bool | ||||
| @@ -121,7 +121,6 @@ func checkAutoLogin(ctx *context.Context) bool { | |||||
| ctx.ServerError("AutoSignIn", err) | ctx.ServerError("AutoSignIn", err) | ||||
| return true | return true | ||||
| } | } | ||||
| redirectTo := ctx.Query("redirect_to") | redirectTo := ctx.Query("redirect_to") | ||||
| if len(redirectTo) > 0 { | if len(redirectTo) > 0 { | ||||
| ctx.SetCookie("redirect_to", redirectTo, 0, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ctx.SetCookie("redirect_to", redirectTo, 0, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ||||
| @@ -130,7 +129,6 @@ func checkAutoLogin(ctx *context.Context) bool { | |||||
| } | } | ||||
| if isSucceed { | if isSucceed { | ||||
| isCourse := ctx.QueryBool("course") | isCourse := ctx.QueryBool("course") | ||||
| ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ctx.SetCookie("redirect_to", "", -1, setting.AppSubURL, "", setting.SessionConfig.Secure, true) | ||||
| if redirectTo == "" && isCourse { | if redirectTo == "" && isCourse { | ||||
| @@ -138,7 +136,6 @@ func checkAutoLogin(ctx *context.Context) bool { | |||||
| ctx.RedirectToFirst(redirectToCourse) | ctx.RedirectToFirst(redirectToCourse) | ||||
| } else { | } else { | ||||
| ctx.RedirectToFirst(redirectTo, setting.AppSubURL+string(setting.LandingPageURL)) | ctx.RedirectToFirst(redirectTo, setting.AppSubURL+string(setting.LandingPageURL)) | ||||
| } | } | ||||
| return true | return true | ||||
| } | } | ||||
| @@ -154,7 +151,6 @@ func getActivityTpl() string { | |||||
| // SignIn render sign in page | // SignIn render sign in page | ||||
| func SignIn(ctx *context.Context) { | func SignIn(ctx *context.Context) { | ||||
| ctx.Data["Title"] = ctx.Tr("sign_in") | ctx.Data["Title"] = ctx.Tr("sign_in") | ||||
| // Check auto-login. | // Check auto-login. | ||||
| if checkAutoLogin(ctx) { | if checkAutoLogin(ctx) { | ||||
| return | return | ||||
| @@ -0,0 +1,30 @@ | |||||
| package cloudbrainTask | |||||
| import ( | |||||
| "code.gitea.io/gitea/models" | |||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/modules/setting" | |||||
| "code.gitea.io/gitea/modules/storage" | |||||
| ) | |||||
| func IsModelFileExists(model *models.AiModelManage, fileName string) bool { | |||||
| if model.Type == models.TypeCloudBrainTwo { | |||||
| key := models.AIModelPath + models.AttachmentRelativePath(model.ID) + "/" + fileName | |||||
| log.Info("IsModelFileExists TypeCloudBrainTwo key=%s", key) | |||||
| isExist, err := storage.IsObjectExist4Obs(setting.Bucket, key) | |||||
| if err != nil { | |||||
| return false | |||||
| } | |||||
| return isExist | |||||
| } else if model.Type == models.TypeCloudBrainOne { | |||||
| prefix := models.AIModelPath + models.AttachmentRelativePath(model.ID) + "/" | |||||
| objectName := prefix + fileName | |||||
| log.Info("IsModelFileExists TypeCloudBrainOne objectName=%s", objectName) | |||||
| isExist, err := storage.IsObjectExist4Minio(setting.Attachment.Minio.Bucket, objectName) | |||||
| if err != nil { | |||||
| return false | |||||
| } | |||||
| return isExist | |||||
| } | |||||
| return false | |||||
| } | |||||
| @@ -89,7 +89,7 @@ | |||||
| <div class="row"> | <div class="row"> | ||||
| <!-- 任务名 --> | <!-- 任务名 --> | ||||
| {{$JobID := '0'}} | {{$JobID := '0'}} | ||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK" "MODELSAFETY"}} | |||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK" "MODELSAFETY" "SNN4ECOSET"}} | |||||
| {{$JobID = .Cloudbrain.ID}} | {{$JobID = .Cloudbrain.ID}} | ||||
| {{else}} | {{else}} | ||||
| {{$JobID = .JobID}} | {{$JobID = .JobID}} | ||||
| @@ -103,7 +103,7 @@ | |||||
| <span class="fitted" | <span class="fitted" | ||||
| style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | ||||
| </a> | </a> | ||||
| {{else if or (eq .JobType "SNN4IMAGENET") (eq .JobType "BRAINSCORE")}} | |||||
| {{else if or (eq .JobType "SNN4IMAGENET") (eq .JobType "BRAINSCORE") (eq .JobType "SNN4ECOSET")}} | |||||
| <a class="title" | <a class="title" | ||||
| href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}/cloudbrain/benchmark/{{$JobID}}" | href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}/cloudbrain/benchmark/{{$JobID}}" | ||||
| title="{{.DisplayJobName}}" style="font-size: 14px;padding-right:0px"> | title="{{.DisplayJobName}}" style="font-size: 14px;padding-right:0px"> | ||||
| @@ -263,7 +263,7 @@ | |||||
| </a> | </a> | ||||
| </form> | </form> | ||||
| {{else}} | {{else}} | ||||
| {{if eq .JobType "DEBUG" "BENCHMARK" "SNN4IMAGENET" "BRAINSCORE"}} | |||||
| {{if eq .JobType "DEBUG" "BENCHMARK" "SNN4IMAGENET" "BRAINSCORE" "SNN4ECOSET"}} | |||||
| <form id="stopForm-{{$JobID}}" style="margin-left:-1px;"> | <form id="stopForm-{{$JobID}}" style="margin-left:-1px;"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| <a style="padding: 0.5rem 1rem;" id="ai-stop-{{$JobID}}" | <a style="padding: 0.5rem 1rem;" id="ai-stop-{{$JobID}}" | ||||
| @@ -305,7 +305,7 @@ | |||||
| </form> | </form> | ||||
| {{else}} | {{else}} | ||||
| <form class="ui compact buttons" id="delForm-{{$JobID}}" | <form class="ui compact buttons" id="delForm-{{$JobID}}" | ||||
| action='{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .JobType "BENCHMARK"}}/cloudbrain/benchmark{{else if or (eq .JobType "SNN4IMAGENET") (eq .JobType "BRAINSCORE")}}/cloudbrain{{else if eq .JobType "DEBUG"}}{{if eq .Cloudbrain.Type 2}}/grampus/notebook{{else}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}{{end}}{{else if eq .JobType "TRAIN"}}{{if eq .Cloudbrain.Type 1}}/modelarts/train-job{{else if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{else if eq .Cloudbrain.Type 2}}/grampus/train-job{{end}}{{else if eq .JobType "INFERENCE"}}{{if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{end}}{{end}}/{{$JobID}}/del?isadminpage=true' | |||||
| action='{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .JobType "BENCHMARK"}}/cloudbrain/benchmark{{else if or (eq .JobType "SNN4IMAGENET") (eq .JobType "BRAINSCORE") (eq .JobType "SNN4ECOSET")}}/cloudbrain{{else if eq .JobType "DEBUG"}}{{if eq .Cloudbrain.Type 2}}/grampus/notebook{{else}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}{{end}}{{else if eq .JobType "TRAIN"}}{{if eq .Cloudbrain.Type 1}}/modelarts/train-job{{else if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{else if eq .Cloudbrain.Type 2}}/grampus/train-job{{end}}{{else if eq .JobType "INFERENCE"}}{{if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{end}}{{end}}/{{$JobID}}/del?isadminpage=true' | |||||
| method="post"> | method="post"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| <a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{$JobID}}" | <a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{$JobID}}" | ||||
| @@ -321,7 +321,7 @@ | |||||
| </div> | </div> | ||||
| {{else}} | {{else}} | ||||
| {{$JobID := '0'}} | {{$JobID := '0'}} | ||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK"}} | |||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK" "SNN4ECOSET"}} | |||||
| {{$JobID = .Cloudbrain.ID}} | {{$JobID = .Cloudbrain.ID}} | ||||
| {{else}} | {{else}} | ||||
| {{$JobID = .JobID}} | {{$JobID = .JobID}} | ||||
| @@ -35,6 +35,7 @@ | |||||
| <a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=SNN4IMAGENET&listType={{$.ListType}}&jobStatus={{$.JobStatus}}&cluster={{$.cluster}}&aiCenter={{$.aiCenter}}" data-value="SNN4IMAGENET">SNN4IMAGENET</a> | <a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=SNN4IMAGENET&listType={{$.ListType}}&jobStatus={{$.JobStatus}}&cluster={{$.cluster}}&aiCenter={{$.aiCenter}}" data-value="SNN4IMAGENET">SNN4IMAGENET</a> | ||||
| <a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=BRAINSCORE&listType={{$.ListType}}&jobStatus={{$.JobStatus}}&cluster={{$.cluster}}&aiCenter={{$.aiCenter}}" data-value="BRAINSCORE">BRAINSCORE</a> | <a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=BRAINSCORE&listType={{$.ListType}}&jobStatus={{$.JobStatus}}&cluster={{$.cluster}}&aiCenter={{$.aiCenter}}" data-value="BRAINSCORE">BRAINSCORE</a> | ||||
| <a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=MODELSAFETY&listType={{$.ListType}}&jobStatus={{$.JobStatus}}&cluster={{$.cluster}}&aiCenter={{$.aiCenter}}" data-value="MODELSAFETY">MODELSAFETY</a> | <a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=MODELSAFETY&listType={{$.ListType}}&jobStatus={{$.JobStatus}}&cluster={{$.cluster}}&aiCenter={{$.aiCenter}}" data-value="MODELSAFETY">MODELSAFETY</a> | ||||
| <a class="item" href="{{$.Link}}?q={{$.Keyword}}&jobType=SNN4ECOSET&listType={{$.ListType}}&jobStatus={{$.JobStatus}}&cluster={{$.cluster}}&aiCenter={{$.aiCenter}}" data-value="MODELSAFETY">SNN4ECOSET</a> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="ui selection dropdown" style="min-width: 10em;min-height:2.6em;border-radius: .28571429rem;margin-right: 1em;padding: .67em 3.2em .7em 1em;"> | <div class="ui selection dropdown" style="min-width: 10em;min-height:2.6em;border-radius: .28571429rem;margin-right: 1em;padding: .67em 3.2em .7em 1em;"> | ||||
| @@ -17,9 +17,9 @@ | |||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js?v={{MD5 AppVer}}"></script> | |||||
| <script> | <script> | ||||
| CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js"; | CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js"; | ||||
| </script> | </script> | ||||
| @@ -27,10 +27,10 @@ | |||||
| <!-- Third-party libraries --> | <!-- Third-party libraries --> | ||||
| {{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| {{if .RequireU2F}} | {{if .RequireU2F}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| {{if .EnableCaptcha}} | {{if .EnableCaptcha}} | ||||
| {{if eq .CaptchaType "recaptcha"}} | {{if eq .CaptchaType "recaptcha"}} | ||||
| @@ -38,17 +38,17 @@ | |||||
| {{end}} | {{end}} | ||||
| {{end}} | {{end}} | ||||
| {{if .RequireTribute}} | {{if .RequireTribute}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| {{if .PageIsHome}} | {{if .PageIsHome}} | ||||
| <script rel="stylesheet" src="{{StaticUrlPrefix}}/vendor/plugins/jquery.particleground/jquery.particleground.min.js"></script> | |||||
| <script rel="stylesheet" src="{{StaticUrlPrefix}}/vendor/plugins/jquery.particleground/jquery.particleground.min.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| <script src="{{StaticUrlPrefix}}/fomantic/semantic.min.js?v={{MD5 AppVer}}"></script> | <script src="{{StaticUrlPrefix}}/fomantic/semantic.min.js?v={{MD5 AppVer}}"></script> | ||||
| <script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script> | <script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script> | ||||
| {{template "custom/footer" .}} | {{template "custom/footer" .}} | ||||
| {{if .PageIsHome}} | {{if .PageIsHome}} | ||||
| <!--script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script--> | |||||
| <script src="/rotation3D/vue-2.6.10.min.js"></script> | |||||
| <!--script src="https://www.jq22.com/jquery/jquery-1.10.2.js?v={{MD5 AppVer}}"></script--> | |||||
| <script src="/rotation3D/vue-2.6.10.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="/rotation3D/rotation3D.js?v={{MD5 AppVer}}"></script> | <script src="/rotation3D/rotation3D.js?v={{MD5 AppVer}}"></script> | ||||
| <script> | <script> | ||||
| var jobTask={}; | var jobTask={}; | ||||
| @@ -14,9 +14,9 @@ | |||||
| <script src="{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}"></script> | <script src="{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}"></script> | ||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js?v={{MD5 AppVer}}"></script> | |||||
| <script> | <script> | ||||
| CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js"; | CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js"; | ||||
| </script> | </script> | ||||
| @@ -24,10 +24,10 @@ | |||||
| <!-- Third-party libraries --> | <!-- Third-party libraries --> | ||||
| {{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| {{if .RequireU2F}} | {{if .RequireU2F}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| {{if .EnableCaptcha}} | {{if .EnableCaptcha}} | ||||
| {{if eq .CaptchaType "recaptcha"}} | {{if eq .CaptchaType "recaptcha"}} | ||||
| @@ -35,10 +35,10 @@ | |||||
| {{end}} | {{end}} | ||||
| {{end}} | {{end}} | ||||
| {{if .RequireTribute}} | {{if .RequireTribute}} | ||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| {{if .PageIsHome}} | {{if .PageIsHome}} | ||||
| <script rel="stylesheet" src="{{StaticUrlPrefix}}/vendor/plugins/jquery.particleground/jquery.particleground.min.js"></script> | |||||
| <script rel="stylesheet" src="{{StaticUrlPrefix}}/vendor/plugins/jquery.particleground/jquery.particleground.min.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| <script src="{{StaticUrlPrefix}}/fomantic/semantic.min.js?v={{MD5 AppVer}}"></script> | <script src="{{StaticUrlPrefix}}/fomantic/semantic.min.js?v={{MD5 AppVer}}"></script> | ||||
| <script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script> | <script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script> | ||||
| @@ -5,7 +5,7 @@ | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <meta http-equiv="x-ua-compatible" content="ie=edge"> | <meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||
| <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | ||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | |||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json?v={{MD5 AppVer}}" crossorigin="use-credentials"> | |||||
| {{if UseServiceWorker}} | {{if UseServiceWorker}} | ||||
| <script> | <script> | ||||
| if ('serviceWorker' in navigator) { | if ('serviceWorker' in navigator) { | ||||
| @@ -115,18 +115,18 @@ | |||||
| window.sessionStorage.removeItem('_csrf'); | window.sessionStorage.removeItem('_csrf'); | ||||
| {{end}} | {{end}} | ||||
| </script> | </script> | ||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css"> | |||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png?v={{MD5 AppVer}}"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg?v={{MD5 AppVer}}" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png?v={{MD5 AppVer}}" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css?v={{MD5 AppVer}}"> | |||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| {{if .RequireTribute}} | {{if .RequireTribute}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | ||||
| @@ -137,7 +137,7 @@ | |||||
| </style> | </style> | ||||
| </noscript> | </noscript> | ||||
| {{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <style class="list-search-style"></style> | <style class="list-search-style"></style> | ||||
| {{if .PageIsUserProfile}} | {{if .PageIsUserProfile}} | ||||
| @@ -179,7 +179,7 @@ | |||||
| {{else if ne DefaultTheme "gitea"}} | {{else if ne DefaultTheme "gitea"}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | ||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css"> | |||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css?v={{MD5 AppVer}}"> | |||||
| {{template "custom/header" .}} | {{template "custom/header" .}} | ||||
| <script> | <script> | ||||
| @@ -191,7 +191,7 @@ var _hmt = _hmt || []; | |||||
| s.parentNode.insertBefore(hm, s); | s.parentNode.insertBefore(hm, s); | ||||
| })(); | })(); | ||||
| </script> | </script> | ||||
| <script src="/self/func.js" type="text/javascript"></script> | |||||
| <script src="/self/func.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| {{template "custom/body_outer_pre" .}} | {{template "custom/body_outer_pre" .}} | ||||
| @@ -5,7 +5,7 @@ | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <meta http-equiv="x-ua-compatible" content="ie=edge"> | <meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||
| <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | ||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | |||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json?v={{MD5 AppVer}}" crossorigin="use-credentials"> | |||||
| {{if UseServiceWorker}} | {{if UseServiceWorker}} | ||||
| <script> | <script> | ||||
| if ('serviceWorker' in navigator) { | if ('serviceWorker' in navigator) { | ||||
| @@ -115,18 +115,18 @@ | |||||
| window.sessionStorage.removeItem('_csrf'); | window.sessionStorage.removeItem('_csrf'); | ||||
| {{end}} | {{end}} | ||||
| </script> | </script> | ||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css"> | |||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png?v={{MD5 AppVer}}"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg?v={{MD5 AppVer}}" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png?v={{MD5 AppVer}}" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css?v={{MD5 AppVer}}"> | |||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| {{if .RequireTribute}} | {{if .RequireTribute}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | ||||
| @@ -137,7 +137,7 @@ | |||||
| </style> | </style> | ||||
| </noscript> | </noscript> | ||||
| {{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <style class="list-search-style"></style> | <style class="list-search-style"></style> | ||||
| {{if .PageIsUserProfile}} | {{if .PageIsUserProfile}} | ||||
| @@ -179,7 +179,7 @@ | |||||
| {{else if ne DefaultTheme "gitea"}} | {{else if ne DefaultTheme "gitea"}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | ||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css"> | |||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css?v={{MD5 AppVer}}"> | |||||
| {{template "custom/header" .}} | {{template "custom/header" .}} | ||||
| <script> | <script> | ||||
| @@ -191,7 +191,7 @@ var _hmt = _hmt || []; | |||||
| s.parentNode.insertBefore(hm, s); | s.parentNode.insertBefore(hm, s); | ||||
| })(); | })(); | ||||
| </script> | </script> | ||||
| <script src="/self/func.js" type="text/javascript"></script> | |||||
| <script src="/self/func.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| {{template "custom/body_outer_pre" .}} | {{template "custom/body_outer_pre" .}} | ||||
| @@ -5,7 +5,7 @@ | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <meta http-equiv="x-ua-compatible" content="ie=edge"> | <meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||
| <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | ||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | |||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json?v={{MD5 AppVer}}" crossorigin="use-credentials"> | |||||
| {{if UseServiceWorker}} | {{if UseServiceWorker}} | ||||
| <script> | <script> | ||||
| if ('serviceWorker' in navigator) { | if ('serviceWorker' in navigator) { | ||||
| @@ -115,18 +115,18 @@ | |||||
| window.sessionStorage.removeItem('_csrf'); | window.sessionStorage.removeItem('_csrf'); | ||||
| {{end}} | {{end}} | ||||
| </script> | </script> | ||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css"> | |||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png?v={{MD5 AppVer}}"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg?v={{MD5 AppVer}}" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png?v={{MD5 AppVer}}" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css?v={{MD5 AppVer}}"> | |||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| {{if .RequireTribute}} | {{if .RequireTribute}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | ||||
| @@ -137,7 +137,7 @@ | |||||
| </style> | </style> | ||||
| </noscript> | </noscript> | ||||
| {{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <style class="list-search-style"></style> | <style class="list-search-style"></style> | ||||
| {{if .PageIsUserProfile}} | {{if .PageIsUserProfile}} | ||||
| @@ -179,7 +179,7 @@ | |||||
| {{else if ne DefaultTheme "gitea"}} | {{else if ne DefaultTheme "gitea"}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | ||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css"> | |||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css?v={{MD5 AppVer}}"> | |||||
| {{template "custom/header" .}} | {{template "custom/header" .}} | ||||
| <script> | <script> | ||||
| @@ -191,7 +191,7 @@ var _hmt = _hmt || []; | |||||
| s.parentNode.insertBefore(hm, s); | s.parentNode.insertBefore(hm, s); | ||||
| })(); | })(); | ||||
| </script> | </script> | ||||
| <script src="/self/func.js" type="text/javascript"></script> | |||||
| <script src="/self/func.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| @@ -5,7 +5,7 @@ | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <meta http-equiv="x-ua-compatible" content="ie=edge"> | <meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||
| <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | ||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | |||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json?v={{MD5 AppVer}}" crossorigin="use-credentials"> | |||||
| {{if UseServiceWorker}} | {{if UseServiceWorker}} | ||||
| <script> | <script> | ||||
| if ('serviceWorker' in navigator) { | if ('serviceWorker' in navigator) { | ||||
| @@ -115,19 +115,19 @@ | |||||
| window.sessionStorage.removeItem('_csrf'); | window.sessionStorage.removeItem('_csrf'); | ||||
| {{end}} | {{end}} | ||||
| </script> | </script> | ||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css"> | |||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png?v={{MD5 AppVer}}"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg?v={{MD5 AppVer}}" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png?v={{MD5 AppVer}}" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css?v={{MD5 AppVer}}"> | |||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| <link rel="stylesheet" href="/css/git.openi.css"> | |||||
| <link rel="stylesheet" href="/css/git.openi.css?v={{MD5 AppVer}}"> | |||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| {{if .RequireTribute}} | {{if .RequireTribute}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | ||||
| @@ -138,7 +138,7 @@ | |||||
| </style> | </style> | ||||
| </noscript> | </noscript> | ||||
| {{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <style class="list-search-style"></style> | <style class="list-search-style"></style> | ||||
| {{if .PageIsUserProfile}} | {{if .PageIsUserProfile}} | ||||
| @@ -191,14 +191,14 @@ var _hmt = _hmt || []; | |||||
| s.parentNode.insertBefore(hm, s); | s.parentNode.insertBefore(hm, s); | ||||
| })(); | })(); | ||||
| </script> | </script> | ||||
| <script src="/self/func.js" type="text/javascript"></script> | |||||
| <script src="/self/func.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| <!--RemixIcon Fonts v2.5.0--> | <!--RemixIcon Fonts v2.5.0--> | ||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css"> | |||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css?v={{MD5 AppVer}}"> | |||||
| <!-- Swiper --> | <!-- Swiper --> | ||||
| <link rel="stylesheet" href="/swiper/swiper-bundle.min.css"> | |||||
| <script src="/swiper/swiper-bundle.min.js"></script> | |||||
| <link rel="stylesheet" href="/swiper/swiper-bundle.min.css?v={{MD5 AppVer}}"> | |||||
| <script src="/swiper/swiper-bundle.min.js?v={{MD5 AppVer}}"></script> | |||||
| <!-- rotation3D --> | <!-- rotation3D --> | ||||
| <link rel="stylesheet" href="/rotation3D/rotation3D.css"> | |||||
| <link rel="stylesheet" href="/rotation3D/rotation3D.css?v={{MD5 AppVer}}"> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| {{template "custom/body_outer_pre" .}} | {{template "custom/body_outer_pre" .}} | ||||
| @@ -5,7 +5,7 @@ | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <meta http-equiv="x-ua-compatible" content="ie=edge"> | <meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||
| <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | <title>{{if .Title}}{{.Title}} - {{end}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</title> | ||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | |||||
| <link rel="manifest" href="{{AppSubUrl}}/manifest.json?v={{MD5 AppVer}}" crossorigin="use-credentials"> | |||||
| {{if UseServiceWorker}} | {{if UseServiceWorker}} | ||||
| <script> | <script> | ||||
| if ('serviceWorker' in navigator) { | if ('serviceWorker' in navigator) { | ||||
| @@ -115,18 +115,18 @@ | |||||
| window.sessionStorage.removeItem('_csrf'); | window.sessionStorage.removeItem('_csrf'); | ||||
| {{end}} | {{end}} | ||||
| </script> | </script> | ||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css"> | |||||
| <link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png?v={{MD5 AppVer}}"> | |||||
| <link rel="mask-icon" href="{{StaticUrlPrefix}}/img/openi-safari.svg?v={{MD5 AppVer}}" color="#609926"> | |||||
| <link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png?v={{MD5 AppVer}}" title="{{AppName}}"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css?v={{MD5 AppVer}}"> | |||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | ||||
| {{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| {{if .RequireTribute}} | {{if .RequireTribute}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | ||||
| @@ -137,7 +137,7 @@ | |||||
| </style> | </style> | ||||
| </noscript> | </noscript> | ||||
| {{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css?v={{MD5 AppVer}}"> | |||||
| {{end}} | {{end}} | ||||
| <style class="list-search-style"></style> | <style class="list-search-style"></style> | ||||
| {{if .PageIsUserProfile}} | {{if .PageIsUserProfile}} | ||||
| @@ -179,7 +179,7 @@ | |||||
| {{else if ne DefaultTheme "gitea"}} | {{else if ne DefaultTheme "gitea"}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | ||||
| {{end}} | {{end}} | ||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css"> | |||||
| <link rel="stylesheet" href="/RemixIcon_Fonts_v2.5.0/fonts/remixicon.css?v={{MD5 AppVer}}"> | |||||
| {{template "custom/header" .}} | {{template "custom/header" .}} | ||||
| <script> | <script> | ||||
| @@ -191,7 +191,7 @@ var _hmt = _hmt || []; | |||||
| s.parentNode.insertBefore(hm, s); | s.parentNode.insertBefore(hm, s); | ||||
| })(); | })(); | ||||
| </script> | </script> | ||||
| <script src="/self/func.js" type="text/javascript"></script> | |||||
| <script src="/self/func.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| @@ -0,0 +1,2 @@ | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/placeholder.css?v={{TimeStampNow}}"> | |||||
| <script src="{{StaticUrlPrefix}}/js/placeholder.js?v={{TimeStampNow}}"></script> | |||||
| @@ -1786,8 +1786,40 @@ | |||||
| background-repeat: no-repeat; | background-repeat: no-repeat; | ||||
| background-size: cover; | background-size: cover; | ||||
| padding: 45% 0; | padding: 45% 0; | ||||
| } | |||||
| } | |||||
| } | } | ||||
| ._hm-pg-bg-4 { | |||||
| background: url(/img/home-banner-02-1.jpg); | |||||
| background-repeat: no-repeat; | |||||
| background-position: center center; | |||||
| background-size: cover; | |||||
| } | |||||
| ._hm-pg-bg-4-content { | |||||
| position: absolute; | |||||
| margin: auto; | |||||
| left: 0; | |||||
| top: -10%; | |||||
| right: 0; | |||||
| bottom: 0; | |||||
| display: block; | |||||
| width: 790px; | |||||
| height: 315px; | |||||
| background: url(/img/home-banner-02-2.png); | |||||
| background-repeat: no-repeat; | |||||
| background-position: center center; | |||||
| background-size: cover; | |||||
| } | |||||
| @media only screen and (max-width: 767px) { | |||||
| ._hm-pg-bg-4 { | |||||
| background-size: 200% 100%; | |||||
| } | |||||
| ._hm-pg-bg-4-content { | |||||
| top: -15%; | |||||
| width: 90%; | |||||
| height: 150px; | |||||
| } | |||||
| } | |||||
| </style> | </style> | ||||
| <div class="_hm-bg-container"> | <div class="_hm-bg-container"> | ||||
| <div class="_hm-pg _hm-pg-static"> | <div class="_hm-pg _hm-pg-static"> | ||||
| @@ -2029,12 +2061,18 @@ | |||||
| <div class="_hm-big-btn-c"></div> | <div class="_hm-big-btn-c"></div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="_hm-pg _hm-pg-bg-4"> | |||||
| <a target="_blank;" href="https://openi.org.cn/index.php?m=content&c=index&a=lists&catid=225"> | |||||
| <div class="_hm-pg-bg-4-content" style="animation:_hm-slide-in-left-once 0.5s"></div> | |||||
| </a> | |||||
| </div> | |||||
| </div> | </div> | ||||
| <div class="_hm-slide-btn _hm-slide-btn-left"></div> | <div class="_hm-slide-btn _hm-slide-btn-left"></div> | ||||
| <div class="_hm-slide-btn _hm-slide-btn-right"></div> | <div class="_hm-slide-btn _hm-slide-btn-right"></div> | ||||
| <div class="_hm-slide-pagination-c"> | <div class="_hm-slide-pagination-c"> | ||||
| <div class="_hm-slide-pagination-item _hm-slide-pagination-item-active"></div> | <div class="_hm-slide-pagination-item _hm-slide-pagination-item-active"></div> | ||||
| <div class="_hm-slide-pagination-item"></div> | <div class="_hm-slide-pagination-item"></div> | ||||
| <div class="_hm-slide-pagination-item"></div> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="ui container _hm-container"> | <div class="ui container _hm-container"> | ||||
| @@ -1,8 +1,8 @@ | |||||
| <link rel="stylesheet" href="/swiper/swiper-bundle.min.css"> | |||||
| <link rel="stylesheet" href="/css/git.openi.css"> | |||||
| <script src="/swiper/swiper-bundle.min.js"></script> | |||||
| <script src="/self/js/jquery.min.js" type="text/javascript"></script> | |||||
| <link rel="stylesheet" href="/swiper/swiper-bundle.min.css?v={{MD5 AppVer}}"> | |||||
| <link rel="stylesheet" href="/css/git.openi.css?v={{MD5 AppVer}}"> | |||||
| <script src="/swiper/swiper-bundle.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="/self/js/jquery.min.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <div class="explore users"> | <div class="explore users"> | ||||
| @@ -1,5 +1,5 @@ | |||||
| <script src="/swiper/swiper-bundle.min.js"></script> | |||||
| <link href="/swiper/swiper-bundle.min.css" rel="stylesheet"> | |||||
| <script src="/swiper/swiper-bundle.min.js?v={{MD5 AppVer}}"></script> | |||||
| <link href="/swiper/swiper-bundle.min.css?v={{MD5 AppVer}}" rel="stylesheet"> | |||||
| <style> | <style> | ||||
| .explore .repos--seach{ | .explore .repos--seach{ | ||||
| @@ -86,7 +86,7 @@ | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <script src="/self/js/jquery.min.js" type="text/javascript"></script> | |||||
| <script src="/self/js/jquery.min.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| <script src="/home/search.js?v={{MD5 AppVer}}" type="text/javascript"></script> | <script src="/home/search.js?v={{MD5 AppVer}}" type="text/javascript"></script> | ||||
| <div class="am-mt-30"></div> | <div class="am-mt-30"></div> | ||||
| @@ -1,4 +1,6 @@ | |||||
| {{template "base/head_home" .}} | {{template "base/head_home" .}} | ||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/css/placeholder-home.css?v={{TimeStampNow}}"> | |||||
| <script src="{{StaticUrlPrefix}}/js/placeholder-home.js?v={{TimeStampNow}}"></script> | |||||
| <div class="ui vertical masthead secondary hometop segment" style="background:transparent;margin-bottom:0"> | <div class="ui vertical masthead secondary hometop segment" style="background:transparent;margin-bottom:0"> | ||||
| {{template "custom/home/home_top" .}} | {{template "custom/home/home_top" .}} | ||||
| </div> | </div> | ||||
| @@ -160,7 +162,7 @@ | |||||
| --> | --> | ||||
| <!-- <div class="am-mt-30"></div> --> | <!-- <div class="am-mt-30"></div> --> | ||||
| <script src="/self/js/jquery.min.js" type="text/javascript"></script> | |||||
| <script src="/self/js/jquery.min.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||||
| <script src="/home/home.js?v={{MD5 AppVer}}" type="text/javascript"></script> | <script src="/home/home.js?v={{MD5 AppVer}}" type="text/javascript"></script> | ||||
| @@ -1,5 +1,5 @@ | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css"> | |||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css?v={{MD5 AppVer}}" type="text/css"> | |||||
| <style> | <style> | ||||
| .model_file_bread { | .model_file_bread { | ||||
| margin-bottom: -0.5rem !important; | margin-bottom: -0.5rem !important; | ||||
| @@ -514,8 +514,8 @@ | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js?v={{MD5 AppVer}}"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script> | <script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script> | ||||
| <script> | <script> | ||||
| @@ -27,7 +27,7 @@ | |||||
| <table id="dataset-files-table" class="ui single line table"> | <table id="dataset-files-table" class="ui single line table"> | ||||
| </table> | </table> | ||||
| <script src="{{StaticUrlPrefix}}/self/test.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/test.js?v={{MD5 AppVer}}"></script> | |||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||
| @@ -208,5 +208,5 @@ | |||||
| } | } | ||||
| } | } | ||||
| </script> | </script> | ||||
| <script src="{{StaticUrlPrefix}}/self/dataset_preview.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/dataset_preview.js?v={{MD5 AppVer}}"></script> | |||||
| {{end}} | {{end}} | ||||
| @@ -215,7 +215,7 @@ | |||||
| <script src="/self/labelTaskPage.js"></script> | |||||
| <script src="/self/labelTaskPage.js?v={{MD5 AppVer}}"></script> | |||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| @@ -1,5 +1,5 @@ | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css"> | |||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css?v={{MD5 AppVer}}" type="text/css"> | |||||
| <style> | <style> | ||||
| .model_file_bread { | .model_file_bread { | ||||
| margin-bottom: -0.5rem !important; | margin-bottom: -0.5rem !important; | ||||
| @@ -553,8 +553,8 @@ | |||||
| </div> | </div> | ||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js?v={{MD5 AppVer}}"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script> | <script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script> | ||||
| <script> | <script> | ||||
| ;(function() { | ;(function() { | ||||
| @@ -225,14 +225,14 @@ | |||||
| <script src="{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}"></script> | <script src="{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}"></script> | ||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/es5-shim.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/marked.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/purify.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/ansi_up.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/prism.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/katex.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/katex-auto-render.min.js"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/notebook.min.js"></script> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/self/css/notebook/katex.min.css" /> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/self/css/notebook/prism.css" /> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/self/css/notebook/notebook.css" /> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/es5-shim.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/marked.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/purify.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/ansi_up.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/prism.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/katex.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/katex-auto-render.min.js?v={{MD5 AppVer}}"></script> | |||||
| <script src="{{StaticUrlPrefix}}/self/js/notebook/notebook.min.js?v={{MD5 AppVer}}"></script> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/self/css/notebook/katex.min.css?v={{MD5 AppVer}}" /> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/self/css/notebook/prism.css?v={{MD5 AppVer}}" /> | |||||
| <link rel="stylesheet" href="{{StaticUrlPrefix}}/self/css/notebook/notebook.css?v={{MD5 AppVer}}" /> | |||||
| @@ -448,7 +448,7 @@ | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <!-- <script src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js"></script> --> | |||||
| <!-- <script src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js?v={{MD5 AppVer}}"></script> --> | |||||
| <!-- <script> | <!-- <script> | ||||
| $(document) | $(document) | ||||
| @@ -1,5 +1,5 @@ | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css"> | |||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css?v={{MD5 AppVer}}" type="text/css"> | |||||
| <script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script> | <script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script> | ||||
| <style> | <style> | ||||
| @@ -574,8 +574,8 @@ | |||||
| </div> | </div> | ||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js?v={{MD5 AppVer}}"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js?v={{MD5 AppVer}}"></script> | |||||
| <script> | <script> | ||||
| var setting = { | var setting = { | ||||
| check: { | check: { | ||||
| @@ -1,5 +1,5 @@ | |||||
| {{template "base/head" .}} | {{template "base/head" .}} | ||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css"> | |||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css?v={{MD5 AppVer}}" type="text/css"> | |||||
| <style> | <style> | ||||
| #newmodel .header { | #newmodel .header { | ||||
| height: 45px; | height: 45px; | ||||
| @@ -180,8 +180,8 @@ | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js?v={{MD5 AppVer}}"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js?v={{MD5 AppVer}}"></script> | |||||
| <script> | <script> | ||||
| ;(function() { | ;(function() { | ||||
| var setting = { | var setting = { | ||||
| @@ -43,7 +43,7 @@ | |||||
| color: #fff; | color: #fff; | ||||
| } | } | ||||
| </style> | </style> | ||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css"> | |||||
| <link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css?v={{MD5 AppVer}}" type="text/css"> | |||||
| <script>var REPO_IS_PRIVATE = {{.Repository.IsPrivate}};</script> | <script>var REPO_IS_PRIVATE = {{.Repository.IsPrivate}};</script> | ||||
| <!-- 弹窗 --> | <!-- 弹窗 --> | ||||
| @@ -266,8 +266,8 @@ | |||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js?v={{MD5 AppVer}}"></script> | |||||
| <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js?v={{MD5 AppVer}}"></script> | |||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||
| var setting = { | var setting = { | ||||
| @@ -163,11 +163,11 @@ | |||||
| return obj; | return obj; | ||||
| }; | }; | ||||
| var sharedUser = getUrlParams()['sharedUser']; | var sharedUser = getUrlParams()['sharedUser']; | ||||
| if (sharedUser) { | |||||
| setTimeout(function() { | |||||
| $('.invitation_tips').show().find('.__invitation_code__').text(sharedUser); | |||||
| $('input#invitation_code').val(sharedUser).attr('readonly', true); | |||||
| }, 20); | |||||
| if (sharedUser) { | |||||
| document.querySelector('.invitation_tips').style.display = "block"; | |||||
| document.querySelector('.__invitation_code__').innerText = sharedUser; | |||||
| document.querySelector('#invitation_code').value = sharedUser; | |||||
| document.querySelector('#invitation_code').setAttribute("readonly", "true"); | |||||
| } | } | ||||
| })(); | })(); | ||||
| </script> | </script> | ||||
| @@ -71,7 +71,7 @@ | |||||
| <div class="row"> | <div class="row"> | ||||
| <!-- 任务名 --> | <!-- 任务名 --> | ||||
| {{$JobID := '0'}} | {{$JobID := '0'}} | ||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK" "MODELSAFETY"}} | |||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK" "MODELSAFETY" "SNN4ECOSET"}} | |||||
| {{$JobID = .Cloudbrain.ID}} | {{$JobID = .Cloudbrain.ID}} | ||||
| {{else}} | {{else}} | ||||
| {{$JobID = .JobID}} | {{$JobID = .JobID}} | ||||
| @@ -85,7 +85,7 @@ | |||||
| <span class="fitted" | <span class="fitted" | ||||
| style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span> | ||||
| </a> | </a> | ||||
| {{else if (eq .JobType "SNN4IMAGENET" "BRAINSCORE")}} | |||||
| {{else if (eq .JobType "SNN4IMAGENET" "BRAINSCORE" "SNN4ECOSET")}} | |||||
| <a class="title" | <a class="title" | ||||
| href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}/cloudbrain/benchmark/{{$JobID}}" | href="{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}/cloudbrain/benchmark/{{$JobID}}" | ||||
| title="{{.DisplayJobName}}" style="font-size: 14px;padding-right:0px"> | title="{{.DisplayJobName}}" style="font-size: 14px;padding-right:0px"> | ||||
| @@ -224,7 +224,7 @@ | |||||
| </a> | </a> | ||||
| </form> | </form> | ||||
| {{else}} | {{else}} | ||||
| {{if eq .JobType "DEBUG" "BENCHMARK" "SNN4IMAGENET" "BRAINSCORE"}} | |||||
| {{if eq .JobType "DEBUG" "BENCHMARK" "SNN4IMAGENET" "BRAINSCORE" "SNN4ECOSET"}} | |||||
| <form id="stopForm-{{$JobID}}" style="margin-left:-1px;"> | <form id="stopForm-{{$JobID}}" style="margin-left:-1px;"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| <a style="padding: 0.5rem 1rem;" id="ai-stop-{{$JobID}}" | <a style="padding: 0.5rem 1rem;" id="ai-stop-{{$JobID}}" | ||||
| @@ -274,7 +274,7 @@ | |||||
| </form> | </form> | ||||
| {{else}} | {{else}} | ||||
| <form class="ui compact buttons" id="delForm-{{$JobID}}" | <form class="ui compact buttons" id="delForm-{{$JobID}}" | ||||
| action='{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .JobType "BENCHMARK"}}/cloudbrain/benchmark{{else if or (eq .JobType "SNN4IMAGENET") (eq .JobType "BRAINSCORE")}}/cloudbrain{{else if eq .JobType "DEBUG"}}{{if eq .Cloudbrain.Type 2}}/grampus/notebook{{else}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}{{end}}{{else if eq .JobType "TRAIN"}}{{if eq .Cloudbrain.Type 1}}/modelarts/train-job{{else if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{else if eq .Cloudbrain.Type 2}}/grampus/train-job{{end}}{{else if eq .JobType "INFERENCE"}}{{if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{end}}{{end}}/{{$JobID}}/del?ishomepage=true' | |||||
| action='{{AppSubUrl}}/{{.Repo.OwnerName}}/{{.Repo.Name}}{{if eq .JobType "BENCHMARK"}}/cloudbrain/benchmark{{else if or (eq .JobType "SNN4IMAGENET") (eq .JobType "BRAINSCORE") (eq .JobType "SNN4ECOSET")}}/cloudbrain{{else if eq .JobType "DEBUG"}}{{if eq .Cloudbrain.Type 2}}/grampus/notebook{{else}}{{if eq .ComputeResource "CPU/GPU"}}/cloudbrain{{else}}/modelarts/notebook{{end}}{{end}}{{else if eq .JobType "TRAIN"}}{{if eq .Cloudbrain.Type 1}}/modelarts/train-job{{else if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{else if eq .Cloudbrain.Type 2}}/grampus/train-job{{end}}{{else if eq .JobType "INFERENCE"}}{{if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{end}}{{end}}/{{$JobID}}/del?ishomepage=true' | |||||
| method="post"> | method="post"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| <a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{$JobID}}" | <a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{$JobID}}" | ||||
| @@ -290,7 +290,7 @@ | |||||
| </div> | </div> | ||||
| {{else}} | {{else}} | ||||
| {{$JobID := '0'}} | {{$JobID := '0'}} | ||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK"}} | |||||
| {{if eq .JobType "DEBUG" "SNN4IMAGENET" "BRAINSCORE" "BENCHMARK" "SNN4ECOSET"}} | |||||
| {{$JobID = .Cloudbrain.ID}} | {{$JobID = .Cloudbrain.ID}} | ||||
| {{else}} | {{else}} | ||||
| {{$JobID = .JobID}} | {{$JobID = .JobID}} | ||||
| @@ -5221,7 +5221,7 @@ function initTopToHome() { | |||||
| } | } | ||||
| }); | }); | ||||
| topToHomeEl.on('click', function() { | topToHomeEl.on('click', function() { | ||||
| $('html').animate({ scrollTop: 0 }, 'slow', 'swing'); | |||||
| $('html,body').animate({ scrollTop: 0 }, 'slow', 'swing'); | |||||
| }); | }); | ||||
| } | } | ||||