15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var SourceRow = (function() {
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * A SourceRow represents the row corresponding to a single SourceEntry
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * displayed by the EventsView.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function SourceRow(parentView, sourceEntry) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.parentView_ = parentView;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.sourceEntry_ = sourceEntry;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isSelected_ = false;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isMatchedByFilter_ = false;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Used to set CSS class for display.  Must only be modified by calling
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // corresponding set functions.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isSelected_ = false;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isMouseOver_ = false;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Mirror sourceEntry's values, so we only update the DOM when necessary.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isError_ = sourceEntry.isError();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isInactive_ = sourceEntry.isInactive();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.description_ = sourceEntry.getDescription();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.createRow_();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.onSourceUpdated();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SourceRow.prototype = {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    createRow_: function() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Create a row.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var tr = addNode(this.parentView_.tableBody_, 'tr');
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tr._id = this.getSourceId();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tr.style.display = 'none';
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.row_ = tr;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var selectionCol = addNode(tr, 'td');
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var checkbox = addNode(selectionCol, 'input');
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      selectionCol.style.borderLeft = '0';
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      checkbox.type = 'checkbox';
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var idCell = addNode(tr, 'td');
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      idCell.style.textAlign = 'right';
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var typeCell = addNode(tr, 'td');
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var descriptionCell = addNode(tr, 'td');
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.descriptionCell_ = descriptionCell;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Connect listeners.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      checkbox.onchange = this.onCheckboxToggled_.bind(this);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var onclick = this.onClicked_.bind(this);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      idCell.onclick = onclick;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      typeCell.onclick = onclick;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      descriptionCell.onclick = onclick;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tr.onmouseover = this.onMouseover_.bind(this);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tr.onmouseout = this.onMouseout_.bind(this);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Set the cell values to match this source's data.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.getSourceId() >= 0) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        addTextNode(idCell, this.getSourceId());
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        addTextNode(idCell, '-');
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var sourceTypeString = this.sourceEntry_.getSourceTypeString();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      addTextNode(typeCell, sourceTypeString);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.updateDescription_();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Add a CSS classname specific to this source type (so CSS can specify
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // different stylings for different types).
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var sourceTypeClass = sourceTypeString.toLowerCase().replace(/_/g, '-');
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.row_.classList.add('source-' + sourceTypeClass);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.updateClass_();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onSourceUpdated: function() {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.sourceEntry_.isInactive() != this.isInactive_ ||
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.sourceEntry_.isError() != this.isError_) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.updateClass_();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.description_ != this.sourceEntry_.getDescription())
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.updateDescription_();
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Update filters.
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      var matchesFilter = this.parentView_.currentFilter_(this.sourceEntry_);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setIsMatchedByFilter(matchesFilter);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Changes |row_|'s class based on currently set flags.  Clears any previous
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * class set by this method.  This method is needed so that some styles
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * override others.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateClass_: function() {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isInactive_ = this.sourceEntry_.isInactive();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isError_ = this.sourceEntry_.isError();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Each element of this list contains a property of |this| and the
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // corresponding class name to set if that property is true.  Entries
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // earlier in the list take precedence.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var propertyNames = [
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ['isSelected_', 'selected'],
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ['isMouseOver_', 'mouseover'],
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ['isError_', 'error'],
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ['isInactive_', 'inactive'],
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ];
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Loop through |propertyNames| in order, checking if each property
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // is true.  For the first such property found, if any, add the
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // corresponding class to the SourceEntry's row.  Remove classes
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // that correspond to any other property.
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var noStyleSet = true;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < propertyNames.length; ++i) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var setStyle = noStyleSet && this[propertyNames[i][0]];
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (setStyle) {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.row_.classList.add(propertyNames[i][1]);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          noStyleSet = false;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.row_.classList.remove(propertyNames[i][1]);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getSourceEntry: function() {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.sourceEntry_;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setIsMatchedByFilter: function(isMatchedByFilter) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.isMatchedByFilter() == isMatchedByFilter)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return;  // No change.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isMatchedByFilter_ = isMatchedByFilter;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setFilterStyles(isMatchedByFilter);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (isMatchedByFilter) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.parentView_.incrementPostfilterCount(1);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.parentView_.incrementPostfilterCount(-1);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // If we are filtering an entry away, make sure it is no longer
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // part of the selection.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.setSelected(false);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isMatchedByFilter: function() {
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.isMatchedByFilter_;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setFilterStyles: function(isMatchedByFilter) {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Hide rows which have been filtered away.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (isMatchedByFilter) {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.row_.style.display = '';
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.row_.style.display = 'none';
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isSelected: function() {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.isSelected_;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setSelected: function(isSelected) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (isSelected == this.isSelected())
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isSelected_ = isSelected;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setSelectedStyles(isSelected);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.parentView_.modifySelectionArray(this.getSourceId(), isSelected);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.parentView_.onSelectionChanged();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setSelectedStyles: function(isSelected) {
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isSelected_ = isSelected;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.getSelectionCheckbox().checked = isSelected;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.updateClass_();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setMouseoverStyle: function(isMouseOver) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isMouseOver_ = isMouseOver;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.updateClass_();
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onClicked_: function() {
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.parentView_.clearSelection();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setSelected(true);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.isSelected())
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.parentView_.scrollToSourceId(this.getSourceId());
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onMouseover_: function() {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setMouseoverStyle(true);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onMouseout_: function() {
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setMouseoverStyle(false);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateDescription_: function() {
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.description_ = this.sourceEntry_.getDescription();
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.descriptionCell_.innerHTML = '';
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      addTextNode(this.descriptionCell_, this.description_);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onCheckboxToggled_: function() {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setSelected(this.getSelectionCheckbox().checked);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.isSelected())
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.parentView_.scrollToSourceId(this.getSourceId());
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getSelectionCheckbox: function() {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.row_.childNodes[0].firstChild;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getSourceId: function() {
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.sourceEntry_.getSourceId();
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Returns source ID of the entry whose row is currently above this one's.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Returns null if no such node exists.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getPreviousNodeSourceId: function() {
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var prevNode = this.row_.previousSibling;
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (prevNode == null)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return null;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return prevNode._id;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Returns source ID of the entry whose row is currently below this one's.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Returns null if no such node exists.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getNextNodeSourceId: function() {
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var nextNode = this.row_.nextSibling;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (nextNode == null)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return null;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return nextNode._id;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Moves current object's row before |entry|'s row.
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    moveBefore: function(entry) {
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.row_.parentNode.insertBefore(this.row_, entry.row_);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Moves current object's row after |entry|'s row.
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    moveAfter: function(entry) {
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.row_.parentNode.insertBefore(this.row_, entry.row_.nextSibling);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return SourceRow;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})();
268