se-datalist - Vaadin Add-on Directory
Wrapper around datalist and select tags, to provide datalist whenever it possible and fallback to select otherwise.
**[ This description is mirrored from README.md at [github.com/andrewmiroshnichenko/se-datalist](https://github.com//andrewmiroshnichenko/se-datalist/blob/v1.0.2/README.md) on 2019-05-10 ]**
[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/andrewmiroshnichenko/se-datalist)
# se-datalist
Polymer wrapper around native **select** and **datalist** tags with browser-dependent appearance. If browser don't support **datalist** tag it will fall back to **select** which is supported fairly well. Note that all bugs, that are belong to native **datalist** tag will appear on this custom element as well, since it just refer to general tag support.
## Install
```
$ bower install se-datalist
```
Make sure you have the [Polymer CLI](https://www.npmjs.com/package/polymer-cli) installed. Then run `polymer serve` to serve your element locally.
## Viewing component
```
$ polymer serve
```
## Running tests
```
$ polymer test
```
# API
## Properties
1. List
| | |
| --- | --- |
| **Property name** | list |
| **Property type** | Array |
| **Default value** | [] |
| **Can be set from html** | No |
| **Corresponding attribute** | |
| | |
List of the component options. Empty by default, read-only. All manipulations with the list should be accomplished by corresponding component methods(addOptions, removeOptions and removeAllOptions). So, by default, component is initializing without options, and then will populated using JS.
```html
```
```javascript
var customEl = document.querySelector('se-datalist');
customEl.list = ['1', '2', 'coconut'];
customEl.list; // returns empty Array, because list property is read-only
customEl.addOptions(['a', 'b']);
customEl.list; // returns Array ['a', 'b']
customEl.removeOptions(['a']);
customEl.list; // returns Array ['b']
```
2. Disabled
| | |
| --- | --- |
| **Property name** | disabled |
| **Property type** | Boolean |
| **Default value** | false |
| **Can be set from html** | Yes |
| **Corresponding attribute** | disabled |
| | |
If true - disables possibility of user interaction with component. But component’s value still will be changeable from code.
**Warning:** presence of this property as attribute of `` tag will lead to disabling of component, even if it's value will be `false`.
```html
```
```javascript
var customEl = document.querySelector('se-datalist');
customEl.disabled; // returns Boolean true
customEl.disabled = false;
customEl.disabled; // returns Boolean false
```
3. Placeholder
| | |
| --- | --- |
| **Property name** | placeholder |
| **Property type** | String |
| **Default value** | - |
| **Can be set from html** | Yes |
| **Corresponding attribute** | placeholder |
| | |
String that is shown as component’s placeholder when component’s value is empty. Length of this property is limited to 20 characters, bigger placeholder will explicitely cut to this length. When component’s value changes from empty to non-empty placeholder should move to “upper left corner” of the component.
```html
```
```javascript
var customEl = document.querySelector('se-datalist');
customEl.placeholder; // returns String ''
customEl.placeholder = 'Select an option';
customEl.placeholder; // returns String 'Select an option'
```
4. Selected option
| | |
| --- | --- |
| **Property name** | selectedOption |
| **Property type** | String |
| **Default value** | '' |
| **Can be set from html** | No |
| **Corresponding attribute** | |
| | |
Current option that is selected as component’s value. Can't be set from HTML because we can't set list from there. On attempt to set non-existing (in `list` property) selected option this property will be set to empty Sring if `list` property is empty or if no option is selected yet. If some selected option was already selected - it will remain as `selectedOption` property value.
If current `selectedOption` will removed from `list` - `selectedOption` will become empty.
```html
```
```javascript
var customEl = document.querySelector('se-datalist');
customEl.addOptions(['One', 'Two', 'Three']); // Setup component’s list of options
customEl.selectedOption = 'Two';
customEl.selectedOption; // returns String 'Two'
customEl.removeOptions(['Two']);
customEl.selectedOption; // returns String ''
customEl.selectedOption = 'Four';
customEl.selectedOption; // returns String ''
customEl.removeOptions(['One', 'Three']);
customEl.selectedOption; // returns String ''
```
5. Is select
| | |
| --- | --- |
| **Property name** | isSelect |
| **Property type** | Boolean |
| **Default value** | false |
| **Can be set from html** | Yes |
| **Corresponding attribute** | is-select |
| | |
With this property set to **true** component will initialize as **select** even if **datalist** is available in current browser. In order to achieve this behavior you should set it upon initialization as attribute of `se-datalist` tag.
```html
```
## Methods
### addOptions(optionsList: *Array*) => *void* or *false*
This method accepts array of options, and populates the component’s list property. If option from `optionsList` isn't already present in `list` - component will add it to the end of `list`, and if it's duplicate of existing option - method will return `false`.
```html
```
```javascript
var customEl = document.querySelector('se-datalist');
customEl.addOptions(['One', 'Two', 'Three']);
customEl.list; // returns Array ['One', 'Two', 'Three']
customEl.addOptions(['Four']);
customEl.list; // returns Array ['One', 'Two', 'Three', 'Four']
customEl.addOptions(['Four', 'Five']); // returns Boolean 'false' on adding option 'Four'
customEl.list; // returns Array ['One', 'Two', 'Three', 'Four', 'Five']
```
### removeOptions(optionsList: *Array*) => *void* or *false*
This method accepts array of options, and removes them from the component’s list property. If option from `optionsList` isn't already present in `list` - method will return `false`, and if it's existing option - component will remove it from `list`.
```html
```
```javascript
var customEl = document.querySelector('se-datalist');
customEl.addOptions(['One', 'Two', 'Three']);
customEl.list; // returns Array ['One', 'Two', 'Three']
customEl.removeOptions(['Two']);
customEl.list; // returns Array ['One', 'Three']
customEl.removeOptions(['Four']); // returns Boolean 'false' on adding option 'Four'
customEl.list; // returns Array ['One', 'Three']
customEl.addOptions(['One', 'Three']);
customEl.list; // returns empty Array
```
### removeAllOptions() => *void*
Completely removes all options from the component’s `list` property.
```html
```
```javascript
var customEl = document.querySelector('se-datalist');
customEl.addOptions(['One', 'Two', 'Three']);
customEl.list; // returns Array ['One', 'Two', 'Three']
customEl.removeAllOptions();
customEl.list; // returns Array []
```
## Styling
The following custom properties are available for styling:
| Custom property | Description | Default |
| --- | --- | --- |
| `--sedatalist-text-color` | Color of datalist's displayed value | Browser-default(black) |
| `--sedatalist-bottom-line` | Style of component’s bottom line. Other borders are disabled | `1px solid rgba(0, 0, 0, .12)` |
| `--sedatalist-placeholder-color` | Color of placeholder text | `#999999` |
| `--sedatalist-font-size` | Charachters font size. Component dimesions will scale accordingly | `16px` |
| `--sedatalist-font-family` | Font family of component typography | `Roboto, sans-serif` |
## Events
valueChanged(event)
Event is fired when new option from list is chosen.
New value is accessible as `event.detail.newValue`, old value - `as event.detail.oldValue`.
listChanged(event)
Event is fired when list is changed(options are either added or removed).
New list is accessible as `event.detail.newList`, old value - `as event.detail.oldList`.
Online DemoDocumentation
View on GitHub
GitHub Homepage
Issue tracker
se-datalist version 1.0.0
### Dependencies
Polymer/polymer#^2.0.0
se-datalist version 1.0.1
### Dependencies
Polymer/polymer#^2.0.0
se-datalist version 1.0.2
### Dependencies
Polymer/polymer#^2.0.0