Commit 2bad3b0e authored by Filipa Lacerda's avatar Filipa Lacerda

Merge branch 'ph-even-more-es-modules' into 'master'

Exported JS classes as modules

See merge request gitlab-org/gitlab-ce!15960
parents 26b7b28a 6a335871
/* eslint-disable comma-dangle, space-before-function-paren, no-new */ /* eslint-disable comma-dangle, space-before-function-paren, no-new */
/* global MilestoneSelect */ /* global MilestoneSelect */
/* global Sidebar */
import Vue from 'vue'; import Vue from 'vue';
import Flash from '../../flash'; import Flash from '../../flash';
import Sidebar from '../../right_sidebar';
import eventHub from '../../sidebar/event_hub'; import eventHub from '../../sidebar/event_hub';
import assigneeTitle from '../../sidebar/components/assignees/assignee_title'; import assigneeTitle from '../../sidebar/components/assignees/assignee_title';
import assignees from '../../sidebar/components/assignees/assignees'; import assignees from '../../sidebar/components/assignees/assignees';
......
...@@ -11,7 +11,7 @@ import NotificationsForm from './notifications_form'; ...@@ -11,7 +11,7 @@ import NotificationsForm from './notifications_form';
import notificationsDropdown from './notifications_dropdown'; import notificationsDropdown from './notifications_dropdown';
import groupAvatar from './group_avatar'; import groupAvatar from './group_avatar';
import GroupLabelSubscription from './group_label_subscription'; import GroupLabelSubscription from './group_label_subscription';
/* global LineHighlighter */ import LineHighlighter from './line_highlighter';
import BuildArtifacts from './build_artifacts'; import BuildArtifacts from './build_artifacts';
import CILintEditor from './ci_lint_editor'; import CILintEditor from './ci_lint_editor';
import groupsSelect from './groups_select'; import groupsSelect from './groups_select';
...@@ -21,7 +21,7 @@ import NamespaceSelect from './namespace_select'; ...@@ -21,7 +21,7 @@ import NamespaceSelect from './namespace_select';
import NewCommitForm from './new_commit_form'; import NewCommitForm from './new_commit_form';
import Project from './project'; import Project from './project';
import projectAvatar from './project_avatar'; import projectAvatar from './project_avatar';
/* global MergeRequest */ import MergeRequest from './merge_request';
import Compare from './compare'; import Compare from './compare';
import initCompareAutocomplete from './compare_autocomplete'; import initCompareAutocomplete from './compare_autocomplete';
import ProjectFindFile from './project_find_file'; import ProjectFindFile from './project_find_file';
...@@ -29,7 +29,7 @@ import ProjectNew from './project_new'; ...@@ -29,7 +29,7 @@ import ProjectNew from './project_new';
import projectImport from './project_import'; import projectImport from './project_import';
import Labels from './labels'; import Labels from './labels';
import LabelManager from './label_manager'; import LabelManager from './label_manager';
/* global Sidebar */ import Sidebar from './right_sidebar';
import IssuableTemplateSelectors from './templates/issuable_template_selectors'; import IssuableTemplateSelectors from './templates/issuable_template_selectors';
import Flash from './flash'; import Flash from './flash';
import CommitsList from './commits'; import CommitsList from './commits';
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* global MilestoneSelect */ /* global MilestoneSelect */
import LabelsSelect from './labels_select'; import LabelsSelect from './labels_select';
import IssuableContext from './issuable_context'; import IssuableContext from './issuable_context';
/* global Sidebar */ import Sidebar from './right_sidebar';
import DueDateSelectors from './due_date_select'; import DueDateSelectors from './due_date_select';
...@@ -15,5 +15,5 @@ export default () => { ...@@ -15,5 +15,5 @@ export default () => {
new LabelsSelect(); new LabelsSelect();
new IssuableContext(sidebarOptions.currentUser); new IssuableContext(sidebarOptions.currentUser);
new DueDateSelectors(); new DueDateSelectors();
window.sidebar = new Sidebar(); Sidebar.initialize();
}; };
...@@ -175,4 +175,4 @@ LineHighlighter.prototype.__setLocationHash__ = function(value) { ...@@ -175,4 +175,4 @@ LineHighlighter.prototype.__setLocationHash__ = function(value) {
}, document.title, value); }, document.title, value);
}; };
window.LineHighlighter = LineHighlighter; export default LineHighlighter;
...@@ -45,14 +45,12 @@ import './layout_nav'; ...@@ -45,14 +45,12 @@ import './layout_nav';
import LazyLoader from './lazy_loader'; import LazyLoader from './lazy_loader';
import './line_highlighter'; import './line_highlighter';
import initLogoAnimation from './logo'; import initLogoAnimation from './logo';
import './merge_request';
import './merge_request_tabs'; import './merge_request_tabs';
import './milestone_select'; import './milestone_select';
import './notes'; import './notes';
import './preview_markdown'; import './preview_markdown';
import './projects_dropdown'; import './projects_dropdown';
import './render_gfm'; import './render_gfm';
import './right_sidebar';
import initBreadcrumbs from './breadcrumb'; import initBreadcrumbs from './breadcrumb';
import './dispatcher'; import './dispatcher';
......
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, quotes, no-underscore-dangle, one-var, one-var-declaration-per-line, consistent-return, dot-notation, quote-props, comma-dangle, object-shorthand, max-len, prefer-arrow-callback */ /* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, quotes, no-underscore-dangle, one-var, one-var-declaration-per-line, consistent-return, dot-notation, quote-props, comma-dangle, object-shorthand, max-len, prefer-arrow-callback */
/* global MergeRequestTabs */
import 'vendor/jquery.waitforimages'; import 'vendor/jquery.waitforimages';
import TaskList from './task_list'; import TaskList from './task_list';
...@@ -7,142 +6,138 @@ import MergeRequestTabs from './merge_request_tabs'; ...@@ -7,142 +6,138 @@ import MergeRequestTabs from './merge_request_tabs';
import IssuablesHelper from './helpers/issuables_helper'; import IssuablesHelper from './helpers/issuables_helper';
import { addDelimiter } from './lib/utils/text_utility'; import { addDelimiter } from './lib/utils/text_utility';
(function() { function MergeRequest(opts) {
this.MergeRequest = (function() { // Initialize MergeRequest behavior
function MergeRequest(opts) { //
// Initialize MergeRequest behavior // Options:
// // action - String, current controller action
// Options: //
// action - String, current controller action this.opts = opts != null ? opts : {};
// this.submitNoteForm = this.submitNoteForm.bind(this);
this.opts = opts != null ? opts : {}; this.$el = $('.merge-request');
this.submitNoteForm = this.submitNoteForm.bind(this); this.$('.show-all-commits').on('click', (function(_this) {
this.$el = $('.merge-request'); return function() {
this.$('.show-all-commits').on('click', (function(_this) { return _this.showAllCommits();
return function() {
return _this.showAllCommits();
};
})(this));
this.initTabs();
this.initMRBtnListeners();
this.initCommitMessageListeners();
this.closeReopenReportToggle = IssuablesHelper.initCloseReopenReport();
if ($("a.btn-close").length) {
this.taskList = new TaskList({
dataType: 'merge_request',
fieldName: 'description',
selector: '.detail-page-description',
onSuccess: (result) => {
document.querySelector('#task_status').innerText = result.task_status;
document.querySelector('#task_status_short').innerText = result.task_status_short;
}
});
}
}
// Local jQuery finder
MergeRequest.prototype.$ = function(selector) {
return this.$el.find(selector);
}; };
})(this));
MergeRequest.prototype.initTabs = function() {
if (window.mrTabs) { this.initTabs();
window.mrTabs.unbindEvents(); this.initMRBtnListeners();
this.initCommitMessageListeners();
this.closeReopenReportToggle = IssuablesHelper.initCloseReopenReport();
if ($("a.btn-close").length) {
this.taskList = new TaskList({
dataType: 'merge_request',
fieldName: 'description',
selector: '.detail-page-description',
onSuccess: (result) => {
document.querySelector('#task_status').innerText = result.task_status;
document.querySelector('#task_status_short').innerText = result.task_status_short;
} }
window.mrTabs = new MergeRequestTabs(this.opts); });
}; }
}
MergeRequest.prototype.showAllCommits = function() {
this.$('.first-commits').remove(); // Local jQuery finder
return this.$('.all-commits').removeClass('hide'); MergeRequest.prototype.$ = function(selector) {
}; return this.$el.find(selector);
};
MergeRequest.prototype.initMRBtnListeners = function() {
var _this; MergeRequest.prototype.initTabs = function() {
_this = this; if (window.mrTabs) {
return $('a.btn-close, a.btn-reopen').on('click', function(e) { window.mrTabs.unbindEvents();
var $this, shouldSubmit; }
$this = $(this); window.mrTabs = new MergeRequestTabs(this.opts);
shouldSubmit = $this.hasClass('btn-comment'); };
if (shouldSubmit && $this.data('submitted')) {
return; MergeRequest.prototype.showAllCommits = function() {
} this.$('.first-commits').remove();
return this.$('.all-commits').removeClass('hide');
if (this.closeReopenReportToggle) this.closeReopenReportToggle.setDisable(); };
if (shouldSubmit) { MergeRequest.prototype.initMRBtnListeners = function() {
if ($this.hasClass('btn-comment-and-close') || $this.hasClass('btn-comment-and-reopen')) { var _this;
e.preventDefault(); _this = this;
e.stopImmediatePropagation(); return $('a.btn-close, a.btn-reopen').on('click', function(e) {
var $this, shouldSubmit;
_this.submitNoteForm($this.closest('form'), $this); $this = $(this);
} shouldSubmit = $this.hasClass('btn-comment');
} if (shouldSubmit && $this.data('submitted')) {
}); return;
}; }
MergeRequest.prototype.submitNoteForm = function(form, $button) {
var noteText;
noteText = form.find("textarea.js-note-text").val();
if (noteText.trim().length > 0) {
form.submit();
$button.data('submitted', true);
return $button.trigger('click');
}
};
MergeRequest.prototype.initCommitMessageListeners = function() {
$(document).on('click', 'a.js-with-description-link', function(e) {
var textarea = $('textarea.js-commit-message');
e.preventDefault();
textarea.val(textarea.data('messageWithDescription')); if (this.closeReopenReportToggle) this.closeReopenReportToggle.setDisable();
$('.js-with-description-hint').hide();
$('.js-without-description-hint').show();
});
$(document).on('click', 'a.js-without-description-link', function(e) { if (shouldSubmit) {
var textarea = $('textarea.js-commit-message'); if ($this.hasClass('btn-comment-and-close') || $this.hasClass('btn-comment-and-reopen')) {
e.preventDefault(); e.preventDefault();
e.stopImmediatePropagation();
textarea.val(textarea.data('messageWithoutDescription')); _this.submitNoteForm($this.closest('form'), $this);
$('.js-with-description-hint').show();
$('.js-without-description-hint').hide();
});
};
MergeRequest.prototype.updateStatusText = function(classToRemove, classToAdd, newStatusText) {
$('.detail-page-header .status-box')
.removeClass(classToRemove)
.addClass(classToAdd)
.find('span')
.text(newStatusText);
};
MergeRequest.prototype.decreaseCounter = function(by = 1) {
const $el = $('.nav-links .js-merge-counter');
const count = Math.max((parseInt($el.text().replace(/[^\d]/, ''), 10) - by), 0);
$el.text(addDelimiter(count));
};
MergeRequest.prototype.hideCloseButton = function() {
const el = document.querySelector('.merge-request .js-issuable-actions');
const closeDropdownItem = el.querySelector('li.close-item');
if (closeDropdownItem) {
closeDropdownItem.classList.add('hidden');
// Selects the next dropdown item
el.querySelector('li.report-item').click();
} else {
// No dropdown just hide the Close button
el.querySelector('.btn-close').classList.add('hidden');
} }
// Dropdown for mobile screen }
el.querySelector('li.js-close-item').classList.add('hidden'); });
}; };
return MergeRequest; MergeRequest.prototype.submitNoteForm = function(form, $button) {
})(); var noteText;
}).call(window); noteText = form.find("textarea.js-note-text").val();
if (noteText.trim().length > 0) {
form.submit();
$button.data('submitted', true);
return $button.trigger('click');
}
};
MergeRequest.prototype.initCommitMessageListeners = function() {
$(document).on('click', 'a.js-with-description-link', function(e) {
var textarea = $('textarea.js-commit-message');
e.preventDefault();
textarea.val(textarea.data('messageWithDescription'));
$('.js-with-description-hint').hide();
$('.js-without-description-hint').show();
});
$(document).on('click', 'a.js-without-description-link', function(e) {
var textarea = $('textarea.js-commit-message');
e.preventDefault();
textarea.val(textarea.data('messageWithoutDescription'));
$('.js-with-description-hint').show();
$('.js-without-description-hint').hide();
});
};
MergeRequest.prototype.updateStatusText = function(classToRemove, classToAdd, newStatusText) {
$('.detail-page-header .status-box')
.removeClass(classToRemove)
.addClass(classToAdd)
.find('span')
.text(newStatusText);
};
MergeRequest.prototype.decreaseCounter = function(by = 1) {
const $el = $('.nav-links .js-merge-counter');
const count = Math.max((parseInt($el.text().replace(/[^\d]/, ''), 10) - by), 0);
$el.text(addDelimiter(count));
};
MergeRequest.prototype.hideCloseButton = function() {
const el = document.querySelector('.merge-request .js-issuable-actions');
const closeDropdownItem = el.querySelector('li.close-item');
if (closeDropdownItem) {
closeDropdownItem.classList.add('hidden');
// Selects the next dropdown item
el.querySelector('li.report-item').click();
} else {
// No dropdown just hide the Close button
el.querySelector('.btn-close').classList.add('hidden');
}
// Dropdown for mobile screen
el.querySelector('li.js-close-item').classList.add('hidden');
};
export default MergeRequest;
<script> <script>
/* global LineHighlighter */
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import LineHighlighter from '../../line_highlighter';
import syntaxHighlight from '../../syntax_highlight'; import syntaxHighlight from '../../syntax_highlight';
export default { export default {
......
...@@ -3,226 +3,228 @@ ...@@ -3,226 +3,228 @@
import _ from 'underscore'; import _ from 'underscore';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
(function() { function Sidebar(currentUser) {
this.Sidebar = (function() { this.toggleTodo = this.toggleTodo.bind(this);
function Sidebar(currentUser) { this.sidebar = $('aside');
this.toggleTodo = this.toggleTodo.bind(this);
this.sidebar = $('aside'); this.removeListeners();
this.addEventListeners();
this.removeListeners(); }
this.addEventListeners();
Sidebar.initialize = function(currentUser) {
if (!this.instance) {
this.instance = new Sidebar(currentUser);
}
};
Sidebar.prototype.removeListeners = function () {
this.sidebar.off('click', '.sidebar-collapsed-icon');
this.sidebar.off('hidden.gl.dropdown');
$('.dropdown').off('loading.gl.dropdown');
$('.dropdown').off('loaded.gl.dropdown');
$(document).off('click', '.js-sidebar-toggle');
};
Sidebar.prototype.addEventListeners = function() {
const $document = $(document);
this.sidebar.on('click', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked);
this.sidebar.on('hidden.gl.dropdown', this, this.onSidebarDropdownHidden);
$('.dropdown').on('loading.gl.dropdown', this.sidebarDropdownLoading);
$('.dropdown').on('loaded.gl.dropdown', this.sidebarDropdownLoaded);
$document.on('click', '.js-sidebar-toggle', this.sidebarToggleClicked);
return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo);
};
Sidebar.prototype.sidebarToggleClicked = function (e, triggered) {
var $allGutterToggleIcons, $this, $thisIcon;
e.preventDefault();
$this = $(this);
$thisIcon = $this.find('i');
$allGutterToggleIcons = $('.js-sidebar-toggle i');
if ($thisIcon.hasClass('fa-angle-double-right')) {
$allGutterToggleIcons.removeClass('fa-angle-double-right').addClass('fa-angle-double-left');
$('aside.right-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');
$('.layout-page').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');
} else {
$allGutterToggleIcons.removeClass('fa-angle-double-left').addClass('fa-angle-double-right');
$('aside.right-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded');
$('.layout-page').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded');
if (gl.lazyLoader) gl.lazyLoader.loadCheck();
}
if (!triggered) {
Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed'));
}
};
Sidebar.prototype.toggleTodo = function(e) {
var $btnText, $this, $todoLoading, ajaxType, url;
$this = $(e.currentTarget);
ajaxType = $this.attr('data-delete-path') ? 'DELETE' : 'POST';
if ($this.attr('data-delete-path')) {
url = "" + ($this.attr('data-delete-path'));
} else {
url = "" + ($this.data('url'));
}
$this.tooltip('hide');
return $.ajax({
url: url,
type: ajaxType,
dataType: 'json',
data: {
issuable_id: $this.data('issuable-id'),
issuable_type: $this.data('issuable-type')
},
beforeSend: (function(_this) {
return function() {
$('.js-issuable-todo').disable()
.addClass('is-loading');
};
})(this)
}).done((function(_this) {
return function(data) {
return _this.todoUpdateDone(data);
};
})(this));
};
Sidebar.prototype.todoUpdateDone = function(data) {
const deletePath = data.delete_path ? data.delete_path : null;
const attrPrefix = deletePath ? 'mark' : 'todo';
const $todoBtns = $('.js-issuable-todo');
$(document).trigger('todo:toggle', data.count);
$todoBtns.each((i, el) => {
const $el = $(el);
const $elText = $el.find('.js-issuable-todo-inner');
$el.removeClass('is-loading')
.enable()
.attr('aria-label', $el.data(`${attrPrefix}-text`))
.attr('data-delete-path', deletePath)
.attr('title', $el.data(`${attrPrefix}-text`));
if ($el.hasClass('has-tooltip')) {
$el.tooltip('fixTitle');
} }
Sidebar.prototype.removeListeners = function () { if ($el.data(`${attrPrefix}-icon`)) {
this.sidebar.off('click', '.sidebar-collapsed-icon'); $elText.html($el.data(`${attrPrefix}-icon`));
this.sidebar.off('hidden.gl.dropdown'); } else {
$('.dropdown').off('loading.gl.dropdown'); $elText.text($el.data(`${attrPrefix}-text`));
$('.dropdown').off('loaded.gl.dropdown'); }
$(document).off('click', '.js-sidebar-toggle'); });
}; };
Sidebar.prototype.addEventListeners = function() { Sidebar.prototype.sidebarDropdownLoading = function(e) {
const $document = $(document); var $loading, $sidebarCollapsedIcon, i, img;
$sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');
this.sidebar.on('click', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked); img = $sidebarCollapsedIcon.find('img');
this.sidebar.on('hidden.gl.dropdown', this, this.onSidebarDropdownHidden); i = $sidebarCollapsedIcon.find('i');
$('.dropdown').on('loading.gl.dropdown', this.sidebarDropdownLoading); $loading = $('<i class="fa fa-spinner fa-spin"></i>');
$('.dropdown').on('loaded.gl.dropdown', this.sidebarDropdownLoaded); if (img.length) {
img.before($loading);
$document.on('click', '.js-sidebar-toggle', this.sidebarToggleClicked); return img.hide();
return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo); } else if (i.length) {
}; i.before($loading);
return i.hide();
Sidebar.prototype.sidebarToggleClicked = function (e, triggered) { }
var $allGutterToggleIcons, $this, $thisIcon; };
e.preventDefault();
$this = $(this); Sidebar.prototype.sidebarDropdownLoaded = function(e) {
$thisIcon = $this.find('i'); var $sidebarCollapsedIcon, i, img;
$allGutterToggleIcons = $('.js-sidebar-toggle i'); $sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');
if ($thisIcon.hasClass('fa-angle-double-right')) { img = $sidebarCollapsedIcon.find('img');
$allGutterToggleIcons.removeClass('fa-angle-double-right').addClass('fa-angle-double-left'); $sidebarCollapsedIcon.find('i.fa-spin').remove();
$('aside.right-sidebar').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); i = $sidebarCollapsedIcon.find('i');
$('.layout-page').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed'); if (img.length) {
} else { return img.show();
$allGutterToggleIcons.removeClass('fa-angle-double-left').addClass('fa-angle-double-right'); } else {
$('aside.right-sidebar').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); return i.show();
$('.layout-page').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded'); }
};
if (gl.lazyLoader) gl.lazyLoader.loadCheck();
} Sidebar.prototype.sidebarCollapseClicked = function(e) {
if (!triggered) { var $block, sidebar;
Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed')); if ($(e.currentTarget).hasClass('dont-change-state')) {
} return;
}; }
sidebar = e.data;
Sidebar.prototype.toggleTodo = function(e) { e.preventDefault();
var $btnText, $this, $todoLoading, ajaxType, url; $block = $(this).closest('.block');
$this = $(e.currentTarget); return sidebar.openDropdown($block);
ajaxType = $this.attr('data-delete-path') ? 'DELETE' : 'POST'; };
if ($this.attr('data-delete-path')) {
url = "" + ($this.attr('data-delete-path')); Sidebar.prototype.openDropdown = function(blockOrName) {
} else { var $block;
url = "" + ($this.data('url')); $block = _.isString(blockOrName) ? this.getBlock(blockOrName) : blockOrName;
} if (!this.isOpen()) {
this.setCollapseAfterUpdate($block);
$this.tooltip('hide'); this.toggleSidebar('open');
}
return $.ajax({
url: url, // Wait for the sidebar to trigger('click') open
type: ajaxType, // so it doesn't cause our dropdown to close preemptively
dataType: 'json', setTimeout(() => {
data: { $block.find('.js-sidebar-dropdown-toggle').trigger('click');
issuable_id: $this.data('issuable-id'), });
issuable_type: $this.data('issuable-type') };
},
beforeSend: (function(_this) { Sidebar.prototype.setCollapseAfterUpdate = function($block) {
return function() { $block.addClass('collapse-after-update');
$('.js-issuable-todo').disable() return $('.layout-page').addClass('with-overlay');
.addClass('is-loading'); };
};
})(this) Sidebar.prototype.onSidebarDropdownHidden = function(e) {
}).done((function(_this) { var $block, sidebar;
return function(data) { sidebar = e.data;
return _this.todoUpdateDone(data); e.preventDefault();
}; $block = $(e.target).closest('.block');
})(this)); return sidebar.sidebarDropdownHidden($block);
}; };
Sidebar.prototype.todoUpdateDone = function(data) { Sidebar.prototype.sidebarDropdownHidden = function($block) {
const deletePath = data.delete_path ? data.delete_path : null; if ($block.hasClass('collapse-after-update')) {
const attrPrefix = deletePath ? 'mark' : 'todo'; $block.removeClass('collapse-after-update');
const $todoBtns = $('.js-issuable-todo'); $('.layout-page').removeClass('with-overlay');
return this.toggleSidebar('hide');
$(document).trigger('todo:toggle', data.count); }
};
$todoBtns.each((i, el) => {
const $el = $(el); Sidebar.prototype.triggerOpenSidebar = function() {
const $elText = $el.find('.js-issuable-todo-inner'); return this.sidebar.find('.js-sidebar-toggle').trigger('click');
};
$el.removeClass('is-loading')
.enable() Sidebar.prototype.toggleSidebar = function(action) {
.attr('aria-label', $el.data(`${attrPrefix}-text`)) if (action == null) {
.attr('data-delete-path', deletePath) action = 'toggle';
.attr('title', $el.data(`${attrPrefix}-text`)); }
if (action === 'toggle') {
if ($el.hasClass('has-tooltip')) { this.triggerOpenSidebar();
$el.tooltip('fixTitle'); }
} if (action === 'open') {
if (!this.isOpen()) {
if ($el.data(`${attrPrefix}-icon`)) { this.triggerOpenSidebar();
$elText.html($el.data(`${attrPrefix}-icon`)); }
} else { }
$elText.text($el.data(`${attrPrefix}-text`)); if (action === 'hide') {
} if (this.isOpen()) {
}); return this.triggerOpenSidebar();
}; }
}
Sidebar.prototype.sidebarDropdownLoading = function(e) { };
var $loading, $sidebarCollapsedIcon, i, img;
$sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');
img = $sidebarCollapsedIcon.find('img');
i = $sidebarCollapsedIcon.find('i');
$loading = $('<i class="fa fa-spinner fa-spin"></i>');
if (img.length) {
img.before($loading);
return img.hide();
} else if (i.length) {
i.before($loading);
return i.hide();
}
};
Sidebar.prototype.sidebarDropdownLoaded = function(e) {
var $sidebarCollapsedIcon, i, img;
$sidebarCollapsedIcon = $(this).closest('.block').find('.sidebar-collapsed-icon');
img = $sidebarCollapsedIcon.find('img');
$sidebarCollapsedIcon.find('i.fa-spin').remove();
i = $sidebarCollapsedIcon.find('i');
if (img.length) {
return img.show();
} else {
return i.show();
}
};
Sidebar.prototype.sidebarCollapseClicked = function(e) {
var $block, sidebar;
if ($(e.currentTarget).hasClass('dont-change-state')) {
return;
}
sidebar = e.data;
e.preventDefault();
$block = $(this).closest('.block');
return sidebar.openDropdown($block);
};
Sidebar.prototype.openDropdown = function(blockOrName) {
var $block;
$block = _.isString(blockOrName) ? this.getBlock(blockOrName) : blockOrName;
if (!this.isOpen()) {
this.setCollapseAfterUpdate($block);
this.toggleSidebar('open');
}
// Wait for the sidebar to trigger('click') open
// so it doesn't cause our dropdown to close preemptively
setTimeout(() => {
$block.find('.js-sidebar-dropdown-toggle').trigger('click');
});
};
Sidebar.prototype.setCollapseAfterUpdate = function($block) {
$block.addClass('collapse-after-update');
return $('.layout-page').addClass('with-overlay');
};
Sidebar.prototype.onSidebarDropdownHidden = function(e) {
var $block, sidebar;
sidebar = e.data;
e.preventDefault();
$block = $(e.target).closest('.block');
return sidebar.sidebarDropdownHidden($block);
};
Sidebar.prototype.sidebarDropdownHidden = function($block) {
if ($block.hasClass('collapse-after-update')) {
$block.removeClass('collapse-after-update');
$('.layout-page').removeClass('with-overlay');
return this.toggleSidebar('hide');
}
};
Sidebar.prototype.triggerOpenSidebar = function() {
return this.sidebar.find('.js-sidebar-toggle').trigger('click');
};
Sidebar.prototype.toggleSidebar = function(action) {
if (action == null) {
action = 'toggle';
}
if (action === 'toggle') {
this.triggerOpenSidebar();
}
if (action === 'open') {
if (!this.isOpen()) {
this.triggerOpenSidebar();
}
}
if (action === 'hide') {
if (this.isOpen()) {
return this.triggerOpenSidebar();
}
}
};
Sidebar.prototype.isOpen = function() { Sidebar.prototype.isOpen = function() {
return this.sidebar.is('.right-sidebar-expanded'); return this.sidebar.is('.right-sidebar-expanded');
}; };
Sidebar.prototype.getBlock = function(name) { Sidebar.prototype.getBlock = function(name) {
return this.sidebar.find(".block." + name); return this.sidebar.find(".block." + name);
}; };
return Sidebar; export default Sidebar;
})();
}).call(window);
/* global Mousetrap */ /* global Mousetrap */
/* global sidebar */
import _ from 'underscore'; import _ from 'underscore';
import 'mousetrap'; import 'mousetrap';
import Sidebar from './right_sidebar';
import ShortcutsNavigation from './shortcuts_navigation'; import ShortcutsNavigation from './shortcuts_navigation';
import { CopyAsGFM } from './behaviors/copy_as_gfm'; import { CopyAsGFM } from './behaviors/copy_as_gfm';
...@@ -69,7 +69,7 @@ export default class ShortcutsIssuable extends ShortcutsNavigation { ...@@ -69,7 +69,7 @@ export default class ShortcutsIssuable extends ShortcutsNavigation {
} }
static openSidebarDropdown(name) { static openSidebarDropdown(name) {
sidebar.openDropdown(name); Sidebar.instance.openDropdown(name);
return false; return false;
} }
} }
/* global Sidebar */
/* eslint-disable no-new */ /* eslint-disable no-new */
import _ from 'underscore'; import _ from 'underscore';
import '~/right_sidebar'; import Sidebar from '~/right_sidebar';
describe('Issuable right sidebar collapsed todo toggle', () => { describe('Issuable right sidebar collapsed todo toggle', () => {
const fixtureName = 'issues/open-issue.html.raw'; const fixtureName = 'issues/open-issue.html.raw';
......
/* eslint-disable space-before-function-paren, no-var, no-param-reassign, quotes, prefer-template, no-else-return, new-cap, dot-notation, no-return-assign, comma-dangle, no-new, one-var, one-var-declaration-per-line, jasmine/no-spec-dupes, no-underscore-dangle, max-len */ /* eslint-disable space-before-function-paren, no-var, no-param-reassign, quotes, prefer-template, no-else-return, new-cap, dot-notation, no-return-assign, comma-dangle, no-new, one-var, one-var-declaration-per-line, jasmine/no-spec-dupes, no-underscore-dangle, max-len */
/* global LineHighlighter */
import '~/line_highlighter'; import LineHighlighter from '~/line_highlighter';
(function() { (function() {
describe('LineHighlighter', function() { describe('LineHighlighter', function() {
......
/* eslint-disable space-before-function-paren, no-return-assign */ /* eslint-disable space-before-function-paren, no-return-assign */
/* global MergeRequest */
import '~/merge_request'; import MergeRequest from '~/merge_request';
import CloseReopenReportToggle from '~/close_reopen_report_toggle'; import CloseReopenReportToggle from '~/close_reopen_report_toggle';
import IssuablesHelper from '~/helpers/issuables_helper'; import IssuablesHelper from '~/helpers/issuables_helper';
......
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, new-parens, no-return-assign, new-cap, vars-on-top, max-len */ /* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, new-parens, no-return-assign, new-cap, vars-on-top, max-len */
/* global Sidebar */
import '~/commons/bootstrap'; import '~/commons/bootstrap';
import '~/right_sidebar'; import Sidebar from '~/right_sidebar';
(function() { (function() {
var $aside, $icon, $labelsIcon, $page, $toggle, assertSidebarState; var $aside, $icon, $labelsIcon, $page, $toggle, assertSidebarState;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment