<!-- The <commits-dialog-sk> custom element declaration.

  An element to display information on one or more commits.

  Listens for 'show-commits' events on it's parent element and then displays
  the info it receives in each event. Relies upon e.detail containing a
  serialized slice of types.Commit that could have made up that dot.

  Attributes:
    None.

  Events:
    None.

  Methods:
    setCommitInfo(commitinfo) - Where commitinfo is an array of objects of the form:

       {
         author: "foo@example.org"
         commit_time: 1428574804
         hash: "d9f8862ab6bed4195cbfe5dda48693e1062b01e2"
       }
-->

<link rel="import" href="bower_components/polymer/polymer.html">
<link rel="import" href="bower_components/paper-dialog/paper-dialog.html">
<link rel="import" href="../common/imp/commit-panel.html" />

<dom-module id="commits-dialog-sk">
  <template>
    <style include="shared-styles">
      #commitsDialog {
        position: fixed;
        bottom: 1em;
        right: 1em;
      }
    </style>
    <paper-dialog id="commitsDialog">

      <h1>Commit(s)</h1>
      <commits-panel-sk id="commitsPanel" repo="{{_repo}}"></commits-panel-sk>
      <div class="buttons">
        <paper-button raised dialog-dismiss>Close</paper-button>
      </div>
    </paper-dialog>
  </template>
  <script>
    Polymer({
      is: 'commits-dialog-sk',

      properties:{
        _repo: {
          type: String,
          value: sk.app_config.baseRepoURL
        }
      },

      attached: function () {
        this.listen(this.parentElement, 'show-commits', '_handleCommitSelected');
        this.listen(this.$.commitsPanel, 'commits-loaded', '_handleCommitsLoaded');

        // this.$.commitsDialog.positionTarget = document.body;
      },

      _handleCommitSelected: function(ev) {
        ev.stopPropagation();
        this.setCommitInfo(ev.detail);
      },

      setCommitInfo: function(commitInfo) {
        if (this.$.commitsDialog.opened) {
          this.$.commitsDialog.close();
        }
        this.$.commitsPanel.setCommitInfo(commitInfo);
      },

      _handleCommitsLoaded: function(ev) {
        this.$.commitsDialog.open();
      }
    });
  </script>
</dom-module>
