JSFiddle - React, Tailwind, and code Playground

by maxell4o

HTML

<input type="text" id="input">
  <ul></ul>

CSS

.list {
  color: red;
}

JavaScript 1.7

//// library.js
function MyLibrary() {
  this.element = null;
  this.params = {};
  this.items = [];
}

MyLibrary.prototype.renderList = function(items) {
  var value = this.element.value;
  var _items = [];
  for (var item of this.items) {
    if (item.name.toLowerCase().indexOf(value.toLowerCase()) > -1) {
      _items.push(item);
    }
  }
  this.render(_items);
}

MyLibrary.prototype.render = function(filteredItems) {
  var ul = document.querySelector('ul');
  ul.classList.add('list');
  ul.innerHTML = '';

  if (filteredItems.length > 0) {
    for (var city of filteredItems) {
      var li = document.createElement('li');
      li.innerHTML = '<strong>' + city.name + '</strong>';
      ul.append(li);
    }
  } else {
    var li = document.createElement('li');
    li.innerHTML = '<strong>Няма резултат</strong>';
    ul.append(li);
  }
}

MyLibrary.prototype.onChange = function(e) {
  this.renderList();
}

MyLibrary.prototype.attachEvents = function() {
  this.element.addEventListener('input', this.onChange.bind(this))
}

MyLibrary.prototype.fetchData = function() {
  // Ajax load file
  var items = [{
    name: 'Varna'
  }, {
    name: 'Sofia'
  }, {
    name: 'Plovdiv'
  }];
  this.items = items;
  this.renderList();
}

MyLibrary.prototype.init = function(input, params) {
  this.element = input;
  this.params = params;
  this.attachEvents();
  this.fetchData();
}

////////////////////////////

/* index.html */

var instance = new MyLibrary();

const input = document.querySelector('#input')
instance.init(
  input, {
    suggestionsLimit: 5,
    file: 'data.json'
  }
);