diff options
author | silverwind <me@silverwind.io> | 2020-11-07 16:11:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-07 23:11:09 +0800 |
commit | 7c47e240936b8706a888a46149ca399219caef03 (patch) | |
tree | 94afb02f748aae6d704d5c6c3f86a27f744705af /web_src/js/index.js | |
parent | ed47da2e29aa832bd892f03d14e08e926d80bf24 (diff) | |
download | gitea-7c47e240936b8706a888a46149ca399219caef03.tar.gz gitea-7c47e240936b8706a888a46149ca399219caef03.zip |
Add Vue linting (#13447)
* Add Vue linting
Turns out the .vue files were not linted at all, so I added that as well
as re-indented the file to 2-space and fixed all reasonable issues that
cam up except one case of a unintended side effect for which I have no
idea how to fix it, so the rule was disabled.
* misc tweaks
* update lockfile
* use overrides to include .vue files
* treat warnings as errors on lint-frontend
* also treat stylelint warnings as errors
* use equal sign syntax
Co-authored-by: Lauris BH <lauris@nix.lv>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'web_src/js/index.js')
-rw-r--r-- | web_src/js/index.js | 150 |
1 files changed, 69 insertions, 81 deletions
diff --git a/web_src/js/index.js b/web_src/js/index.js index ef6d72a4f7..9921075f23 100644 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -2687,7 +2687,15 @@ function initVueComponents() { .replace(/height="[0-9]+"/, 'v-bind:height="size"') .replace(/width="[0-9]+"/, 'v-bind:width="size"'); - Vue.component(name, {props: ['size'], template}); + Vue.component(name, { + props: { + size: { + type: String, + default: '16', + }, + }, + template, + }); } const vueDelimeters = ['${', '}']; @@ -2710,7 +2718,7 @@ function initVueComponents() { }, organizations: { type: Array, - default: [] + default: () => [], }, isOrganization: { type: Boolean, @@ -3050,17 +3058,19 @@ function initVueApp() { initVueComponents(); new Vue({ - delimiters: ['${', '}'], el, - data: { - searchLimit: Number((document.querySelector('meta[name=_search_limit]') || {}).content), - suburl: AppSubUrl, - uid: Number((document.querySelector('meta[name=_context_uid]') || {}).content), - activityTopAuthors: window.ActivityTopAuthors || [], - }, + delimiters: ['${', '}'], components: { ActivityTopAuthors, }, + data: () => { + return { + searchLimit: Number((document.querySelector('meta[name=_search_limit]') || {}).content), + suburl: AppSubUrl, + uid: Number((document.querySelector('meta[name=_context_uid]') || {}).content), + activityTopAuthors: window.ActivityTopAuthors || [], + }; + }, }); } @@ -3105,60 +3115,52 @@ function initFilterBranchTagDropdown(selector) { }); $data.remove(); new Vue({ - delimiters: ['${', '}'], el: this, + delimiters: ['${', '}'], data, - - beforeMount() { - const vm = this; - - this.noResults = vm.$el.getAttribute('data-no-results'); - this.canCreateBranch = vm.$el.getAttribute('data-can-create-branch') === 'true'; - - document.body.addEventListener('click', (event) => { - if (vm.$el.contains(event.target)) { - return; - } - if (vm.menuVisible) { - Vue.set(vm, 'menuVisible', false); - } - }); - }, - - watch: { - menuVisible(visible) { - if (visible) { - this.focusSearchField(); - } - } - }, - computed: { filteredItems() { - const vm = this; - - const items = vm.items.filter((item) => { - return ((vm.mode === 'branches' && item.branch) || (vm.mode === 'tags' && item.tag)) && - (!vm.searchTerm || item.name.toLowerCase().includes(vm.searchTerm.toLowerCase())); + const items = this.items.filter((item) => { + return ((this.mode === 'branches' && item.branch) || (this.mode === 'tags' && item.tag)) && + (!this.searchTerm || item.name.toLowerCase().includes(this.searchTerm.toLowerCase())); }); - vm.active = (items.length === 0 && vm.showCreateNewBranch ? 0 : -1); - + // no idea how to fix this so linting rule is disabled instead + this.active = (items.length === 0 && this.showCreateNewBranch ? 0 : -1); // eslint-disable-line vue/no-side-effects-in-computed-properties return items; }, showNoResults() { return this.filteredItems.length === 0 && !this.showCreateNewBranch; }, showCreateNewBranch() { - const vm = this; - if (!this.canCreateBranch || !vm.searchTerm || vm.mode === 'tags') { + if (!this.canCreateBranch || !this.searchTerm || this.mode === 'tags') { return false; } - return vm.items.filter((item) => item.name.toLowerCase() === vm.searchTerm.toLowerCase()).length === 0; + return this.items.filter((item) => item.name.toLowerCase() === this.searchTerm.toLowerCase()).length === 0; + } + }, + + watch: { + menuVisible(visible) { + if (visible) { + this.focusSearchField(); + } } }, + beforeMount() { + this.noResults = this.$el.getAttribute('data-no-results'); + this.canCreateBranch = this.$el.getAttribute('data-can-create-branch') === 'true'; + + document.body.addEventListener('click', (event) => { + if (this.$el.contains(event.target)) return; + if (this.menuVisible) { + Vue.set(this, 'menuVisible', false); + } + }); + }, + methods: { selectItem(item) { const prev = this.getSelected(); @@ -3169,15 +3171,12 @@ function initFilterBranchTagDropdown(selector) { window.location.href = item.url; }, createNewBranch() { - if (!this.showCreateNewBranch) { - return; - } + if (!this.showCreateNewBranch) return; $(this.$refs.newBranchForm).trigger('submit'); }, focusSearchField() { - const vm = this; Vue.nextTick(() => { - vm.$refs.searchField.focus(); + this.$refs.searchField.focus(); }); }, getSelected() { @@ -3194,15 +3193,12 @@ function initFilterBranchTagDropdown(selector) { }, scrollToActive() { let el = this.$refs[`listItem${this.active}`]; - if (!el || el.length === 0) { - return; - } + if (!el || !el.length) return; if (Array.isArray(el)) { el = el[0]; } const cont = this.$refs.scrollContainer; - if (el.offsetTop < cont.scrollTop) { cont.scrollTop = el.offsetTop; } else if (el.offsetTop + el.clientHeight > cont.scrollTop + cont.clientHeight) { @@ -3210,49 +3206,41 @@ function initFilterBranchTagDropdown(selector) { } }, keydown(event) { - const vm = this; - if (event.keyCode === 40) { - // arrow down + if (event.keyCode === 40) { // arrow down event.preventDefault(); - if (vm.active === -1) { - vm.active = vm.getSelectedIndexInFiltered(); + if (this.active === -1) { + this.active = this.getSelectedIndexInFiltered(); } - if (vm.active + (vm.showCreateNewBranch ? 0 : 1) >= vm.filteredItems.length) { + if (this.active + (this.showCreateNewBranch ? 0 : 1) >= this.filteredItems.length) { return; } - vm.active++; - vm.scrollToActive(); - } - if (event.keyCode === 38) { - // arrow up + this.active++; + this.scrollToActive(); + } else if (event.keyCode === 38) { // arrow up event.preventDefault(); - if (vm.active === -1) { - vm.active = vm.getSelectedIndexInFiltered(); + if (this.active === -1) { + this.active = this.getSelectedIndexInFiltered(); } - if (vm.active <= 0) { + if (this.active <= 0) { return; } - vm.active--; - vm.scrollToActive(); - } - if (event.keyCode === 13) { - // enter + this.active--; + this.scrollToActive(); + } else if (event.keyCode === 13) { // enter event.preventDefault(); - if (vm.active >= vm.filteredItems.length) { - vm.createNewBranch(); - } else if (vm.active >= 0) { - vm.selectItem(vm.filteredItems[vm.active]); + if (this.active >= this.filteredItems.length) { + this.createNewBranch(); + } else if (this.active >= 0) { + this.selectItem(this.filteredItems[this.active]); } - } - if (event.keyCode === 27) { - // escape + } else if (event.keyCode === 27) { // escape event.preventDefault(); - vm.menuVisible = false; + this.menuVisible = false; } } } |