<link rel="import" href="../../third-party/polymer/polymer.html">

<polymer-element name="p2b-help">
<template>
  <link rel="stylesheet" href="component.css">
  <link rel="stylesheet" href="../common/common.css">
  <h2 page-title>Help</h2>
  <p>Pipe To Browser allows you to pipe anything from shell console to the browser. Piped data is then displayed in a graphical and formatted way by a viewer you can specify.</p>
  <h3>Getting Started</h3>
  <template if="{{serviceState.published}}">
    <p>Looks like you have already started the service under <span class="name">{{publishedName}}</span>, great!</p>
  </template>
  <template if="{{!serviceState.published}}">
    <p>Before we start, you need to start the service under a name. Go to Home and publish this instance of P2B under a name like <span class="name">john-tablet</span> or <span class="name">jane-desktop</span>
    </p>
  </template>
  <p>Now let's use the <span class="name">console</span> viewer. It can pretty much display anything, so it's a good one to start with</p>
  <p>In your Linux or Mac console run:</p>
  <pre class="code">echo "Hello World" | p2b {{publishedName}}/console</pre>
  <p>P2B follows a basic <span class="mono">cmd | p2b users/jane@google.com/chrome/p2b/[name]/[viewer]</span> pattern. Where <span class="mono">[name]</span> is what you publish the service under and <span class="mono">[viewer]</span> can be the name of a built-in viewer like <span class="mono">image</span> or <span class="mono">console</span> or a Url to a remote viewer that is a P2B plug-in.</p>
  <h3>Built-in Viewers</h3>
  <p>In addition to the basic <span class="name">console</span> viewer, P2B is preloaded with the following viewers</p>

  <h4>Image</h4>
  <p><span class="name">image</span> can display most types of images.</p>
  <pre class="code">cat grumpy-cat.jpg | p2b {{publishedName}}/image</pre>

  <h4>Git Status</h4>
  <p>Ever wanted to sort, search and filter result of <span class="mono">git status</span> to make sense of it all? <span class="name">git/status</span> can do that. You need to use <span class="mono">git status --short</span> though, so we can parse it.</p>
  <pre class="code">git status --short | p2b {{publishedName}}/git/status</pre>

  <h4>Veyron Log Viewer</h4>
  <span class="name">vlog</span> displays Veyron logs in a DataGrid and supports sorting, searching, paging, pausing and filtering based on time and log level. DataGrid is responsive and may hide columns on smaller screens but you can always see all the fields by using the more info icon.</p>
  <pre class="code">cat vlogfile.txt | p2b {{publishedName}}/vlog</pre>
  <p>If you want to pipe logs from a Veyron service directly, you need to pipe stderr or strout first using <span class="mono">2&gt;&amp;1</span></p>
  <pre class="code">myVeyronServerd -v=3 2&gt;&amp;1 | p2b {{publishedName}}/vlog</pre>

  <h4>Panic Console</h4>
  <span class="name">console/panic</span> renders plaintext as <span class="name">console</span> until it detects a Go panic. Go panics crash every running goroutine, leading to a spew of stderr logs. This plugin groups goroutine crash logs into show/hide blocks. The plugin stops scrolling at the first goroutine block, which caused the panic. To further assist the debugging process, lines can be highlighted by keyword using an input filter. Don't forget to pipe both stdout and stderr to this plugin!
  <pre class="code">./goProgram 2>&1 | p2b {{publishedName}}/console/panic</pre>

  <h4>dev/null</h4>
  <p>No system is complete without a <span class="name">dev/null</span>. Similar to *nix <span class="mono">dev/null</span>, anything piped to it will be discarded without mercy.</p>
  <pre class="code">cat /dev/urandom | p2b {{publishedName}}/dev/null</pre>

  <h3>Remote Viewers</h3>
  <p>In addition to built-in viewers, ad-hoc remote viewers can be hosted anywhere and used with P2B. Remote viewers are referenced by the Url of the plug-in JavaScript file</p>
  <pre class="code">echo "Hello World" | p2b {{publishedName}}/http://googledrive.com/host/0BzmT5cnKdCAKa3hzNEVCU2tnd3c/helloworld.js</pre>
  <p>Writing remote viewers is not different than writing built-in ones and basic plug-ins are pretty straight forward to write.</p>
  <p>At high level, plug-ins are expected to implement a <span class="mono">PipeViewer</span> interface which has a <span class="mono">play(stream)</span> method. A <span class="mono">view</span> (which is a wrapper for a DOM element) is expected to be returned from <span class="mono">play(stream)</span>. You can look at the hello world remote plug-in <a href="http://googledrive.com/host/0BzmT5cnKdCAKa3hzNEVCU2tnd3c/helloworld.js" target="_blank">code on Google drive</a> to get started on writing new remote plug-ins</p>
  <p>It is also possible to write the UI layer of your plug-in in HTML and CSS as a Web Component to avoid mixing logic and layout/styling in a single file.</p>
  <p>Grumpy cat meme plug-in takes that approach. You can look at the <a href="http://googledrive.com/host/0BzmT5cnKdCAKV1p6Q0pjak5Kams/meme.js" target="_blank">JavaScript</a> and <a onClick="window.open('view-source:' + 'http://googledrive.com/host/0BzmT5cnKdCAKV1p6Q0pjak5Kams/meme.html');">HTML Web Component</a> source files.</p>
  <pre class="code">echo "I take stuff from stdin, and send them to /dev/null" | p2b {{publishedName}}/http://googledrive.com/host/0BzmT5cnKdCAKV1p6Q0pjak5Kams/meme.js</pre>
</template>
<script>
  Polymer('p2b-help', {
      /*
       * Dynamic binding for the state of publishing p2b service.
       */
       serviceState: null,
       get publishedName() {
        if( this.serviceState && this.serviceState.published ) {
          return this.serviceState.fullServiceName
        } else {
          return 'users/jane@google.com/chrome/p2b/[name]';
        }
      },

    });
  </script>
</polymer-element>
