| <link rel="import" href="../../third-party/polymer/polymer.html"> |
| <link rel="import" href="../../third-party/paper-button/paper-button.html"> |
| |
| <polymer-element name="p2b-status" attributes="status"> |
| |
| <template> |
| <link rel="stylesheet" href="../common/common.css"> |
| <link rel="stylesheet" href="component.css"> |
| <h3>Status</h3> |
| <p>{{ serviceState | formatServiceState }}</p> |
| <div class="{{ {hidden : !serviceState.published} | tokenList }}"> |
| <h3>Name</h3> |
| <p>{{ serviceState.fullServiceName }}</p> |
| |
| <h3>Published on</h3> |
| <p>{{ serviceState.date | formatDate }}</p> |
| |
| <h3>Running Since</h3> |
| <p>{{ runningSince }}</p> |
| |
| <h3>Number of pipe requests</h3> |
| <p>{{ serviceState.numPipes | formatInteger }}</p> |
| |
| <h3>Total bytes received</h3> |
| <p>{{ serviceState.numBytes | formatBytes }}</p> |
| </div> |
| <paper-button class="paper colored red" inkColor="#A9352C" on-click="{{ stopAction }}">Stop</paper-button> |
| </template> |
| <script> |
| System.import('libs/utils/formatting').then(function(formatter) { |
| Polymer('p2b-status', { |
| |
| ready: function() { |
| this.runningSince = 'just now'; |
| }, |
| |
| attached: function() { |
| // Update the running since every second. |
| this.runningSinceIntervalId = setInterval(this.updateRunningSince.bind(this), 1000); |
| }, |
| |
| detached: function() { |
| clearInterval(this.runningSinceIntervalId); |
| }, |
| |
| /* |
| * Dynamic binding for the state of publishing p2b service. |
| * Any changes to this object will be reflected in the UI automatically |
| */ |
| serviceState: null, |
| |
| /* |
| * Human friendly formatting functions. Because polymer filter expressions |
| * don't accept obj.func we wrap them here |
| * @private |
| */ |
| formatDate: formatter.formatDate, |
| formatInteger: formatter.formatInteger, |
| formatBytes: formatter.formatBytes, |
| |
| /* |
| * Auto-updating Uptime text |
| * @private |
| * @type {string} |
| */ |
| updateRunningSince: function() { |
| if (!this.serviceState) { return; } |
| this.runningSince = formatter.formatRelativeTime(this.serviceState.date); |
| }, |
| |
| /* |
| * Status text |
| * @private |
| * @type {string} |
| */ |
| formatServiceState: function(serviceState) { |
| if (!serviceState) { |
| return ''; |
| } |
| if (serviceState.published) { |
| return 'Published'; |
| } else if(serviceState.publishing) { |
| return 'Publishing'; |
| } else if(serviceState.stopping) { |
| return 'Stopping'; |
| } else { |
| return 'Stopped'; |
| } |
| }, |
| |
| /* |
| * Stop action. Fires when user decides to stop the p2b service. |
| * @event |
| */ |
| stopAction: function() { |
| this.fire('stop'); |
| } |
| |
| }); |
| }); |
| </script> |
| </polymer-element> |