This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" | |
Fixes file names for downloads from jil.org. | |
jil.org delivers downloaded files with file names in e-mail header format. The | |
fix_filename function from this module can decode such file names. | |
When this module is executed as main program, all file names passed as program | |
arguments are renamed properly: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var BaseObject = { | |
create: function create() { | |
var instance = Object.create(this); | |
instance._construct.apply(instance, arguments); | |
return instance; | |
}, | |
extend: function extend(properties, propertyDescriptors) { | |
propertyDescriptors = propertyDescriptors || {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<title>has touch?</title> | |
<h1>Has this device touch? </h1> | |
<script> | |
var isTouch = (function(){ | |
try{ | |
var event = document.createEvent("TouchEvent"); // Should throw an error if not supported | |
return !!event.initTouchEvent; // Check for existance of initialization method | |
}catch(error){ | |
return false; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
EventEmitter is usable as constructor and as mixin. | |
*/ | |
function EventEmitter() {} | |
// this does the trick | |
EventEmitter.prototype = EventEmitter; | |
EventEmitter.addListener = function(type, listener) { | |
this.listeners(type, true).push(listener); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var a = new Angle().radians(Math.PI * 3 / 4), | |
b = new Angle().degrees(135); | |
var c = new Angle(a + b); | |
Math.sin(a); | |
Math.cos(b); | |
a.add(new Angle().degrees(30)); | |
b.add(Math.PI); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Point(x, y) { | |
if (arguments.length === 1 && typeof x === 'string') { | |
return x.slice(1, -1) | |
.split('}{') | |
.map(function(tuple) { | |
return tuple.split(',', 2).map(parseFloat) | |
}) | |
.reduce(function(point, coords) { | |
point.x += coords[0]; | |
point.y += coords[1]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
A point constructor that creates objects supporting addition and subtraction. | |
The "trick" is to use 32bit integers and stuff two fixed 16bit fixed point | |
numbers into them that represent the coordinates of the point. | |
This approach has problems with overflow. E.g. when adding two points (0, 2) | |
and (0, -2), the addition will cause the y values to overflow into the 17th | |
bit, which is part of the x-value. When subtracting two points, e.g. | |
(.00390625, 0) - (0, -128) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Object.defineProperty(Object.prototype, 'super', { | |
get: function() { return Object.getPrototypeOf(this); } | |
}); | |
function Foo() {} | |
Foo.prototype.reset = function() { | |
this.fooProp = 'reset'; | |
console.log('Foo#reset()'); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Object.defineProperty(Object.prototype, 'super', { | |
value: function(Constructor) { | |
var context = this; | |
var superProto = Object.getPrototypeOf(Constructor.prototype); | |
return Proxy.create({ | |
get: function(_, name) { | |
return function() { | |
return superProto[name].apply(context, arguments); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function lazyProperty(object, name, create) { | |
Object.defineProperty(object, name, { | |
configurable: true, // or false if defined on prototype objects | |
enumerable: false, | |
get: function() { | |
return this[name] = create(this); | |
}, | |
set: function(value) { | |
Object.defineProperty(this, name, { | |
configurable: true, |
OlderNewer