[ci skip] Fix more rules

This commit is contained in:
Filipa Lacerda 2018-01-04 19:50:06 +00:00
parent 615f1927bb
commit 318d6f449e
No known key found for this signature in database
GPG key ID: 9CA3FDE4D1E2F1C8
18 changed files with 478 additions and 473 deletions

View file

@ -37,6 +37,16 @@
"import/no-commonjs": "error", "import/no-commonjs": "error",
"no-multiple-empty-lines": ["error", { "max": 1 }], "no-multiple-empty-lines": ["error", { "max": 1 }],
"promise/catch-or-return": "error", "promise/catch-or-return": "error",
"no-underscore-dangle": ["error", { "allow": ["__"]}] "no-underscore-dangle": ["error", { "allow": ["__"]}],
"vue/html-self-closing": ["error", {
"html": {
"void": "always",
"normal": "any",
"component": "always"
},
"svg": "always",
"math": "any"
}]
} }
} }

View file

@ -1,15 +1,16 @@
<script> <script>
export default { export default {
name: 'modal', name: 'Modal',
props: { props: {
title: { title: {
type: String, type: String,
required: false, required: false,
default: '',
}, },
text: { text: {
type: String, type: String,
required: false, required: false,
default: '',
}, },
hideFooter: { hideFooter: {
type: Boolean, type: Boolean,
@ -69,11 +70,10 @@ export default {
this.$emit('submit', status); this.$emit('submit', status);
}, },
}, },
}; };
</script> </script>
<template> <template>
<div class="modal-open"> <div class="modal-open">
<div <div
class="modal show" class="modal show"
role="dialog" role="dialog"
@ -88,7 +88,7 @@ export default {
<div class="modal-header"> <div class="modal-header">
<slot name="header"> <slot name="header">
<h4 class="modal-title pull-left"> <h4 class="modal-title pull-left">
{{this.title}} {{ this.title }}
</h4> </h4>
<button <button
type="button" type="button"
@ -101,11 +101,13 @@ export default {
</slot> </slot>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<slot name="body" :text="text"> <slot name="body">
<p>{{this.text}}</p>
</slot> </slot>
</div> </div>
<div class="modal-footer" v-if="!hideFooter"> <div
class="modal-footer"
v-if="!hideFooter"
>
<button <button
type="button" type="button"
class="btn pull-left" class="btn pull-left"
@ -126,6 +128,6 @@ export default {
</div> </div>
</div> </div>
</div> </div>
<div class="modal-backdrop fade in" /> <div class="modal-backdrop fade in"></div>
</div> </div>
</template> </template>

View file

@ -45,7 +45,7 @@
this.$emit('onChangeTab', tab.scope); this.$emit('onChangeTab', tab.scope);
}, },
}, },
}; };
</script> </script>
<template> <template>
<ul class="nav-links scrolling-tabs"> <ul class="nav-links scrolling-tabs">
@ -67,9 +67,8 @@
v-if="shouldRenderBadge(tab.count)" v-if="shouldRenderBadge(tab.count)"
class="badge" class="badge"
> >
{{tab.count}} {{ tab.count }}
</span> </span>
</a> </a>
</li> </li>
</ul> </ul>

View file

@ -20,16 +20,16 @@
import userAvatarLink from '../user_avatar/user_avatar_link.vue'; import userAvatarLink from '../user_avatar/user_avatar_link.vue';
export default { export default {
name: 'placeholderNote', name: 'PlaceholderNote',
components: {
userAvatarLink,
},
props: { props: {
note: { note: {
type: Object, type: Object,
required: true, required: true,
}, },
}, },
components: {
userAvatarLink,
},
computed: { computed: {
...mapGetters([ ...mapGetters([
'getUserData', 'getUserData',
@ -54,14 +54,14 @@
<div class="note-header"> <div class="note-header">
<div class="note-header-info"> <div class="note-header-info">
<a :href="getUserData.path"> <a :href="getUserData.path">
<span class="hidden-xs">{{getUserData.name}}</span> <span class="hidden-xs">{{ getUserData.name }}</span>
<span class="note-headline-light">@{{getUserData.username}}</span> <span class="note-headline-light">@{{ getUserData.username }}</span>
</a> </a>
</div> </div>
</div> </div>
<div class="note-body"> <div class="note-body">
<div class="note-text"> <div class="note-text">
<p>{{note.body}}</p> <p>{{ note.body }}</p>
</div> </div>
</div> </div>
</div> </div>

View file

@ -8,7 +8,7 @@
* /> * />
*/ */
export default { export default {
name: 'placeholderSystemNote', name: 'PlaceholderSystemNote',
props: { props: {
note: { note: {
type: Object, type: Object,
@ -22,7 +22,7 @@
<li class="note system-note timeline-entry being-posted fade-in-half"> <li class="note system-note timeline-entry being-posted fade-in-half">
<div class="timeline-entry-inner"> <div class="timeline-entry-inner">
<div class="timeline-content"> <div class="timeline-content">
<em>{{note.body}}</em> <em>{{ note.body }}</em>
</div> </div>
</div> </div>
</li> </li>

View file

@ -21,16 +21,16 @@
import { spriteIcon } from '../../../lib/utils/common_utils'; import { spriteIcon } from '../../../lib/utils/common_utils';
export default { export default {
name: 'systemNote', name: 'SystemNote',
components: {
noteHeader,
},
props: { props: {
note: { note: {
type: Object, type: Object,
required: true, required: true,
}, },
}, },
components: {
noteHeader,
},
computed: { computed: {
...mapGetters([ ...mapGetters([
'targetNoteHash', 'targetNoteHash',

View file

@ -1,5 +1,5 @@
<script> <script>
export default { export default {
props: { props: {
startSize: { startSize: {
type: Number, type: Number,
@ -77,7 +77,7 @@ export default {
this.$emit('resize-end', this.size); this.$emit('resize-end', this.size);
}, },
}, },
}; };
</script> </script>
<template> <template>

View file

@ -3,7 +3,7 @@
import { parsePikadayDate, pikadayToString } from '../../lib/utils/datefix'; import { parsePikadayDate, pikadayToString } from '../../lib/utils/datefix';
export default { export default {
name: 'datePicker', name: 'DatePicker',
props: { props: {
label: { label: {
type: String, type: String,
@ -23,14 +23,6 @@
required: false, required: false,
}, },
}, },
methods: {
selected(dateText) {
this.$emit('newDateSelected', this.calendar.toString(dateText));
},
toggled() {
this.$emit('hidePicker');
},
},
mounted() { mounted() {
this.calendar = new Pikaday({ this.calendar = new Pikaday({
field: this.$el.querySelector('.dropdown-menu-toggle'), field: this.$el.querySelector('.dropdown-menu-toggle'),
@ -53,6 +45,14 @@
beforeDestroy() { beforeDestroy() {
this.calendar.destroy(); this.calendar.destroy();
}, },
methods: {
selected(dateText) {
this.$emit('newDateSelected', this.calendar.toString(dateText));
},
toggled() {
this.$emit('hidePicker');
},
},
}; };
</script> </script>
@ -66,7 +66,7 @@
@click="toggled" @click="toggled"
> >
<span class="dropdown-toggle-text"> <span class="dropdown-toggle-text">
{{label}} {{ label }}
</span> </span>
<i <i
class="fa fa-chevron-down" class="fa fa-chevron-down"

View file

@ -1,6 +1,6 @@
<script> <script>
/* This is a re-usable vue component for rendering a project avatar that /* This is a re-usable vue component for rendering a project avatar that
does not need to link to the project's profile. The image and an optional does not need to link to the project's profile. The image and an optional
tooltip can be configured by props passed to this component. tooltip can be configured by props passed to this component.
@ -14,14 +14,17 @@
tooltip-placement="top" tooltip-placement="top"
/> />
*/ */
import defaultAvatarUrl from 'images/no_avatar.png'; import defaultAvatarUrl from 'images/no_avatar.png';
import { placeholderImage } from '../../../lazy_loader'; import { placeholderImage } from '../../../lazy_loader';
import tooltip from '../../directives/tooltip'; import tooltip from '../../directives/tooltip';
export default { export default {
name: 'ProjectAvatarImage', name: 'ProjectAvatarImage',
directives: {
tooltip,
},
props: { props: {
lazy: { lazy: {
type: Boolean, type: Boolean,
@ -59,9 +62,6 @@ export default {
default: 'top', default: 'top',
}, },
}, },
directives: {
tooltip,
},
computed: { computed: {
// API response sends null when gravatar is disabled and // API response sends null when gravatar is disabled and
// we provide an empty string when we use it inside project avatar link. // we provide an empty string when we use it inside project avatar link.
@ -79,7 +79,7 @@ export default {
return `s${this.size}`; return `s${this.size}`;
}, },
}, },
}; };
</script> </script>
<template> <template>
@ -87,7 +87,7 @@ export default {
v-tooltip v-tooltip
class="avatar" class="avatar"
:class="{ :class="{
lazy, lazy: lazy,
[avatarSizeClass]: true, [avatarSizeClass]: true,
[cssClasses]: true [cssClasses]: true
}" }"

View file

@ -2,8 +2,10 @@
import modal from './modal.vue'; import modal from './modal.vue';
export default { export default {
name: 'recaptcha-modal', name: 'RecaptchaModal',
components: {
modal,
},
props: { props: {
html: { html: {
type: String, type: String,
@ -18,11 +20,14 @@ export default {
scriptSrc: 'https://www.google.com/recaptcha/api.js', scriptSrc: 'https://www.google.com/recaptcha/api.js',
}; };
}, },
watch: {
components: { html() {
modal, this.appendRecaptchaScript();
},
},
mounted() {
window.recaptchaDialogCallback = this.submit.bind(this);
}, },
methods: { methods: {
appendRecaptchaScript() { appendRecaptchaScript() {
this.removeRecaptchaScript(); this.removeRecaptchaScript();
@ -51,35 +56,26 @@ export default {
this.$el.querySelector('form').submit(); this.$el.querySelector('form').submit();
}, },
}, },
watch: {
html() {
this.appendRecaptchaScript();
},
},
mounted() {
window.recaptchaDialogCallback = this.submit.bind(this);
},
}; };
</script> </script>
<template> <template>
<modal <modal
kind="warning" kind="warning"
class="recaptcha-modal js-recaptcha-modal" class="recaptcha-modal js-recaptcha-modal"
:hide-footer="true" :hide-footer="true"
:title="__('Please solve the reCAPTCHA')" :title="__('Please solve the reCAPTCHA')"
@toggle="close" @toggle="close"
> >
<div slot="body"> <div slot="body">
<p> <p>
{{__('We want to be sure it is you, please confirm you are not a robot.')}} {{ __('We want to be sure it is you, please confirm you are not a robot.') }}
</p> </p>
<div <div
ref="recaptcha" ref="recaptcha"
v-html="html" v-html="html"
></div> >
</div> </div>
</modal> </div>
</modal>
</template> </template>

View file

@ -1,6 +1,6 @@
<script> <script>
export default { export default {
name: 'collapsedCalendarIcon', name: 'CollapsedCalendarIcon',
props: { props: {
containerClass: { containerClass: {
type: String, type: String,

View file

@ -4,7 +4,11 @@
import collapsedCalendarIcon from './collapsed_calendar_icon.vue'; import collapsedCalendarIcon from './collapsed_calendar_icon.vue';
export default { export default {
name: 'sidebarCollapsedGroupedDatePicker', name: 'SidebarCollapsedGroupedDatePicker',
components: {
toggleSidebar,
collapsedCalendarIcon,
},
props: { props: {
collapsed: { collapsed: {
type: Boolean, type: Boolean,
@ -30,10 +34,6 @@
default: false, default: false,
}, },
}, },
components: {
toggleSidebar,
collapsedCalendarIcon,
},
computed: { computed: {
hasMinAndMaxDates() { hasMinAndMaxDates() {
return this.minDate && this.maxDate; return this.minDate && this.maxDate;

View file

@ -6,7 +6,13 @@
import { dateInWords } from '../../../lib/utils/datetime_utility'; import { dateInWords } from '../../../lib/utils/datetime_utility';
export default { export default {
name: 'sidebarDatePicker', name: 'SidebarDatePicker',
components: {
datePicker,
toggleSidebar,
loadingIcon,
collapsedCalendarIcon,
},
props: { props: {
collapsed: { collapsed: {
type: Boolean, type: Boolean,
@ -51,12 +57,6 @@
editing: false, editing: false,
}; };
}, },
components: {
datePicker,
toggleSidebar,
loadingIcon,
collapsedCalendarIcon,
},
computed: { computed: {
selectedAndEditable() { selectedAndEditable() {
return this.selectedDate && this.editable; return this.selectedDate && this.editable;

View file

@ -1,6 +1,6 @@
<script> <script>
export default { export default {
name: 'toggleSidebar', name: 'ToggleSidebar',
props: { props: {
collapsed: { collapsed: {
type: Boolean, type: Boolean,
@ -25,6 +25,6 @@
aria-label="toggle collapse" aria-label="toggle collapse"
class="fa" class="fa"
:class="{ 'fa-angle-double-right': !collapsed, 'fa-angle-double-left': collapsed }" :class="{ 'fa-angle-double-right': !collapsed, 'fa-angle-double-left': collapsed }"
></i> />
</button> </button>
</template> </template>

View file

@ -1,24 +1,18 @@
<script> <script>
import { s__ } from '../../locale'; import { s__ } from '../../locale';
const PAGINATION_UI_BUTTON_LIMIT = 4; const PAGINATION_UI_BUTTON_LIMIT = 4;
const UI_LIMIT = 6; const UI_LIMIT = 6;
const SPREAD = '...'; const SPREAD = '...';
const PREV = s__('Pagination|Prev'); const PREV = s__('Pagination|Prev');
const NEXT = s__('Pagination|Next'); const NEXT = s__('Pagination|Next');
const FIRST = s__('Pagination|« First'); const FIRST = s__('Pagination|« First');
const LAST = s__('Pagination|Last »'); const LAST = s__('Pagination|Last »');
export default { export default {
props: { props: {
/** /**
This function will take the information given by the pagination component This function will take the information given by the pagination component
Here is an example `change` method:
change(pagenum) {
gl.utils.visitUrl(`?page=${pagenum}`);
},
*/ */
change: { change: {
type: Function, type: Function,
@ -46,34 +40,6 @@ export default {
required: true, required: true,
}, },
}, },
methods: {
changePage(e) {
if (e.target.parentElement.classList.contains('disabled')) return;
const text = e.target.innerText;
const { totalPages, nextPage, previousPage } = this.pageInfo;
switch (text) {
case SPREAD:
break;
case LAST:
this.change(totalPages);
break;
case NEXT:
this.change(nextPage);
break;
case PREV:
this.change(previousPage);
break;
case FIRST:
this.change(1);
break;
default:
this.change(+text);
break;
}
},
},
computed: { computed: {
prev() { prev() {
return this.pageInfo.previousPage; return this.pageInfo.previousPage;
@ -126,7 +92,35 @@ export default {
return this.pageInfo.totalPages > 1; return this.pageInfo.totalPages > 1;
}, },
}, },
}; methods: {
changePage(e) {
if (e.target.parentElement.classList.contains('disabled')) return;
const text = e.target.innerText;
const { totalPages, nextPage, previousPage } = this.pageInfo;
switch (text) {
case SPREAD:
break;
case LAST:
this.change(totalPages);
break;
case NEXT:
this.change(nextPage);
break;
case PREV:
this.change(previousPage);
break;
case FIRST:
this.change(1);
break;
default:
this.change(+text);
break;
}
},
},
};
</script> </script>
<template> <template>
<div <div
@ -135,7 +129,8 @@ export default {
> >
<ul class="pagination clearfix"> <ul class="pagination clearfix">
<li <li
v-for="item in getItems" v-for="(item, index) in getItems"
:key="index"
:class="{ :class="{
page: item.page, page: item.page,
'js-previous-button': item.prev, 'js-previous-button': item.prev,
@ -145,8 +140,11 @@ export default {
separator: item.separator, separator: item.separator,
active: item.active, active: item.active,
disabled: item.disabled disabled: item.disabled
}"> }"
<a @click.prevent="changePage($event)">{{item.title}}</a> >
<a @click.prevent="changePage($event)">
{{ item.title }}
</a>
</li> </li>
</ul> </ul>
</div> </div>

View file

@ -90,11 +90,11 @@
"devDependencies": { "devDependencies": {
"@gitlab-org/gitlab-svgs": "^1.4.0", "@gitlab-org/gitlab-svgs": "^1.4.0",
"babel-plugin-istanbul": "^4.1.5", "babel-plugin-istanbul": "^4.1.5",
"eslint": "^3.10.1", "eslint": "3.18.0",
"eslint-config-airbnb-base": "^10.0.1", "eslint-config-airbnb-base": "^10.0.1",
"eslint-import-resolver-webpack": "^0.8.3", "eslint-import-resolver-webpack": "^0.8.3",
"eslint-plugin-filenames": "^1.1.0", "eslint-plugin-filenames": "^1.1.0",
"eslint-plugin-html": "^4.0.1", "eslint-plugin-html": "2.0.1",
"eslint-plugin-import": "^2.2.0", "eslint-plugin-import": "^2.2.0",
"eslint-plugin-jasmine": "^2.1.0", "eslint-plugin-jasmine": "^2.1.0",
"eslint-plugin-promise": "^3.5.0", "eslint-plugin-promise": "^3.5.0",

View file

@ -2372,9 +2372,9 @@ eslint-plugin-filenames@^1.1.0:
lodash.kebabcase "4.0.1" lodash.kebabcase "4.0.1"
lodash.snakecase "4.0.1" lodash.snakecase "4.0.1"
eslint-plugin-html@^4.0.1: eslint-plugin-html@2.0.1:
version "4.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-4.0.1.tgz#fc70072263cc938496fbbc9cf648660e41fa269a" resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-2.0.1.tgz#3a829510e82522f1e2e44d55d7661a176121fce1"
dependencies: dependencies:
htmlparser2 "^3.8.2" htmlparser2 "^3.8.2"
@ -2419,9 +2419,9 @@ eslint-visitor-keys@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
eslint@^3.10.1: eslint@3.18.0:
version "3.19.0" version "3.18.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b"
dependencies: dependencies:
babel-code-frame "^6.16.0" babel-code-frame "^6.16.0"
chalk "^1.1.3" chalk "^1.1.3"