summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/milestone.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/milestone.js')
-rw-r--r--app/assets/javascripts/milestone.js195
1 files changed, 195 insertions, 0 deletions
diff --git a/app/assets/javascripts/milestone.js b/app/assets/javascripts/milestone.js
new file mode 100644
index 00000000000..e8d51da7d58
--- /dev/null
+++ b/app/assets/javascripts/milestone.js
@@ -0,0 +1,195 @@
+(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);