Skip to content

Commit e1a0c4c

Browse files
author
Guillaume Chau
committed
feat(ui): v-focus directive
1 parent 5566208 commit e1a0c4c

File tree

6 files changed

+61
-51
lines changed

6 files changed

+61
-51
lines changed

packages/@vue/cli-ui/src/components/FileDiffView.vue

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
icon-left="vertical_align_bottom"
4242
:label="$t('components.file-diff-view.actions.commit')"
4343
class="big primary"
44-
@click="openCommitModal()"
44+
@click="showCommitModal = true"
4545
/>
4646
<VueButton
4747
:label="$t('components.file-diff-view.actions.skip')"
@@ -84,9 +84,9 @@
8484
:subtitle="$t('components.file-diff-view.modals.commit.subtitle')"
8585
>
8686
<VueInput
87-
ref="commitMessageInput"
8887
v-model="commitMessage"
8988
icon-left="local_offer"
89+
v-focus
9090
@keyup.enter="commitMessage && commit()"
9191
/>
9292
</VueFormField>
@@ -197,13 +197,6 @@ export default {
197197
this.$apollo.queries.fileDiffs.refetch()
198198
},
199199
200-
openCommitModal () {
201-
this.showCommitModal = true
202-
requestAnimationFrame(() => {
203-
this.$refs.commitMessageInput.focus()
204-
})
205-
},
206-
207200
async commit () {
208201
this.showCommitModal = false
209202
this.loading++

packages/@vue/cli-ui/src/components/FolderExplorer.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
v-model="editedPath"
2121
:placeholder="$t('components.folder-explorer.toolbar.placeholder')"
2222
icon-right="edit"
23+
v-focus
2324
@keyup.esc="editingPath = false"
2425
@keyup.enter="submitPathEdit()"
2526
/>
@@ -162,6 +163,7 @@
162163
<VueInput
163164
v-model="newFolderName"
164165
icon-left="folder"
166+
v-focus
165167
@keyup.enter="createFolder()"
166168
/>
167169
</VueFormField>

packages/@vue/cli-ui/src/main.js

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,16 @@
1+
import './plugins'
2+
import './register-components'
3+
14
import Vue from 'vue'
25
import App from './App.vue'
36
import router from './router'
47
import i18n from './i18n'
58
import { apolloProvider } from './vue-apollo'
6-
import VueUi from '@vue/ui'
7-
import InstantSearch from 'vue-instantsearch'
8-
import VueMeta from 'vue-meta'
9-
import PortalVue from 'portal-vue'
10-
import * as Filters from './filters'
11-
import './register-components'
129
import ClientAddonApi from './util/ClientAddonApi'
13-
import Responsive from './util/responsive'
14-
import SharedData from './util/shared-data'
15-
import PluginAction from './util/plugin-action'
1610
import gql from 'graphql-tag'
17-
import ClientState from './mixins/ClientState'
18-
import SetSize from './util/set-size'
1911

2012
window.gql = gql
2113

22-
Vue.use(InstantSearch)
23-
Vue.use(VueMeta)
24-
Vue.use(Responsive, {
25-
computed: {
26-
mobile () {
27-
return this.width <= 768
28-
},
29-
tablet () {
30-
return this.width <= 900
31-
},
32-
desktop () {
33-
return !this.tablet
34-
},
35-
wide () {
36-
return this.width >= 1300
37-
}
38-
}
39-
})
40-
Vue.use(VueUi)
41-
Vue.use(PortalVue)
42-
Vue.use(SharedData)
43-
Vue.use(PluginAction)
44-
45-
for (const key in Filters) {
46-
Vue.filter(key, Filters[key])
47-
}
48-
49-
Vue.mixin(ClientState)
50-
51-
Vue.directive('set-size', SetSize)
52-
5314
Vue.config.productionTip = false
5415

5516
// For client addons

packages/@vue/cli-ui/src/plugins.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import Vue from 'vue'
2+
import VueUi from '@vue/ui'
3+
import InstantSearch from 'vue-instantsearch'
4+
import VueMeta from 'vue-meta'
5+
import PortalVue from 'portal-vue'
6+
import * as Filters from './filters'
7+
import Responsive from './util/responsive'
8+
import SharedData from './util/shared-data'
9+
import PluginAction from './util/plugin-action'
10+
import ClientState from './mixins/ClientState'
11+
import SetSize from './util/set-size'
12+
import Focus from './util/focus'
13+
14+
Vue.use(InstantSearch)
15+
Vue.use(VueMeta)
16+
Vue.use(Responsive, {
17+
computed: {
18+
mobile () {
19+
return this.width <= 768
20+
},
21+
tablet () {
22+
return this.width <= 900
23+
},
24+
desktop () {
25+
return !this.tablet
26+
},
27+
wide () {
28+
return this.width >= 1300
29+
}
30+
}
31+
})
32+
Vue.use(VueUi)
33+
Vue.use(PortalVue)
34+
Vue.use(SharedData)
35+
Vue.use(PluginAction)
36+
37+
for (const key in Filters) {
38+
Vue.filter(key, Filters[key])
39+
}
40+
41+
Vue.mixin(ClientState)
42+
43+
Vue.directive('set-size', SetSize)
44+
Vue.directive('focus', Focus)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default {
2+
bind (el) {
3+
requestAnimationFrame(() => {
4+
const input = el.querySelector('input')
5+
if (input) el = input
6+
el.focus()
7+
})
8+
}
9+
}

packages/@vue/cli-ui/src/views/ProjectCreate.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@
380380
<VueInput
381381
v-model="formData.save"
382382
icon-left="local_offer"
383+
v-focus
383384
/>
384385
</VueFormField>
385386
</div>

0 commit comments

Comments
 (0)