<!DOCTYPE html>
<!--
Copyright 2016 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<!--
The 'overlay-message' displays an overlaid pop-up on top of the content.

By default 'overlay-message' will close whenever other elements are focused
as well as automatically disappear after 'duration'.

Example usage:

  <overlay-message id="message" opened="true">Draft saved.</overlay-message>

Or:

  var message = document.getElementById("message");
  message.updateContent("Draft saved.");

Position is default at the center of the screen.  Position can be changed
by overriding style attributes:

  overlay-message {
    top: 26px;
    left: 10px;
  }
-->

<link rel="import" href="/components/core-overlay/core-overlay.html">
<link rel="import" href="/components/paper-shadow/paper-shadow.html">

<polymer-element
    name="overlay-message"
    attributes="text autoCloseDisabled transition duration opened maxWidth
                delay">
  <template>
    <style>
      :host {
        border: 1px solid #f0c36d;
        background-color: #f9edbe;
      }

      #container {
        overflow: hidden;
        margin: 5px;
      }
    </style>


    <paper-shadow z="1" hasPosition></paper-shadow>

    <core-overlay id="overlay" target="{{}}" opened="{{opened}}"
        autoCloseDisabled="{{autoCloseDisabled}}"
        sizingTarget="{{$.container}}" transition="{{transition}}"></core-overlay>

    <div id="container" horizontal layout  max-width="{{maxWidth}}">
      <div class="message-content" flex id="content"></div>
      <div class="message-content">
        <content></content>
      </div>
    </div>

  </template>

  <script>
    'use strict';
    Polymer('overlay-message', {

      /**
       * Number of milliseconds to stay opened. 0 to stay open indefinitely.
       */
      duration: 6000,

      /**
       * Whether to close overlay if focus is taken somewhere else.
       */
      autoCloseDisabled: false,

      /**
       * Number of milliseconds to wait before opening.
       */
      delay: 0,

      ready: function() {
        this.defaultConfig = {
          'duration': this.duration,
          'autoCloseDisabled': this.autoCloseDisabled,
          'delay': this.delay
        };
      },

      /**
       * Update content and open 'overlay-message'.  If 'overlay-message' is
       * already opened, it will close then re-open.
       * @param {string} content String message to display.
       * @param {Object} config Dictionary of 'overlay-message' attributes to
       *    use for this message.
       */
      updateContent: function(content, config) {
        this.setConfig(config);
        this.$.content.innerHTML = content;
        if (this.delay > 0) {
          if (this.showJob) {
            this.showJob.stop();
          }
          this.showJob = this.job(this.showJob, this.show, this.delay);
        } else {
          this.show();
        }
      },

      setConfig: function(config) {
        config = config || this.defaultConfig;
        if ('duration' in config) {
          this.duration = config['duration'];
        }
        if ('autoCloseDisabled' in config) {
          this.autoCloseDisabled = config['autoCloseDisabled'];
        }
        if ('delay' in config) {
          this.delay = config['delay'];
        }
      },

      /**
       * Hide this overlay message.
       */
      hide: function() {
        if (this.showJob) {
          this.showJob.stop();
        }
        this.opened = false;
      },

      /**
       * Show this overlay message.
       */
      show: function() {
        if (this.hideJob) {
          this.hideJob.stop();
        }
        if (this.showJob) {
          this.showJob.stop();
        }
        if (this.duration > 0) {
          this.hideJob = this.job(this.hideJob, this.hide, this.duration);
        }
        this.opened = true;
      }
    });
  </script>
</polymer-element>
