Beispiel #1
0
Item.prototype.toggleExtra = function (e) {
  var button = closest(e.target, 'button', true);
  var extraName = button.className;
  var extra = this.extrasEl.querySelector('.' + extraName);
  var action = button.querySelector('.action');
  var origState = action.innerHTML;
  var extraMsg;

  // Toggle "active" class to display/hide the "extra"
  classes(extra).toggle('active');

  // Toggle the trigger button's text
  if (origState == 'Add') {
    action.innerHTML = 'Remove';
    extraMsg = extraName + ' added. ';
  } else {
    action.innerHTML = 'Add';
    extraMsg = extraName + ' removed. ';
  }

  this.updateTotal();
  this.log(extraMsg + fmt('Item total: %c dollars', this.totalPrice));

  return this;
};
SortableGrid.prototype.sortCol = function (e) {
  var header = closest(e.target, 'th', true);
  var order = this.toggleHeader(header);
  var sortType = dataset(header, 'sort');
  var index = this.headers.indexOf(header);
  var self = this;
  var items = [];

  this.rows.forEach(function (tr) {
    var item = {};
    item.tr = tr;
    var td = qwery('td', tr)[index];
    // TODO Allow user to configure what element
    //      within the cell is parsed for sorting.
    item.val = td.textContent; // IE9+
    items.push(item);
  });

  if (!sortType || sortType === 'standard') {
    items.sort(compare);
  }
  else if (sortType === 'num') {
    items.sort(compareNum);
  }
  else if (sortType === 'date') {
    items.sort(compareDate);
  }

  empty(this.tbody);

  items.forEach(function (item) {
    self.tbody.appendChild(item.tr);
  });

  return this;

  function compare(a, b) {
    return (order === ASCENDING)
      ? a.val > b.val
      : a.val < b.val;
  }

  function compareNum(a, b) {
    return (order === ASCENDING)
      ? parseInt(a.val) > parseInt(b.val)
      : parseInt(a.val) < parseInt(b.val);
  }

  function compareDate(a, b) {
    return (order === ASCENDING)
      ? unixTime(a.val) > unixTime(b.val)
      : unixTime(a.val) < unixTime(b.val);
  }
};
 return event.bind(el, type, function(e){
   var target = e.target || e.srcElement;
   e.delegateTarget = closest(target, selector, true, el);
   if (e.delegateTarget) fn.call(el, e);
 }, capture);