chromium/third_party/blink/perf_tests/speedometer21/resources/flightjs-example-app/app/component_ui/mail_controls.js

'use strict';

define(
  [
    'flight/lib/component'
  ],

  function(defineComponent) {

    return defineComponent(mailControls);

    function mailControls() {
      this.defaultAttrs({
        //selectors
        actionControlsSelector: 'button.mail-action',
        deleteControlSelector: '#delete_mail',
        moveControlSelector: '#move_mail',
        forwardControlSelector: '#forward',
        replyControlSelector: '#reply',
        singleItemActionSelector: 'button.single-item'
      });

      this.disableAll = function() {
        this.select('actionControlsSelector').attr('disabled', 'disabled');
      };

      this.restyleOnSelectionChange = function(ev, data) {
        if (data.selectedIds.length > 1) {
          this.select('actionControlsSelector').not('button.single-item').removeAttr('disabled');
          this.select('singleItemActionSelector').attr('disabled', 'disabled');
        } else if (data.selectedIds.length == 1) {
          this.select('actionControlsSelector').removeAttr('disabled');
        } else {
          this.disableAll();
        }
      };

      this.deleteMail = function(ev, data) {
        this.trigger('uiDeleteMail');
      };

      this.moveMail = function(ev, data) {
        this.trigger('uiMoveMail');
      };

      this.forwardMail = function(ev, data) {
        this.trigger('uiForwardMail');
      };

      this.replyToMail = function(ev, data) {
        this.trigger('uiReplyToMail');
      };

      this.after('initialize', function() {
        this.on('.mail-action', 'click', {
          'deleteControlSelector': this.deleteMail,
          'moveControlSelector': this.moveMail,
          'forwardControlSelector': this.forwardMail,
          'replyControlSelector': this.replyToMail
        });
        this.on(document, 'uiMailItemSelectionChanged', this.restyleOnSelectionChange);
        this.on(document, 'uiFolderSelectionChanged', this.disableAll);
      });
    }
  }
);