<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>Vanadium Log Viewer</h4>
  <span class="name">vlog</span> displays Vanadium 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 Vanadium service directly, you need to pipe stderr or strout first using <span class="mono">2&gt;&amp;1</span></p>
  <pre class="code">myVanadiumServerd -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>
