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

incremental-search

v1.0.0

Published

A small jQuery-dependent module that searches an array of objects and adds links to a list as the user types.

Downloads

5

Readme

jQuery Incremental Search

A small jQuery-dependent module that searches an array of objects and adds links to a list as the user types.

Required Configuration

The text input element must be within a form, and must be the only input element in that form.

The list element must be of type ul or ol.

Usage

Install via npm and require module:

npm install incremental-search
var incrementalSearch = require("incremental-search");

Link to on page:

<script src="/path/to/incremental-search.min.js">

Or just add contents of build/incremental-search.min.js to page.

Initialize with required and optional arguments:

incrementalSearch({
    // REQUIRED
    data: [
        // each object must have string properties 'title' and 'link'
        {title: "A Title of a Page", url: "/path/to/page"},
        {title: "Another", url: "/an/other"}
    ],
    searchableProps: ["title"], // properties of data objects to search
    form: "#search-form", // selector for form element
    list: "#search-list", // selector for list element


    // OPTIONAL
    highlightColor: "#006cff", // color to highlight matched words in title
    linkClass: "class-to-give-the-anchor-elements",
    onNoMatches: function (words) {
        // called when there are no input matches
        // words is array of strings from user input
    },
    afterAppend: function (words, matches) {
        // called after results are appended to list
        // words is array of string from user input
        // matches is array of objects that matched query
    },
    mapping: { // more about this below
        added_tags: {
            to: "tags"
            split: ", ",
            removeStopWords: false
        }
    }
});

When matches are found, each match is appended to the list in the following format:

<li>
    <a href="/path/to/page" class="class-to-give-the-anchor-elements">
        A Title of a Page
    </a>
</li>

All matches are removed before each new search (before each input 'keyup' event).

Mapping

Use the 'mapping' argument to tell the module how to configure certain properties of the objects in the data array:

added_tags: { // original name of property
    to: "tags", // new name of property
    split: ", ", // how to turn the property into an array (defaults to any amount of whitespace)
    removeStopWords: false // whether or not to remove common words (defaults to true)
}

Notes

  • Removing Stop Words: You must pass in your own module to remove stop words. Pass it into the module like so, before calling the function:
incrementalSearch.stopwordsModule(stopwordsModule);

It must be a function that takes a string and returns a new string.

  • Removing HTML and punctuation: All searchable properties will be cleared of HTML and punctuation marks.