npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@lettercrap/web

v1.0.0

Published

Reincarnation of a JavaScript library that generates dynamic ASCII art on the web

Downloads

1

Readme

Lettercrap

Lettercrap is a JavaScript library that uses an image mask to generate dynamic ASCII art on the web. It looks like this:

Usage

To use the library in your project, include both lettercrap.min.js and lettercrap.min.css. The JS file exports some functions you can use to generate ASCII art. You can define the data holders (and subsequent rendering sections) in your HTML in one of two ways:

  1. Create a <div> with the data-lettercrap attribute and set the value to the source of a black-and-white image.

    <div data-lettercrap="example.png"></div>
  2. Create a <div> with the data-lettercrap-text attribute and set the value to the text you want to generate the ASCII art from.

    <div data-lettercrap-text="LETTERCRAP"></div>

For initializing elements on the page, you can use one of three functions:

  1. Initialize a single element by passing its Node to the initElement function of Lettercrap:

    <script type="module">
      import * as Lettercrap from './lettercrap.min.js';
      const element = document.getElementById('...');
      Lettercrap.initElement(element);
    </script>
  2. Initialize multiple elements by passing a NodeList to the initElements function of Lettercrap:

    <script type="module">
      import * as Lettercrap from './lettercrap.min.js';
      const elements = document.querySelectorAll('...');
      Lettercrap.initElements(elements);
    </script>
  3. Initialize all elements on the page by calling the init function of Lettercrap:

    <script type="module">
      import * as Lettercrap from './lettercrap.min.js';
      Lettercrap.init();
    </script>

For resetting initialized elements, you can use one of three functions:

  1. Reset a single element by passing its Node to the resetElement function of Lettercrap:

    <script type="module">
      import * as Lettercrap from './lettercrap.min.js';
      const element = document.getElementById('...');
      Lettercrap.resetElement(element);
    </script>
  2. Reset multiple elements by passing a NodeList to the resetElements function of Lettercrap:

    <script type="module">
      import * as Lettercrap from './lettercrap.min.js';
      const elements = document.querySelectorAll('...');
      Lettercrap.resetElements(elements);
    </script>
  3. Reset all elements on the page by calling the reset function of Lettercrap:

    <script type="module">
      import * as Lettercrap from './lettercrap.min.js';
      Lettercrap.reset();
    </script>

Although the library comes pre-configured with a set of default settings, we provide further means for customizing the output on a per-element basis:

  • By default, 0 and 1 are used to fill in the shape of your image or text. You can change the set of symbols used with the data-lettercrap-letters attribute:

    <div data-lettercrap="example.png" data-lettercrap-letters="ABC"></div>
  • To throw in the occasional full word into the mix, you can specify a space-delimited string of words to choose from using the data-lettercrap-words attribute:

    <div data-lettercrap="example.png" data-lettercrap-words="APPLE BANANA CHERRY"></div>
  • You can change the time interval in milliseconds between updates to the ASCII art with the data-lettercrap-update-interval attribute (default is 150):

    <div data-lettercrap="example.png" data-lettercrap-interval="200"></div>
  • When using data-lettercrap-text, you can set the font of the generated ASCII art with the data-lettercrap-font-family attribute (default is monospace):

    <div data-lettercrap-text="LETTERCRAP" data-lettercrap-font-family="times"></div>
  • When using data-lettercrap-text, you can set the font weight of the generated ASCII art with the data-lettercrap-font-weight attribute (default is normal):

    <div data-lettercrap-text="LETTERCRAP" data-lettercrap-font-weight="bold"></div>

You can also configure how the library behaves by using the exported configure function to overwrite the default options:

<script type="module">
  import * as Lettercrap from './lettercrap.min.js';
  Lettercrap.configure({ letters: 'AB' });
  Lettercrap.init();
</script>

The following table shows the correspondence between the global Config properties and the per-instance data equivalents:

| Global Config property | Per-instance data equivalent | | ------------------------ | ------------------------------ | | content | data-lettercrap | | letters | data-lettercrap-letters | | words | data-lettercrap-words | | font_family | data-lettercrap-font-family | | font_weight | data-lettercrap-font-weight | | update_interval | data-lettercrap-interval |

Please note that changes to default options will not propagate to instances that have already been rendered. To synchronize the rendered instances that rely on default settings, you can call the refresh function:

<script type="module">
  import * as Lettercrap from './lettercrap.min.js';
  Lettercrap.init().then(async () => {
    Lettercrap.configure({ letters: 'AB' });
    Lettercrap.refresh();
  });
</script>

Check out the example to see how this all fits together.

Development

To get the example working locally, you can run:

npm run dev

This will start a local HTTP server on port 8080.