<!-- The <purge-sk> custom element declaration.

  A custom element that allows to clear or purge individual digests.

  For example:

      <purge-sk digest="[[digest]]></purge-sk>

  Will display a element that can be opened to show two buttons, one to clear
  the digest from server side caches and the other to purge the digest from GS.

    Attributes:
      digest  - The digest to be purged.

    Events:
      None

    Methods:
      None
  -->
<link rel="import" href="/res/imp/bower_components/iron-icons/iron-icons.html">
<link rel="import" href="/res/imp/bower_components/paper-button/paper-button.html">
<link rel="import" href="/res/imp/bower_components/iron-flex-layout/iron-flex-layout.html">

<link rel="import" href="activity-sk.html">

<dom-module id="purge-sk">
  <template>
    <style>
      .openCloseIcon {
        padding-left: 0;
        padding-right: 0;
        color:#aaaaaa;
      }
    </style>
    <div class="layout horizontal">
        <div hidden$="[[_open]]">
          <paper-button class="openCloseIcon" on-tap="_toggleOpen">
            <iron-icon icon="icons:add-circle-outline"> </iron-icon>
          </paper-button>
        </div>
        <div hidden$="[[!_open]]">
          <paper-button class="openCloseIcon" on-tap="_toggleOpen">
            <iron-icon icon="icons:clear"> </iron-icon>
          </paper-button>
          <paper-button on-tap="_handleClear" id="clearButton" raised="">
            Clear
          </paper-button>
          <paper-button on-tap="_handlePurge" id="purgeButton" raised="">
            Purge
          </paper-button>
        </div>
        <activity-sk id="activityPurge"></activity-sk>
    </div>
  </template>
  <script>
    Polymer({
      is: 'purge-sk',

      properties: {
        digest: {
          type: String,
          value: "",
          notify: true
        },
        _open: {
          type: Boolean,
          value: false,
        }
      },

      _toggleOpen: function() {
        this._open = !this._open;
      },

      _handleClear: function() {
        this._clearPurge(this.digest, false);
      },

      _handlePurge: function() {
        this._clearPurge(this.digest, true);
      },

      _clearPurge: function(digest, purge) {
        var url = '/json/cleardigests' + ((purge) ? '?purge=true':'');
        this.$.activityPurge.startSpinner("Clearing/purging ...");
        sk.post(url, JSON.stringify([digest])).then(JSON.parse).then(function(json){
          this.$.activityPurge.stopSpinner();
          this.set("_open", false);
        }.bind(this)).catch(function(err) {
          this.$.activityPurge.stopSpinner();
          this.set("_open", false);
          sk.errorMessage(err);
        }.bind(this));
      }
    });
  </script>
</dom-module>

