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

@mcrowe/rush

v0.2.3

Published

Simple and fast front-end framework for prototyping or learning.

Downloads

28

Readme

Rush

Rush is a front-end JavaScript framework for building apps quickly. It is optimized for development speed and ease of learning.

Getting Started

Install Rush using the following command in your terminal:

npm install -g @mcrowe/rush

Now you can create a new app called "my-app" like this:

rush new my-app

This creates a new directory, change into that directory and run your new app:

cd my-app rush start

Finally, follow the instructions output by the server to open the app in your browser.

The best way to get started is to open the generated application directory in your code editor and see what is there, and play around to see what you can do.

The Basics

A Rush application has the following components:

  • app.js: A JavaScript file that contains the main logic of your application.
  • pages/: A directory containing .ejs templates for each page. See ejs.co for more details on .ejs
  • styles/: A directory containing css styles. You can add any number of stylesheet files. They will be concatenated together.

Concepts

Showing pages

Show a page or refresh the current page using the show function.

// Show page a.ejs
show('a')

// Show page b.ejs with params equal to {value: 5}
show('b', {value: 5})

// Refresh the current page
show()

Handling events

Handle an event on any element using the on function.

on('click', '.fire-missiles', event => {
  // Do something when an element with class "fire-missiles"
  // is clicked
})

Parameters to the on function:

  1. event: The name of the event to handle (e.g. 'click', 'change', 'keydown', ...).
  2. selector: A CSS selector specifying what element(s) to handle this event on (learn more about CSS selectors).
  3. handler: A function to run when this event occurs.

The event object

Event handlers are passed an event object, which has data describing the event. This data depends on the type of event.

  • target: The target element.
  • data: An object of data added to the target element.
  • nativeEvent: The native JavaScript event created by the browser.
  • x / y: [For mouse events only] The position of the mouse when the event happened.
  • value: [For the "change" event only] The current value of the input element.

State

The state object is how a Rush application maintains state between pages. You can set and update properties in app.js, and access them in your pages. Note that the view does not automatically update when you change the state. You need to explicitly show a page using show to see the changes.

For example, here is a simple application that has a counter you can increase and decrease with buttons:

pages/home.ejs

<h1><%= state.counter %></h1>
<button class="down">-</button>
<button class="up">+</button>

app.js

state.counter = 0

on('click', '.up', () => {
  state.counter += 1
  show()
})

on('click', '.down', () => {
  state.counter -= 1
  show()
})

Params

You can pass an object of params to a page when you show it. This object is then available to the page using the params variable.

For example:

app.js

show('home', {first: 'Mitch', last: 'Crowe'})

pages/home.ejs

<p>Created by <%= params.first %> <%= params.last %>!</p>

Helpers

Helpers give you a way to define helper functions you can use in your pages.

For example:

app.js

helper('formatPercent', x => {
  return Math.floor(x * 100) + '%'
})

pages/home.ejs

<p><%= formatPercent(0.53) %></p>

Event Data

You can provide extra context data to an event by adding data attributes to an element. These values will be available as the data property on the event object.

For example:

pages/home.ejs

<div class="item" data-id="42">Item 42</div>

app.js

on('click', '.item', event => {
  console.log("You clicked item", event.data.id)
})

Note that html attribute values are always strings, and so the data values are strings. Use JavaScript's parseInt or parseFloat to explicity convert to numbers if that's what you want.

Views

Views provide a way to share HTML template code between pages. They have not been implemented yet.

Getting information about the current route

The current page and params can be accessed via the currentRoute variable:

show('things', {id: 5})

currentRoute.pageName // => 'things'
currentRoute.params.id // => 5

Saving State

You can save the state at any time by calling saveState(). To load a saved state, use the following pattern:

// Call loadState(). It returns true if there was a saved state (and loads it),
// and false otherwise.
if (!loadState()) {
  // Initialize the state here, e.g.
  state.counter = 5
  // ...
}

Releasing

Build your Rush app by running the command rush build. This will create a dist/ directory containing your app, ready to be deployed onto a server. I would recommend using surge to host your app. It is free and extremely easy. Once you install surge, you can deploy the dist/ directory by running surge dist.

TODO

  • Images
  • Babel
  • Shared views

Development

Install npm modules:

npm install

Release a new version:

bin/release.sh

This will publish a new version to npm, as well as push a new tag up to github.