milestone: list view

This commit is contained in:
Unknwon committed 2015-08-03 17:42:09 +08:00
1 parent 8e8d535e23
commit 04458d49a0
16 files changed
+274 -131

No files matched your search

+5 -5
View File
@@ -330,7 +330,7 @@ func runWeb(ctx *cli.Context) {
m.Get("/template/*", dev.TemplatePreview) m.Get("/template/*", dev.TemplatePreview)
} }
reqAdmin := middleware.RequireAdmin() reqRepoAdmin := middleware.RequireRepoAdmin()
// Organization. // Organization.
m.Group("/org", func() { m.Group("/org", func() {
@@ -405,7 +405,7 @@ func runWeb(ctx *cli.Context) {
m.Post("/:name", repo.GitHooksEditPost) m.Post("/:name", repo.GitHooksEditPost)
}, middleware.GitHookService()) }, middleware.GitHookService())
}) })
}, reqSignIn, middleware.RepoAssignment(true), reqAdmin) }, reqSignIn, middleware.RepoAssignment(true), reqRepoAdmin)
m.Group("/:username/:reponame", func() { m.Group("/:username/:reponame", func() {
m.Get("/action/:action", repo.Action) m.Get("/action/:action", repo.Action)
@@ -423,14 +423,14 @@ func runWeb(ctx *cli.Context) {
m.Post("/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel) m.Post("/new", bindIgnErr(auth.CreateLabelForm{}), repo.NewLabel)
m.Post("/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel) m.Post("/edit", bindIgnErr(auth.CreateLabelForm{}), repo.UpdateLabel)
m.Post("/delete", repo.DeleteLabel) m.Post("/delete", repo.DeleteLabel)
}) }, reqRepoAdmin)
m.Group("/milestones", func() { m.Group("/milestones", func() {
m.Get("/new", repo.NewMilestone) m.Get("/new", repo.NewMilestone)
m.Post("/new", bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost) m.Post("/new", bindIgnErr(auth.CreateMilestoneForm{}), repo.NewMilestonePost)
m.Get("/:index/edit", repo.UpdateMilestone) m.Get("/:index/edit", repo.UpdateMilestone)
m.Post("/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.UpdateMilestonePost) m.Post("/:index/edit", bindIgnErr(auth.CreateMilestoneForm{}), repo.UpdateMilestonePost)
m.Get("/:index/:action", repo.UpdateMilestone) m.Get("/:index/:action", repo.UpdateMilestone)
}) }, reqRepoAdmin)
m.Post("/comment/:action", repo.Comment) m.Post("/comment/:action", repo.Comment)
@@ -439,7 +439,7 @@ func runWeb(ctx *cli.Context) {
m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost) m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
m.Get("/edit/:tagname", repo.EditRelease) m.Get("/edit/:tagname", repo.EditRelease)
m.Post("/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost) m.Post("/edit/:tagname", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)
}, middleware.RepoRef()) }, reqRepoAdmin, middleware.RepoRef())
}, reqSignIn, middleware.RepoAssignment(true)) }, reqSignIn, middleware.RepoAssignment(true))
m.Group("/:username/:reponame", func() { m.Group("/:username/:reponame", func() {
+8
View File
@@ -392,6 +392,14 @@ issues.label_deletion = Label Deletion
issues.label_deletion_desc = Delete label will remove its information in all related issues. Do you want to continue? issues.label_deletion_desc = Delete label will remove its information in all related issues. Do you want to continue?
issues.label_deletion_success = Label has been deleted successfully! issues.label_deletion_success = Label has been deleted successfully!
milestones.new = New Milestone
milestones.open_tab = %d Open
milestones.close_tab = %d Closed
milestones.closed = Closed %s
milestones.no_due_date = No due date
milestones.open = Open
milestones.close = Close
settings = Settings settings = Settings
settings.options = Options settings.options = Options
settings.collaboration = Collaboration settings.collaboration = Collaboration
+1 -1
View File
@@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )
const APP_VER = "0.6.3.0802 Beta" const APP_VER = "0.6.3.0803 Beta"
func init() { func init() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())
+19 -13
View File
@@ -626,7 +626,7 @@ func DeleteLabel(repoID, labelID int64) error {
// Milestone represents a milestone of repository. // Milestone represents a milestone of repository.
type Milestone struct { type Milestone struct {
Id int64 ID int64 `xorm:"pk autoincr"`
RepoId int64 `xorm:"INDEX"` RepoId int64 `xorm:"INDEX"`
Index int64 Index int64
Name string Name string
@@ -670,7 +670,7 @@ func NewMilestone(m *Milestone) (err error) {
// GetMilestoneById returns the milestone by given ID. // GetMilestoneById returns the milestone by given ID.
func GetMilestoneById(id int64) (*Milestone, error) { func GetMilestoneById(id int64) (*Milestone, error) {
m := &Milestone{Id: id} m := &Milestone{ID: id}
has, err := x.Get(m) has, err := x.Get(m)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -692,16 +692,15 @@ func GetMilestoneByIndex(repoId, idx int64) (*Milestone, error) {
return m, nil return m, nil
} }
// GetMilestones returns a list of milestones of given repository and status. // Milestones returns a list of milestones of given repository and status.
func GetMilestones(repoId int64, isClosed bool) ([]*Milestone, error) { func Milestones(repoID int64, isClosed bool) ([]*Milestone, error) {
miles := make([]*Milestone, 0, 10) miles := make([]*Milestone, 0, 10)
err := x.Where("repo_id=?", repoId).And("is_closed=?", isClosed).Find(&miles) return miles, x.Where("repo_id=? AND is_closed=?", repoID, isClosed).Find(&miles)
return miles, err
} }
// UpdateMilestone updates information of given milestone. // UpdateMilestone updates information of given milestone.
func UpdateMilestone(m *Milestone) error { func UpdateMilestone(m *Milestone) error {
_, err := x.Id(m.Id).Update(m) _, err := x.Id(m.ID).AllCols().Update(m)
return err return err
} }
@@ -719,7 +718,7 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
} }
m.IsClosed = isClosed m.IsClosed = isClosed
if _, err = sess.Id(m.Id).AllCols().Update(m); err != nil { if _, err = sess.Id(m.ID).AllCols().Update(m); err != nil {
sess.Rollback() sess.Rollback()
return err return err
} }
@@ -786,7 +785,7 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) {
m.Completeness = 0 m.Completeness = 0
} }
if _, err = sess.Id(m.Id).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { if _, err = sess.Id(m.ID).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil {
sess.Rollback() sess.Rollback()
return err return err
} }
@@ -814,13 +813,13 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) {
} }
m.Completeness = m.NumClosedIssues * 100 / m.NumIssues m.Completeness = m.NumClosedIssues * 100 / m.NumIssues
if _, err = sess.Id(m.Id).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil { if _, err = sess.Id(m.ID).Cols("num_issues,num_completeness,num_closed_issues").Update(m); err != nil {
sess.Rollback() sess.Rollback()
return err return err
} }
rawSql := "UPDATE `issue_user` SET milestone_id = ? WHERE issue_id = ?" rawSql := "UPDATE `issue_user` SET milestone_id = ? WHERE issue_id = ?"
if _, err = sess.Exec(rawSql, m.Id, issue.ID); err != nil { if _, err = sess.Exec(rawSql, m.ID, issue.ID); err != nil {
sess.Rollback() sess.Rollback()
return err return err
} }
@@ -849,19 +848,26 @@ func DeleteMilestone(m *Milestone) (err error) {
} }
rawSql = "UPDATE `issue` SET milestone_id = 0 WHERE milestone_id = ?" rawSql = "UPDATE `issue` SET milestone_id = 0 WHERE milestone_id = ?"
if _, err = sess.Exec(rawSql, m.Id); err != nil { if _, err = sess.Exec(rawSql, m.ID); err != nil {
sess.Rollback() sess.Rollback()
return err return err
} }
rawSql = "UPDATE `issue_user` SET milestone_id = 0 WHERE milestone_id = ?" rawSql = "UPDATE `issue_user` SET milestone_id = 0 WHERE milestone_id = ?"
if _, err = sess.Exec(rawSql, m.Id); err != nil { if _, err = sess.Exec(rawSql, m.ID); err != nil {
sess.Rollback() sess.Rollback()
return err return err
} }
return sess.Commit() return sess.Commit()
} }
// MilestoneStats returns stats of open and closed milestone count of given repository.
func MilestoneStats(repoID int64) (open int64, closed int64) {
open, _ = x.Where("repo_id=? AND is_closed=?", repoID, false).Count(new(Milestone))
closed, _ = x.Where("repo_id=? AND is_closed=?", repoID, true).Count(new(Milestone))
return open, closed
}
// _________ __ // _________ __
// \_ ___ \ ____ _____ _____ ____ _____/ |_ // \_ ___ \ ____ _____ _____ ____ _____/ |_
// / \ \/ / _ \ / \ / \_/ __ \ / \ __\ // / \ \/ / _ \ / \ / \_/ __ \ / \ __\
+8 -8
View File
@@ -127,7 +127,7 @@ func confAppIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/app.ini", size: 8982, mode: os.FileMode(420), modTime: time.Unix(1438316323, 0)} info := bindataFileInfo{name: "conf/app.ini", size: 8982, mode: os.FileMode(420), modTime: time.Unix(1438485627, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
@@ -747,7 +747,7 @@ func confLocaleLocale_bgBgIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/locale/locale_bg-BG.ini", size: 51641, mode: os.FileMode(493), modTime: time.Unix(1438236616, 0)} info := bindataFileInfo{name: "conf/locale/locale_bg-BG.ini", size: 51641, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
@@ -767,12 +767,12 @@ func confLocaleLocale_deDeIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/locale/locale_de-DE.ini", size: 36233, mode: os.FileMode(493), modTime: time.Unix(1438236774, 0)} info := bindataFileInfo{name: "conf/locale/locale_de-DE.ini", size: 36233, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x7d\xdb\x72\x1c\x47\xd2\xde\x7d\x3f\x45\x4b\x0e\x9a\x52\x04\x38\x0c\x49\x61\x87\x43\x41\x52\x86\x00\xf1\xb0\x3f\x71\xf8\x09\x70\xd7\x6b\x06\xa3\xb7\x31\xdd\x98\xe9\xc5\x4c\xf7\xa8\x0f\x18\x61\xaf\xfc\x1a\x7e\x3d\x3f\x89\x33\xbf\xcc\xac\x43\x77\x0f\x28\xed\x3a\xfc\xdf\x00\x35\x55\x59\xa7\xac\xac\xac\x3c\x55\x75\xbe\xdb\x65\x45\xd9\x2d\xd3\x97\xe9\x71\xba\xcb\xab\x7a\x53\x76\x5d\xda\x95\x9b\xdb\x67\xeb\xa6\xeb\xcb\x22\x7d\x53\xf5\xf4\xbb\xbd\xaf\x96\x65\x92\xac\x9b\x6d\x49\xa0\x6f\xe9\x5f\x52\xe4\xdd\xfa\xa6\xc9\xdb\x82\x32\x4e\x2d\x9d\x94\xbf\xed\x36\x4d\xcb\x40\xbf\x48\x2a\x59\x97\x9b\x1d\xd7\xa1\x7f\x49\x57\xad\xea\xac\xaa\xe9\xe7\x15\xa5\xd2\x77\x75\xd2\x35\xcb\x2a\xdf\x64\x41\x01\x32\xac\xfc\xc7\xf4\xfb\xba\x48\xaf\xfa\x72\x97\xbe\xe8\xb6\xf9\x66\xf3\x2a\xef\x50\xa5\x2f\xd3\x7c\xb9\x6c\x86\xba\x7f\xf1\x5c\x0a\xa4\xf1\x66\xe8\xad\xf5\x8b\xa1\x97\xbc\x61\x67\x59\x1f\x77\x49\x5b\xae\x2a\x9a\x58\x4b\x59\x1f\x34\x99\xec\xcb\x9b\xae\xea\x79\xd0\x7f\x91\x54\x72\x5f\xb6\x5d\xd5\xf0\x78\xfe\x2c\xa9\x64\x97\xaf\x18\xe0\x92\xfe\x25\x7d\xb9\xdd\x6d\x72\x54\xb8\xd6\x64\xb2\xc9\xeb\xd5\x20\x30\xef\x35\x99\x24\x03\x61\xae\xce\x81\xb3\x8f\x9a\x4c\xca\x6d\x5e\x6d\x18\x3f\xcf\x38\x41\xed\x76\xdd\xbe\x01\x16\x2f\x35\x49\x63\xcc\xfa\x87\x5d\x89\x21\x3e\xbb\xa6\x54\xb2\xcc\x77\xfd\x72\x9d\x53\xce\x89\xa4\x12\x02\xda\x35\x34\xd6\xa6\x7d\x00\x9c\xfd\x48\x9a\x76\x95\xd7\xd5\x3f\xf2\x5e\xc6\x7f\x11\xfc\x4c\xb6\x55\xdb\x36\x3c\xf5\x33\x24\x92\xba\xdc\x67\xdc\x0e\xe5\x9c\x97\xfb\xb0\x15\x2e\xd9\x56\xab\x56\x66\xc9\x85\x67\xf8\xc5\xad\x70\xd9\x6d\xd3\xde\x69\xc1\x6b\x4e\x8e\xaa\xd2\x20\xb4\x34\xee\x3f\xaf\x09\x2f\x5a\x7a\x86\x1f\x11\x40\x97\xe4\xc5\xb6\xaa\xb3\x5d\x5e\x97\x8c\xa3\x63\xfe\x45\x78\xa1\x5f\x89\x2e\x77\xd6\x95\x7d\x5f\xd5\xab\x8e\x8b\x25\x2b\xbd\xd2\xac\x24\x28\x73\x79\x3c\x9e\x2e\xbb\x2d\xcb\x42\x46\xd4\xa5\xaf\x29\x9d\xec\x86\xcd\x86\xe6\xfe\xeb\x50\x76\x3d\xc3\x5f\xd2\x6f\x9a\x85\xfc\x4e\xaa\xae\xa3\x04\x65\xbf\x43\x22\xa1\x05\xa8\x97\x18\xd2\x09\x12\x49\xf2\xa9\x2b\xf3\x76\xb9\xfe\x9c\xc8\x7f\xf4\xc8\x89\xc5\x62\x71\x70\x69\x98\x1c\x94\x14\xa4\x07\xeb\x20\x59\x36\x05\xff\x38\xa1\x7f\xd4\x74\x55\x77\x3d\x91\xf4\xe7\x44\x13\x0c\x26\x29\x41\x63\x5f\xf5\x9b\xd2\x67\x62\x7f\x74\xbc\x0e\xe9\xeb\xaa\xed\xfa\x67\x7d\x45\x24\xf7\x61\xa8\x13\x9e\x1f\x91\x73\x56\xdc\xd8\x2e\x7f\xd3\x10\x76\x90\xdd\xd2\xfc\xce\x1e\xae\xfe\xfd\xfd\x51\x7a\x49\x5b\x7d\xd5\x96\x94\x4e\xa9\x0d\xfa\x47\x75\x7e\x58\x24\x54\xcb\x7a\x3a\xcd\xfb\xfc\x26\xef\x4a\x8f\x56\x2e\x14\x1a\x75\x65\xa0\x54\x66\x1b\x60\x11\x5d\x1f\xcd\x77\x8e\xce\xa9\x0d\xdd\x1d\xae\x8d\x73\xde\x22\x94\xcf\x5c\x03\x95\x2f\x37\x25\xe7\x53\x53\xe9\xbb\xf3\xf3\x8b\xd3\x9f\xd3\xb2\x5e\x55\x75\x99\xee\xab\x7e\x9d\x0e\xfd\xed\x7f\xcb\x56\x65\x5d\xb6\xc4\x44\x96\x55\x4a\x3b\xa3\x25\x22\x48\x89\x3c\x65\x72\x8b\xa4\xeb\x36\xd9\x56\xd0\x7b\x75\xf5\x3e\x3d\x63\x14\xef\xf2\x7e\x8d\x81\xf4\xeb\xa4\xfb\x75\xc3\x28\x72\x1d\x5e\xaf\xcb\xf4\xb6\xa2\x59\x03\xa8\xb9\x35\x7c\xa4\x85\x8e\x71\x91\x94\x6d\x9b\xd1\xbe\xef\x1f\x32\xad\xac\xed\x8d\x21\xa5\x09\x22\x9d\xba\xe9\xd3\x9b\x32\x45\x9d\x45\x92\xd8\x80\x0d\xbb\xc7\xbb\xdd\xa6\x5a\xca\x8e\x7d\x23\x65\x1e\xd1\xcc\xa2\x15\x4b\x21\x1c\x10\x65\x65\x01\xba\x88\xff\x3d\x34\x43\x9b\x46\x6c\x00\xf5\xd7\x25\xf1\xe5\xf5\x40\x5b\x2e\x27\x9e\xba\x69\x86\xe2\x2b\x50\xaa\x8d\xde\x13\x6a\xfa\xa1\xa1\x01\x03\x3b\x0e\xc0\x77\x71\x4c\x14\xc7\xa7\x42\x5b\x6e\x1b\xe2\x0e\x8e\xd8\x2b\x22\xa8\x7d\x45\x85\x34\xd3\x2e\xbf\xa7\xfd\xd6\x37\x69\xbf\xae\xba\xb4\x20\x62\x5b\x72\xc3\xb4\x35\x06\xe2\xc7\x42\x16\x44\xa0\x42\x1a\x96\x17\xaf\x01\xa0\xb6\x03\x51\xd3\x9a\x1a\x63\x6e\xcf\x47\x13\x35\x39\x37\x4e\x4c\x89\xda\x01\x7d\x13\xe5\x36\xc4\x5b\x99\xfb\x9d\x22\xa1\xbf\xc3\xf6\x69\x54\xf9\xed\x2d\x8d\xaa\x23\xaa\x78\x9b\x2e\x37\x0d\x91\xd4\xc7\x0f\xef\xa9\xf2\xba\xef\x77\xd9\xae\x69\x41\xc6\xd7\xd7\x97\xb4\x3d\xda\xde\xe7\x06\xb8\x66\x98\x7a\xd8\xde\xd0\xaf\xfd\xba\x22\x26\x90\x07\x0b\x04\x54\x6c\xf8\x80\xa9\xd3\xa6\x5e\x60\xad\x86\x76\x33\x5a\x46\xea\xd2\x4a\x0e\x0c\x8f\x87\xf0\x9c\xff\x5c\xf9\x51\x62\xba\x1d\x9d\xc2\x7b\x2c\x2a\x4d\xb5\xc4\x69\x42\xb4\xd5\xec\xb8\xdd\x80\xb8\x2e\x34\xc3\x53\x14\x4e\x20\x57\x2e\xe7\x10\x95\xe2\x8c\x0f\x78\xe9\x96\x26\xac\xbb\xf9\xea\x8c\xd0\x80\x2d\x8d\xdc\xdb\xb6\xd9\x52\xee\x6b\xfa\xe7\x33\xfc\xf0\xcf\xb8\x3d\xc0\xe4\x45\x41\x6c\xa6\x3b\x4a\x3f\xbc\x3e\x49\xff\xcb\x0f\xdf\x7f\xbf\x48\xdf\xf5\xbc\x21\x98\x46\xfe\xce\x6b\x4b\x49\x39\x10\x1d\x28\xed\xdc\x9e\x96\xff\x6b\x26\xf0\xaf\xd3\x17\x28\xfd\xef\xe5\x6f\x39\x9d\xb3\xe5\x62\xd9\x6c\x5f\xf1\xe6\xde\xe6\xfd\x22\xe1\x12\xa2\x1a\x25\xa7\xab\xb2\x2e\x28\xa1\xc7\xaa\x96\x05\x5c\x47\xcb\x83\x43\x56\x4e\xff\x6c\xd9\xd4\xb7\x55\xcb\x13\xfa\xa5\xce\x6f\x08\x27\x26\x17\x10\x3b\x46\x89\x9d\x5d\x84\x34\xda\xc8\xd5\xed\x83\x07\xc5\x54\xcf\x39\x53\x17\x34\x61\x59\x89\x1a\x55\x91\xc9\x61\xf9\x0a\xd9\x58\xb7\x0b\x9a\x5e\x6b\xf8\xee\x3c\xc2\x9b\xdb\xdb\x0d\x31\x36\x63\x56\xda\xc3\x85\xe4\x0a\xdf\x0a\x41\x88\x18\x77\x90\x6c\x4Line truncated var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x7d\xdb\x72\x1c\x47\xd2\xde\x7d\x3f\x45\x4b\x0e\x9a\x52\x04\x38\x0c\x49\x61\x87\x43\x41\x52\x86\x00\xf1\xb0\x3f\x71\xf8\x09\x70\xd7\x6b\x06\xa3\xb7\x31\xdd\x98\xe9\xc5\x4c\xf7\xa8\x0f\x18\x61\xaf\xfc\x1a\x7e\x3d\x3f\x89\x33\xbf\xcc\xac\x43\x77\x0f\x28\xed\x3a\xfc\xdf\x00\x35\x55\x59\xa7\xac\xac\xac\x3c\x55\x75\xbe\xdb\x65\x45\xd9\x2d\xd3\x97\xe9\x71\xba\xcb\xab\x7a\x53\x76\x5d\xda\x95\x9b\xdb\x67\xeb\xa6\xeb\xcb\x22\x7d\x53\xf5\xf4\xbb\xbd\xaf\x96\x65\x92\xac\x9b\x6d\x49\xa0\x6f\xe9\x5f\x52\xe4\xdd\xfa\xa6\xc9\xdb\x82\x32\x4e\x2d\x9d\x94\xbf\xed\x36\x4d\xcb\x40\xbf\x48\x2a\x59\x97\x9b\x1d\xd7\xa1\x7f\x49\x57\xad\xea\xac\xaa\xe9\xe7\x15\xa5\xd2\x77\x75\xd2\x35\xcb\x2a\xdf\x64\x41\x01\x32\xac\xfc\xc7\xf4\xfb\xba\x48\xaf\xfa\x72\x97\xbe\xe8\xb6\xf9\x66\xf3\x2a\xef\x50\xa5\x2f\xd3\x7c\xb9\x6c\x86\xba\x7f\xf1\x5c\x0a\xa4\xf1\x66\xe8\xad\xf5\x8b\xa1\x97\xbc\x61\x67\x59\x1f\x77\x49\x5b\xae\x2a\x9a\x58\x4b\x59\x1f\x34\x99\xec\xcb\x9b\xae\xea\x79\xd0\x7f\x91\x54\x72\x5f\xb6\x5d\xd5\xf0\x78\xfe\x2c\xa9\x64\x97\xaf\x18\xe0\x92\xfe\x25\x7d\xb9\xdd\x6d\x72\x54\xb8\xd6\x64\xb2\xc9\xeb\xd5\x20\x30\xef\x35\x99\x24\x03\x61\xae\xce\x81\xb3\x8f\x9a\x4c\xca\x6d\x5e\x6d\x18\x3f\xcf\x38\x41\xed\x76\xdd\xbe\x01\x16\x2f\x35\x49\x63\xcc\xfa\x87\x5d\x89\x21\x3e\xbb\xa6\x54\xb2\xcc\x77\xfd\x72\x9d\x53\xce\x89\xa4\x12\x02\xda\x35\x34\xd6\xa6\x7d\x00\x9c\xfd\x48\x9a\x76\x95\xd7\xd5\x3f\xf2\x5e\xc6\x7f\x11\xfc\x4c\xb6\x55\xdb\x36\x3c\xf5\x33\x24\x92\xba\xdc\x67\xdc\x0e\xe5\x9c\x97\xfb\xb0\x15\x2e\xd9\x56\xab\x56\x66\xc9\x85\x67\xf8\xc5\xad\x70\xd9\x6d\xd3\xde\x69\xc1\x6b\x4e\x8e\xaa\xd2\x20\xb4\x34\xee\x3f\xaf\x09\x2f\x5a\x7a\x86\x1f\x11\x40\x97\xe4\xc5\xb6\xaa\xb3\x5d\x5e\x97\x8c\xa3\x63\xfe\x45\x78\xa1\x5f\x89\x2e\x77\xd6\x95\x7d\x5f\xd5\xab\x8e\x8b\x25\x2b\xbd\xd2\xac\x24\x28\x73\x79\x3c\x9e\x2e\xbb\x2d\xcb\x42\x46\xd4\xa5\xaf\x29\x9d\xec\x86\xcd\x86\xe6\xfe\xeb\x50\x76\x3d\xc3\x5f\xd2\x6f\x9a\x85\xfc\x4e\xaa\xae\xa3\x04\x65\xbf\x43\x22\xa1\x05\xa8\x97\x18\xd2\x09\x12\x49\xf2\xa9\x2b\xf3\x76\xb9\xfe\x9c\xc8\x7f\xf4\xc8\x89\xc5\x62\x71\x70\x69\x98\x1c\x94\x14\xa4\x07\xeb\x20\x59\x36\x05\xff\x38\xa1\x7f\xd4\x74\x55\x77\x3d\x91\xf4\xe7\x44\x13\x0c\x26\x29\x41\x63\x5f\xf5\x9b\xd2\x67\x62\x7f\x74\xbc\x0e\xe9\xeb\xaa\xed\xfa\x67\x7d\x45\x24\xf7\x61\xa8\x13\x9e\x1f\x91\x73\x56\xdc\xd8\x2e\x7f\xd3\x10\x76\x90\xdd\xd2\xfc\xce\x1e\xae\xfe\xfd\xfd\x51\x7a\x49\x5b\x7d\xd5\x96\x94\x4e\xa9\x0d\xfa\x47\x75\x7e\x58\x24\x54\xcb\x7a\x3a\xcd\xfb\xfc\x26\xef\x4a\x8f\x56\x2e\x14\x1a\x75\x65\xa0\x54\x66\x1b\x60\x11\x5d\x1f\xcd\x77\x8e\xce\xa9\x0d\xdd\x1d\xae\x8d\x73\xde\x22\x94\xcf\x5c\x03\x95\x2f\x37\x25\xe7\x53\x53\xe9\xbb\xf3\xf3\x8b\xd3\x9f\xd3\xb2\x5e\x55\x75\x99\xee\xab\x7e\x9d\x0e\xfd\xed\x7f\xcb\x56\x65\x5d\xb6\xc4\x44\x96\x55\x4a\x3b\xa3\x25\x22\x48\x89\x3c\x65\x72\x8b\xa4\xeb\x36\xd9\x56\xd0\x7b\x75\xf5\x3e\x3d\x63\x14\xef\xf2\x7e\x8d\x81\xf4\xeb\xa4\xfb\x75\xc3\x28\x72\x1d\x5e\xaf\xcb\xf4\xb6\xa2\x59\x03\xa8\xb9\x35\x7c\xa4\x85\x8e\x71\x91\x94\x6d\x9b\xd1\xbe\xef\x1f\x32\xad\xac\xed\x8d\x21\xa5\x09\x22\x9d\xba\xe9\xd3\x9b\x32\x45\x9d\x45\x92\xd8\x80\x0d\xbb\xc7\xbb\xdd\xa6\x5a\xca\x8e\x7d\x23\x65\x1e\xd1\xcc\xa2\x15\x4b\x21\x1c\x10\x65\x65\x01\xba\x88\xff\x3d\x34\x43\x9b\x46\x6c\x00\xf5\xd7\x25\xf1\xe5\xf5\x40\x5b\x2e\x27\x9e\xba\x69\x86\xe2\x2b\x50\xaa\x8d\xde\x13\x6a\xfa\xa1\xa1\x01\x03\x3b\x0e\xc0\x77\x71\x4c\x14\xc7\xa7\x42\x5b\x6e\x1b\xe2\x0e\x8e\xd8\x2b\x22\xa8\x7d\x45\x85\x34\xd3\x2e\xbf\xa7\xfd\xd6\x37\x69\xbf\xae\xba\xb4\x20\x62\x5b\x72\xc3\xb4\x35\x06\xe2\xc7\x42\x16\x44\xa0\x42\x1a\x96\x17\xaf\x01\xa0\xb6\x03\x51\xd3\x9a\x1a\x63\x6e\xcf\x47\x13\x35\x39\x37\x4e\x4c\x89\xda\x01\x7d\x13\xe5\x36\xc4\x5b\x99\xfb\x9d\x22\xa1\xbf\xc3\xf6\x69\x54\xf9\xed\x2d\x8d\xaa\x23\xaa\x78\x9b\x2e\x37\x0d\x91\xd4\xc7\x0f\xef\xa9\xf2\xba\xef\x77\xd9\xae\x69\x41\xc6\xd7\xd7\x97\xb4\x3d\xda\xde\xe7\x06\xb8\x66\x98\x7a\xd8\xde\xd0\xaf\xfd\xba\x22\x26\x90\x07\x0b\x04\x54\x6c\xf8\x80\xa9\xd3\xa6\x5e\x60\xad\x86\x76\x33\x5a\x46\xea\xd2\x4a\x0e\x0c\x8f\x87\xf0\x9c\xff\x5c\xf9\x51\x62\xba\x1d\x9d\xc2\x7b\x2c\x2a\x4d\xb5\xc4\x69\x42\xb4\xd5\xec\xb8\xdd\x80\xb8\x2e\x34\xc3\x53\x14\x4e\x20\x57\x2e\xe7\x10\x95\xe2\x8c\x0f\x78\xe9\x96\x26\xac\xbb\xf9\xea\x8c\xd0\x80\x2d\x8d\xdc\xdb\xb6\xd9\x52\xee\x6b\xfa\xe7\x33\xfc\xf0\xcf\xb8\x3d\xc0\xe4\x45\x41\x6c\xa6\x3b\x4a\x3f\xbc\x3e\x49\xff\xcb\x0f\xdf\x7f\xbf\x48\xdf\xf5\xbc\x21\x98\x46\xfe\xce\x6b\x4b\x49\x39\x10\x1d\x28\xed\xdc\x9e\x96\xff\x6b\x26\xf0\xaf\xd3\x17\x28\xfd\xef\xe5\x6f\x39\x9d\xb3\xe5\x62\xd9\x6c\x5f\xf1\xe6\xde\xe6\xfd\x22\xe1\x12\xa2\x1a\x25\xa7\xab\xb2\x2e\x28\xa1\xc7\xaa\x96\x05\x5c\x47\xcb\x83\x43\x56\x4e\xff\x6c\xd9\xd4\xb7\x55\xcb\x13\xfa\xa5\xce\x6f\x08\x27\x26\x17\x10\x3b\x46\x89\x9d\x5d\x84\x34\xda\xc8\xd5\xed\x83\x07\xc5\x54\xcf\x39\x53\x17\x34\x61\x59\x89\x1a\x55\x91\xc9\x61\xf9\x0a\xd9\x58\xb7\x0b\x9a\x5e\x6b\xf8\xee\x3c\xc2\x9b\xdb\xdb\x0d\x31\x36\x63\x56\xda\xc3\x85\xe4\x0a\xdf\x0a\x41\x88\x18\x77\x90\x6c\x4Line truncated
func confLocaleLocale_enUsIniBytes() ([]byte, error) { func confLocaleLocale_enUsIniBytes() ([]byte, error) {
return bindataRead( return bindataRead(
@@ -787,7 +787,7 @@ func confLocaleLocale_enUsIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 34063, mode: os.FileMode(420), modTime: time.Unix(1438257711, 0)} info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 34274, mode: os.FileMode(420), modTime: time.Unix(1438594289, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
@@ -847,7 +847,7 @@ func confLocaleLocale_itItIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/locale/locale_it-IT.ini", size: 36360, mode: os.FileMode(493), modTime: time.Unix(1438380590, 0)} info := bindataFileInfo{name: "conf/locale/locale_it-IT.ini", size: 36360, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
@@ -907,7 +907,7 @@ func confLocaleLocale_nlNlIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/locale/locale_nl-NL.ini", size: 35388, mode: os.FileMode(493), modTime: time.Unix(1438236744, 0)} info := bindataFileInfo{name: "conf/locale/locale_nl-NL.ini", size: 35388, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
@@ -1007,7 +1007,7 @@ func confLocaleLocale_zhHkIni() (*asset, error) {
return nil, err return nil, err
} }
info := bindataFileInfo{name: "conf/locale/locale_zh-HK.ini", size: 33652, mode: os.FileMode(493), modTime: time.Unix(1438236704, 0)} info := bindataFileInfo{name: "conf/locale/locale_zh-HK.ini", size: 33652, mode: os.FileMode(493), modTime: time.Unix(1438485627, 0)}
a := &asset{bytes: bytes, info: info} a := &asset{bytes: bytes, info: info}
return a, nil return a, nil
} }
+1 -1
View File
@@ -348,7 +348,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler {
} }
} }
func RequireAdmin() macaron.Handler { func RequireRepoAdmin() macaron.Handler {
return func(ctx *Context) { return func(ctx *Context) {
if ctx.Repo.AccessMode < models.ACCESS_MODE_ADMIN { if ctx.Repo.AccessMode < models.ACCESS_MODE_ADMIN {
if !ctx.IsSigned { if !ctx.IsSigned {
+1 -1
View File
@@ -1 +1 @@
@font-face{font-family:octicons;src:url(../fonts/octicons.eot?#iefix&v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('embedded-opentype'),url(../fonts/octicons.woff?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('woff'),url(../fonts/octicons.ttf?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('truetype'),url(../fonts/octicons.svg?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6#octicons)format('svg');font-weight:400;font-style:normal}.mega-octicon,.octicon{font:normal normal normal 16px/1 octicons;display:inline-block;text-decoration:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mega-octicon{font-size:32px}.octicon-alert:before{content:'\f02d'}.octicon-alignment-align:before{content:'\f08a'}.octicon-alignment-aligned-to:before{content:'\f08e'}.octicon-alignment-unalign:before{content:'\f08b'}.octicon-arrow-down:before{content:'\f03f'}.octicon-arrow-left:before{content:'\f040'}.octicon-arrow-right:before{content:'\f03e'}.octicon-arrow-small-down:before{content:'\f0a0'}.octicon-arrow-small-left:before{content:'\f0a1'}.octicon-arrow-small-right:before{content:'\f071'}.octicon-arrow-small-up:before{content:'\f09f'}.octicon-arrow-up:before{content:'\f03d'}.octicon-beer:before{content:'\f069'}.octicon-book:before{content:'\f007'}.octicon-bookmark:before{content:'\f07b'}.octicon-briefcase:before{content:'\f0d3'}.octicon-broadcast:before{content:'\f048'}.octicon-browser:before{content:'\f0c5'}.octicon-bug:before{content:'\f091'}.octicon-calendar:before{content:'\f068'}.octicon-check:before{content:'\f03a'}.octicon-checklist:before{content:'\f076'}.octicon-chevron-down:before{content:'\f0a3'}.octicon-chevron-left:before{content:'\f0a4'}.octicon-chevron-right:before{content:'\f078'}.octicon-chevron-up:before{content:'\f0a2'}.octicon-circle-slash:before{content:'\f084'}.octicon-circuit-board:before{content:'\f0d6'}.octicon-clippy:before{content:'\f035'}.octicon-clock:before{content:'\f046'}.octicon-cloud-download:before{content:'\f00b'}.octicon-cloud-upload:before{content:'\f00c'}.octicon-code:before{content:'\f05f'}.octicon-color-mode:before{content:'\f065'}.octicon-comment-add:before,.octicon-comment:before{content:'\f02b'}.octicon-comment-discussion:before{content:'\f04f'}.octicon-credit-card:before{content:'\f045'}.octicon-dash:before{content:'\f0ca'}.octicon-dashboard:before{content:'\f07d'}.octicon-database:before{content:'\f096'}.octicon-device-camera:before{content:'\f056'}.octicon-device-camera-video:before{content:'\f057'}.octicon-device-desktop:before{content:'\f27c'}.octicon-device-mobile:before{content:'\f038'}.octicon-diff:before{content:'\f04d'}.octicon-diff-added:before{content:'\f06b'}.octicon-diff-ignored:before{content:'\f099'}.octicon-diff-modified:before{content:'\f06d'}.octicon-diff-removed:before{content:'\f06c'}.octicon-diff-renamed:before{content:'\f06e'}.octicon-ellipsis:before{content:'\f09a'}.octicon-eye-unwatch:before,.octicon-eye-watch:before,.octicon-eye:before{content:'\f04e'}.octicon-file-binary:before{content:'\f094'}.octicon-file-code:before{content:'\f010'}.octicon-file-directory:before{content:'\f016'}.octicon-file-media:before{content:'\f012'}.octicon-file-pdf:before{content:'\f014'}.octicon-file-submodule:before{content:'\f017'}.octicon-file-symlink-directory:before{content:'\f0b1'}.octicon-file-symlink-file:before{content:'\f0b0'}.octicon-file-text:before{content:'\f011'}.octicon-file-zip:before{content:'\f013'}.octicon-flame:before{content:'\f0d2'}.octicon-fold:before{content:'\f0cc'}.octicon-gear:before{content:'\f02f'}.octicon-gift:before{content:'\f042'}.octicon-gist:before{content:'\f00e'}.octicon-gist-secret:before{content:'\f08c'}.octicon-git-branch-create:before,.octicon-git-branch-delete:before,.octicon-git-branch:before{content:'\f020'}.octicon-git-commit:before{content:'\f01f'}.octicon-git-compare:before{content:'\f0ac'}.octicon-git-merge:before{content:'\f023'}.octicon-git-pull-request-abandoned:before,.octicon-git-pull-request:before{content:'\f009'}.octicon-globe:before{content:'\f0b6'}.octicon-graph:before{content:'\f043'}.octicon-heart:before{content:'\2665'}.octicon-history:before{content:'\f07e'}.octicon-home:before{content:'\f08d'}.octicon-horizontal-rule:before{content:'\f070'}.octicon-hourglass:before{content:'\f09e'}.octicon-hubot:before{content:'\f09d'}.octicon-inbox:before{content:'\f0cf'}.octicon-info:before{content:'\f059'}.octicon-issue-closed:before{content:'\f028'}.octicon-issue-opened:before{content:'\f026'}.octicon-issue-reopened:before{content:'\f027'}.octicon-jersey:before{content:'\f019'}.octicon-jump-down:before{content:'\f072'}.octicon-jump-left:before{content:'\f0a5'}.octicon-jump-right:before{content:'\f0a6'}.octicon-jump-up:before{content:'\f073'}.octicon-key:before{content:'\f049'}.octicon-keyboard:before{content:'\f00d'}.octicon-law:before{content:'\f0d8'}.octicon-light-bulb:before{content:'\f000'}.octicoLine truncated @font-face{font-family:octicons;src:url(../fonts/octicons.eot?#iefix&v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('embedded-opentype'),url(../fonts/octicons.woff?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('woff'),url(../fonts/octicons.ttf?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6)format('truetype'),url(../fonts/octicons.svg?v=345f8bad9c5003db196d08f05e7f030fd2a32ff6#octicons)format('svg');font-weight:400;font-style:normal}.mega-octicon,.octicon{font:normal normal normal 16px/1 octicons;display:inline-block;text-decoration:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mega-octicon{font-size:32px}.octicon-alert:before{content:'\f02d'}.octicon-alignment-align:before{content:'\f08a'}.octicon-alignment-aligned-to:before{content:'\f08e'}.octicon-alignment-unalign:before{content:'\f08b'}.octicon-arrow-down:before{content:'\f03f'}.octicon-arrow-left:before{content:'\f040'}.octicon-arrow-right:before{content:'\f03e'}.octicon-arrow-small-down:before{content:'\f0a0'}.octicon-arrow-small-left:before{content:'\f0a1'}.octicon-arrow-small-right:before{content:'\f071'}.octicon-arrow-small-up:before{content:'\f09f'}.octicon-arrow-up:before{content:'\f03d'}.octicon-beer:before{content:'\f069'}.octicon-book:before{content:'\f007'}.octicon-bookmark:before{content:'\f07b'}.octicon-briefcase:before{content:'\f0d3'}.octicon-broadcast:before{content:'\f048'}.octicon-browser:before{content:'\f0c5'}.octicon-bug:before{content:'\f091'}.octicon-calendar:before{content:'\f068'}.octicon-check:before{content:'\f03a'}.octicon-checklist:before{content:'\f076'}.octicon-chevron-down:before{content:'\f0a3'}.octicon-chevron-left:before{content:'\f0a4'}.octicon-chevron-right:before{content:'\f078'}.octicon-chevron-up:before{content:'\f0a2'}.octicon-circle-slash:before{content:'\f084'}.octicon-circuit-board:before{content:'\f0d6'}.octicon-clippy:before{content:'\f035'}.octicon-clock:before{content:'\f046'}.octicon-cloud-download:before{content:'\f00b'}.octicon-cloud-upload:before{content:'\f00c'}.octicon-code:before{content:'\f05f'}.octicon-color-mode:before{content:'\f065'}.octicon-comment-add:before,.octicon-comment:before{content:'\f02b'}.octicon-comment-discussion:before{content:'\f04f'}.octicon-credit-card:before{content:'\f045'}.octicon-dash:before{content:'\f0ca'}.octicon-dashboard:before{content:'\f07d'}.octicon-database:before{content:'\f096'}.octicon-device-camera:before{content:'\f056'}.octicon-device-camera-video:before{content:'\f057'}.octicon-device-desktop:before{content:'\f27c'}.octicon-device-mobile:before{content:'\f038'}.octicon-diff:before{content:'\f04d'}.octicon-diff-added:before{content:'\f06b'}.octicon-diff-ignored:before{content:'\f099'}.octicon-diff-modified:before{content:'\f06d'}.octicon-diff-removed:before{content:'\f06c'}.octicon-diff-renamed:before{content:'\f06e'}.octicon-ellipsis:before{content:'\f09a'}.octicon-eye-unwatch:before,.octicon-eye-watch:before,.octicon-eye:before{content:'\f04e'}.octicon-file-binary:before{content:'\f094'}.octicon-file-code:before{content:'\f010'}.octicon-file-directory:before{content:'\f016'}.octicon-file-media:before{content:'\f012'}.octicon-file-pdf:before{content:'\f014'}.octicon-file-submodule:before{content:'\f017'}.octicon-file-symlink-directory:before{content:'\f0b1'}.octicon-file-symlink-file:before{content:'\f0b0'}.octicon-file-text:before{content:'\f011'}.octicon-file-zip:before{content:'\f013'}.octicon-flame:before{content:'\f0d2'}.octicon-fold:before{content:'\f0cc'}.octicon-gear:before{content:'\f02f'}.octicon-gift:before{content:'\f042'}.octicon-gist:before{content:'\f00e'}.octicon-gist-secret:before{content:'\f08c'}.octicon-git-branch-create:before,.octicon-git-branch-delete:before,.octicon-git-branch:before{content:'\f020'}.octicon-git-commit:before{content:'\f01f'}.octicon-git-compare:before{content:'\f0ac'}.octicon-git-merge:before{content:'\f023'}.octicon-git-pull-request-abandoned:before,.octicon-git-pull-request:before{content:'\f009'}.octicon-globe:before{content:'\f0b6'}.octicon-graph:before{content:'\f043'}.octicon-heart:before{content:'\2665'}.octicon-history:before{content:'\f07e'}.octicon-home:before{content:'\f08d'}.octicon-horizontal-rule:before{content:'\f070'}.octicon-hourglass:before{content:'\f09e'}.octicon-hubot:before{content:'\f09d'}.octicon-inbox:before{content:'\f0cf'}.octicon-info:before{content:'\f059'}.octicon-issue-closed:before{content:'\f028'}.octicon-issue-opened:before{content:'\f026'}.octicon-issue-reopened:before{content:'\f027'}.octicon-jersey:before{content:'\f019'}.octicon-jump-down:before{content:'\f072'}.octicon-jump-left:before{content:'\f0a5'}.octicon-jump-right:before{content:'\f0a6'}.octicon-jump-up:before{content:'\f073'}.octicon-key:before{content:'\f049'}.octicon-keyboard:before{content:'\f00d'}.octicon-law:before{content:'\f0d8'}.octicon-light-bulb:before{content:'\f000'}.octicoLine truncated
+3
View File
@@ -93,6 +93,9 @@ $(document).ready(function () {
}); });
$('.ui.accordion').accordion(); $('.ui.accordion').accordion();
$('.ui.checkbox').checkbox(); $('.ui.checkbox').checkbox();
$('.ui.progress').progress({
showActivity: false
});
$('.poping.up').popup(); $('.poping.up').popup();
initInstall(); initInstall();
+52 -3
View File
@@ -97,11 +97,10 @@
right: 0!important; right: 0!important;
left: auto!important; left: auto!important;
} }
.issue.list { .issue.list {
clear: both; clear: both;
list-style: none; list-style: none;
font-size: 13px;
padding-top: 15px;
>.item { >.item {
padding-top: 15px; padding-top: 15px;
padding-bottom: 10px; padding-bottom: 10px;
@@ -128,9 +127,10 @@
padding-top: 15px; padding-top: 15px;
} }
} }
.label.list { .label.list {
clear: both; clear: both;
padding-top: 15px; list-style: none;
.item { .item {
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
@@ -149,6 +149,55 @@
} }
} }
} }
.milestone.list {
clear: both;
list-style: none;
.item {
padding-top: 10px;
padding-bottom: 10px;
border-bottom: 1px dashed #AAA;
> a {
padding-top: 5px;
padding-right: 10px;
color: #000;
&:hover {
color: #4078c0;
}
}
.ui.progress {
width: 40%;
padding: 0;
border: 0;
margin: 0;
.bar {
height: 20px;
}
}
.meta {
color: #999;
padding-top: 5px;
.issue-stats .octicon{
padding-left: 5px;
}
}
.operate {
margin-top: -15px;
> a {
font-size: 15px;
padding-top: 5px;
padding-right: 10px;
color: #666;
&:hover {
color: #000;
}
}
}
.content {
padding-top: 10px;
}
}
}
} }
.edit-label.modal { .edit-label.modal {
+15 -12
View File
@@ -159,10 +159,8 @@ func Issues(ctx *middleware.Context) {
ctx.Data["IsShowClosed"] = isShowClosed ctx.Data["IsShowClosed"] = isShowClosed
if isShowClosed { if isShowClosed {
ctx.Data["State"] = "closed" ctx.Data["State"] = "closed"
ctx.Data["ShowCount"] = issueStats.ClosedCount
} else { } else {
ctx.Data["State"] = "open" ctx.Data["State"] = "open"
ctx.Data["ShowCount"] = issueStats.OpenCount
} }
ctx.HTML(200, ISSUES) ctx.HTML(200, ISSUES)
@@ -176,12 +174,12 @@ func CreateIssue(ctx *middleware.Context) {
var err error var err error
// Get all milestones. // Get all milestones.
ctx.Data["OpenMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, false) ctx.Data["OpenMilestones"], err = models.Milestones(ctx.Repo.Repository.Id, false)
if err != nil { if err != nil {
ctx.Handle(500, "issue.ViewIssue(GetMilestones.1): %v", err) ctx.Handle(500, "issue.ViewIssue(GetMilestones.1): %v", err)
return return
} }
ctx.Data["ClosedMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, true) ctx.Data["ClosedMilestones"], err = models.Milestones(ctx.Repo.Repository.Id, true)
if err != nil { if err != nil {
ctx.Handle(500, "issue.ViewIssue(GetMilestones.2): %v", err) ctx.Handle(500, "issue.ViewIssue(GetMilestones.2): %v", err)
return return
@@ -220,12 +218,12 @@ func CreateIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
var err error var err error
// Get all milestones. // Get all milestones.
_, err = models.GetMilestones(ctx.Repo.Repository.Id, false) _, err = models.Milestones(ctx.Repo.Repository.Id, false)
if err != nil { if err != nil {
send(500, nil, err) send(500, nil, err)
return return
} }
_, err = models.GetMilestones(ctx.Repo.Repository.Id, true) _, err = models.Milestones(ctx.Repo.Repository.Id, true)
if err != nil { if err != nil {
send(500, nil, err) send(500, nil, err)
return return
@@ -385,12 +383,12 @@ func ViewIssue(ctx *middleware.Context) {
} }
// Get all milestones. // Get all milestones.
ctx.Data["OpenMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, false) ctx.Data["OpenMilestones"], err = models.Milestones(ctx.Repo.Repository.Id, false)
if err != nil { if err != nil {
ctx.Handle(500, "issue.ViewIssue(GetMilestones.1): %v", err) ctx.Handle(500, "issue.ViewIssue(GetMilestones.1): %v", err)
return return
} }
ctx.Data["ClosedMilestones"], err = models.GetMilestones(ctx.Repo.Repository.Id, true) ctx.Data["ClosedMilestones"], err = models.Milestones(ctx.Repo.Repository.Id, true)
if err != nil { if err != nil {
ctx.Handle(500, "issue.ViewIssue(GetMilestones.2): %v", err) ctx.Handle(500, "issue.ViewIssue(GetMilestones.2): %v", err)
return return
@@ -967,13 +965,12 @@ func DeleteLabel(ctx *middleware.Context) {
} }
func Milestones(ctx *middleware.Context) { func Milestones(ctx *middleware.Context) {
ctx.Data["Title"] = "Milestones" ctx.Data["Title"] = ctx.Tr("repo.milestones")
ctx.Data["IsRepoToolbarIssues"] = true ctx.Data["PageIsMilestones"] = true
ctx.Data["IsRepoToolbarIssuesList"] = true
isShowClosed := ctx.Query("state") == "closed" isShowClosed := ctx.Query("state") == "closed"
miles, err := models.GetMilestones(ctx.Repo.Repository.Id, isShowClosed) miles, err := models.Milestones(ctx.Repo.Repository.Id, isShowClosed)
if err != nil { if err != nil {
ctx.Handle(500, "GetMilestones", err) ctx.Handle(500, "GetMilestones", err)
return return
@@ -984,11 +981,17 @@ func Milestones(ctx *middleware.Context) {
} }
ctx.Data["Milestones"] = miles ctx.Data["Milestones"] = miles
openCount, closedCount := models.MilestoneStats(ctx.Repo.Repository.Id)
ctx.Data["OpenCount"] = openCount
ctx.Data["ClosedCount"] = closedCount
if isShowClosed { if isShowClosed {
ctx.Data["State"] = "closed" ctx.Data["State"] = "closed"
} else { } else {
ctx.Data["State"] = "open" ctx.Data["State"] = "open"
} }
ctx.Data["IsShowClosed"] = isShowClosed
ctx.HTML(200, MILESTONE) ctx.HTML(200, MILESTONE)
} }
+1 -1
View File
@@ -1 +1 @@
0.6.3.0802 Beta 0.6.3.0803 Beta
+12 -10
View File
@@ -32,17 +32,19 @@
<div class="ui black label">{{.i18n.Tr "repo.issues.label_count" .NumLabels}}</div> <div class="ui black label">{{.i18n.Tr "repo.issues.label_count" .NumLabels}}</div>
</div> </div>
<div class="label list"> <div class="sixteen wide column">
{{range .Labels}} <div class="label list">
<li class="item"> {{range .Labels}}
<div class="ui label" style="background-color: {{.Color}}"><i class="octicon octicon-tag"></i> {{.Name}}</div> <li class="item">
{{if $.IsRepositoryAdmin}} <div class="ui label" style="background-color: {{.Color}}"><i class="octicon octicon-tag"></i> {{.Name}}</div>
<a class="ui right delete-label-button" href="#" data-url="{{$.RepoLink}}/labels/delete" data-id="{{.ID}}"><i class="octicon octicon-x"></i> {{$.i18n.Tr "repo.issues.label_delete"}}</a> {{if $.IsRepositoryAdmin}}
<a class="ui right edit-label-button" href="#" data-id={{.ID}} data-title={{.Name}} data-color={{.Color}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a> <a class="ui right delete-label-button" href="#" data-url="{{$.RepoLink}}/labels/delete" data-id="{{.ID}}"><i class="octicon octicon-trashcan"></i> {{$.i18n.Tr "repo.issues.label_delete"}}</a>
<a class="ui right edit-label-button" href="#" data-id={{.ID}} data-title={{.Name}} data-color={{.Color}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a>
{{end}}
<a class="ui right open-issues" href="{{$.RepoLink}}/issues?labels={{.ID}}"><i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.label_open_issues" .NumOpenIssues}}</a>
</li>
{{end}} {{end}}
<a class="ui right open-issues" href="{{$.RepoLink}}/issues?labels={{.ID}}"><i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.label_open_issues" .NumOpenIssues}}</a> </div>
</li>
{{end}}
</div> </div>
</div> </div>
</div> </div>
+35 -33
View File
@@ -70,43 +70,45 @@
</div> </div>
</div> </div>
<div class="issue list"> <div class="sixteen wide column">
{{range .Issues}} <div class="issue list">
{{ $timeStr:= TimeSince .Created $.Lang }} {{range .Issues}}
<li class="item"> {{ $timeStr:= TimeSince .Created $.Lang }}
<div class="ui {{if .IsRead}}black{{else}}green{{end}} label">#{{.Index}}</div> <li class="item">
<a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Name}}</a> <div class="ui {{if .IsRead}}black{{else}}green{{end}} label">#{{.Index}}</div>
<a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Name}}</a>
{{range .Labels}} {{range .Labels}}
<a class="ui label" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}" style="background-color: {{.Color}}">{{.Name}}</a> <a class="ui label" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}" style="background-color: {{.Color}}">{{.Name}}</a>
{{end}} {{end}}
{{if .NumComments}}<span class="comment ui right"><i class="octicon octicon-comment"></i> {{.NumComments}}</span>{{end}} {{if .NumComments}}<span class="comment ui right"><i class="octicon octicon-comment"></i> {{.NumComments}}</span>{{end}}
<p class="desc">{{$.i18n.Tr "repo.issues.opened_by" $timeStr .Poster.Name|Str2html}}</p> <p class="desc">{{$.i18n.Tr "repo.issues.opened_by" $timeStr .Poster.Name|Str2html}}</p>
</li> </li>
{{end}} {{end}}
{{with .Page}} {{with .Page}}
{{if gt .Total 1}} {{if gt .Total 1}}
<div class="center page buttons"> <div class="center page buttons">
<div class="ui borderless pagination menu"> <div class="ui borderless pagination menu">
<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Previous}}"{{end}}> <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Previous}}"{{end}}>
<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
</a> </a>
{{range .Pages}} {{range .Pages}}
{{if eq .Num -1}} {{if eq .Num -1}}
<a class="disabled item">...</a> <a class="disabled item">...</a>
{{else}} {{else}}
<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Num}}"{{end}}>{{.Num}}</a> <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Num}}"{{end}}>{{.Num}}</a>
{{end}} {{end}}
{{end}} {{end}}
<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Next}}"{{end}}> <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{$.SelectLabels}}&page={{.Next}}"{{end}}>
{{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i>
</a> </a>
</div>
</div> </div>
{{end}}
{{end}}
</div> </div>
{{end}}
{{end}}
</div> </div>
</div> </div>
</div> </div>
+69 -42
View File
@@ -1,43 +1,70 @@
{{template "base/head_old" .}} {{template "base/head" .}}
{{template "base/navbar" .}} <div class="repository">
{{template "repo/nav" .}} {{template "repo/header" .}}
{{template "repo/toolbar" .}} <div class="ui middle page grid body">
<div id="body" class="container"> <div class="navbar">
<div id="issue"> {{template "repo/issue/navbar" .}}
<div class="col-md-3 filter-list"> <div class="ui right floated secondary menu">
<ul class="list-unstyled"> <a class="ui green button" href="{{$.RepoLink}}/milestones/new">{{.i18n.Tr "repo.milestones.new"}}</a>
<li><a href="{{.RepoLink}}/milestones"{{if eq .State "open"}} class="active"{{end}}>Open Milestones <strong class="pull-right">{{.Repository.NumOpenMilestones}}</strong></a></li> </div>
<li><a href="{{.RepoLink}}/milestones?state=closed"{{if eq .State "closed"}} class="active"{{end}}>Close Milestones <strong class="pull-right">{{.Repository.NumClosedMilestones}}</strong></a></li> </div>
</ul> <div class="ui divider"></div>
<hr/> <div class="ui left">
<a href="{{.RepoLink}}/milestones/new" class="text-center"> <div class="ui tiny buttons">
<button class="btn btn-default btn-block">Create new milestone</button> <a class="ui green basic button {{if not .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/milestones?state=open">
</a> <i class="octicon octicon-milestone"></i>
</div> {{.i18n.Tr "repo.milestones.open_tab" .OpenCount}}
<div class="col-md-9"> </a>
<div class="milestones list-group"> <a class="ui red basic button {{if .IsShowClosed}}active{{end}}" href="{{.RepoLink}}/milestones?state=closed">
{{range .Milestones}} <i class="octicon octicon-milestone"></i>
<div class="list-group-item milestone-item"> {{.i18n.Tr "repo.milestones.close_tab" .ClosedCount}}
<h4 class="title pull-left"><a href="{{$.RepoLink}}/issues?milestone={{.Index}}{{if .IsClosed}}&state=closed{{end}}">{{.Name}}</a></h4> </a>
<span class="issue-open label label-success">{{.NumOpenIssues}}</span> </div>
<span class="issue-close label label-warning">{{.NumClosedIssues}}</span> </div>
<p class="actions pull-right">
<a href="{{$.RepoLink}}/milestones/{{.Index}}/edit">Edit</a>
{{if .IsClosed}} <div class="sixteen wide column">
<a href="{{$.RepoLink}}/milestones/{{.Index}}/open">Open</a> <div class="milestone list">
{{else}} {{range .Milestones}}
<a href="{{$.RepoLink}}/milestones/{{.Index}}/close">Close</a> <li class="item">
{{end}} <i class="octicon octicon-milestone"></i> <a href="{{$.RepoLink}}/issues?state={{$.State}}&midx={{.Index}}">{{.Name}}</a>
<a class="text-danger" href="{{$.RepoLink}}/milestones/{{.Index}}/delete">Delete</a> <div class="ui right blue progress" data-percent="{{if .Completeness}}{{.Completeness}}{{else}}100{{end}}">
<a href="{{$.RepoLink}}/issues?milestone={{.Index}}{{if .IsClosed}}&state=closed{{end}}">Issues</a> <div class="bar">
</p> <div class="progress"></div>
<hr/> </div>
<p class="description">{{.RenderedContent | Str2html}}</p> </div>
</div> <div class="meta">
{{end}} {{ $closedDate:= TimeSince .ClosedDate $.Lang }}
</div> {{if .IsClosed}}
</div> <span class="octicon octicon-clock"></span> {{$.i18n.Tr "repo.milestones.closed" $closedDate|Str2html}}
</div> {{else}}
<span class="octicon octicon-calendar"></span> {{if .DeadlineString}}{{.DeadlineString}}{{else}}{{$.i18n.Tr "repo.milestones.no_due_date"}}{{end}}
{{end}}
<span class="issue-stats">
<i class="octicon octicon-issue-opened"></i> {{$.i18n.Tr "repo.issues.open_tab" .NumOpenIssues}}
<i class="octicon octicon-issue-closed"></i> {{$.i18n.Tr "repo.issues.close_tab" .NumClosedIssues}}
</span>
</div>
{{if $.IsRepositoryAdmin}}
<div class="ui right operate">
<a href="{{$.RepoLink}}/milestones/{{.Index}}/edit" data-id={{.ID}} data-title={{.Name}}><i class="octicon octicon-pencil"></i> {{$.i18n.Tr "repo.issues.label_edit"}}</a>
{{if .IsClosed}}
<a href="{{$.RepoLink}}/milestones/{{.Index}}/open" data-id={{.ID}} data-title={{.Name}}><i class="octicon octicon-check"></i> {{$.i18n.Tr "repo.milestones.open"}}</a>
{{else}}
<a href="{{$.RepoLink}}/milestones/{{.Index}}/close" data-id={{.ID}} data-title={{.Name}}><i class="octicon octicon-x"></i> {{$.i18n.Tr "repo.milestones.close"}}</a>
{{end}}
<a class="delete-milestone-button" href="#" data-url="{{$.RepoLink}}/milestone/delete" data-id="{{.ID}}"><i class="octicon octicon-trashcan"></i> {{$.i18n.Tr "repo.issues.label_delete"}}</a>
</div>
{{if .Content}}
<div class="content">
{{.RenderedContent|Str2html}}
</div>
{{end}}
{{end}}
</li>
{{end}}
</div>
</div>
</div>
</div> </div>
</div> {{template "base/footer" .}}
{{template "base/footer_old" .}}
+43
View File
@@ -0,0 +1,43 @@
{{template "base/head_old" .}}
{{template "base/navbar" .}}
{{template "repo/nav" .}}
{{template "repo/toolbar" .}}
<div id="body" class="container">
<div id="issue">
<div class="col-md-3 filter-list">
<ul class="list-unstyled">
<li><a href="{{.RepoLink}}/milestones"{{if eq .State "open"}} class="active"{{end}}>Open Milestones <strong class="pull-right">{{.Repository.NumOpenMilestones}}</strong></a></li>
<li><a href="{{.RepoLink}}/milestones?state=closed"{{if eq .State "closed"}} class="active"{{end}}>Close Milestones <strong class="pull-right">{{.Repository.NumClosedMilestones}}</strong></a></li>
</ul>
<hr/>
<a href="{{.RepoLink}}/milestones/new" class="text-center">
<button class="btn btn-default btn-block">Create new milestone</button>
</a>
</div>
<div class="col-md-9">
<div class="milestones list-group">
{{range .Milestones}}
<div class="list-group-item milestone-item">
<h4 class="title pull-left"><a href="{{$.RepoLink}}/issues?milestone={{.Index}}{{if .IsClosed}}&state=closed{{end}}">{{.Name}}</a></h4>
<span class="issue-open label label-success">{{.NumOpenIssues}}</span>
<span class="issue-close label label-warning">{{.NumClosedIssues}}</span>
<p class="actions pull-right">
<a href="{{$.RepoLink}}/milestones/{{.Index}}/edit">Edit</a>
{{if .IsClosed}}
<a href="{{$.RepoLink}}/milestones/{{.Index}}/open">Open</a>
{{else}}
<a href="{{$.RepoLink}}/milestones/{{.Index}}/close">Close</a>
{{end}}
<a class="text-danger" href="{{$.RepoLink}}/milestones/{{.Index}}/delete">Delete</a>
<a href="{{$.RepoLink}}/issues?milestone={{.Index}}{{if .IsClosed}}&state=closed{{end}}">Issues</a>
</p>
<hr/>
<p class="description">{{.RenderedContent | Str2html}}</p>
</div>
{{end}}
</div>
</div>
</div>
</div>
</div>
{{template "base/footer_old" .}}
+1 -1
View File
@@ -2,6 +2,6 @@
<div class="ui compact menu"> <div class="ui compact menu">
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues">{{.i18n.Tr "repo.issues"}}</a> <a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues">{{.i18n.Tr "repo.issues"}}</a>
<a class="{{if .PageIsLabels}}active{{end}} item" href="{{.RepoLink}}/labels">{{.i18n.Tr "repo.labels"}}</a> <a class="{{if .PageIsLabels}}active{{end}} item" href="{{.RepoLink}}/labels">{{.i18n.Tr "repo.labels"}}</a>
<a class="item" href="{{.RepoLink}}/milestones">{{.i18n.Tr "repo.milestones"}}</a> <a class="{{if .PageIsMilestones}}active{{end}} item" href="{{.RepoLink}}/milestones">{{.i18n.Tr "repo.milestones"}}</a>
</div> </div>
</div> </div>