| @@ -1441,7 +1441,7 @@ html, body { | |||||
| margin-left: .8em; | margin-left: .8em; | ||||
| } | } | ||||
| #issue .assignee.dropdown-menu, #issue .assignee ul { | |||||
| #issue .assignee.dropdown-menu, #issue .assignee ul, #issue .milestone ul { | |||||
| padding: 0; | padding: 0; | ||||
| margin: 0; | margin: 0; | ||||
| min-width: 300px; | min-width: 300px; | ||||
| @@ -1451,17 +1451,33 @@ html, body { | |||||
| min-width: 160px; | min-width: 160px; | ||||
| } | } | ||||
| #issue .issue-bar .assignee .dropdown-menu{ | |||||
| #issue .issue-bar .assignee .dropdown-menu, #issue .issue-bar .milestone .dropdown-menu { | |||||
| padding: 0; | padding: 0; | ||||
| margin: 0; | margin: 0; | ||||
| } | } | ||||
| #issue .assignee li { | |||||
| #issue .assignee li, #issue .milestone li.clear-milestone { | |||||
| padding: 4px 12px; | padding: 4px 12px; | ||||
| line-height: 30px; | line-height: 30px; | ||||
| } | } | ||||
| #issue .assignee li:hover { | |||||
| #issue .milestone .milestone-item { | |||||
| padding: 8px 12px; | |||||
| } | |||||
| #issue .milestone li.milestone-item { | |||||
| border-bottom: 1px solid #CCC; | |||||
| } | |||||
| #issue .milestone li.milestone-item:last-child { | |||||
| border-bottom: none; | |||||
| } | |||||
| #issue .milestone .milestone-item p { | |||||
| margin-bottom: 0; | |||||
| } | |||||
| #issue .assignee li:hover, #issue .milestone li.clear-milestone:hover, #issue .milestone li.milestone-item:hover { | |||||
| background-color: #e8f0ff; | background-color: #e8f0ff; | ||||
| cursor: pointer; | cursor: pointer; | ||||
| } | } | ||||
| @@ -1474,7 +1490,7 @@ html, body { | |||||
| #issue .issue-bar > div { | #issue .issue-bar > div { | ||||
| padding-bottom: 8px; | padding-bottom: 8px; | ||||
| margin-bottom: 8px; | |||||
| margin-bottom: 40px; | |||||
| border-bottom: 1px solid #CCC; | border-bottom: 1px solid #CCC; | ||||
| } | } | ||||
| @@ -1482,11 +1498,26 @@ html, body { | |||||
| line-height: 30px; | line-height: 30px; | ||||
| } | } | ||||
| #issue .issue-bar .assignee .action{ | |||||
| #issue .issue-bar .assignee .action, #issue .issue-bar .milestone .action { | |||||
| position: relative; | position: relative; | ||||
| margin-top: -8px; | margin-top: -8px; | ||||
| } | } | ||||
| #issue .issue-bar .milestone .completion { | |||||
| margin-top: 20px; | |||||
| margin-bottom: 12px; | |||||
| } | |||||
| #issue .issue-bar .milestone .completion span { | |||||
| display: block; | |||||
| height: 12px; | |||||
| background-color: #77c64a; | |||||
| } | |||||
| #issue .issue-bar .milestone .nav-tabs a { | |||||
| padding: 4px 8px; | |||||
| } | |||||
| /* wrapper and footer */ | /* wrapper and footer */ | ||||
| #wrapper { | #wrapper { | ||||
| @@ -528,7 +528,7 @@ function initIssue() { | |||||
| var $this = $(this); | var $this = $(this); | ||||
| $this.toggleAjax(function (resp) { | $this.toggleAjax(function (resp) { | ||||
| $($this.data("preview")).html(resp); | $($this.data("preview")).html(resp); | ||||
| },function(){ | |||||
| }, function () { | |||||
| $($this.data("preview")).html("no content"); | $($this.data("preview")).html("no content"); | ||||
| }) | }) | ||||
| }); | }); | ||||
| @@ -569,6 +569,40 @@ function initIssue() { | |||||
| } | } | ||||
| }); | }); | ||||
| // milestone | |||||
| $('.issue-bar .dropdown-menu a[data-toggle="tab"]').on("click", function (e) { | |||||
| e.stopPropagation(); | |||||
| $(this).tab('show'); | |||||
| return false; | |||||
| }); | |||||
| var $m = $('.milestone'); | |||||
| if ($m.data("milestone") > 0) { | |||||
| $('.clear-milestone').toggleShow(); | |||||
| } | |||||
| $('.milestone', '#issue').on('click', 'li.milestone-item', function () { | |||||
| var id = $(this).data("id"); | |||||
| if (is_issue_bar) { | |||||
| var m = $m.data("milestone"); | |||||
| if (id != m) { | |||||
| $.post($m.data("ajax"), { | |||||
| issue: $('#issue').data("id"), | |||||
| milestone: id | |||||
| }, function (json) { | |||||
| if (json.ok) { | |||||
| window.location.reload(); | |||||
| if (id > 0) { | |||||
| $('.clear-milestone').toggleShow(); | |||||
| } else { | |||||
| $('.clear-milestone').toggleHide(); | |||||
| } | |||||
| } | |||||
| }) | |||||
| } | |||||
| } | |||||
| return; | |||||
| }); | |||||
| } | } | ||||
| function initRelease() { | function initRelease() { | ||||
| @@ -100,6 +100,52 @@ | |||||
| </div> | </div> | ||||
| <div class="issue-bar col-md-2"> | <div class="issue-bar col-md-2"> | ||||
| <div class="milestone" data-milestone="0" data-ajax="{url}"> | |||||
| <div class="pull-right action"> | |||||
| <button class="btn btn-default btn-sm" data-toggle="dropdown"> | |||||
| <i class="fa fa-check-square-o"></i> | |||||
| <span class="caret"></span> | |||||
| </button> | |||||
| <div class="dropdown-menu dropdown-menu-right"> | |||||
| <ul class="list-unstyled"> | |||||
| <li data-id="0" class="clear-milestone hidden"><i class="fa fa-times-circle-o"></i> Clear milestone </li> | |||||
| <li class="milestone-list"> | |||||
| <ul class="nav nav-tabs" data-init="tabs"> | |||||
| <li class="active"><a href="#milestone-open" data-toggle="tab">Open</a></li> | |||||
| <li><a href="#milestone-close" data-toggle="tab">Closed</a></li> | |||||
| </ul> | |||||
| <div class="tab-content"> | |||||
| <div class="tab-pane active" id="milestone-open"> | |||||
| <p class="milestone-item">Nothing to show</p> | |||||
| <ul class="list-unstyled"> | |||||
| <li class="milestone-item" data-id="1"> | |||||
| <p><strong>Milestone name</strong></p> | |||||
| <p>due to 3 days later</p> | |||||
| </li> | |||||
| <li class="milestone-item" data-id="1"> | |||||
| <p><strong>Milestone name</strong></p> | |||||
| <p>due to 3 days later</p> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| <div class="tab-pane" id="milestone-close"> | |||||
| <ul class="list-unstyled"> | |||||
| <li class="milestone-item" data-id="1"> | |||||
| <p><strong>Milestone name</strong></p> | |||||
| <p>closed 3 days ago</p> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| </div> | |||||
| </li> | |||||
| </ul> | |||||
| </div> | |||||
| </div> | |||||
| <h4>Milestone</h4> | |||||
| <p class="completion"><span style="width:80%"> </span></p> | |||||
| <p class="name"><strong><a href="#">Milestone name</a></strong></p> | |||||
| <p class="name">No milestone</p> | |||||
| </div> | |||||
| <div class="assignee" data-assigned="{{if .Issue.Assignee}}{{.Issue.Assignee.Id}}{{else}}0{{end}}" data-ajax="{{.Issue.Index}}/assignee">{{if .IsRepositoryOwner}} | <div class="assignee" data-assigned="{{if .Issue.Assignee}}{{.Issue.Assignee.Id}}{{else}}0{{end}}" data-ajax="{{.Issue.Index}}/assignee">{{if .IsRepositoryOwner}} | ||||
| <div class="pull-right action"> | <div class="pull-right action"> | ||||
| <button type="button" class="dropdown-toggle btn btn-default btn-sm" data-toggle="dropdown"> | <button type="button" class="dropdown-toggle btn btn-default btn-sm" data-toggle="dropdown"> | ||||
| @@ -110,7 +156,7 @@ | |||||
| <ul class="list-unstyled"> | <ul class="list-unstyled"> | ||||
| <li data-uid="0" class="clear-assignee hidden"><i class="fa fa-times-circle-o"></i> Clear assignee</li> | <li data-uid="0" class="clear-assignee hidden"><i class="fa fa-times-circle-o"></i> Clear assignee</li> | ||||
| {{range .Collaborators}} | {{range .Collaborators}} | ||||
| <li data-uid="{{.Id}}"><img src="{{.AvatarLink}}"><strong>{{.Name}}</strong> {{.FullName}}</li> | |||||
| <li data-uid="{{.Id}}"><img src="{{.AvatarLink}}"><strong>{{.Name}}</strong></li> | |||||
| {{end}} | {{end}} | ||||
| </ul> | </ul> | ||||
| </div> | </div> | ||||