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

upload-buddy

v1.2.0

Published

Upload Buddy makes it easy to integrate smart, interactive file uploads into any application.

Downloads

4

Readme

💚 Upload Buddy

npm

Upload Buddy is a lightweight JavaScript library that makes it easy to integrate smart, interactive file uploads into any form.

Here's what we have to offer:

  • 😊 User-friendly UI with browse and drag & drop support.
  • ☁ Lightweight: pure JavaScript, no extra dependencies.
  • 🔎 Inline image preview + crop tool integration.
  • 📄 Easy to integrate & supports showing pre-filled file values.

Preview

UbField idle, default style

UbField in action, default style

Installation

This library is available as a package on npm: upload-buddy.

To use Upload Buddy, include upbud.min.js on your page. We also recommend including our default stylesheet (default.css), unless you are planning on providing your own styles.

<script src="upload-buddy/dist/upbud.min.js"></script>
<link rel="stylesheet" href="upload-buddy/dist/default.css"/>

Configuration

You must provide your own <input type="file"/> field on the page. Upload Buddy will wrap that field and replace it with a friendly interface. To do so, simply call UbField.setup() with a query selector and any custom options:

UbField.setup('#the-file', {
  // Define upload target:
  target: "/my_upload_endpoint",

  // Set a built-in language (en, nl):
  lang: "nl",

  // Individual text overrides / translations:
  text: {
    "drop_file": "🔥 Drop it like it's hot 🔥"
  },

  // To show pre-filled file on the UI:
  file: {
    name: "prefilled-file-value.jpg",
    size: 79000,
    url: "https://live.staticflickr.com/4561/38054606355_26429c884f_b.jpg",
    type: "image/png",
    custom: "metadata"
  },
  
  // Optional callback functions:
  /**
   * Called when the user selects a file, right before the XHR request is sent.
   * 
   * @param {File} file Raw file object
   */
  onUploadStart: (file) => {
    console.log(`Upload started: ${file.name}`);
  },
  /**
   * Called when the upload progress changes.
   * 
   * @param {Number} progress Progress percentage
   */
  onUploadProgress: (progress) => {
    console.log(`Upload progress: ${progress.toFixed(2)}%`);
  },
  /**
   * Called when the upload is successful.
   * 
   * @param {?Object} response JSON response object from the server, if any
   */
  onUploadSuccess: (response) => {
      console.log("Upload successful!", response);
  },
  /**
   * Called when the upload fails for any reason.
   *
   * @param {?string} error Raw XHR response text, if any
   */
  onUploadError: (response) => {
      console.error("Upload failed!", response);
  }
});

Note: You can set the global default configuration for UbField by modifying the value of UbFieldConfig.defaults.

Integration

Events

ub-ready

This event is emitted on the document when the script has loaded. This may be useful if you are loading the script with async/defer.

Upload step

If the input renders without a pre-filled file object in the configuration, or once "Delete" is clicked on a previously selected file, the field will instead appear empty:

UbField blank, default style

The user can either drag and drop a file onto the control, or click it anywhere to manually select a file.

Ajax upload

When a file is selected by any means, a POST HTTP request will be sent to the configured target URL. The request will contain FormData, with the actual file data under the file key.

  • Your endpoint should respond with a 200 OK if the upload was successful.
    • You can include a JSON object in the response body. We'll use the url property from the object if you provide it, to determine the final URL of the file. Any other data is passed back to you when the form is submitted (useful for communicating things like an upload ID).
  • Any non-200 status code is seen as an error.
    • You may optionally include a plain-text error message in the response body that will be shown to the user.

Extras

Cropper.js

Integration with Cropper.js is supported. Simply include the library before activating Upload Buddy, and when an image is selected, a "Crop" button will appear (we will test if window.Cropper is defined).

Once the image has been cropped, it will be re-uploaded automatically, and the field's value will be updated accordingly.