(function (){
  /* ADAPTER
   *
   * This blanket.js adapter is designed to autostart coverage
   * immediately. The other side of this is handled from Cucumber
   *
   * Required blanket commands:
   * blanket.setupCoverage(); // Do it ASAP
   * blanket.onTestStart(); // Do it ASAP
   * blanket.onTestDone(); // After Scenario Hook
   * blanket.onTestsDone(); // After Scenario Hook
   */

  blanket.beforeStartTestRunner({
    callback: function() {
      blanket.setupCoverage();
      blanket.onTestStart();
    }
  });


  /* REPORTER
   *
   * Blanket.js docs speak of blanket.customReporter but
   * that doesn't actually work so we'll override defaultReporter
   */
  blanket.defaultReporter = function(coverage_results){
    window.COVERAGE_RESULTS = coverage_results; // We'll grab this on selenium side
  };
})();

@@ -322,24 +322,40 @@
 cenario Hook
+ (Not necessary)
 %0A   * blanke
@@ -518,24 +518,151 @@
 estStart();%0A
+      window.CUCUMBER_BLANKET = %7B%0A        files: %7B%7D,%0A        sources: %7B%7D,%0A        done: false,%0A        is_setup: true%0A      %7D;%0A
     %7D%0A  %7D);%0A
@@ -883,66 +883,530 @@
 ow.C
-OVERAGE_RESULTS = coverage_results; // We'll
+UCUMBER_BLANKET.files = coverage_results.files;%0A    // Strangely enough it looks like we need to iterate in order to grab the %60source%60%0A    // data which is necessary to know which lines of code are being reported on.%0A    var files = Object.keys(coverage_results.files);%0A    for (var i = 0, l = files.length; i %3C l; i ++) %7B%0A      var file = files%5Bi%5D;%0A      window.CUCUMBER_BLANKET.sources%5Bfile%5D = window.CUCUMBER_BLANKET.files%5Bfile%5D.source;%0A    %7D%0A    window.CUCUMBER_BLANKET.done = true;%0A    // Now we can
  grab 
+all 
 this on 
 sele
@@ -1401,16 +1401,20 @@
 this on 
+the 
 selenium
@@ -1418,16 +1418,48 @@
 ium side
+ through window.CUCUMBER_BLANKET
 %0A  %7D;%0A%7D)
@@ -1458,12 +1458,13 @@
 %0A  %7D;%0A%7D)();%0A
+%0A

Update javascript blanket adapter to include sources data.