diff --git a/app/assets/javascripts/due_date_select.js.es6 b/app/assets/javascripts/due_date_select.js.es6
index fd7f961aab9804f3f3296b83fd3b171b5ed29cb7..ddc7191ef6104390ffdac9f227ed03f57e3a8c32 100644
--- a/app/assets/javascripts/due_date_select.js.es6
+++ b/app/assets/javascripts/due_date_select.js.es6
@@ -25,6 +25,7 @@
this.initRemoveDueDate();
this.initDatePicker();
this.initStopPropagation();
+ this.subscribeToIssuableUpdates();
}
initGlDropdown() {
@@ -72,6 +73,12 @@
});
}
+ subscribeToIssuableUpdates() {
+ if (gl.IssuableResource) {
+ gl.IssuableResource.subscribe(this.renderUpdatedDueDate.bind(this));
+ }
+ }
+
saveDueDate(isDropdown) {
this.parseSelectedDate();
this.prepSelectedDate();
@@ -107,39 +114,43 @@
});
}
+ renderUpdatedDueDate(data) {
+ const selectedDateValue = data.due_date;
+
+ this.displayedDate = data.due_date !== null ? $.datepicker.formatDate('M d, yy', new Date(selectedDateValue)) : 'No due date';
+
+ const displayedDateStyle = this.displayedDate !== 'No due date' ? 'bold' : 'no-value';
+
+ this.$loading.fadeIn();
+
+ if (this.isDropdown) {
+ this.$dropdown.trigger('loading.gl.dropdown');
+ this.$selectbox.hide();
+ }
+
+ this.$value.css('display', '');
+ this.$valueContent.html(`${this.displayedDate}`);
+ this.$sidebarValue.html(this.displayedDate);
+
+ selectedDateValue !== null ?
+ $('.js-remove-due-date-holder').removeClass('hidden') :
+ $('.js-remove-due-date-holder').addClass('hidden');
+
+ if (this.isDropdown) {
+ this.$dropdown.trigger('loaded.gl.dropdown');
+ this.$dropdown.dropdown('toggle');
+ }
+ return this.$loading.fadeOut();
+ }
+
submitSelectedDate(isDropdown) {
+ this.isDropdown = isDropdown;
return $.ajax({
type: 'PUT',
url: this.issueUpdateURL,
data: this.datePayload,
dataType: 'json',
- beforeSend: () => {
- const selectedDateValue = this.datePayload[this.abilityName].due_date;
- const displayedDateStyle = this.displayedDate !== 'No due date' ? 'bold' : 'no-value';
-
- this.$loading.fadeIn();
-
- if (isDropdown) {
- this.$dropdown.trigger('loading.gl.dropdown');
- this.$selectbox.hide();
- }
-
- this.$value.css('display', '');
- this.$valueContent.html(`${this.displayedDate}`);
- this.$sidebarValue.html(this.displayedDate);
-
- return selectedDateValue.length ?
- $('.js-remove-due-date-holder').removeClass('hidden') :
- $('.js-remove-due-date-holder').addClass('hidden');
-
- }
- }).done((data) => {
- if (isDropdown) {
- this.$dropdown.trigger('loaded.gl.dropdown');
- this.$dropdown.dropdown('toggle');
- }
- return this.$loading.fadeOut();
- });
+ }).done((data) => this.renderUpdatedDueDate(data))
}
}
diff --git a/app/assets/javascripts/labels_select.js b/app/assets/javascripts/labels_select.js
index c334e3e0c0265c1745c305da329c9c435d5fd37a..14d96f2f0b7b0ce2627f37695f8d72b9e09715ec 100644
--- a/app/assets/javascripts/labels_select.js
+++ b/app/assets/javascripts/labels_select.js
@@ -50,6 +50,61 @@
new gl.CreateLabelDropdown($dropdown.closest('.dropdown').find('.dropdown-new-label'), namespacePath, projectPath);
}
+
+ var renderMethod = function(data) {
+ var labelCount, template, labelTooltipTitle, labelTitles;
+ $loading.fadeOut();
+ $dropdown.trigger('loaded.gl.dropdown');
+ $selectbox.hide();
+ data.issueURLSplit = issueURLSplit;
+ labelCount = 0;
+ if (data.labels.length) {
+ template = labelHTMLTemplate(data);
+ labelCount = data.labels.length;
+ }
+ else {
+ template = labelNoneHTMLTemplate;
+ }
+ $value.removeAttr('style').html(template);
+ $sidebarCollapsedValue.text(labelCount);
+
+ if (data.labels.length) {
+ labelTitles = data.labels.map(function(label) {
+ return label.title;
+ });
+
+ if (labelTitles.length > 5) {
+ labelTitles = labelTitles.slice(0, 5);
+ labelTitles.push('and ' + (data.labels.length - 5) + ' more');
+ }
+
+ labelTooltipTitle = labelTitles.join(', ');
+ }
+ else {
+ labelTooltipTitle = '';
+ $sidebarLabelTooltip.tooltip('destroy');
+ }
+
+ $sidebarLabelTooltip
+ .attr('title', labelTooltipTitle)
+ .tooltip('fixTitle');
+
+ $('.has-tooltip', $value).tooltip({
+ container: 'body'
+ });
+ return $value.find('a').each(function(i) {
+ return setTimeout((function(_this) {
+ return function() {
+ return gl.animate.animate($(_this), 'pulse');
+ };
+ })(this), 200 * i);
+ });
+ };
+
+ if (gl.IssuableResource) {
+ gl.IssuableResource.subscribe(renderMethod);
+ }
+
saveLabelData = function() {
var data, selected;
selected = $dropdown.closest('.selectbox').find("input[name='" + fieldName + "']").map(function() {
@@ -72,55 +127,7 @@
url: issueUpdateURL,
dataType: 'JSON',
data: data
- }).done(function(data) {
- var labelCount, template, labelTooltipTitle, labelTitles;
- $loading.fadeOut();
- $dropdown.trigger('loaded.gl.dropdown');
- $selectbox.hide();
- data.issueURLSplit = issueURLSplit;
- labelCount = 0;
- if (data.labels.length) {
- template = labelHTMLTemplate(data);
- labelCount = data.labels.length;
- }
- else {
- template = labelNoneHTMLTemplate;
- }
- $value.removeAttr('style').html(template);
- $sidebarCollapsedValue.text(labelCount);
-
- if (data.labels.length) {
- labelTitles = data.labels.map(function(label) {
- return label.title;
- });
-
- if (labelTitles.length > 5) {
- labelTitles = labelTitles.slice(0, 5);
- labelTitles.push('and ' + (data.labels.length - 5) + ' more');
- }
-
- labelTooltipTitle = labelTitles.join(', ');
- }
- else {
- labelTooltipTitle = '';
- $sidebarLabelTooltip.tooltip('destroy');
- }
-
- $sidebarLabelTooltip
- .attr('title', labelTooltipTitle)
- .tooltip('fixTitle');
-
- $('.has-tooltip', $value).tooltip({
- container: 'body'
- });
- return $value.find('a').each(function(i) {
- return setTimeout((function(_this) {
- return function() {
- return gl.animate.animate($(_this), 'pulse');
- };
- })(this), 200 * i);
- });
- });
+ }).done(renderMethod);
};
return $dropdown.glDropdown({
showMenuAbove: showMenuAbove,
diff --git a/app/assets/javascripts/milestone_select.js b/app/assets/javascripts/milestone_select.js
index d1cd38ad1104ad4648cb2bf06f2471b87cc9af06..e46922a05cb5a7472aa8542d60cc88d88d4fff85 100644
--- a/app/assets/javascripts/milestone_select.js
+++ b/app/assets/javascripts/milestone_select.js
@@ -32,6 +32,28 @@
milestoneLinkNoneTemplate = 'None';
collapsedSidebarLabelTemplate = _.template(' <%- title %> ');
}
+
+ var renderMethod = function(data) {
+ $dropdown.trigger('loaded.gl.dropdown');
+ $loading.fadeOut();
+ $selectbox.hide();
+ $value.css('display', '');
+ if (data.milestone != null) {
+ data.milestone.namespace = _this.currentProject.namespace;
+ data.milestone.path = _this.currentProject.path;
+ data.milestone.remaining = gl.utils.timeFor(data.milestone.due_date);
+ $value.html(milestoneLinkTemplate(data.milestone));
+ return $sidebarCollapsedValue.find('span').html(collapsedSidebarLabelTemplate(data.milestone));
+ } else {
+ $value.html(milestoneLinkNoneTemplate);
+ return $sidebarCollapsedValue.find('span').text('No');
+ }
+ };
+
+ if (gl.IssuableResource) {
+ gl.IssuableResource.subscribe(renderMethod);
+ }
+
return $dropdown.glDropdown({
showMenuAbove: showMenuAbove,
data: function(term, callback) {
@@ -154,22 +176,7 @@
type: 'PUT',
url: issueUpdateURL,
data: data
- }).done(function(data) {
- $dropdown.trigger('loaded.gl.dropdown');
- $loading.fadeOut();
- $selectbox.hide();
- $value.css('display', '');
- if (data.milestone != null) {
- data.milestone.namespace = _this.currentProject.namespace;
- data.milestone.path = _this.currentProject.path;
- data.milestone.remaining = gl.utils.timeFor(data.milestone.due_date);
- $value.html(milestoneLinkTemplate(data.milestone));
- return $sidebarCollapsedValue.find('span').html(collapsedSidebarLabelTemplate(data.milestone));
- } else {
- $value.html(milestoneLinkNoneTemplate);
- return $sidebarCollapsedValue.find('span').text('No');
- }
- });
+ }).done(renderMethod);
}
}
});
diff --git a/app/assets/javascripts/users_select.js b/app/assets/javascripts/users_select.js
index 7a2221dbaf5f625b2465dc42af9ea016debb9140..7d4c3fe232c318f7c05d32020a1d471d8770ef8b 100644
--- a/app/assets/javascripts/users_select.js
+++ b/app/assets/javascripts/users_select.js
@@ -48,6 +48,34 @@
});
};
+ var renderMethod = function(data) {
+ var user;
+ $dropdown.trigger('loaded.gl.dropdown');
+ $loading.fadeOut();
+ $selectbox.hide();
+ if (data.assignee) {
+ user = {
+ name: data.assignee.name,
+ username: data.assignee.username,
+ avatar: data.assignee.avatar_url
+ };
+ } else {
+ user = {
+ name: 'Unassigned',
+ username: '',
+ avatar: ''
+ };
+ }
+
+ $value.html(assigneeTemplate(user));
+ $collapsedSidebar.attr('title', user.name).tooltip('fixTitle');
+ return $collapsedSidebar.html(collapsedAssigneeTemplate(user));
+ };
+
+ if (gl.IssuableResource) {
+ gl.IssuableResource.subscribe(renderMethod);
+ }
+
$block.on('click', '.js-assign-yourself', function(e) {
e.preventDefault();
@@ -76,28 +104,7 @@
dataType: 'json',
url: issueURL,
data: data
- }).done(function(data) {
- var user;
- $dropdown.trigger('loaded.gl.dropdown');
- $loading.fadeOut();
- $selectbox.hide();
- if (data.assignee) {
- user = {
- name: data.assignee.name,
- username: data.assignee.username,
- avatar: data.assignee.avatar_url
- };
- } else {
- user = {
- name: 'Unassigned',
- username: '',
- avatar: ''
- };
- }
- $value.html(assigneeTemplate(user));
- $collapsedSidebar.attr('title', user.name).tooltip('fixTitle');
- return $collapsedSidebar.html(collapsedAssigneeTemplate(user));
- });
+ }).done(renderMethod);
};
collapsedAssigneeTemplate = _.template('<% if( avatar ) { %>
<% } else { %> <% } %>');
assigneeTemplate = _.template('<% if (username) { %> <% if( avatar ) { %>
<% } %> <%- name %> @<%- username %> <% } else { %> No assignee - assign yourself <% } %>');