Code Monkey home page Code Monkey logo

jquery.zeroclipboard's Introduction

Build Status

jquery.zeroclipboard

Bind to the beforecopy, copy, aftercopy, and copy-error events, custom DOM-like events for clipboard injection generated using jQuery's Special Events API and ZeroClipboard's Core module.

The beforecopy and copy events trigger when the user clicks on a bound element.

The aftercopy event triggers after the clipboard injection has been attempted, regardless of whether or not the injection succeeded.

The copy-error event triggers if any of the underlying ZeroClipboard error events occur.

The click event will also be bubbled after the aftercopy event handlers have all been triggered or stopped.

Prerequisites

ZeroClipboard requires the use of Flash Player 11.0.0 or higher. See ZeroClipboard for more details about the underlying mechanism.

This plugin's functionality is made possible by the smart default configuration values made in ZeroClipboard v2.x, plus internally overriding a few configuration options.

Getting Started

Check the jQuery Plugins Registry for the latest published version of this plugin!

You can also download the production version or the development version from GitHub. You will also need a ZeroClipboard v2.x SWF.

In your web page:

<script src="jquery.js"></script>
<script src="dist/jquery.zeroclipboard.min.js"></script>
<script>
  jQuery(document).ready(function($) {
    $("body")
      .on("copy", ".zclip", function(/* ClipboardEvent */ e) {
        e.clipboardData.clearData();
        e.clipboardData.setData("text/plain", $(this).data("zclip-text"));
        e.preventDefault();
      });
  });
</script>
<button class="zclip" data-zclip-text="Testing 1-2-3!">Click to copy!</button>

Options

There are a handful of options that can be configured to customize the use of this jQuery Special Event:

$.event.special.copy.options = {

  // The default action for the W3C Clipboard API spec (as it stands today) is to
  // copy the currently selected text [and specificially ignore any pending data]
  // unless `e.preventDefault();` is called.
  requirePreventDefault: true,

  // If HTML has been added to the pending data, this plugin can automatically
  // convert the HTML into RTF (RichText) for use in non-HTML-capable editors.
  autoConvertHtmlToRtf: true,

  // SWF inbound scripting policy: page domains that the SWF should trust.
  // (single string, or array of strings)
  trustedDomains: ZeroClipboard.config("trustedDomains"),

  // The CSS class name used to mimic the `:hover` pseudo-class
  hoverClass: "hover",

  // The CSS class name used to mimic the `:active` pseudo-class
  activeClass: "active"

};

Examples

Offers an API similar to the HTML5 Clipboard API. NOTE: Some of these examples will also be leveraging the jQuery.Range plugin where noted.

Example 1: Using beforecopy

The following example uses the beforecopy event to change the selected text before it is copied. The modified selection is what will be copied into the clipboard if the action is not prevented.

jQuery(document).ready(function($) {
  $("body").on("beforecopy", ".zclip", function() {
    // Select the text of this element; this will be copied by default
    $("#textToCopy").range().select();  // ** Using the jQuery.Range plugin
  });
});

Example 2: Using copy

The following example uses the copy event to set data into several different clipboard sectors.

jQuery(document).ready(function($) {
  $("body").on("copy", ".zclip", function(/* ClipboardEvent */ e) {
    // Get the currently selected text
    var textToCopy = $.Range.current().toString();  // ** Using the jQuery.Range plugin
    
    // If there isn't any currently selected text, just ignore this event
    if (!textToCopy) {
      return;
    }
    
    // Clear out any existing data in the pending clipboard transaction
    e.clipboardData.clearData();

    // Set your own data into the pending clipboard transaction
    e.clipboardData.setData("text/plain", textToCopy);
    e.clipboardData.setData("text/html", "<b>" + textToCopy + "</b>");
    e.clipboardData.setData("application/rtf", "{\\rtf1\\ansi\n{\\b " + textToCopy + "}}");
    
    // Prevent the default action of copying the currently selected text into the clipboard
    e.preventDefault();
  });
});

Example 3: Using aftercopy

This is the same as Example #1, except that it also uses the aftercopy event to "celebrate" and the copy-error event to watch for errors.

jQuery(document).ready(function($) {
  var eventsMap = {
    "beforecopy": function() {
      // Select the text of this element; this will be copied by default
      $("#textToCopy").range().select();  // ** Using the jQuery.Range plugin
    },
    "aftercopy": function(/* aftercopyEvent */ e) {
      // NOTE: The `aftercopyEvent` event interface is not based on any existing DOM event, so the event model
      // is still just a draft version. If you have any suggestions, please submit a new issue in this repo!
      if (e.status["text/plain"] === true) {
        alert("Copy succeeded. Yay! Text: " + e.data["text/plain"]);
      }
      else {
        alert("Copy failed... BOOOOOO!!!");
      }
    },
    "copy-error": function(errorEvent) {
      alert("ERROR! " + errorEvent);
    }
  };
  $("body").on(eventsMap, ".zclip");
});

file:// Protocol Limitations

If you want to host a page locally on the file:// protocol, you must specifically configure ZeroClipboard to trust ALL domains for SWF interaction via a wildcard. This configuration must be set before attaching any event handlers for the beforecopy, copy, aftercopy, or copy-error events:

$.event.special.copy.options.trustedDomains = ["*"];

This wildcard configuration should NOT be used in environments hosted over HTTP/HTTPS.

Compatibility

Works 100% with jQuery versions:

  • 1.7.x and above

Untested jQuery versions:

  • Anything below 1.7.x (incompatible jQuery Special Events API)

jquery.zeroclipboard's People

Contributors

jamesmgreene avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.