terminal-preview: Render ANSI formatting characters as HTML

Recommend this page to a friend!
     
  Info   Example   View files Files   Download Download   Reputation   Support forum   Blog    
Ratings Unique User Downloads Download Rankings
Not enough user ratingsTotal: 46 All time: 506 This week: 3Up
Version License JavaScript version Categories
terminal-preview 1.0GNU General Publi...5HTML, jQuery
Description 

Author

This package can render ANSI formatting characters as HTML.

It can parse the character sequences and generate HTML to render those characters as regular HTML documents.

Innovation Award
JavaScript Programming Innovation award winner
July 2017
Winner


Prize: One downloadable e-book of choice by O'Reilly
ANSI is a standard that defines how to format text to be rendered in a text console.

This package can parse ANSI formatted text and convert it to text with HTML tags that render the same way the original ANSI formatted text sequences were intended.

Manuel Lemos
Picture of Dom Hastings
  Performance   Level  
Name: Dom Hastings <contact>
Classes: 4 packages by
Country: United Kingdom
Age: 41
All time rank: 993 in United Kingdom
Week rank: 6 Up1 in United Kingdom Up
Innovation award
Innovation award
Nominee: 3x

Winner: 2x

Example

<!DOCTYPE html> <html> <head> <title>terminal-preview</title> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/> <style type="text/css"> h1 .version { opacity: 0; font-size: 0.8em; font-family: monospace; letter-spacing: -5px; transition: .25s opacity linear; } h1:hover .version { opacity: .3; } </style> </head> <body> <a href="https://github.com/dom111/terminal-preview" class="github-corner" aria-label="View source on Github"><svg width="80" height="80" viewBox="0 0 250 250" style="fill:#C7254E; color:#F9F2F4; position: fixed; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style> <div class="jumbotron"> <div class="container"> <h1><code>terminal-preview</code> <span class="version" title="Last updated: 2017-04-10">v0.1</span></h1> <p>A preview element for a terminal emulator. Supports translating ANSI escape codes into how they will look in a terminal that supports them.</p> </div> </div> <div class="container"> <section class="panel panel-primary"> <div class="panel-heading panel-heading-lg"> <h2 class="panel-title panel-title-lg">What is it?</h2> </div> <div class="panel-body"> <p><code>terminal-preview</code> is a collection of JavaScript and CSS that will enable parsing and styling of terminal ANSI escape codes for simple preview. It's been developed as a result of my experimenting with <a href="https://dom.hastin.gs/blog/coding/dissecting-your-bash-prompt/508"><code>bash-ps1</code></a> and <a href="https://dom.hastin.gs/blog/coding/convert-an-image-to-ansi-escape-codes/505"><code>image-to-ansi</code></a>.</p> <p>I'd wanted to extract the code I used in the those projects into a stand-alone project/component that could be added to an existing page where ANSI escape sequences need to be interpreted. I've toyed with the idea of making it a Web Component or something like that but haven't just yet.</p> <p>It utilises jQuery to select the elements, bind the events and for some utility methods.</p> </div> </section> <section class="panel panel-primary"> <div class="panel-heading panel-heading-lg"> <h2 class="panel-title panel-title-lg">Examples</h2> </div> <div class="panel-body"> <p>You could have a <code>pre</code> element with a selection of contents:</p> <pre class="terminal">\e[35m./terminal.css\e[m\e[36m-\e[m.terminal::-webkit-scrollbar-thumb { background: #999; border-radius: 1ex; } \e[35m./terminal.css\e[m\e[36m-\e[m \e[35m./terminal.css\e[m\e[36m:\e[m.terminal .\e[01;31mcursor\e[m:after { content: ''; } \e[35m./terminal.css\e[m\e[36m:\e[m.terminal.blink-\e[01;31mcursor\e[m .\e[01;31mcursor\e[m:after { animation: blink 1s linear infinite; } \e[35m./terminal.css\e[m\e[36m:\e[m.terminal.\e[01;31mcursor\e[m-pipe .\e[01;31mcursor\e[m:after { content: '|'; } \e[35m./terminal.css\e[m\e[36m:\e[m.terminal.\e[01;31mcursor\e[m-underscore .\e[01;31mcursor\e[m:after { content: '_'; } \e[35m./terminal.css\e[m\e[36m:\e[m.terminal.\e[01;31mcursor\e[m-block .\e[01;31mcursor\e[m:after { content: '\02588'; } \e[35m./terminal.css\e[m\e[36m-\e[m \e[35m./terminal.css\e[m\e[36m-\e[m.terminal .dim .fg-90, \e[36m--\e[m \e[35m./terminal.css\e[m\e[36m-\e[m.terminal-wrap .copy { display: none; position: absolute; right: 2px; top: 2px; } \e[35m./terminal.css\e[m\e[36m-\e[m.terminal-wrap:hover .copy { display: block; } \e[35m./terminal.css\e[m\e[36m:\e[m.terminal-wrap:hover .\e[01;31mcursor\e[m, \e[35m./terminal.css\e[m\e[36m:\e[m.terminal:focus .\e[01;31mcursor\e[m { display: none; }</pre> <p>You could also <code class="terminal">\e[5mpreview\e[0m items as an \e[31;4minline element\e[0m</code>. There are also classes that can change the style to a light terminal <code class="terminal light">\e[32mlike this</code>, or add in a cursor <code class="terminal blink-cursor cursor-pipe">like this</code> or <code class="terminal cursor-block">this</code>.</p> <p>I've used the component as an input where content is evaluated as your type. Try changing the <code>31</code> to <code>34</code> and you can see the element changing style as you type:</p> <pre class="terminal" contenteditable="true">\e[31mRed\e[m and \e[32mgreen\e[m and \e[33myellow\e[m!</pre> <p>By default the control characters aren't shown, until hovered or when the element has focus. Likewise any non-existent items (like the cursor or interpreted control codes) will be hidden.</p> </div> </section> <section class="panel panel-primary"> <div class="panel-heading panel-heading-lg"> <h2 class="panel-title panel-title-lg">Where to get it?</h2> </div> <div class="panel-body"> <p>There's a <a href="https://github.com/dom111/terminal-preview" target="_blank">github repository</a> that you can use and <a href="https://dom.hastin.gs/blog/coding/terminal-preview/541" target="_blank">a blog post about it</a>. You're free to use this, but if you make something cool I'd love to see it!</p> <p>Utilising rawgit, it's possible to add the following code to your page and automatically process elements with a class of <code>terminal</code>:</p> <pre>!function(){var e=document.getElementsByTagName(&quot;head&quot;)[0],t=function(t,n){var i=document.createElement(&quot;script&quot;);i.src=t,i.type=&quot;text/javascript&quot;,n&amp;&amp;(i.onload=n),e.appendChild(i)},n=function(t){var n=document.createElement(&quot;link&quot;);n.href=t,n.rel=&quot;stylesheet&quot;,e.appendChild(n)},i=function(){t(&quot;https://cdn.rawgit.com/dom111/terminal-preview/master/dist/parse-min.js&quot;,function(){n(&quot;https://cdn.rawgit.com/dom111/terminal-preview/master/dist/terminal-min.css&quot;),t(&quot;https://cdn.rawgit.com/dom111/terminal-preview/master/dist/terminal-min.js&quot;)})};&quot;jQuery&quot;in window?i():t(&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js&quot;,i)}();</pre> </div> </section> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script type="text/javascript"> !function(){var e=document.getElementsByTagName("head")[0],t=function(t,n){var i=document.createElement("script");i.src=t,i.type="text/javascript",n&&(i.onload=n),e.appendChild(i)},n=function(t){var n=document.createElement("link");n.href=t,n.rel="stylesheet",e.appendChild(n)},i=function(){t("https://cdn.rawgit.com/dom111/terminal-preview/master/dist/parse-min.js",function(){n("https://cdn.rawgit.com/dom111/terminal-preview/master/dist/terminal-min.css"),t("https://cdn.rawgit.com/dom111/terminal-preview/master/dist/terminal-min.js")})};"jQuery"in window?i():t("https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js",i)}(); </script> </body> </html>

Details

terminal-preview

A HTML component that renders ANSI escape sequences for styling as-if they were HTML.

Live example


  Files folder image Files (11)  
File Role Description
Files folder imagedist (3 files)
Files folder imageexample (3 files)
Files folder imagesrc (3 files)
Accessible without login Plain text file index.html Example Example
Accessible without login Plain text file README.md Data README

  Files folder image Files (11)  /  dist  
File Role Description
  Accessible without login Plain text file parse-min.js Aux. Auxiliary script
  Accessible without login Plain text file terminal-min.css Data Auxiliary data
  Accessible without login Plain text file terminal-min.js Class Class source

  Files folder image Files (11)  /  example  
File Role Description
  Accessible without login Plain text file bookmarklet-min.js Aux. Auxiliary script
  Accessible without login Plain text file bookmarklet.js Aux. Auxiliary script
  Accessible without login Plain text file index.html Example Documentation

  Files folder image Files (11)  /  src  
File Role Description
  Accessible without login Plain text file parse.js Class Class source
  Accessible without login Plain text file terminal.css Data Auxiliary data
  Accessible without login Plain text file terminal.js Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:46
This week:0
All time:506
This week:3Up
User Comments (1)
This is a very good class ;-) I love terminal / shell, and th...
7 years ago (José Filipe Lopes Santos)
70%StarStarStarStar