var ApiMarkdown = Ember.Component.extend({
  tagName: 'span',

  markdown: function(){
    var self     = this,
        text     = this.get('text'),
        markdown = marked(text);

    Ember.run.scheduleOnce('afterRender', this, this.updateCodeBlocks);

    return new Ember.Handlebars.SafeString(markdown);
  }.property('text'),

  updateCodeBlocks: function(){
    var self = this;

    this.$('pre code').each(function(index, element) {
      var $element = $(element),
          $parent  = $element.parent(),
          code     = $element.text();
      
      $parent.replaceWith(self.formatCodeBlock(code));
    });

    this.$('td.code').each(function(index, element) {
      hljs.highlightBlock(element);
    });
  },

  formatCodeBlock: function(code){
    var lines = code.split("\n"),
        lineNumbers = '',
        result;

    lines.forEach(function(item, index){
      var humanIndex = index + 1;

      lineNumbers = lineNumbers + humanIndex + "\n";
    });

    result = '<div class="highlight">' + 
             '  <div class="ribbon"></div>' +
             '  <div class="scroller">' +
             '    <table class="CodeRay">' +
             '      <tr>' +
             '        <td class="line-numbers">' +
             '          <pre>' + lineNumbers + '</pre>' +
             '        </td>' +
             '        <td class="code"><pre>' + code + '</pre></td>' +
             '      </tr>' +
             '    </table>' +
             '  </div>' +
             '</div>';

    return result;
  }

});

export default ApiMarkdown;

@@ -58,24 +58,36 @@
 an',%0A%0A  
-markdown
+overrideMarkedParser
 : functi
@@ -104,386 +104,308 @@
 var 
-self     = this,%0A        text     = this.get('text'),%0A        markdown = marked(text);%0A%0A    Ember.run.scheduleOnce('afterRender', this, this.updateCodeBlocks)
+Parser = marked.Parser,%0A        formatCodeBlock = this.formatCodeBlock;%0A%0A    if (Parser.prototype.overridden !== true)%7B%0A      Parser.prototype.tokOriginal = Parser.prototype.tok
 ;%0A
-%0A
     
-return new Ember.Handlebars.SafeString(markdown);%0A  %7D.property('text'),%0A%0A  updateCodeBlocks: function()%7B%0A    var self = this;%0A%0A    this.$('pre code').each(function(index, element) %7B%0A
+  Parser.prototype.tok = function()%7B%0A        if (this.token.type == 'code')%7B%0A  
       
+  
 var 
-$element = $(element)
+language = this.token.lang
 ,%0A  
@@ -416,82 +416,102 @@
     
-$parent
+    code  
   
+ 
 = 
-$element.parent(),%0A          code     = $element.text()
+this.token.text;%0A%0A          code = hljs.highlight(language, code).value
 ;%0A      
 %0A   
@@ -510,40 +510,19 @@
     
-%0A 
     
- $parent.replaceWith(self.
+return 
 form
@@ -541,122 +541,391 @@
 code
-)
+, language
 );%0A    
-%7D);%0A%0A    this.$('td.code').each(function(index, element) %7B%0A      hljs.highlightBlock(element);
+    %7D else %7B%0A          return this.tokOriginal();%0A        %7D%0A      %7D;%0A%0A      Parser.prototype.overridden = true;%0A    %7D%0A  %7D,%0A%0A  markdown: function()%7B%0A%0A    var self     = this,%0A        text     = this.get('text'),%0A        markdown;%0A%0A    this.overrideMarkedParser();%0A    markdown = marked(text)%0A
 %0A    
-%7D);%0A  %7D
+return new Ember.Handlebars.SafeString(markdown);%0A  %7D.property('text')
 ,%0A%0A 
@@ -955,16 +955,26 @@
 ion(code
+, language
 )%7B%0A    v
@@ -1222,14 +1222,30 @@
 ight
+ ' + language + '
 %22%3E' +
- 
 %0A   
@@ -1581,24 +1581,49 @@
 =%22code%22%3E%3Cpre
+ class=%22' + language + '%22
 %3E' + code + 

Remove need for afterRender jQuery operations.