Enable "prefer-destructuring" in JS files

Partially addresses #47006.
This commit is contained in:
gfyoung 2018-06-16 14:50:13 -07:00
parent d38eb9bb26
commit 23cdae8eee
89 changed files with 167 additions and 161 deletions

View File

@ -69,5 +69,3 @@ rules:
FunctionExpression: FunctionExpression:
parameters: 1 parameters: 1
body: 1 body: 1
## Destructuring: https://eslint.org/docs/rules/prefer-destructuring
prefer-destructuring: off

View File

@ -26,7 +26,7 @@ export default class AjaxLoadingSpinner {
} }
static toggleLoadingIcon(iconElement) { static toggleLoadingIcon(iconElement) {
const classList = iconElement.classList; const { classList } = iconElement;
classList.toggle(iconElement.dataset.icon); classList.toggle(iconElement.dataset.icon);
classList.toggle('fa-spinner'); classList.toggle('fa-spinner');
classList.toggle('fa-spin'); classList.toggle('fa-spin');

View File

@ -52,7 +52,7 @@ export default function initCopyToClipboard() {
* data types to the intended values. * data types to the intended values.
*/ */
$(document).on('copy', 'body > textarea[readonly]', (e) => { $(document).on('copy', 'body > textarea[readonly]', (e) => {
const clipboardData = e.originalEvent.clipboardData; const { clipboardData } = e.originalEvent;
if (!clipboardData) return; if (!clipboardData) return;
const text = e.target.value; const text = e.target.value;

View File

@ -321,7 +321,7 @@ export class CopyAsGFM {
} }
static copyAsGFM(e, transformer) { static copyAsGFM(e, transformer) {
const clipboardData = e.originalEvent.clipboardData; const { clipboardData } = e.originalEvent;
if (!clipboardData) return; if (!clipboardData) return;
const documentFragment = getSelectedFragment(); const documentFragment = getSelectedFragment();
@ -338,7 +338,7 @@ export class CopyAsGFM {
} }
static pasteGFM(e) { static pasteGFM(e) {
const clipboardData = e.originalEvent.clipboardData; const { clipboardData } = e.originalEvent;
if (!clipboardData) return; if (!clipboardData) return;
const text = clipboardData.getData('text/plain'); const text = clipboardData.getData('text/plain');

View File

@ -84,7 +84,7 @@ class BalsamiqViewer {
renderTemplate(preview) { renderTemplate(preview) {
const resource = this.getResource(preview.resourceID); const resource = this.getResource(preview.resourceID);
const name = BalsamiqViewer.parseTitle(resource); const name = BalsamiqViewer.parseTitle(resource);
const image = preview.image; const { image } = preview;
const template = PREVIEW_TEMPLATE({ const template = PREVIEW_TEMPLATE({
name, name,

View File

@ -12,7 +12,7 @@ export default function loadBalsamiqFile() {
if (!(viewer instanceof Element)) return; if (!(viewer instanceof Element)) return;
const endpoint = viewer.dataset.endpoint; const { endpoint } = viewer.dataset;
const balsamiqViewer = new BalsamiqViewer(viewer); const balsamiqViewer = new BalsamiqViewer(viewer);
balsamiqViewer.loadFile(endpoint).catch(onError); balsamiqViewer.loadFile(endpoint).catch(onError);

View File

@ -5,7 +5,7 @@ export default () => {
[].slice.call(document.querySelectorAll('.js-material-changer')).forEach((el) => { [].slice.call(document.querySelectorAll('.js-material-changer')).forEach((el) => {
el.addEventListener('click', (e) => { el.addEventListener('click', (e) => {
const target = e.target; const { target } = e;
e.preventDefault(); e.preventDefault();

View File

@ -23,7 +23,7 @@
}, },
methods: { methods: {
removeIssue() { removeIssue() {
const issue = this.issue; const { issue } = this;
const lists = issue.getLists(); const lists = issue.getLists();
const listLabelIds = lists.map(list => list.label.id); const listLabelIds = lists.map(list => list.label.id);

View File

@ -121,7 +121,7 @@ export default () => {
this.filterManager.updateTokens(); this.filterManager.updateTokens();
}, },
updateDetailIssue(newIssue) { updateDetailIssue(newIssue) {
const sidebarInfoEndpoint = newIssue.sidebarInfoEndpoint; const { sidebarInfoEndpoint } = newIssue;
if (sidebarInfoEndpoint && newIssue.subscribed === undefined) { if (sidebarInfoEndpoint && newIssue.subscribed === undefined) {
newIssue.setFetchingState('subscriptions', true); newIssue.setFetchingState('subscriptions', true);
BoardService.getIssueInfo(sidebarInfoEndpoint) BoardService.getIssueInfo(sidebarInfoEndpoint)
@ -144,7 +144,7 @@ export default () => {
Store.detail.issue = {}; Store.detail.issue = {};
}, },
toggleSubscription(id) { toggleSubscription(id) {
const issue = Store.detail.issue; const { issue } = Store.detail;
if (issue.id === id && issue.toggleSubscriptionEndpoint) { if (issue.id === id && issue.toggleSubscriptionEndpoint) {
issue.setFetchingState('subscriptions', true); issue.setFetchingState('subscriptions', true);
BoardService.toggleIssueSubscription(issue.toggleSubscriptionEndpoint) BoardService.toggleIssueSubscription(issue.toggleSubscriptionEndpoint)

View File

@ -26,7 +26,7 @@ class ModalStore {
toggleIssue(issueObj) { toggleIssue(issueObj) {
const issue = issueObj; const issue = issueObj;
const selected = issue.selected; const { selected } = issue;
issue.selected = !selected; issue.selected = !selected;

View File

@ -81,7 +81,7 @@ export default class Clusters {
} }
initApplications() { initApplications() {
const store = this.store; const { store } = this;
const el = document.querySelector('#js-cluster-applications'); const el = document.querySelector('#js-cluster-applications');
this.applications = new Vue({ this.applications = new Vue({

View File

@ -122,7 +122,7 @@ export default class ImageFile {
return $('.swipe.view', this.file).each((function(_this) { return $('.swipe.view', this.file).each((function(_this) {
return function(index, view) { return function(index, view) {
var $swipeWrap, $swipeBar, $swipeFrame, wrapPadding, ref; var $swipeWrap, $swipeBar, $swipeFrame, wrapPadding, ref;
ref = _this.prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1]; ref = _this.prepareFrames(view), [maxWidth, maxHeight] = ref;
$swipeFrame = $('.swipe-frame', view); $swipeFrame = $('.swipe-frame', view);
$swipeWrap = $('.swipe-wrap', view); $swipeWrap = $('.swipe-wrap', view);
$swipeBar = $('.swipe-bar', view); $swipeBar = $('.swipe-bar', view);
@ -159,7 +159,7 @@ export default class ImageFile {
return $('.onion-skin.view', this.file).each((function(_this) { return $('.onion-skin.view', this.file).each((function(_this) {
return function(index, view) { return function(index, view) {
var $frame, $track, $dragger, $frameAdded, framePadding, ref, dragging = false; var $frame, $track, $dragger, $frameAdded, framePadding, ref, dragging = false;
ref = _this.prepareFrames(view), maxWidth = ref[0], maxHeight = ref[1]; ref = _this.prepareFrames(view), [maxWidth, maxHeight] = ref;
$frame = $('.onion-skin-frame', view); $frame = $('.onion-skin-frame', view);
$frameAdded = $('.frame.added', view); $frameAdded = $('.frame.added', view);
$track = $('.drag-track', view); $track = $('.drag-track', view);

View File

@ -281,7 +281,7 @@ export default class CreateMergeRequestDropdown {
if (event.target === this.branchInput) { if (event.target === this.branchInput) {
target = 'branch'; target = 'branch';
value = this.branchInput.value; ({ value } = this.branchInput);
} else if (event.target === this.refInput) { } else if (event.target === this.refInput) {
target = 'ref'; target = 'ref';
value = value =

View File

@ -111,7 +111,7 @@ const DiffNoteAvatars = Vue.extend({
}); });
}, },
addNoCommentClass() { addNoCommentClass() {
const notesCount = this.notesCount; const { notesCount } = this;
$(this.$el).closest('.js-avatar-container') $(this.$el).closest('.js-avatar-container')
.toggleClass('no-comment-btn', notesCount > 0) .toggleClass('no-comment-btn', notesCount > 0)

View File

@ -73,7 +73,7 @@ const JumpToDiscussion = Vue.extend({
}).toArray(); }).toArray();
}; };
const discussions = this.discussions; const { discussions } = this;
if (activeTab === 'diffs') { if (activeTab === 'diffs') {
discussionsSelector = '.diffs .notes[data-discussion-id]'; discussionsSelector = '.diffs .notes[data-discussion-id]';

View File

@ -18,7 +18,7 @@ import './components/new_issue_for_discussion';
export default () => { export default () => {
const projectPathHolder = const projectPathHolder =
document.querySelector('.merge-request') || document.querySelector('.commit-box'); document.querySelector('.merge-request') || document.querySelector('.commit-box');
const projectPath = projectPathHolder.dataset.projectPath; const { projectPath } = projectPathHolder.dataset;
const COMPONENT_SELECTOR = const COMPONENT_SELECTOR =
'resolve-btn, resolve-discussion-btn, jump-to-discussion, comment-and-resolve-btn, new-issue-for-discussion-btn'; 'resolve-btn, resolve-discussion-btn, jump-to-discussion, comment-and-resolve-btn, new-issue-for-discussion-btn';

View File

@ -47,7 +47,7 @@ export default {
methods: { methods: {
...mapActions(['toggleDiscussion']), ...mapActions(['toggleDiscussion']),
getTooltipText(noteData) { getTooltipText(noteData) {
let note = noteData.note; let { note } = noteData;
if (note.length > LENGTH_OF_AVATAR_TOOLTIP) { if (note.length > LENGTH_OF_AVATAR_TOOLTIP) {
note = truncate(note, LENGTH_OF_AVATAR_TOOLTIP); note = truncate(note, LENGTH_OF_AVATAR_TOOLTIP);

View File

@ -124,7 +124,7 @@ export default {
const newLineNumber = this.metaData.newPos || 0; const newLineNumber = this.metaData.newPos || 0;
const offset = newLineNumber - oldLineNumber; const offset = newLineNumber - oldLineNumber;
const bottom = this.isBottom; const bottom = this.isBottom;
const fileHash = this.fileHash; const { fileHash } = this;
const view = this.diffViewType; const view = this.diffViewType;
let unfold = true; let unfold = true;
let lineNumber = newLineNumber - 1; let lineNumber = newLineNumber - 1;

View File

@ -89,7 +89,7 @@ export default {
return isLeftExpanded || isRightExpanded; return isLeftExpanded || isRightExpanded;
}, },
getLineCode(line, side) { getLineCode(line, side) {
const lineCode = side.lineCode; const { lineCode } = side;
if (lineCode) { if (lineCode) {
return lineCode; return lineCode;
} }

View File

@ -292,7 +292,7 @@
if (this.model && if (this.model &&
this.model.last_deployment && this.model.last_deployment &&
this.model.last_deployment.deployable) { this.model.last_deployment.deployable) {
const deployable = this.model.last_deployment.deployable; const { deployable } = this.model.last_deployment;
return `${deployable.name} #${deployable.id}`; return `${deployable.name} #${deployable.id}`;
} }
return ''; return '';

View File

@ -146,7 +146,7 @@ export default class EnvironmentsStore {
* @return {Array} * @return {Array}
*/ */
updateEnvironmentProp(environment, prop, newValue) { updateEnvironmentProp(environment, prop, newValue) {
const environments = this.state.environments; const { environments } = this.state;
const updatedEnvironments = environments.map((env) => { const updatedEnvironments = environments.map((env) => {
const updateEnv = Object.assign({}, env); const updateEnv = Object.assign({}, env);
@ -161,7 +161,7 @@ export default class EnvironmentsStore {
} }
getOpenFolders() { getOpenFolders() {
const environments = this.state.environments; const { environments } = this.state;
return environments.filter(env => env.isFolder && env.isOpen); return environments.filter(env => env.isFolder && env.isOpen);
} }

View File

@ -35,7 +35,7 @@ export default class DropdownUtils {
// Remove the symbol for filter // Remove the symbol for filter
if (value[0] === filterSymbol) { if (value[0] === filterSymbol) {
symbol = value[0]; [symbol] = value;
value = value.slice(1); value = value.slice(1);
} }
@ -162,7 +162,7 @@ export default class DropdownUtils {
// Determines the full search query (visual tokens + input) // Determines the full search query (visual tokens + input)
static getSearchQuery(untilInput = false) { static getSearchQuery(untilInput = false) {
const container = FilteredSearchContainer.container; const { container } = FilteredSearchContainer;
const tokens = [].slice.call(container.querySelectorAll('.tokens-container li')); const tokens = [].slice.call(container.querySelectorAll('.tokens-container li'));
const values = []; const values = [];
@ -220,7 +220,7 @@ export default class DropdownUtils {
} }
static getInputSelectionPosition(input) { static getInputSelectionPosition(input) {
const selectionStart = input.selectionStart; const { selectionStart } = input;
let inputValue = input.value; let inputValue = input.value;
// Replace all spaces inside quote marks with underscores // Replace all spaces inside quote marks with underscores
// (will continue to match entire string until an end quote is found if any) // (will continue to match entire string until an end quote is found if any)

View File

@ -159,7 +159,7 @@ export default class FilteredSearchDropdownManager {
load(key, firstLoad = false) { load(key, firstLoad = false) {
const mappingKey = this.mapping[key]; const mappingKey = this.mapping[key];
const glClass = mappingKey.gl; const glClass = mappingKey.gl;
const element = mappingKey.element; const { element } = mappingKey;
let forceShowList = false; let forceShowList = false;
if (!mappingKey.reference) { if (!mappingKey.reference) {

View File

@ -235,7 +235,7 @@ export default class FilteredSearchManager {
checkForEnter(e) { checkForEnter(e) {
if (e.keyCode === 38 || e.keyCode === 40) { if (e.keyCode === 38 || e.keyCode === 40) {
const selectionStart = this.filteredSearchInput.selectionStart; const { selectionStart } = this.filteredSearchInput;
e.preventDefault(); e.preventDefault();
this.filteredSearchInput.setSelectionRange(selectionStart, selectionStart); this.filteredSearchInput.setSelectionRange(selectionStart, selectionStart);
@ -496,7 +496,7 @@ export default class FilteredSearchManager {
// Replace underscore with hyphen in the sanitizedkey. // Replace underscore with hyphen in the sanitizedkey.
// e.g. 'my_reaction' => 'my-reaction' // e.g. 'my_reaction' => 'my-reaction'
sanitizedKey = sanitizedKey.replace('_', '-'); sanitizedKey = sanitizedKey.replace('_', '-');
const symbol = match.symbol; const { symbol } = match;
let quotationsToUse = ''; let quotationsToUse = '';
if (sanitizedValue.indexOf(' ') !== -1) { if (sanitizedValue.indexOf(' ') !== -1) {

View File

@ -101,7 +101,7 @@ export default class FilteredSearchVisualTokens {
static updateLabelTokenColor(tokenValueContainer, tokenValue) { static updateLabelTokenColor(tokenValueContainer, tokenValue) {
const filteredSearchInput = FilteredSearchContainer.container.querySelector('.filtered-search'); const filteredSearchInput = FilteredSearchContainer.container.querySelector('.filtered-search');
const baseEndpoint = filteredSearchInput.dataset.baseEndpoint; const { baseEndpoint } = filteredSearchInput.dataset;
const labelsEndpoint = FilteredSearchVisualTokens.getEndpointWithQueryParams( const labelsEndpoint = FilteredSearchVisualTokens.getEndpointWithQueryParams(
`${baseEndpoint}/labels.json`, `${baseEndpoint}/labels.json`,
filteredSearchInput.dataset.endpointQueryParams, filteredSearchInput.dataset.endpointQueryParams,
@ -215,7 +215,7 @@ export default class FilteredSearchVisualTokens {
static addFilterVisualToken(tokenName, tokenValue, canEdit) { static addFilterVisualToken(tokenName, tokenValue, canEdit) {
const { lastVisualToken, isLastVisualTokenValid } const { lastVisualToken, isLastVisualTokenValid }
= FilteredSearchVisualTokens.getLastVisualTokenBeforeInput(); = FilteredSearchVisualTokens.getLastVisualTokenBeforeInput();
const addVisualTokenElement = FilteredSearchVisualTokens.addVisualTokenElement; const { addVisualTokenElement } = FilteredSearchVisualTokens;
if (isLastVisualTokenValid) { if (isLastVisualTokenValid) {
addVisualTokenElement(tokenName, tokenValue, false, canEdit); addVisualTokenElement(tokenName, tokenValue, false, canEdit);

View File

@ -29,7 +29,7 @@ class RecentSearchesRoot {
} }
render() { render() {
const state = this.store.state; const { state } = this.store;
this.vm = new Vue({ this.vm = new Vue({
el: this.wrapperElement, el: this.wrapperElement,
components: { components: {

View File

@ -80,7 +80,7 @@ class GfmAutoComplete {
let tpl = '/${name} '; let tpl = '/${name} ';
let referencePrefix = null; let referencePrefix = null;
if (value.params.length > 0) { if (value.params.length > 0) {
referencePrefix = value.params[0][0]; [[referencePrefix]] = value.params;
if (/^[@%~]/.test(referencePrefix)) { if (/^[@%~]/.test(referencePrefix)) {
tpl += '<%- referencePrefix %>'; tpl += '<%- referencePrefix %>';
} }
@ -458,7 +458,7 @@ class GfmAutoComplete {
static isLoading(data) { static isLoading(data) {
let dataToInspect = data; let dataToInspect = data;
if (data && data.length > 0) { if (data && data.length > 0) {
dataToInspect = data[0]; [dataToInspect] = data;
} }
const loadingState = GfmAutoComplete.defaultLoadingData[0]; const loadingState = GfmAutoComplete.defaultLoadingData[0];

View File

@ -613,7 +613,7 @@ GitLabDropdown = (function() {
}; };
GitLabDropdown.prototype.renderItem = function(data, group, index) { GitLabDropdown.prototype.renderItem = function(data, group, index) {
var field, fieldName, html, selected, text, url, value, rowHidden; var field, html, selected, text, url, value, rowHidden;
if (!this.options.renderRow) { if (!this.options.renderRow) {
value = this.options.id ? this.options.id(data) : data.id; value = this.options.id ? this.options.id(data) : data.id;
@ -651,7 +651,7 @@ GitLabDropdown = (function() {
html = this.options.renderRow.call(this.options, data, this); html = this.options.renderRow.call(this.options, data, this);
} else { } else {
if (!selected) { if (!selected) {
fieldName = this.options.fieldName; const { fieldName } = this.options;
if (value) { if (value) {
field = this.dropdown.parent().find(`input[name='${fieldName}'][value='${value}']`); field = this.dropdown.parent().find(`input[name='${fieldName}'][value='${value}']`);
@ -705,7 +705,8 @@ GitLabDropdown = (function() {
GitLabDropdown.prototype.highlightTextMatches = function(text, term) { GitLabDropdown.prototype.highlightTextMatches = function(text, term) {
const occurrences = fuzzaldrinPlus.match(text, term); const occurrences = fuzzaldrinPlus.match(text, term);
const indexOf = [].indexOf; const { indexOf } = [];
return text.split('').map(function(character, i) { return text.split('').map(function(character, i) {
if (indexOf.call(occurrences, i) !== -1) { if (indexOf.call(occurrences, i) !== -1) {
return "<b>" + character + "</b>"; return "<b>" + character + "</b>";
@ -721,9 +722,9 @@ GitLabDropdown = (function() {
}; };
GitLabDropdown.prototype.rowClicked = function(el) { GitLabDropdown.prototype.rowClicked = function(el) {
var field, fieldName, groupName, isInput, selectedIndex, selectedObject, value, isMarking; var field, groupName, isInput, selectedIndex, selectedObject, value, isMarking;
fieldName = this.options.fieldName; const { fieldName } = this.options;
isInput = $(this.el).is('input'); isInput = $(this.el).is('input');
if (this.renderedData) { if (this.renderedData) {
groupName = el.data('group'); groupName = el.data('group');

View File

@ -29,7 +29,7 @@ export default () => {
groupsApp, groupsApp,
}, },
data() { data() {
const dataset = this.$options.el.dataset; const { dataset } = this.$options.el;
const hideProjects = dataset.hideProjects === 'true'; const hideProjects = dataset.hideProjects === 'true';
const store = new GroupsStore(hideProjects); const store = new GroupsStore(hideProjects);
const service = new GroupsService(dataset.endpoint); const service = new GroupsService(dataset.endpoint);
@ -42,7 +42,7 @@ export default () => {
}; };
}, },
beforeMount() { beforeMount() {
const dataset = this.$options.el.dataset; const { dataset } = this.$options.el;
let groupFilterList = null; let groupFilterList = null;
const form = document.querySelector(dataset.formSel); const form = document.querySelector(dataset.formSel);
const filter = document.querySelector(dataset.filterSel); const filter = document.querySelector(dataset.filterSel);

View File

@ -30,7 +30,7 @@ export default {
}, },
computed: { computed: {
pathWithEllipsis() { pathWithEllipsis() {
const path = this.file.path; const { path } = this.file;
return path.length < MAX_PATH_LENGTH return path.length < MAX_PATH_LENGTH
? path ? path

View File

@ -23,6 +23,7 @@
let { result } = target; let { result } = target;
if (!isText) { if (!isText) {
// eslint-disable-next-line prefer-destructuring
result = result.split('base64,')[1]; result = result.split('base64,')[1];
} }

View File

@ -2,7 +2,7 @@ import { computeDiff } from './diff';
// eslint-disable-next-line no-restricted-globals // eslint-disable-next-line no-restricted-globals
self.addEventListener('message', (e) => { self.addEventListener('message', (e) => {
const data = e.data; const { data } = e;
// eslint-disable-next-line no-restricted-globals // eslint-disable-next-line no-restricted-globals
self.postMessage({ self.postMessage({

View File

@ -8,7 +8,7 @@ import { setPageTitle } from '../utils';
import { viewerTypes } from '../../constants'; import { viewerTypes } from '../../constants';
export const closeFile = ({ commit, state, dispatch }, file) => { export const closeFile = ({ commit, state, dispatch }, file) => {
const path = file.path; const { path } = file;
const indexOfClosedFile = state.openFiles.findIndex(f => f.key === file.key); const indexOfClosedFile = state.openFiles.findIndex(f => f.key === file.key);
const fileWasActive = file.active; const fileWasActive = file.active;

View File

@ -2,7 +2,8 @@ export function setPositionDataAttribute(el, options) {
// Update position data attribute so that the // Update position data attribute so that the
// new comment form can use this data for ajax request // new comment form can use this data for ajax request
const { x, y, width, height } = options; const { x, y, width, height } = options;
const position = el.dataset.position; const { position } = el.dataset;
const positionObject = Object.assign({}, JSON.parse(position), { const positionObject = Object.assign({}, JSON.parse(position), {
x, x,
y, y,

View File

@ -40,8 +40,7 @@ export function getTargetSelection(event) {
const x = event.offsetX; const x = event.offsetX;
const y = event.offsetY; const y = event.offsetY;
const width = imageEl.width; const { width, height } = imageEl;
const height = imageEl.height;
const actualWidth = imageEl.naturalWidth; const actualWidth = imageEl.naturalWidth;
const actualHeight = imageEl.naturalHeight; const actualHeight = imageEl.naturalHeight;

View File

@ -10,7 +10,7 @@ class AutoWidthDropdownSelect {
} }
init() { init() {
const dropdownClass = this.dropdownClass; const { dropdownClass } = this;
this.$selectElement.select2({ this.$selectElement.select2({
dropdownCssClass: dropdownClass, dropdownCssClass: dropdownClass,
...AutoWidthDropdownSelect.selectOptions(this.dropdownClass), ...AutoWidthDropdownSelect.selectOptions(this.dropdownClass),

View File

@ -4,7 +4,7 @@ import jobHeader from './components/header.vue';
import detailsBlock from './components/sidebar_details_block.vue'; import detailsBlock from './components/sidebar_details_block.vue';
export default () => { export default () => {
const dataset = document.getElementById('js-job-details-vue').dataset; const { dataset } = document.getElementById('js-job-details-vue');
const mediator = new JobMediator({ endpoint: dataset.endpoint }); const mediator = new JobMediator({ endpoint: dataset.endpoint });
mediator.fetchJob(); mediator.fetchJob();

View File

@ -56,7 +56,7 @@ export default class LabelsSelect {
.map(function () { .map(function () {
return this.value; return this.value;
}).get(); }).get();
const handleClick = options.handleClick; const { handleClick } = options;
$sidebarLabelTooltip.tooltip(); $sidebarLabelTooltip.tooltip();
@ -215,7 +215,7 @@ export default class LabelsSelect {
} }
else { else {
if (label.color != null) { if (label.color != null) {
color = label.color[0]; [color] = label.color;
} }
} }
if (color) { if (color) {
@ -243,7 +243,8 @@ export default class LabelsSelect {
var $dropdownParent = $dropdown.parent(); var $dropdownParent = $dropdown.parent();
var $dropdownInputField = $dropdownParent.find('.dropdown-input-field'); var $dropdownInputField = $dropdownParent.find('.dropdown-input-field');
var isSelected = el !== null ? el.hasClass('is-active') : false; var isSelected = el !== null ? el.hasClass('is-active') : false;
var title = selected.title;
var { title } = selected;
var selectedLabels = this.selected; var selectedLabels = this.selected;
if ($dropdownInputField.length && $dropdownInputField.val().length) { if ($dropdownInputField.length && $dropdownInputField.val().length) {
@ -382,7 +383,7 @@ export default class LabelsSelect {
})); }));
} }
else { else {
var labels = gl.issueBoards.BoardsStore.detail.issue.labels; var { labels } = gl.issueBoards.BoardsStore.detail.issue;
labels = labels.filter(function (selectedLabel) { labels = labels.filter(function (selectedLabel) {
return selectedLabel.id !== label.id; return selectedLabel.id !== label.id;
}); });

View File

@ -164,7 +164,7 @@ export const scrollToElement = element => {
if (!(element instanceof $)) { if (!(element instanceof $)) {
$el = $(element); $el = $(element);
} }
const top = $el.offset().top; const { top } = $el.offset();
return $('body, html').animate( return $('body, html').animate(
{ {
@ -203,9 +203,7 @@ export const getSelectedFragment = () => {
export const insertText = (target, text) => { export const insertText = (target, text) => {
// Firefox doesn't support `document.execCommand('insertText', false, text)` on textareas // Firefox doesn't support `document.execCommand('insertText', false, text)` on textareas
const selectionStart = target.selectionStart; const { selectionStart, selectionEnd, value } = target;
const selectionEnd = target.selectionEnd;
const value = target.value;
const textBefore = value.substring(0, selectionStart); const textBefore = value.substring(0, selectionStart);
const textAfter = value.substring(selectionEnd, value.length); const textAfter = value.substring(selectionEnd, value.length);
@ -245,7 +243,8 @@ export const nodeMatchesSelector = (node, selector) => {
// IE11 doesn't support `node.matches(selector)` // IE11 doesn't support `node.matches(selector)`
let parentNode = node.parentNode; let { parentNode } = node;
if (!parentNode) { if (!parentNode) {
parentNode = document.createElement('div'); parentNode = document.createElement('div');
// eslint-disable-next-line no-param-reassign // eslint-disable-next-line no-param-reassign
@ -281,6 +280,8 @@ export const normalizeCRLFHeaders = headers => {
headersArray.forEach(header => { headersArray.forEach(header => {
const keyValue = header.split(': '); const keyValue = header.split(': ');
// eslint-disable-next-line prefer-destructuring
headersObject[keyValue[0]] = keyValue[1]; headersObject[keyValue[0]] = keyValue[1];
}); });

View File

@ -13,7 +13,7 @@ export function formatRelevantDigits(number) {
let relevantDigits = 0; let relevantDigits = 0;
let formattedNumber = ''; let formattedNumber = '';
if (!Number.isNaN(Number(number))) { if (!Number.isNaN(Number(number))) {
digitsLeft = number.toString().split('.')[0]; [digitsLeft] = number.toString().split('.');
switch (digitsLeft.length) { switch (digitsLeft.length) {
case 1: case 1:
relevantDigits = 3; relevantDigits = 3;

View File

@ -156,7 +156,7 @@ import Cookies from 'js-cookie';
return 0; return 0;
} }
const files = this.state.conflictsData.files; const { files } = this.state.conflictsData;
let count = 0; let count = 0;
files.forEach((file) => { files.forEach((file) => {
@ -313,7 +313,7 @@ import Cookies from 'js-cookie';
}, },
isReadyToCommit() { isReadyToCommit() {
const files = this.state.conflictsData.files; const { files } = this.state.conflictsData;
const hasCommitMessage = $.trim(this.state.conflictsData.commitMessage).length; const hasCommitMessage = $.trim(this.state.conflictsData.commitMessage).length;
let unresolved = 0; let unresolved = 0;

View File

@ -12,7 +12,7 @@ import syntaxHighlight from '../syntax_highlight';
export default function initMergeConflicts() { export default function initMergeConflicts() {
const INTERACTIVE_RESOLVE_MODE = 'interactive'; const INTERACTIVE_RESOLVE_MODE = 'interactive';
const conflictsEl = document.querySelector('#conflicts'); const conflictsEl = document.querySelector('#conflicts');
const mergeConflictsStore = gl.mergeConflicts.mergeConflictsStore; const { mergeConflictsStore } = gl.mergeConflicts;
const mergeConflictsService = new MergeConflictsService({ const mergeConflictsService = new MergeConflictsService({
conflictsPath: conflictsEl.dataset.conflictsPath, conflictsPath: conflictsEl.dataset.conflictsPath,
resolveConflictsPath: conflictsEl.dataset.resolveConflictsPath, resolveConflictsPath: conflictsEl.dataset.resolveConflictsPath,

View File

@ -64,7 +64,7 @@ import Notes from './notes';
/* eslint-enable max-len */ /* eslint-enable max-len */
// Store the `location` object, allowing for easier stubbing in tests // Store the `location` object, allowing for easier stubbing in tests
let location = window.location; let { location } = window;
export default class MergeRequestTabs { export default class MergeRequestTabs {
constructor({ action, setUrl, stubLocation } = {}) { constructor({ action, setUrl, stubLocation } = {}) {
@ -279,7 +279,7 @@ export default class MergeRequestTabs {
mountPipelinesView() { mountPipelinesView() {
const pipelineTableViewEl = document.querySelector('#commit-pipeline-table-view'); const pipelineTableViewEl = document.querySelector('#commit-pipeline-table-view');
const CommitPipelinesTable = gl.CommitPipelinesTable; const { CommitPipelinesTable } = gl;
this.commitPipelinesTable = new CommitPipelinesTable({ this.commitPipelinesTable = new CommitPipelinesTable({
propsData: { propsData: {
endpoint: pipelineTableViewEl.dataset.endpoint, endpoint: pipelineTableViewEl.dataset.endpoint,

View File

@ -41,10 +41,10 @@ function queryTimeSeries(query, graphWidth, graphHeight, graphHeightOffset, xDom
} else { } else {
const unusedColors = _.difference(defaultColorOrder, usedColors); const unusedColors = _.difference(defaultColorOrder, usedColors);
if (unusedColors.length > 0) { if (unusedColors.length > 0) {
pick = unusedColors[0]; [pick] = unusedColors;
} else { } else {
usedColors = []; usedColors = [];
pick = defaultColorOrder[0]; [pick] = defaultColorOrder;
} }
} }
usedColors.push(pick); usedColors.push(pick);

View File

@ -101,8 +101,8 @@ export default (function() {
}; };
BranchGraph.prototype.buildGraph = function() { BranchGraph.prototype.buildGraph = function() {
var cuday, cumonth, day, j, len, mm, r, ref; var cuday, cumonth, day, j, len, mm, ref;
r = this.r; const { r } = this;
cuday = 0; cuday = 0;
cumonth = ""; cumonth = "";
r.rect(0, 0, 40, this.barHeight).attr({ r.rect(0, 0, 40, this.barHeight).attr({
@ -121,7 +121,7 @@ export default (function() {
font: "12px Monaco, monospace", font: "12px Monaco, monospace",
fill: "#BBB" fill: "#BBB"
}); });
cuday = day[0]; [cuday] = day;
} }
if (cumonth !== day[1]) { if (cumonth !== day[1]) {
// Months // Months
@ -129,6 +129,8 @@ export default (function() {
font: "12px Monaco, monospace", font: "12px Monaco, monospace",
fill: "#EEE" fill: "#EEE"
}); });
// eslint-disable-next-line prefer-destructuring
cumonth = day[1]; cumonth = day[1];
} }
} }
@ -169,8 +171,8 @@ export default (function() {
}; };
BranchGraph.prototype.bindEvents = function() { BranchGraph.prototype.bindEvents = function() {
var element; const { element } = this;
element = this.element;
return $(element).scroll((function(_this) { return $(element).scroll((function(_this) {
return function(event) { return function(event) {
return _this.renderPartialGraph(); return _this.renderPartialGraph();
@ -207,11 +209,13 @@ export default (function() {
}; };
BranchGraph.prototype.appendLabel = function(x, y, commit) { BranchGraph.prototype.appendLabel = function(x, y, commit) {
var label, r, rect, shortrefs, text, textbox, triangle; var label, rect, shortrefs, text, textbox, triangle;
if (!commit.refs) { if (!commit.refs) {
return; return;
} }
r = this.r;
const { r } = this;
shortrefs = commit.refs; shortrefs = commit.refs;
// Truncate if longer than 15 chars // Truncate if longer than 15 chars
if (shortrefs.length > 17) { if (shortrefs.length > 17) {
@ -242,11 +246,8 @@ export default (function() {
}; };
BranchGraph.prototype.appendAnchor = function(x, y, commit) { BranchGraph.prototype.appendAnchor = function(x, y, commit) {
var anchor, options, r, top; const { r, top, options } = this;
r = this.r; const anchor = r.circle(x, y, 10).attr({
top = this.top;
options = this.options;
anchor = r.circle(x, y, 10).attr({
fill: "#000", fill: "#000",
opacity: 0, opacity: 0,
cursor: "pointer" cursor: "pointer"
@ -262,14 +263,15 @@ export default (function() {
}; };
BranchGraph.prototype.drawDot = function(x, y, commit) { BranchGraph.prototype.drawDot = function(x, y, commit) {
var avatar_box_x, avatar_box_y, r; const { r } = this;
r = this.r;
r.circle(x, y, 3).attr({ r.circle(x, y, 3).attr({
fill: this.colors[commit.space], fill: this.colors[commit.space],
stroke: "none" stroke: "none"
}); });
avatar_box_x = this.offsetX + this.unitSpace * this.mspace + 10;
avatar_box_y = y - 10; const avatar_box_x = this.offsetX + this.unitSpace * this.mspace + 10;
const avatar_box_y = y - 10;
r.rect(avatar_box_x, avatar_box_y, 20, 20).attr({ r.rect(avatar_box_x, avatar_box_y, 20, 20).attr({
stroke: this.colors[commit.space], stroke: this.colors[commit.space],
"stroke-width": 2 "stroke-width": 2
@ -282,10 +284,10 @@ export default (function() {
}; };
BranchGraph.prototype.drawLines = function(x, y, commit) { BranchGraph.prototype.drawLines = function(x, y, commit) {
var arrow, color, i, j, len, offset, parent, parentCommit, parentX1, parentX2, parentY, r, ref, results, route; var arrow, color, i, len, offset, parent, parentCommit, parentX1, parentX2, parentY, route;
r = this.r; const { r } = this;
ref = commit.parents; const ref = commit.parents;
results = []; const results = [];
for (i = 0, len = ref.length; i < len; i += 1) { for (i = 0, len = ref.length; i < len; i += 1) {
parent = ref[i]; parent = ref[i];
@ -331,11 +333,10 @@ export default (function() {
}; };
BranchGraph.prototype.markCommit = function(commit) { BranchGraph.prototype.markCommit = function(commit) {
var r, x, y;
if (commit.id === this.options.commit_id) { if (commit.id === this.options.commit_id) {
r = this.r; const { r } = this;
x = this.offsetX + this.unitSpace * (this.mspace - commit.space); const x = this.offsetX + this.unitSpace * (this.mspace - commit.space);
y = this.offsetY + this.unitTime * commit.time; const y = this.offsetY + this.unitTime * commit.time;
r.path(["M", x + 5, y, "L", x + 15, y + 4, "L", x + 15, y - 4, "Z"]).attr({ r.path(["M", x + 5, y, "L", x + 15, y + 4, "L", x + 15, y - 4, "Z"]).attr({
fill: "#000", fill: "#000",
"fill-opacity": .5, "fill-opacity": .5,

View File

@ -52,7 +52,7 @@ export default class NewBranchForm {
validate() { validate() {
var errorMessage, errors, formatter, unique, validator; var errorMessage, errors, formatter, unique, validator;
const indexOf = [].indexOf; const { indexOf } = [];
this.branchNameError.empty(); this.branchNameError.empty();
unique = function(values, value) { unique = function(values, value) {

View File

@ -311,7 +311,7 @@ export default class Notes {
}, },
}) })
.then(({ data }) => { .then(({ data }) => {
const notes = data.notes; const { notes } = data;
this.last_fetched_at = data.last_fetched_at; this.last_fetched_at = data.last_fetched_at;
this.setPollingInterval(data.notes.length); this.setPollingInterval(data.notes.length);
$.each(notes, (i, note) => this.renderNote(note)); $.each(notes, (i, note) => this.renderNote(note));

View File

@ -72,7 +72,7 @@ export default {
}, },
mounted() { mounted() {
this.fetchNotes(); this.fetchNotes();
const parentElement = this.$el.parentElement; const { parentElement } = this.$el;
if (parentElement && parentElement.classList.contains('js-vue-notes-event')) { if (parentElement && parentElement.classList.contains('js-vue-notes-event')) {
parentElement.addEventListener('toggleAward', event => { parentElement.addEventListener('toggleAward', event => {

View File

@ -28,7 +28,7 @@ export default {
}, },
poll(data = {}) { poll(data = {}) {
const endpoint = data.notesData.notesPath; const endpoint = data.notesData.notesPath;
const lastFetchedAt = data.lastFetchedAt; const { lastFetchedAt } = data;
const options = { const options = {
headers: { headers: {
'X-Last-Fetched-At': lastFetchedAt ? `${lastFetchedAt}` : undefined, 'X-Last-Fetched-At': lastFetchedAt ? `${lastFetchedAt}` : undefined,

View File

@ -96,7 +96,7 @@
this.enteredUsername = ''; this.enteredUsername = '';
}, },
onSecondaryAction() { onSecondaryAction() {
const form = this.$refs.form; const { form } = this.$refs;
form.action = this.blockUserUrl; form.action = this.blockUserUrl;
this.$refs.method.value = 'put'; this.$refs.method.value = 'put';

View File

@ -61,7 +61,7 @@ export default class Todos {
e.stopPropagation(); e.stopPropagation();
e.preventDefault(); e.preventDefault();
const target = e.target; const { target } = e;
target.setAttribute('disabled', true); target.setAttribute('disabled', true);
target.classList.add('disabled'); target.classList.add('disabled');

View File

@ -80,10 +80,11 @@ export default (function() {
}; };
ContributorsStatGraph.prototype.redraw_authors = function() { ContributorsStatGraph.prototype.redraw_authors = function() {
var author_commits, x_domain;
$("ol").html(""); $("ol").html("");
x_domain = ContributorsGraph.prototype.x_domain;
author_commits = ContributorsStatGraphUtil.get_author_data(this.parsed_log, this.field, x_domain); const { x_domain } = ContributorsGraph.prototype;
const author_commits = ContributorsStatGraphUtil.get_author_data(this.parsed_log, this.field, x_domain);
return _.each(author_commits, (function(_this) { return _.each(author_commits, (function(_this) {
return function(d) { return function(d) {
_this.redraw_author_commit_info(d); _this.redraw_author_commit_info(d);
@ -102,7 +103,7 @@ export default (function() {
}; };
ContributorsStatGraph.prototype.change_date_header = function() { ContributorsStatGraph.prototype.change_date_header = function() {
const x_domain = ContributorsGraph.prototype.x_domain; const { x_domain } = ContributorsGraph.prototype;
const formattedDateRange = sprintf( const formattedDateRange = sprintf(
s__('ContributorsPage|%{startDate} %{endDate}'), s__('ContributorsPage|%{startDate} %{endDate}'),
{ {

View File

@ -28,7 +28,7 @@ document.addEventListener('DOMContentLoaded', () => {
const autoDevOpsExtraSettings = document.querySelector('.js-extra-settings'); const autoDevOpsExtraSettings = document.querySelector('.js-extra-settings');
autoDevOpsSettings.addEventListener('click', event => { autoDevOpsSettings.addEventListener('click', event => {
const target = event.target; const { target } = event;
if (target.classList.contains('js-toggle-extra-settings')) { if (target.classList.contains('js-toggle-extra-settings')) {
autoDevOpsExtraSettings.classList.toggle( autoDevOpsExtraSettings.classList.toggle(
'hidden', 'hidden',

View File

@ -10,7 +10,7 @@ import eventHub from './event_hub';
Vue.use(Translate); Vue.use(Translate);
export default () => { export default () => {
const dataset = document.querySelector('.js-pipeline-details-vue').dataset; const { dataset } = document.querySelector('.js-pipeline-details-vue');
const mediator = new PipelinesMediator({ endpoint: dataset.endpoint }); const mediator = new PipelinesMediator({ endpoint: dataset.endpoint });

View File

@ -19,7 +19,7 @@ export default class PipelinesService {
getPipelines(data = {}) { getPipelines(data = {}) {
const { scope, page } = data; const { scope, page } = data;
const CancelToken = axios.CancelToken; const { CancelToken } = axios;
this.cancelationSource = CancelToken.source(); this.cancelationSource = CancelToken.source();

View File

@ -43,7 +43,7 @@ MarkdownPreview.prototype.showPreview = function ($form) {
this.fetchMarkdownPreview(mdText, url, (function (response) { this.fetchMarkdownPreview(mdText, url, (function (response) {
var body; var body;
if (response.body.length > 0) { if (response.body.length > 0) {
body = response.body; ({ body } = response);
} else { } else {
body = this.emptyMessage; body = this.emptyMessage;
} }

View File

@ -85,11 +85,10 @@ import _ from 'underscore';
cropBoxResizable: false, cropBoxResizable: false,
toggleDragModeOnDblclick: false, toggleDragModeOnDblclick: false,
built: function() { built: function() {
var $image, container, cropBoxHeight, cropBoxWidth; const $image = $(this);
$image = $(this); const container = $image.cropper('getContainerData');
container = $image.cropper('getContainerData'); const { cropBoxWidth, cropBoxHeight } = _this;
cropBoxWidth = _this.cropBoxWidth;
cropBoxHeight = _this.cropBoxHeight;
return $image.cropper('setCropBoxData', { return $image.cropper('setCropBoxData', {
width: cropBoxWidth, width: cropBoxWidth,
height: cropBoxHeight, height: cropBoxHeight,
@ -136,7 +135,7 @@ import _ from 'underscore';
} }
dataURLtoBlob(dataURL) { dataURLtoBlob(dataURL) {
var array, binary, i, k, len, v; var array, binary, i, len, v;
binary = atob(dataURL.split(',')[1]); binary = atob(dataURL.split(',')[1]);
array = []; array = [];

View File

@ -88,7 +88,7 @@ export default class ProjectFindFile {
// render result // render result
renderList(filePaths, searchText) { renderList(filePaths, searchText) {
var blobItemUrl, filePath, html, i, j, len, matches, results; var blobItemUrl, filePath, html, i, len, matches, results;
this.element.find(".tree-table > tbody").empty(); this.element.find(".tree-table > tbody").empty();
results = []; results = [];

View File

@ -47,7 +47,7 @@
}, },
methods: { methods: {
successCallback(res) { successCallback(res) {
const pipelines = res.data.pipelines; const { pipelines } = res.data;
if (pipelines.length > 0) { if (pipelines.length > 0) {
// The pipeline entity always keeps the latest pipeline info on the `details.status` // The pipeline entity always keeps the latest pipeline info on the `details.status`
this.ciStatus = pipelines[0].details.status; this.ciStatus = pipelines[0].details.status;

View File

@ -31,7 +31,7 @@ document.addEventListener('DOMContentLoaded', () => {
projectsDropdownApp, projectsDropdownApp,
}, },
data() { data() {
const dataset = this.$options.el.dataset; const { dataset } = this.$options.el;
const store = new ProjectsStore(); const store = new ProjectsStore();
const service = new ProjectsService(dataset.userName); const service = new ProjectsService(dataset.userName);

View File

@ -10,7 +10,7 @@ export default () => new Vue({
registryApp, registryApp,
}, },
data() { data() {
const dataset = document.querySelector(this.$options.el).dataset; const { dataset } = document.querySelector(this.$options.el);
return { return {
endpoint: dataset.endpoint, endpoint: dataset.endpoint,
}; };

View File

@ -20,7 +20,7 @@ export const fetchList = ({ commit }, { repo, page }) => {
commit(types.TOGGLE_REGISTRY_LIST_LOADING, repo); commit(types.TOGGLE_REGISTRY_LIST_LOADING, repo);
return Vue.http.get(repo.tagsPath, { params: { page } }).then(response => { return Vue.http.get(repo.tagsPath, { params: { page } }).then(response => {
const headers = response.headers; const { headers } = response;
return response.json().then(resp => { return response.json().then(resp => {
commit(types.TOGGLE_REGISTRY_LIST_LOADING, repo); commit(types.TOGGLE_REGISTRY_LIST_LOADING, repo);

View File

@ -42,8 +42,7 @@ export default class SmartInterval {
/* public */ /* public */
start() { start() {
const cfg = this.cfg; const { cfg, state } = this;
const state = this.state;
if (cfg.immediateExecution && !this.isLoading) { if (cfg.immediateExecution && !this.isLoading) {
cfg.immediateExecution = false; cfg.immediateExecution = false;
@ -100,7 +99,7 @@ export default class SmartInterval {
/* private */ /* private */
initInterval() { initInterval() {
const cfg = this.cfg; const { cfg } = this;
if (!cfg.lazyStart) { if (!cfg.lazyStart) {
this.start(); this.start();
@ -151,7 +150,7 @@ export default class SmartInterval {
} }
incrementInterval() { incrementInterval() {
const cfg = this.cfg; const { cfg } = this;
const currentInterval = this.getCurrentInterval(); const currentInterval = this.getCurrentInterval();
if (cfg.hiddenInterval && !this.isPageVisible()) return; if (cfg.hiddenInterval && !this.isPageVisible()) return;
let nextInterval = currentInterval * cfg.incrementByFactorOf; let nextInterval = currentInterval * cfg.incrementByFactorOf;
@ -166,7 +165,7 @@ export default class SmartInterval {
isPageVisible() { return this.state.pageVisibility === 'visible'; } isPageVisible() { return this.state.pageVisibility === 'visible'; }
stopTimer() { stopTimer() {
const state = this.state; const { state } = this;
state.intervalId = window.clearInterval(state.intervalId); state.intervalId = window.clearInterval(state.intervalId);
} }

View File

@ -38,14 +38,14 @@ function simulateEvent(el, type, options = {}) {
function isLast(target) { function isLast(target) {
const el = typeof target.el === 'string' ? document.getElementById(target.el.substr(1)) : target.el; const el = typeof target.el === 'string' ? document.getElementById(target.el.substr(1)) : target.el;
const children = el.children; const { children } = el;
return children.length - 1 === target.index; return children.length - 1 === target.index;
} }
function getTarget(target) { function getTarget(target) {
const el = typeof target.el === 'string' ? document.getElementById(target.el.substr(1)) : target.el; const el = typeof target.el === 'string' ? document.getElementById(target.el.substr(1)) : target.el;
const children = el.children; const { children } = el;
return ( return (
children[target.index] || children[target.index] ||

View File

@ -250,7 +250,6 @@ function UsersSelect(currentUser, els, options = {}) {
let anyUser; let anyUser;
let index; let index;
let j;
let len; let len;
let name; let name;
let obj; let obj;
@ -501,7 +500,7 @@ function UsersSelect(currentUser, els, options = {}) {
if (this.multiSelect) { if (this.multiSelect) {
selected = getSelected().find(u => user.id === u); selected = getSelected().find(u => user.id === u);
const fieldName = this.fieldName; const { fieldName } = this;
const field = $dropdown.closest('.selectbox').find("input[name='" + fieldName + "'][value='" + user.id + "']"); const field = $dropdown.closest('.selectbox').find("input[name='" + fieldName + "'][value='" + user.id + "']");
if (field.length) { if (field.length) {
@ -553,7 +552,7 @@ function UsersSelect(currentUser, els, options = {}) {
minimumInputLength: 0, minimumInputLength: 0,
query: function(query) { query: function(query) {
return _this.users(query.term, options, function(users) { return _this.users(query.term, options, function(users) {
var anyUser, data, emailUser, index, j, len, name, nullUser, obj, ref; var anyUser, data, emailUser, index, len, name, nullUser, obj, ref;
data = { data = {
results: users results: users
}; };

View File

@ -191,7 +191,7 @@ export default {
if (data.ci_status === this.mr.ciStatus) return; if (data.ci_status === this.mr.ciStatus) return;
if (!data.pipeline) return; if (!data.pipeline) return;
const label = data.pipeline.details.status.label; const { label } = data.pipeline.details.status;
const title = `Pipeline ${label}`; const title = `Pipeline ${label}`;
const message = `Pipeline ${label} for "${data.title}"`; const message = `Pipeline ${label} for "${data.title}"`;
@ -211,7 +211,7 @@ export default {
// `params` should be an Array contains a Boolean, like `[true]` // `params` should be an Array contains a Boolean, like `[true]`
// Passing parameter as Boolean didn't work. // Passing parameter as Boolean didn't work.
eventHub.$on('SetBranchRemoveFlag', (params) => { eventHub.$on('SetBranchRemoveFlag', (params) => {
this.mr.isRemovingSourceBranch = params[0]; [this.mr.isRemovingSourceBranch] = params;
}); });
eventHub.$on('FailedToMerge', (mergeError) => { eventHub.$on('FailedToMerge', (mergeError) => {

View File

@ -42,7 +42,7 @@ export default {
}, },
methods: { methods: {
onImgLoad() { onImgLoad() {
const contentImg = this.$refs.contentImg; const { contentImg } = this.$refs;
if (contentImg) { if (contentImg) {
this.isZoomable = this.isZoomable =

View File

@ -4,7 +4,7 @@ import { __ } from '~/locale';
import $ from 'jquery'; import $ from 'jquery';
import SkeletonLoadingContainer from '~/vue_shared/components/skeleton_loading_container.vue'; import SkeletonLoadingContainer from '~/vue_shared/components/skeleton_loading_container.vue';
const CancelToken = axios.CancelToken; const { CancelToken } = axios;
let axiosSource; let axiosSource;
export default { export default {

View File

@ -55,7 +55,7 @@
}, },
getItems() { getItems() {
const total = this.pageInfo.totalPages; const total = this.pageInfo.totalPages;
const page = this.pageInfo.page; const { page } = this.pageInfo;
const items = []; const items = [];
if (page > 1) { if (page > 1) {

View File

@ -0,0 +1,5 @@
---
title: Enable prefer-structuring in JS files
merge_request: 19943
author: gfyoung
type: other

View File

@ -26,7 +26,7 @@ describe('Mesh object', () => {
const object = new MeshObject( const object = new MeshObject(
new BoxGeometry(10, 10, 10), new BoxGeometry(10, 10, 10),
); );
const radius = object.geometry.boundingSphere.radius; const { radius } = object.geometry.boundingSphere;
expect(radius).not.toBeGreaterThan(4); expect(radius).not.toBeGreaterThan(4);
}); });
@ -35,7 +35,7 @@ describe('Mesh object', () => {
const object = new MeshObject( const object = new MeshObject(
new BoxGeometry(1, 1, 1), new BoxGeometry(1, 1, 1),
); );
const radius = object.geometry.boundingSphere.radius; const { radius } = object.geometry.boundingSphere;
expect(radius).toBeLessThan(1); expect(radius).toBeLessThan(1);
}); });

View File

@ -16,7 +16,7 @@ describe('Pipelines table in Commits and Merge requests', function () {
beforeEach(() => { beforeEach(() => {
mock = new MockAdapter(axios); mock = new MockAdapter(axios);
const pipelines = getJSONFixture(jsonFixtureName).pipelines; const { pipelines } = getJSONFixture(jsonFixtureName);
PipelinesTable = Vue.extend(pipelinesTable); PipelinesTable = Vue.extend(pipelinesTable);
pipeline = pipelines.find(p => p.user !== null && p.commit !== null); pipeline = pipelines.find(p => p.user !== null && p.commit !== null);

View File

@ -88,7 +88,7 @@ describe('Deploy keys key', () => {
}); });
it('expands all project labels after click', done => { it('expands all project labels after click', done => {
const length = vm.deployKey.deploy_keys_projects.length; const { length } = vm.deployKey.deploy_keys_projects;
vm.$el.querySelectorAll('.deploy-project-label')[1].click(); vm.$el.querySelectorAll('.deploy-project-label')[1].click();
Vue.nextTick(() => { Vue.nextTick(() => {

View File

@ -92,7 +92,7 @@ describe('DiffLineGutterContent', () => {
}); });
it('should return discussions for the given lineCode', () => { it('should return discussions for the given lineCode', () => {
const lineCode = getDiffFileMock().highlightedDiffLines[1].lineCode; const { lineCode } = getDiffFileMock().highlightedDiffLines[1];
const component = createComponent({ lineCode, showCommentButton: true }); const component = createComponent({ lineCode, showCommentButton: true });
setDiscussions(component); setDiscussions(component);

View File

@ -103,7 +103,7 @@ describe('RecentSearchesDropdownContent', () => {
describe('processedItems', () => { describe('processedItems', () => {
it('with items', () => { it('with items', () => {
vm = createComponent(propsDataWithItems); vm = createComponent(propsDataWithItems);
const processedItems = vm.processedItems; const { processedItems } = vm;
expect(processedItems.length).toEqual(2); expect(processedItems.length).toEqual(2);
@ -122,7 +122,7 @@ describe('RecentSearchesDropdownContent', () => {
it('with no items', () => { it('with no items', () => {
vm = createComponent(propsDataWithoutItems); vm = createComponent(propsDataWithoutItems);
const processedItems = vm.processedItems; const { processedItems } = vm;
expect(processedItems.length).toEqual(0); expect(processedItems.length).toEqual(0);
}); });
@ -131,13 +131,13 @@ describe('RecentSearchesDropdownContent', () => {
describe('hasItems', () => { describe('hasItems', () => {
it('with items', () => { it('with items', () => {
vm = createComponent(propsDataWithItems); vm = createComponent(propsDataWithItems);
const hasItems = vm.hasItems; const { hasItems } = vm;
expect(hasItems).toEqual(true); expect(hasItems).toEqual(true);
}); });
it('with no items', () => { it('with no items', () => {
vm = createComponent(propsDataWithoutItems); vm = createComponent(propsDataWithoutItems);
const hasItems = vm.hasItems; const { hasItems } = vm;
expect(hasItems).toEqual(false); expect(hasItems).toEqual(false);
}); });
}); });

View File

@ -15,8 +15,7 @@ describe('RecentSearchesRoot', () => {
}; };
VueSpy = spyOnDependency(RecentSearchesRoot, 'Vue').and.callFake((options) => { VueSpy = spyOnDependency(RecentSearchesRoot, 'Vue').and.callFake((options) => {
data = options.data; ({ data, template } = options);
template = options.template;
}); });
RecentSearchesRoot.prototype.render.call(recentSearchesRoot); RecentSearchesRoot.prototype.render.call(recentSearchesRoot);

View File

@ -18,7 +18,7 @@ describe('GL Style Field Errors', function() {
expect(this.$form).toBeDefined(); expect(this.$form).toBeDefined();
expect(this.$form.length).toBe(1); expect(this.$form.length).toBe(1);
expect(this.fieldErrors).toBeDefined(); expect(this.fieldErrors).toBeDefined();
const inputs = this.fieldErrors.state.inputs; const { inputs } = this.fieldErrors.state;
expect(inputs.length).toBe(4); expect(inputs.length).toBe(4);
}); });

View File

@ -67,7 +67,7 @@ describe('AppComponent', () => {
it('should return list of groups from store', () => { it('should return list of groups from store', () => {
spyOn(vm.store, 'getGroups'); spyOn(vm.store, 'getGroups');
const groups = vm.groups; const { groups } = vm;
expect(vm.store.getGroups).toHaveBeenCalled(); expect(vm.store.getGroups).toHaveBeenCalled();
expect(groups).not.toBeDefined(); expect(groups).not.toBeDefined();
}); });
@ -77,7 +77,7 @@ describe('AppComponent', () => {
it('should return pagination info from store', () => { it('should return pagination info from store', () => {
spyOn(vm.store, 'getPaginationInfo'); spyOn(vm.store, 'getPaginationInfo');
const pageInfo = vm.pageInfo; const { pageInfo } = vm;
expect(vm.store.getPaginationInfo).toHaveBeenCalled(); expect(vm.store.getPaginationInfo).toHaveBeenCalled();
expect(pageInfo).not.toBeDefined(); expect(pageInfo).not.toBeDefined();
}); });
@ -293,7 +293,7 @@ describe('AppComponent', () => {
beforeEach(() => { beforeEach(() => {
groupItem = Object.assign({}, mockParentGroupItem); groupItem = Object.assign({}, mockParentGroupItem);
groupItem.children = mockChildren; groupItem.children = mockChildren;
childGroupItem = groupItem.children[0]; [childGroupItem] = groupItem.children;
groupItem.isChildrenLoading = false; groupItem.isChildrenLoading = false;
vm.targetGroup = childGroupItem; vm.targetGroup = childGroupItem;
vm.targetParentGroup = groupItem; vm.targetParentGroup = groupItem;

View File

@ -41,7 +41,7 @@ describe('GroupItemComponent', () => {
describe('rowClass', () => { describe('rowClass', () => {
it('should return map of classes based on group details', () => { it('should return map of classes based on group details', () => {
const classes = ['is-open', 'has-children', 'has-description', 'being-removed']; const classes = ['is-open', 'has-children', 'has-description', 'being-removed'];
const rowClass = vm.rowClass; const { rowClass } = vm;
expect(Object.keys(rowClass).length).toBe(classes.length); expect(Object.keys(rowClass).length).toBe(classes.length);
Object.keys(rowClass).forEach((className) => { Object.keys(rowClass).forEach((className) => {

View File

@ -63,7 +63,7 @@ describe('Multi-file editor library dirty diff controller', () => {
[type]: true, [type]: true,
}; };
const range = getDecorator(change).range; const { range } = getDecorator(change);
expect(range.startLineNumber).toBe(1); expect(range.startLineNumber).toBe(1);
expect(range.endLineNumber).toBe(2); expect(range.endLineNumber).toBe(2);

View File

@ -22,7 +22,7 @@ describe('NamespaceSelect', () => {
const dropdown = document.createElement('div'); const dropdown = document.createElement('div');
// eslint-disable-next-line no-new // eslint-disable-next-line no-new
new NamespaceSelect({ dropdown }); new NamespaceSelect({ dropdown });
glDropdownOptions = $.fn.glDropdown.calls.argsFor(0)[0]; [glDropdownOptions] = $.fn.glDropdown.calls.argsFor(0);
}); });
it('prevents click events', () => { it('prevents click events', () => {
@ -43,7 +43,7 @@ describe('NamespaceSelect', () => {
dropdown.dataset.isFilter = 'true'; dropdown.dataset.isFilter = 'true';
// eslint-disable-next-line no-new // eslint-disable-next-line no-new
new NamespaceSelect({ dropdown }); new NamespaceSelect({ dropdown });
glDropdownOptions = $.fn.glDropdown.calls.argsFor(0)[0]; [glDropdownOptions] = $.fn.glDropdown.calls.argsFor(0);
}); });
it('does not prevent click events', () => { it('does not prevent click events', () => {

View File

@ -14,6 +14,7 @@ describe('Markdown component', () => {
beforeEach((done) => { beforeEach((done) => {
json = getJSONFixture('blob/notebook/basic.json'); json = getJSONFixture('blob/notebook/basic.json');
// eslint-disable-next-line prefer-destructuring
cell = json.cells[1]; cell = json.cells[1];
vm = new Component({ vm = new Component({

View File

@ -24,7 +24,7 @@ describe('Pipelines Table Row', () => {
preloadFixtures(jsonFixtureName); preloadFixtures(jsonFixtureName);
beforeEach(() => { beforeEach(() => {
const pipelines = getJSONFixture(jsonFixtureName).pipelines; const { pipelines } = getJSONFixture(jsonFixtureName);
pipeline = pipelines.find(p => p.user !== null && p.commit !== null); pipeline = pipelines.find(p => p.user !== null && p.commit !== null);
pipelineWithoutAuthor = pipelines.find(p => p.user === null && p.commit !== null); pipelineWithoutAuthor = pipelines.find(p => p.user === null && p.commit !== null);

View File

@ -11,7 +11,7 @@ describe('Pipelines Table', () => {
preloadFixtures(jsonFixtureName); preloadFixtures(jsonFixtureName);
beforeEach(() => { beforeEach(() => {
const pipelines = getJSONFixture(jsonFixtureName).pipelines; const { pipelines } = getJSONFixture(jsonFixtureName);
PipelinesTableComponent = Vue.extend(pipelinesTableComp); PipelinesTableComponent = Vue.extend(pipelinesTableComp);
pipeline = pipelines.find(p => p.user !== null && p.commit !== null); pipeline = pipelines.find(p => p.user !== null && p.commit !== null);

View File

@ -87,7 +87,7 @@ describe('SmartInterval', function () {
setTimeout(() => { setTimeout(() => {
interval.cancel(); interval.cancel();
const intervalId = interval.state.intervalId; const { intervalId } = interval.state;
const currentInterval = interval.getCurrentInterval(); const currentInterval = interval.getCurrentInterval();
const intervalLowerLimit = interval.cfg.startingInterval; const intervalLowerLimit = interval.cfg.startingInterval;
@ -106,7 +106,7 @@ describe('SmartInterval', function () {
interval.resume(); interval.resume();
const intervalId = interval.state.intervalId; const { intervalId } = interval.state;
expect(intervalId).toBeTruthy(); expect(intervalId).toBeTruthy();

View File

@ -74,7 +74,7 @@ describe('File Icon component', () => {
size: 120, size: 120,
}); });
const classList = vm.$el.firstChild.classList; const { classList } = vm.$el.firstChild;
const containsSizeClass = classList.contains('s120'); const containsSizeClass = classList.contains('s120');
const containsCustomClass = classList.contains('extraclasses'); const containsCustomClass = classList.contains('extraclasses');
expect(containsSizeClass).toBe(true); expect(containsSizeClass).toBe(true);

View File

@ -44,7 +44,7 @@ describe('Sprite Icon Component', function () {
}); });
it('should properly render img css', function () { it('should properly render img css', function () {
const classList = icon.$el.classList; const { classList } = icon.$el;
const containsSizeClass = classList.contains('s32'); const containsSizeClass = classList.contains('s32');
const containsCustomClass = classList.contains('extraclasses'); const containsCustomClass = classList.contains('extraclasses');
expect(containsSizeClass).toBe(true); expect(containsSizeClass).toBe(true);

View File

@ -51,7 +51,7 @@ describe('User Avatar Image Component', function () {
}); });
it('should properly render img css', function () { it('should properly render img css', function () {
const classList = vm.$el.classList; const { classList } = vm.$el;
const containsAvatar = classList.contains('avatar'); const containsAvatar = classList.contains('avatar');
const containsSizeClass = classList.contains('s99'); const containsSizeClass = classList.contains('s99');
const containsCustomClass = classList.contains(DEFAULT_PROPS.cssClasses); const containsCustomClass = classList.contains(DEFAULT_PROPS.cssClasses);
@ -73,7 +73,7 @@ describe('User Avatar Image Component', function () {
}); });
it('should add lazy attributes', function () { it('should add lazy attributes', function () {
const classList = vm.$el.classList; const { classList } = vm.$el;
const lazyClass = classList.contains('lazy'); const lazyClass = classList.contains('lazy');
expect(lazyClass).toBe(true); expect(lazyClass).toBe(true);

View File

@ -21,7 +21,7 @@ describe('User Avatar Link Component', function () {
propsData: this.propsData, propsData: this.propsData,
}).$mount(); }).$mount();
this.userAvatarImage = this.userAvatarLink.$children[0]; [this.userAvatarImage] = this.userAvatarLink.$children;
}); });
it('should return a defined Vue component', function () { it('should return a defined Vue component', function () {