Skip to content

Instantly share code, notes, and snippets.

@addyosmani
Forked from NV/Readme.md
Created May 6, 2013 20:55
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save addyosmani/5528124 to your computer and use it in GitHub Desktop.
Save addyosmani/5528124 to your computer and use it in GitHub Desktop.
stopBefore.js

stopBefore.js

2min screencast

Examples

stopBefore(document, 'getElementById')
stopBefore('document.getElementById') // the same as the previous
stopBefore(Element.prototype, 'removeChild')

stopAfter(Element.prototype, 'querySelectorAll')

Element.prototype.querySelectorAll.removeBreakpoint()
(function() {
window.stopBefore = function stopBefore(object, methodName) {
// stopBefore('Element.prototype.removeChild')
if (typeof methodName == 'undefined' && typeof object == 'string') {
var temp = resolvePath(object);
object = temp.object;
methodName = temp.methodName;
}
var originalMethod = object[methodName];
object[methodName] = function patched() {
debugger;
var result = originalMethod.apply(this, arguments);
return result;
};
object[methodName].removeBreakpoint = function() {
object[methodName] = originalMethod;
};
object[methodName].__original = originalMethod;
};
window.stopAfter = function stopAfter(object, methodName) {
// stopAfter('jQuery.fn.html')
if (typeof methodName == 'undefined') {
var temp = resolvePath(object);
object = temp.object;
methodName = temp.methodName;
}
var originalMethod = object[methodName];
object[methodName] = function patched() {
var result = originalMethod.apply(this, arguments);
debugger;
return result;
};
object[methodName].removeBreakpoint = function() {
object[methodName] = originalMethod;
};
object[methodName].__original = originalMethod;
};
function resolvePath(path) {
var object = this;
var parts = path.split('.');
for (var i = 0, ii = parts.length - 1; i < ii; i++) {
object = object[parts[i]];
}
return {
object: object,
methodName: parts[ii]
}
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment