<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's JavaScript file. Url must be Url encoded when passed as the plugin name.</p>
  <pre class="code">echo "Hello World" | p2b {{publishedName}}/http%3A%2F%2Fgoogledrive.com%2Fhost%2F0BzmT5cnKdCAKa3hzNEVCU2tnd3c%2Fhelloworld.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%3A%2F%2Fgoogledrive.com%2Fhost%2F0BzmT5cnKdCAKV1p6Q0pjak5Kams%2Fmeme.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>
