Skip to content

Instantly share code, notes, and snippets.

View bryanforbes's full-sized avatar

Bryan Forbes bryanforbes

View GitHub Profile
@bryanforbes
bryanforbes / gist:663298
Created November 4, 2010 22:06
This is an attempt to explain what is happening behind the scenes with event handlers in ES3 and why IE leaks in one case and not another.
// Global Object
// (§10.2.1)
// GO.scope_chain = [GO]
// GO._cache = _cache
var _cache = {};
// Declaration (§13.2):
// CWanonfunc.[[Scope]] = GO.scope_chain.slice(0) (§13.2 step 7)
@bryanforbes
bryanforbes / dispatcher.js
Created December 15, 2010 19:21
A simple event disptacher to prevent leaks
var eventData = {};
(function(global){
function createDispatcher(id){
function dispatcher(){
if(id in _evtData){
_evtData[id].handler.apply(this, arguments);
}
}
return dispatcher;
var guid = (function(){
function hasUniqueNumber(){
var docEl = document.documentElement, elem = document.createElement("div");
return (typeof elem.uniqueNumber == "number" && typeof docEl.uniqueNumber == "number" &&
elem.uniqueNumber != docEl.uniqueNumber);
}
var guid, last = 1;
if(hasUniqueNumber()){
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<input id="txt" />
<script>
var txt = document.getElementById("txt"),
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<input id="txt" type="text">
<script>
var attach;
var Boolean = (function(){
var undefinedThis = (function(){
return this; // this depends on strict mode
})();
function Boolean(arg){
if(this == undefinedThis){
return !!arg;
}else{
return {};
}
@bryanforbes
bryanforbes / a.js
Created May 13, 2011 13:57
Recursive module requires
define([], function(){
require(['tests/recurse/b']);
return {};
});
@bryanforbes
bryanforbes / gfx.js
Created May 13, 2011 16:05
gfx situation
// dojox/gfx.js
define(['dojo/_base/kernel'], function(dojo){
var gfx = dojo.getObject("gfx", true, dojox);
// this is actualy added in dojox/gfx/_base.js
dojo.mixin(gfx, {
switchTo: function(renderer){
var ns = gfx[renderer];
if(ns){
dojo.mixin(gfx, ns);
@bryanforbes
bryanforbes / gfx.js
Created May 14, 2011 19:24
GFX module potentially
define(["dojo/_base/config", "./" + (function(){
var renderer, sl, flag, match;
while(!renderer){
// Have a way to force a GFX renderer, if so desired.
// Useful for being able to serialize GFX data in a particular format.
if(dojo.config.forceGfxRenderer){
renderer = dojo.config.forceGfxRenderer;
break;
}
var renderers = (typeof dojo.config.gfxRenderer === "string" ?
@bryanforbes
bryanforbes / eval.js
Created May 16, 2011 20:52
script inject eval
var globalEval = (function(global, doc){
global.__dojoEvalInfo__ = {};
var resultId = 0,
head = doc.getElementsByTagName("head")[0] || doc.documentElement;
return function(text){
var script = doc.createElement("script"),
id = resultId++, sText, result;
script.type = "text/javascript";
sText = "__dojoEvalInfo__[" + id + "].result = eval(__dojoEvalInfo__[" + id + "].text);";
global.__dojoEvalInfo__[id] = { text: text };