call-capture

0.2.1 • Public • Published

capture

Wrap around an object and capture sets on its properties and calls on its methods.

usage

node

const capture = require("call-capture");

browser

<html>
<head>
    <meta charset="UTF-8">
    <script src="src/capture.js"></script> 
</head>
<body>
<script>
// capture is in the global scope
</script> 
</body>
</html>

deferring

// assume we have a canvas on a webpage
var ctx = capture(canvas.getContext("2d"));
 
// call and set on the capture object, will not execute immediately
ctx.beginPath();
ctx.lineWidth = 5;
ctx.moveTo(5, 10);
ctx.lineTo(70, 60);
ctx.stroke();
 
// examine queued commands
console.log(ctx.queue[1]);
 
// modify queued command arguments
ctx.queue[1].args[1] += 10; // now becomes ctx.moveTo(5, 20)
 
// execute all queued commands
ctx.executeAll();
 
// execute a specific one in the queue
ctx.queue[3].execute();
 
// clear queued commands (won't clear automatically after executing)
ctx.clearQueue();

indirect wrapping

If you don't have access to object creation (for example if it's done in a library), then you can patch its creation function.

// wrap around with canvas drawing
var oldGetContext = HTMLCanvasElement.prototype.getContext;
HTMLCanvasElement.prototype.getContext = function () {
    return capture(oldGetContext.apply(this, arguments));
};

It's not recommended to try wrapping the CanvasRenderingContext2D's prototype directly because it contains native calls.

immediate execution

If you don't actually to defer anything, but instead capture them, then that is available via the immediatelyExecute option:

var ctx = capture(canvas.getContext("2d"), {immediatelyExecute: true});

This and other options can be configured by directly modifying the captured object:

ctx.opts.executeImmediately = false;

pause/start capturing

You can suspend capture and execute commands immediately by calling

ctx.pauseCapture();
// immediately executed commands on ctx...
ctx.resumeCapture();

Readme

Keywords

Package Sidebar

Install

npm i call-capture

Weekly Downloads

0

Version

0.2.1

License

MIT

Unpacked Size

7.82 kB

Total Files

5

Last publish

Collaborators

  • johnsonzhong