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

@codelenny/blade-interpolated-coffee

v0.1.0

Published

A Blade filter that allows interpolation inside CoffeeScript snippets.

Downloads

7

Readme

Interpolated CoffeeScript Filter for Blade

npm (scoped) Build Status

Why have one layer of variable insertion, when you could have twice the complexity?

The regular :coffeescript filter for Blade keeps #{} as the standard CoffeeScript interpolation, but doesn't let you use Blade variables in CoffeeScript snippets. blade-interpolated-coffee allows you to use ${} (or another symbol) to insert Blade variables into the block code.

- var url = "/";
:interpolatedcoffee
  i = 0
  console.log "i for '${url}' is #{i}"

Could produce the following HTML:

<script type="text/javascript">
  var i = 0;
  console.log("i for '/' is "+i);
</script>

Installation

npm install @codelenny/blade-interpolated-coffee
interpolatedCoffeeScript = require "@codelenny/blade-interpolated-coffee"
blade = require "blade"

blade.compile src,
    filters:
      interpolatedcoffee: interpolatedCoffeeScript
  , (err, html) -> # ...

Customization

Raw Filter

Don't want to have <script type="text/javascript"> automatically inserted? A raw mode is built in to the filter.

interpolatedCoffeeScript = require "@codelenny/blade-interpolated-coffee"

opts =
  filters:
    "$cs": interpolatedCoffeeScript
    "$cs.raw": interpolatedCoffeeScript.raw
script#main(data-i="0")
  :$cs.raw
    # ...

Change ${}

blade-interpolated-coffee ships with ${} as the default interpolation marker. However, you can use another marker:

interpolatedCoffeeScript = require "@codelenny/blade-interpolated-coffee"
myFilter = interpolatedCoffeeScript.custom /@\{/g
opts =
  filters:
    "$cs": myFilter
    "$cs.raw": myFilter.raw

custom takes two arguments: needle and haystack.

When blade-interpolated-coffee is given the contents of the text block, it passes the block to CoffeeScript (which interpolates uses of #{} with variables in the runtime scope).

Then all instances of needle are replaced with haystack, and the resulting string is passed to Blade. Blade will interpolate all inserted cases of #{} with variables in Blade's scope.

The marker could easily be changed by searching for /@\{/g as the needle, or more complex patterns can be created using both the needle and haystack, such as making sure that only single variables are interpolated.

complexFilter = interpolatedCoffeeScript.custom /\$\{([a-zA-Z_\s]+)\}/g, "\#{$1}"