From d26fb8196be56e60e51fde53feb6f74e166c0fbf Mon Sep 17 00:00:00 2001 From: cagataycivici Date: Sun, 30 Dec 2018 13:36:20 +0300 Subject: [PATCH] Initiated MultiSelect --- src/AppMenu.vue | 1 + src/assets/styles/primevue.css | 1 + src/components/multiselect/MultiSelect.css | 149 ++++++++++++++++ src/components/multiselect/MultiSelect.vue | 188 +++++++++++++++++++++ src/main.js | 2 + src/router.js | 5 + src/views/multiselect/MultiSelectDemo.vue | 55 ++++++ 7 files changed, 401 insertions(+) create mode 100644 src/components/multiselect/MultiSelect.css create mode 100644 src/components/multiselect/MultiSelect.vue create mode 100644 src/views/multiselect/MultiSelectDemo.vue diff --git a/src/AppMenu.vue b/src/AppMenu.vue index 6ffdd7f39..e2a9beb60 100644 --- a/src/AppMenu.vue +++ b/src/AppMenu.vue @@ -15,6 +15,7 @@ ● InputSwitch ● InputText ● Listbox + ● MultiSelect ● Password ● RadioButton ● Rating diff --git a/src/assets/styles/primevue.css b/src/assets/styles/primevue.css index 4fb9e0efd..24096d753 100644 --- a/src/assets/styles/primevue.css +++ b/src/assets/styles/primevue.css @@ -9,6 +9,7 @@ @import '../../components/inputtext/InputText.css'; @import '../../components/inputswitch/InputSwitch.css'; @import '../../components/listbox/Listbox.css'; +@import '../../components/multiselect/MultiSelect.css'; @import '../../components/panel/Panel.css'; @import '../../components/password/Password.css'; @import '../../components/progressbar/ProgressBar.css'; diff --git a/src/components/multiselect/MultiSelect.css b/src/components/multiselect/MultiSelect.css new file mode 100644 index 000000000..c6627b06f --- /dev/null +++ b/src/components/multiselect/MultiSelect.css @@ -0,0 +1,149 @@ +/** MultiSelect **/ +.p-multiselect { + display: inline-block; + position: relative; + width: auto; + cursor: pointer; +} + +.p-multiselect .p-multiselect-trigger { + border-right: none; + border-top: none; + border-bottom: none; + cursor: pointer; + width: 1.5em; + height: 100%; + position: absolute; + right: 0; + top: 0; + padding: 0 .25em; +} + +.p-multiselect .p-multiselect-trigger .p-multiselect-trigger-icon { + top: 50%; + left: 50%; + margin-top: -.5em; + margin-left: -.5em; + position: absolute; +} + +.p-multiselect .p-multiselect-label-container { + overflow: hidden; +} + +.p-multiselect .p-multiselect-label { + display: block; + padding: .25em 2em .25em .25em; + width: auto; + border: none; + cursor: pointer; + text-overflow: ellipsis; + overflow: hidden; +} + +.p-multiselect-label-empty { + overflow: hidden; + visibility: hidden; +} + +.p-multiselect.p-disabled .p-multiselect-trigger, +.p-multiselect.p-disabled .p-multiselect-label { + cursor: auto +} + +.p-multiselect-panel { + padding: 0.2em; + position: absolute; + min-width: 10em; +} + +.p-multiselect .p-multiselect-panel { + min-width: 100%; +} + +.p-multiselect-panel .p-multiselect-items-wrapper { + overflow: auto; + position: relative; + padding: 0.2em 0; +} + +.p-multiselect-panel .p-multiselect-list { + border: 0 none; +} + +.p-multiselect-panel .p-multiselect-item { + border: 0 none; + cursor: pointer; + font-weight: normal; + margin: 1px 0; + padding: .125em .25em; + text-align: left; + white-space: nowrap; + display: block; + position: relative; +} + +.p-multiselect-panel .p-multiselect-item .p-checkbox { + display: inline-block; + vertical-align: middle; +} + +.p-multiselect-panel .p-multiselect-item label { + display: inline-block; + vertical-align: middle; +} + +.p-multiselect-header { + margin-bottom: 0.3em; + padding: .25em; + position: relative; + text-align: left; +} + +.p-multiselect-header .p-checkbox { + display: inline-block; + vertical-align: middle; + cursor:pointer; +} + +.p-multiselect-header .p-multiselect-filter-container { + position: relative; + display: inline-block; + vertical-align: middle; + width: 65%; +} + +.p-multiselect-header .p-multiselect-filter-container .p-multiselect-filter-icon { + position: absolute; + top: .25em; + left: .125em; +} + +.p-multiselect-header .p-inputtext { + padding: .125em .125em .125em 1.25em; + width: 100%; +} + +.p-multiselect-header .p-multiselect-close { + position: absolute; + right: .375em; + top: .375em; + display: block; + border: 0 none; +} + +.p-multiselect-header a.p-multiselect-all, +.p-multiselect-header a.p-multiselect-none { + float:left; + margin-right: 10px; + display: block; +} + +.p-multiselect-header .p-multiselect-close.p-state-hover { + padding:0px; +} + +.p-fluid .p-multiselect { + width: 100%; + box-sizing: border-box; +} diff --git a/src/components/multiselect/MultiSelect.vue b/src/components/multiselect/MultiSelect.vue new file mode 100644 index 000000000..3e53aef94 --- /dev/null +++ b/src/components/multiselect/MultiSelect.vue @@ -0,0 +1,188 @@ + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js index 6c5fdd64d..ae8921aa6 100644 --- a/src/main.js +++ b/src/main.js @@ -12,6 +12,7 @@ import Editor from './components/editor/Editor'; import InputSwitch from './components/inputswitch/InputSwitch'; import InputText from './components/inputtext/InputText'; import Fieldset from './components/fieldset/Fieldset'; +import MultiSelect from './components/multiselect/MultiSelect'; import Listbox from './components/listbox/Listbox'; import Panel from './components/panel/Panel'; import Password from './components/password/Password'; @@ -46,6 +47,7 @@ Vue.component('p-inputSwitch', InputSwitch); Vue.component('p-inputtext', InputText); Vue.component('p-listbox', Listbox); Vue.component('p-fieldset', Fieldset); +Vue.component('p-multiSelect', MultiSelect); Vue.component('p-panel', Panel); Vue.component('p-password', Password); Vue.component('p-progressBar', ProgressBar); diff --git a/src/router.js b/src/router.js index 3e6ef2cf5..ac8cace79 100644 --- a/src/router.js +++ b/src/router.js @@ -71,6 +71,11 @@ export default new Router({ name: 'listbox', component: () => import('./views/listbox/ListboxDemo.vue') }, + { + path: '/multiselect', + name: 'multiselect', + component: () => import('./views/multiselect/MultiSelectDemo.vue') + }, { path: '/panel', name: 'panel', diff --git a/src/views/multiselect/MultiSelectDemo.vue b/src/views/multiselect/MultiSelectDemo.vue new file mode 100644 index 000000000..6e7e19cd2 --- /dev/null +++ b/src/views/multiselect/MultiSelectDemo.vue @@ -0,0 +1,55 @@ + + + + +