;(function(ns, undefined){
    var preconditions = [
	{
	    'predicate': function(callback){ return callback != undefined; },
	    'message': 'observer is undefined'
	},
	{
	    'predicate': function(callback){ return typeof callback == 'function'; },
	    'message': 'observer is not a function'
	}
    ];

    var Observable = ns.Observable = function(){
	this.observers = {};
    };
    Observable.prototype.on = function(event, callback){
	preconditions.forEach(function(precondition){
	    if (!precondition.predicate(callback)){
		throw new Error(precondition.message);
	    }
	});
	(this.observers[event] = this.observers[event] || []).push(callback);
    };
    Observable.prototype.signal = function(event){
	var args = Array.prototype.slice.call(arguments, 1);
	(this.observers[event] || []).forEach(function(observer){
	    observer.apply(this, args);
	}.bind(this));
    };
})(window.ns = window.ns || {})

@@ -46,20 +46,34 @@
 ons = %5B%0A
-%09%7B%0A%09
+        %7B%0A        
     'pre
@@ -130,25 +130,32 @@
 defined; %7D,%0A
-%09
+        
     'message
@@ -185,16 +185,37 @@
 ed'%0A
-%09%7D,%0A%09%7B%0A%09
+        %7D,%0A        %7B%0A        
     
@@ -288,17 +288,24 @@
 on'; %7D,%0A
-%09
+        
     'mes
@@ -340,17 +340,24 @@
 nction'%0A
-%09
+        
 %7D%0A    %5D;
@@ -407,17 +407,24 @@
 tion()%7B%0A
-%09
+        
 this.obs
@@ -500,17 +500,24 @@
 lback)%7B%0A
-%09
+        
 precondi
@@ -554,17 +554,24 @@
 ition)%7B%0A
-%09
+        
     if (
@@ -610,10 +610,24 @@
 ))%7B%0A
-%09%09
+                
 thro
@@ -665,21 +665,42 @@
 e);%0A
-%09    %7D%0A%09%7D);%0A%09
+            %7D%0A        %7D);%0A        
 (thi
@@ -823,17 +823,24 @@
 event)%7B%0A
-%09
+        
 var args
@@ -884,17 +884,24 @@
 ts, 1);%0A
-%09
+        
 (this.ob
@@ -950,17 +950,24 @@
 erver)%7B%0A
-%09
+        
     obse
@@ -994,9 +994,16 @@
 s);%0A
-%09
+        
 %7D.bi

use new editorconfig