196 lines
6.4 KiB
JavaScript
196 lines
6.4 KiB
JavaScript
![]() |
(function() {
|
||
|
this.Milestone = (function() {
|
||
|
Milestone.updateIssue = function(li, issue_url, data) {
|
||
|
return $.ajax({
|
||
|
type: "PUT",
|
||
|
url: issue_url,
|
||
|
data: data,
|
||
|
success: (function(_this) {
|
||
|
return function(_data) {
|
||
|
return _this.successCallback(_data, li);
|
||
|
};
|
||
|
})(this),
|
||
|
error: function(data) {
|
||
|
return new Flash("Issue update failed", 'alert');
|
||
|
},
|
||
|
dataType: "json"
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Milestone.sortIssues = function(data) {
|
||
|
var sort_issues_url;
|
||
|
sort_issues_url = location.href + "/sort_issues";
|
||
|
return $.ajax({
|
||
|
type: "PUT",
|
||
|
url: sort_issues_url,
|
||
|
data: data,
|
||
|
success: (function(_this) {
|
||
|
return function(_data) {
|
||
|
return _this.successCallback(_data);
|
||
|
};
|
||
|
})(this),
|
||
|
error: function() {
|
||
|
return new Flash("Issues update failed", 'alert');
|
||
|
},
|
||
|
dataType: "json"
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Milestone.sortMergeRequests = function(data) {
|
||
|
var sort_mr_url;
|
||
|
sort_mr_url = location.href + "/sort_merge_requests";
|
||
|
return $.ajax({
|
||
|
type: "PUT",
|
||
|
url: sort_mr_url,
|
||
|
data: data,
|
||
|
success: (function(_this) {
|
||
|
return function(_data) {
|
||
|
return _this.successCallback(_data);
|
||
|
};
|
||
|
})(this),
|
||
|
error: function(data) {
|
||
|
return new Flash("Issue update failed", 'alert');
|
||
|
},
|
||
|
dataType: "json"
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Milestone.updateMergeRequest = function(li, merge_request_url, data) {
|
||
|
return $.ajax({
|
||
|
type: "PUT",
|
||
|
url: merge_request_url,
|
||
|
data: data,
|
||
|
success: (function(_this) {
|
||
|
return function(_data) {
|
||
|
return _this.successCallback(_data, li);
|
||
|
};
|
||
|
})(this),
|
||
|
error: function(data) {
|
||
|
return new Flash("Issue update failed", 'alert');
|
||
|
},
|
||
|
dataType: "json"
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Milestone.successCallback = function(data, element) {
|
||
|
var img_tag;
|
||
|
if (data.assignee) {
|
||
|
img_tag = $('<img/>');
|
||
|
img_tag.attr('src', data.assignee.avatar_url);
|
||
|
img_tag.addClass('avatar s16');
|
||
|
$(element).find('.assignee-icon').html(img_tag);
|
||
|
} else {
|
||
|
$(element).find('.assignee-icon').html('');
|
||
|
}
|
||
|
return $(element).effect('highlight');
|
||
|
};
|
||
|
|
||
|
function Milestone() {
|
||
|
var oldMouseStart;
|
||
|
oldMouseStart = $.ui.sortable.prototype._mouseStart;
|
||
|
$.ui.sortable.prototype._mouseStart = function(event, overrideHandle, noActivation) {
|
||
|
this._trigger("beforeStart", event, this._uiHash());
|
||
|
return oldMouseStart.apply(this, [event, overrideHandle, noActivation]);
|
||
|
};
|
||
|
this.bindIssuesSorting();
|
||
|
this.bindMergeRequestSorting();
|
||
|
this.bindTabsSwitching();
|
||
|
}
|
||
|
|
||
|
Milestone.prototype.bindIssuesSorting = function() {
|
||
|
return $("#issues-list-unassigned, #issues-list-ongoing, #issues-list-closed").sortable({
|
||
|
connectWith: ".issues-sortable-list",
|
||
|
dropOnEmpty: true,
|
||
|
items: "li:not(.ui-sort-disabled)",
|
||
|
beforeStart: function(event, ui) {
|
||
|
return $(".issues-sortable-list").css("min-height", ui.item.outerHeight());
|
||
|
},
|
||
|
stop: function(event, ui) {
|
||
|
return $(".issues-sortable-list").css("min-height", "0px");
|
||
|
},
|
||
|
update: function(event, ui) {
|
||
|
var data;
|
||
|
if ($(this).find(ui.item).length > 0) {
|
||
|
data = $(this).sortable("serialize");
|
||
|
return Milestone.sortIssues(data);
|
||
|
}
|
||
|
},
|
||
|
receive: function(event, ui) {
|
||
|
var data, issue_id, issue_url, new_state;
|
||
|
new_state = $(this).data('state');
|
||
|
issue_id = ui.item.data('iid');
|
||
|
issue_url = ui.item.data('url');
|
||
|
data = (function() {
|
||
|
switch (new_state) {
|
||
|
case 'ongoing':
|
||
|
return "issue[assignee_id]=" + gon.current_user_id;
|
||
|
case 'unassigned':
|
||
|
return "issue[assignee_id]=";
|
||
|
case 'closed':
|
||
|
return "issue[state_event]=close";
|
||
|
}
|
||
|
})();
|
||
|
if ($(ui.sender).data('state') === "closed") {
|
||
|
data += "&issue[state_event]=reopen";
|
||
|
}
|
||
|
return Milestone.updateIssue(ui.item, issue_url, data);
|
||
|
}
|
||
|
}).disableSelection();
|
||
|
};
|
||
|
|
||
|
Milestone.prototype.bindTabsSwitching = function() {
|
||
|
return $('a[data-toggle="tab"]').on('show.bs.tab', function(e) {
|
||
|
var currentTabClass, previousTabClass;
|
||
|
currentTabClass = $(e.target).data('show');
|
||
|
previousTabClass = $(e.relatedTarget).data('show');
|
||
|
$(previousTabClass).hide();
|
||
|
$(currentTabClass).removeClass('hidden');
|
||
|
return $(currentTabClass).show();
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Milestone.prototype.bindMergeRequestSorting = function() {
|
||
|
return $("#merge_requests-list-unassigned, #merge_requests-list-ongoing, #merge_requests-list-closed").sortable({
|
||
|
connectWith: ".merge_requests-sortable-list",
|
||
|
dropOnEmpty: true,
|
||
|
items: "li:not(.ui-sort-disabled)",
|
||
|
beforeStart: function(event, ui) {
|
||
|
return $(".merge_requests-sortable-list").css("min-height", ui.item.outerHeight());
|
||
|
},
|
||
|
stop: function(event, ui) {
|
||
|
return $(".merge_requests-sortable-list").css("min-height", "0px");
|
||
|
},
|
||
|
update: function(event, ui) {
|
||
|
var data;
|
||
|
data = $(this).sortable("serialize");
|
||
|
return Milestone.sortMergeRequests(data);
|
||
|
},
|
||
|
receive: function(event, ui) {
|
||
|
var data, merge_request_id, merge_request_url, new_state;
|
||
|
new_state = $(this).data('state');
|
||
|
merge_request_id = ui.item.data('iid');
|
||
|
merge_request_url = ui.item.data('url');
|
||
|
data = (function() {
|
||
|
switch (new_state) {
|
||
|
case 'ongoing':
|
||
|
return "merge_request[assignee_id]=" + gon.current_user_id;
|
||
|
case 'unassigned':
|
||
|
return "merge_request[assignee_id]=";
|
||
|
case 'closed':
|
||
|
return "merge_request[state_event]=close";
|
||
|
}
|
||
|
})();
|
||
|
if ($(ui.sender).data('state') === "closed") {
|
||
|
data += "&merge_request[state_event]=reopen";
|
||
|
}
|
||
|
return Milestone.updateMergeRequest(ui.item, merge_request_url, data);
|
||
|
}
|
||
|
}).disableSelection();
|
||
|
};
|
||
|
|
||
|
return Milestone;
|
||
|
|
||
|
})();
|
||
|
|
||
|
}).call(this);
|