From 6aa9680df911ff4747ce4f8e54ada530843d7b82 Mon Sep 17 00:00:00 2001 From: cagataycivici Date: Mon, 28 Jan 2019 14:49:18 +0300 Subject: [PATCH] Initiated AutoComplete component --- public/demo/data/countries.json | 247 +++++++++++++++++++ src/AppMenu.vue | 1 + src/assets/styles/primevue.css | 1 + src/components/autocomplete/AutoComplete.css | 163 ++++++++++++ src/components/autocomplete/AutoComplete.vue | 224 +++++++++++++++++ src/main.js | 2 + src/router.js | 5 + src/service/CountryService.js | 8 + src/views/autocomplete/AutoCompleteDemo.vue | 51 ++++ 9 files changed, 702 insertions(+) create mode 100644 public/demo/data/countries.json create mode 100644 src/components/autocomplete/AutoComplete.css create mode 100644 src/components/autocomplete/AutoComplete.vue create mode 100644 src/service/CountryService.js create mode 100644 src/views/autocomplete/AutoCompleteDemo.vue diff --git a/public/demo/data/countries.json b/public/demo/data/countries.json new file mode 100644 index 000000000..bf5bf652f --- /dev/null +++ b/public/demo/data/countries.json @@ -0,0 +1,247 @@ +{ + "data": [ + {"name": "Afghanistan", "code": "AF"}, + {"name": "Åland Islands", "code": "AX"}, + {"name": "Albania", "code": "AL"}, + {"name": "Algeria", "code": "DZ"}, + {"name": "American Samoa", "code": "AS"}, + {"name": "Andorra", "code": "AD"}, + {"name": "Angola", "code": "AO"}, + {"name": "Anguilla", "code": "AI"}, + {"name": "Antarctica", "code": "AQ"}, + {"name": "Antigua and Barbuda", "code": "AG"}, + {"name": "Argentina", "code": "AR"}, + {"name": "Armenia", "code": "AM"}, + {"name": "Aruba", "code": "AW"}, + {"name": "Australia", "code": "AU"}, + {"name": "Austria", "code": "AT"}, + {"name": "Azerbaijan", "code": "AZ"}, + {"name": "Bahamas", "code": "BS"}, + {"name": "Bahrain", "code": "BH"}, + {"name": "Bangladesh", "code": "BD"}, + {"name": "Barbados", "code": "BB"}, + {"name": "Belarus", "code": "BY"}, + {"name": "Belgium", "code": "BE"}, + {"name": "Belize", "code": "BZ"}, + {"name": "Benin", "code": "BJ"}, + {"name": "Bermuda", "code": "BM"}, + {"name": "Bhutan", "code": "BT"}, + {"name": "Bolivia", "code": "BO"}, + {"name": "Bosnia and Herzegovina", "code": "BA"}, + {"name": "Botswana", "code": "BW"}, + {"name": "Bouvet Island", "code": "BV"}, + {"name": "Brazil", "code": "BR"}, + {"name": "British Indian Ocean Territory", "code": "IO"}, + {"name": "Brunei Darussalam", "code": "BN"}, + {"name": "Bulgaria", "code": "BG"}, + {"name": "Burkina Faso", "code": "BF"}, + {"name": "Burundi", "code": "BI"}, + {"name": "Cambodia", "code": "KH"}, + {"name": "Cameroon", "code": "CM"}, + {"name": "Canada", "code": "CA"}, + {"name": "Cape Verde", "code": "CV"}, + {"name": "Cayman Islands", "code": "KY"}, + {"name": "Central African Republic", "code": "CF"}, + {"name": "Chad", "code": "TD"}, + {"name": "Chile", "code": "CL"}, + {"name": "China", "code": "CN"}, + {"name": "Christmas Island", "code": "CX"}, + {"name": "Cocos (Keeling) Islands", "code": "CC"}, + {"name": "Colombia", "code": "CO"}, + {"name": "Comoros", "code": "KM"}, + {"name": "Congo", "code": "CG"}, + {"name": "Congo, The Democratic Republic of the", "code": "CD"}, + {"name": "Cook Islands", "code": "CK"}, + {"name": "Costa Rica", "code": "CR"}, + {"name": "Cote D\"Ivoire", "code": "CI"}, + {"name": "Croatia", "code": "HR"}, + {"name": "Cuba", "code": "CU"}, + {"name": "Cyprus", "code": "CY"}, + {"name": "Czech Republic", "code": "CZ"}, + {"name": "Denmark", "code": "DK"}, + {"name": "Djibouti", "code": "DJ"}, + {"name": "Dominica", "code": "DM"}, + {"name": "Dominican Republic", "code": "DO"}, + {"name": "Ecuador", "code": "EC"}, + {"name": "Egypt", "code": "EG"}, + {"name": "El Salvador", "code": "SV"}, + {"name": "Equatorial Guinea", "code": "GQ"}, + {"name": "Eritrea", "code": "ER"}, + {"name": "Estonia", "code": "EE"}, + {"name": "Ethiopia", "code": "ET"}, + {"name": "Falkland Islands (Malvinas)", "code": "FK"}, + {"name": "Faroe Islands", "code": "FO"}, + {"name": "Fiji", "code": "FJ"}, + {"name": "Finland", "code": "FI"}, + {"name": "France", "code": "FR"}, + {"name": "French Guiana", "code": "GF"}, + {"name": "French Polynesia", "code": "PF"}, + {"name": "French Southern Territories", "code": "TF"}, + {"name": "Gabon", "code": "GA"}, + {"name": "Gambia", "code": "GM"}, + {"name": "Georgia", "code": "GE"}, + {"name": "Germany", "code": "DE"}, + {"name": "Ghana", "code": "GH"}, + {"name": "Gibraltar", "code": "GI"}, + {"name": "Greece", "code": "GR"}, + {"name": "Greenland", "code": "GL"}, + {"name": "Grenada", "code": "GD"}, + {"name": "Guadeloupe", "code": "GP"}, + {"name": "Guam", "code": "GU"}, + {"name": "Guatemala", "code": "GT"}, + {"name": "Guernsey", "code": "GG"}, + {"name": "Guinea", "code": "GN"}, + {"name": "Guinea-Bissau", "code": "GW"}, + {"name": "Guyana", "code": "GY"}, + {"name": "Haiti", "code": "HT"}, + {"name": "Heard Island and Mcdonald Islands", "code": "HM"}, + {"name": "Holy See (Vatican City State)", "code": "VA"}, + {"name": "Honduras", "code": "HN"}, + {"name": "Hong Kong", "code": "HK"}, + {"name": "Hungary", "code": "HU"}, + {"name": "Iceland", "code": "IS"}, + {"name": "India", "code": "IN"}, + {"name": "Indonesia", "code": "ID"}, + {"name": "Iran, Islamic Republic Of", "code": "IR"}, + {"name": "Iraq", "code": "IQ"}, + {"name": "Ireland", "code": "IE"}, + {"name": "Isle of Man", "code": "IM"}, + {"name": "Israel", "code": "IL"}, + {"name": "Italy", "code": "IT"}, + {"name": "Jamaica", "code": "JM"}, + {"name": "Japan", "code": "JP"}, + {"name": "Jersey", "code": "JE"}, + {"name": "Jordan", "code": "JO"}, + {"name": "Kazakhstan", "code": "KZ"}, + {"name": "Kenya", "code": "KE"}, + {"name": "Kiribati", "code": "KI"}, + {"name": "Korea, Democratic People\"S Republic of", "code": "KP"}, + {"name": "Korea, Republic of", "code": "KR"}, + {"name": "Kuwait", "code": "KW"}, + {"name": "Kyrgyzstan", "code": "KG"}, + {"name": "Lao People\"S Democratic Republic", "code": "LA"}, + {"name": "Latvia", "code": "LV"}, + {"name": "Lebanon", "code": "LB"}, + {"name": "Lesotho", "code": "LS"}, + {"name": "Liberia", "code": "LR"}, + {"name": "Libyan Arab Jamahiriya", "code": "LY"}, + {"name": "Liechtenstein", "code": "LI"}, + {"name": "Lithuania", "code": "LT"}, + {"name": "Luxembourg", "code": "LU"}, + {"name": "Macao", "code": "MO"}, + {"name": "Macedonia, The Former Yugoslav Republic of", "code": "MK"}, + {"name": "Madagascar", "code": "MG"}, + {"name": "Malawi", "code": "MW"}, + {"name": "Malaysia", "code": "MY"}, + {"name": "Maldives", "code": "MV"}, + {"name": "Mali", "code": "ML"}, + {"name": "Malta", "code": "MT"}, + {"name": "Marshall Islands", "code": "MH"}, + {"name": "Martinique", "code": "MQ"}, + {"name": "Mauritania", "code": "MR"}, + {"name": "Mauritius", "code": "MU"}, + {"name": "Mayotte", "code": "YT"}, + {"name": "Mexico", "code": "MX"}, + {"name": "Micronesia, Federated States of", "code": "FM"}, + {"name": "Moldova, Republic of", "code": "MD"}, + {"name": "Monaco", "code": "MC"}, + {"name": "Mongolia", "code": "MN"}, + {"name": "Montserrat", "code": "MS"}, + {"name": "Morocco", "code": "MA"}, + {"name": "Mozambique", "code": "MZ"}, + {"name": "Myanmar", "code": "MM"}, + {"name": "Namibia", "code": "NA"}, + {"name": "Nauru", "code": "NR"}, + {"name": "Nepal", "code": "NP"}, + {"name": "Netherlands", "code": "NL"}, + {"name": "Netherlands Antilles", "code": "AN"}, + {"name": "New Caledonia", "code": "NC"}, + {"name": "New Zealand", "code": "NZ"}, + {"name": "Nicaragua", "code": "NI"}, + {"name": "Niger", "code": "NE"}, + {"name": "Nigeria", "code": "NG"}, + {"name": "Niue", "code": "NU"}, + {"name": "Norfolk Island", "code": "NF"}, + {"name": "Northern Mariana Islands", "code": "MP"}, + {"name": "Norway", "code": "NO"}, + {"name": "Oman", "code": "OM"}, + {"name": "Pakistan", "code": "PK"}, + {"name": "Palau", "code": "PW"}, + {"name": "Palestinian Territory, Occupied", "code": "PS"}, + {"name": "Panama", "code": "PA"}, + {"name": "Papua New Guinea", "code": "PG"}, + {"name": "Paraguay", "code": "PY"}, + {"name": "Peru", "code": "PE"}, + {"name": "Philippines", "code": "PH"}, + {"name": "Pitcairn", "code": "PN"}, + {"name": "Poland", "code": "PL"}, + {"name": "Portugal", "code": "PT"}, + {"name": "Puerto Rico", "code": "PR"}, + {"name": "Qatar", "code": "QA"}, + {"name": "Reunion", "code": "RE"}, + {"name": "Romania", "code": "RO"}, + {"name": "Russian Federation", "code": "RU"}, + {"name": "RWANDA", "code": "RW"}, + {"name": "Saint Helena", "code": "SH"}, + {"name": "Saint Kitts and Nevis", "code": "KN"}, + {"name": "Saint Lucia", "code": "LC"}, + {"name": "Saint Pierre and Miquelon", "code": "PM"}, + {"name": "Saint Vincent and the Grenadines", "code": "VC"}, + {"name": "Samoa", "code": "WS"}, + {"name": "San Marino", "code": "SM"}, + {"name": "Sao Tome and Principe", "code": "ST"}, + {"name": "Saudi Arabia", "code": "SA"}, + {"name": "Senegal", "code": "SN"}, + {"name": "Serbia and Montenegro", "code": "CS"}, + {"name": "Seychelles", "code": "SC"}, + {"name": "Sierra Leone", "code": "SL"}, + {"name": "Singapore", "code": "SG"}, + {"name": "Slovakia", "code": "SK"}, + {"name": "Slovenia", "code": "SI"}, + {"name": "Solomon Islands", "code": "SB"}, + {"name": "Somalia", "code": "SO"}, + {"name": "South Africa", "code": "ZA"}, + {"name": "South Georgia and the South Sandwich Islands", "code": "GS"}, + {"name": "Spain", "code": "ES"}, + {"name": "Sri Lanka", "code": "LK"}, + {"name": "Sudan", "code": "SD"}, + {"name": "Suriname", "code": "SR"}, + {"name": "Svalbard and Jan Mayen", "code": "SJ"}, + {"name": "Swaziland", "code": "SZ"}, + {"name": "Sweden", "code": "SE"}, + {"name": "Switzerland", "code": "CH"}, + {"name": "Syrian Arab Republic", "code": "SY"}, + {"name": "Taiwan, Province of China", "code": "TW"}, + {"name": "Tajikistan", "code": "TJ"}, + {"name": "Tanzania, United Republic of", "code": "TZ"}, + {"name": "Thailand", "code": "TH"}, + {"name": "Timor-Leste", "code": "TL"}, + {"name": "Togo", "code": "TG"}, + {"name": "Tokelau", "code": "TK"}, + {"name": "Tonga", "code": "TO"}, + {"name": "Trinidad and Tobago", "code": "TT"}, + {"name": "Tunisia", "code": "TN"}, + {"name": "Turkey", "code": "TR"}, + {"name": "Turkmenistan", "code": "TM"}, + {"name": "Turks and Caicos Islands", "code": "TC"}, + {"name": "Tuvalu", "code": "TV"}, + {"name": "Uganda", "code": "UG"}, + {"name": "Ukraine", "code": "UA"}, + {"name": "United Arab Emirates", "code": "AE"}, + {"name": "United Kingdom", "code": "GB"}, + {"name": "United States", "code": "US"}, + {"name": "United States Minor Outlying Islands", "code": "UM"}, + {"name": "Uruguay", "code": "UY"}, + {"name": "Uzbekistan", "code": "UZ"}, + {"name": "Vanuatu", "code": "VU"}, + {"name": "Venezuela", "code": "VE"}, + {"name": "Viet Nam", "code": "VN"}, + {"name": "Virgin Islands, British", "code": "VG"}, + {"name": "Virgin Islands, U.S.", "code": "VI"}, + {"name": "Wallis and Futuna", "code": "WF"}, + {"name": "Western Sahara", "code": "EH"}, + {"name": "Yemen", "code": "YE"}, + {"name": "Zambia", "code": "ZM"}, + {"name": "Zimbabwe", "code": "ZW"} + ] +} \ No newline at end of file diff --git a/src/AppMenu.vue b/src/AppMenu.vue index bcecdc480..e0005411a 100644 --- a/src/AppMenu.vue +++ b/src/AppMenu.vue @@ -8,6 +8,7 @@
+ ● AutoComplete ● Checkbox ● Chips ● Dropdown diff --git a/src/assets/styles/primevue.css b/src/assets/styles/primevue.css index 24096d753..7334ecd3d 100644 --- a/src/assets/styles/primevue.css +++ b/src/assets/styles/primevue.css @@ -1,5 +1,6 @@ @import '../../components/common/Common.css'; @import '../../components/accordion/Accordion.css'; +@import '../../components/autocomplete/AutoComplete.css'; @import '../../components/button/Button.css'; @import '../../components/card/Card.css'; @import '../../components/checkbox/Checkbox.css'; diff --git a/src/components/autocomplete/AutoComplete.css b/src/components/autocomplete/AutoComplete.css new file mode 100644 index 000000000..2c9c16909 --- /dev/null +++ b/src/components/autocomplete/AutoComplete.css @@ -0,0 +1,163 @@ +.p-autocomplete { + width: auto; + zoom: 1; + cursor: pointer; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + position: relative; + display: inline-block; +} + +.p-autocomplete .p-autocomplete-dropdown { + height: 100%; + width: 2em; + margin-right: 0; + vertical-align: top; +} + +.p-autocomplete .p-autocomplete-input { + padding-right: 1.5em; +} + +.p-autocomplete-loader { + position: absolute; + right: .25em; + top: 50%; + margin-top: -.5em; +} + +.p-autocomplete-query { + font-weight: bold; +} + +.p-autocomplete .p-autocomplete-panel { + min-width: 100%; +} + +.p-autocomplete-panel { + position: absolute; + overflow: auto; +} + +.p-autocomplete-panel .p-autocomplete-list { + padding: 0; + margin: 0; + border: 0 none; +} + +.p-autocomplete-panel .p-autocomplete-list-item { + border: 0 none; + cursor: pointer; + font-weight: normal; + margin: 1px 0; + padding: 0.186em 0.313em; + text-align: left; +} + +.p-autocomplete .p-button-icon-only, +.p-autocomplete .p-button-icon-only:enabled:hover, +.p-autocomplete .p-button-icon-only:enabled:focus, +.p-autocomplete .p-button-icon-only:enabled:active { + border-left: 0 none; +} + +/* Multiple Selection */ +.p-autocomplete-multiple-container { + display: inline-block; + vertical-align: middle; +} + +.p-autocomplete-multiple-container.p-inputtext { + clear: left; + cursor: text; + list-style-type: none; + margin: 0; + overflow: hidden; + padding: 0 1.5em 0 .25em; +} + +.p-autocomplete-token { + cursor: default; + display: inline-block; + vertical-align: middle; + overflow: hidden; + padding: .125em .5em; + white-space: nowrap; + position: relative; + margin-right: .125em; + border: 0 none; + font-size: .9em; +} + +.p-autocomplete-token-label { + display: block; + margin-right: 2em; +} + +.p-autocomplete-token-icon { + margin-top: -.5em; + position: absolute; + right: 0.2em; + top: 50%; + cursor: pointer; +} + +.p-autocomplete-input-token { + display: inline-block; + vertical-align: middle; + list-style-type: none; + margin: 0 0 0 .125em; + padding: .25em .25em .25em 0; +} + +.p-autocomplete-input-token input { + border: 0 none; + width: 10em; + outline: medium none; + background-color: transparent; + margin: 0; + padding: 0; + box-shadow: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} + +.p-autocomplete-dd .p-autocomplete-loader { + right: 2.25em; +} + +.p-autocomplete-dd input, +.p-autocomplete-dd .p-autocomplete-multiple-container { + -moz-border-radius-topright: 0px; + -webkit-border-top-right-radius: 0px; + border-top-right-radius: 0px; + -moz-border-radius-bottomright: 0px; + -webkit-border-bottom-right-radius: 0px; + border-bottom-right-radius: 0px; + } + +.p-autocomplete-dd .p-autocomplete-dropdown { + -moz-border-radius-topleft: 0px; + -webkit-border-top-left-radius: 0px; + border-top-left-radius: 0px; + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +/** AutoComplete **/ +.p-fluid .p-autocomplete, +.p-fluid .p-autocomplete-input { + width: 100%; +} + +.p-fluid .p-autocomplete.p-autocomplete-dd .p-autocomplete-input, +.p-fluid .p-autocomplete.p-autocomplete-dd .p-autocomplete-multiple-container { + width: calc(100% - 2em); +} + +.p-fluid .p-autocomplete .p-autocomplete-dropdown.p-button { + width: 2em; +} \ No newline at end of file diff --git a/src/components/autocomplete/AutoComplete.vue b/src/components/autocomplete/AutoComplete.vue new file mode 100644 index 000000000..2bc45656e --- /dev/null +++ b/src/components/autocomplete/AutoComplete.vue @@ -0,0 +1,224 @@ + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js index d1524d988..3196ee876 100644 --- a/src/main.js +++ b/src/main.js @@ -1,6 +1,7 @@ import Vue from 'vue'; import App from './App.vue'; import router from './router'; +import AutoComplete from './components/autocomplete/AutoComplete'; import Accordion from './components/accordion/Accordion'; import AccordionTab from './components/accordion/AccordionTab'; import Button from './components/button/Button'; @@ -39,6 +40,7 @@ Vue.config.productionTip = false; Vue.component('Accordion', Accordion); Vue.component('AccordionTab', AccordionTab); +Vue.component('AutoComplete', AutoComplete); Vue.component('Button', Button); Vue.component('Card', Card); Vue.component('Chart', Chart); diff --git a/src/router.js b/src/router.js index 08d31e4cb..0bb3e7227 100644 --- a/src/router.js +++ b/src/router.js @@ -16,6 +16,11 @@ export default new Router({ name: 'accordion', component: () => import('./views/accordion/AccordionDemo.vue') }, + { + path: '/autocomplete', + name: 'autocomplete', + component: () => import('./views/autocomplete/AutoCompleteDemo.vue') + }, { path: '/button', name: 'button', diff --git a/src/service/CountryService.js b/src/service/CountryService.js new file mode 100644 index 000000000..e2f55bca5 --- /dev/null +++ b/src/service/CountryService.js @@ -0,0 +1,8 @@ +import axios from 'axios' + +export default class CountryService { + + getCountries() { + return axios.get('demo/data/countries.json').then(res => res.data.data); + } +} \ No newline at end of file diff --git a/src/views/autocomplete/AutoCompleteDemo.vue b/src/views/autocomplete/AutoCompleteDemo.vue new file mode 100644 index 000000000..dc0810087 --- /dev/null +++ b/src/views/autocomplete/AutoCompleteDemo.vue @@ -0,0 +1,51 @@ + + + + +