Update livepreview for new Ace.

This commit is contained in:
bootstraponline
2012-06-18 12:31:30 -06:00
parent 0f451d6833
commit b0a8984d3b
@@ -172,7 +172,8 @@ var previewSet = function( text ) {
}
};
var languages = [ 'c_cpp', 'clojure', 'coffee', 'coldfusion',
// 'c', 'c++', 'cpp' are github specific and transformed to c_cpp for Ace.
var languages = [ 'c', 'c++', 'cpp', 'clojure', 'coffee', 'coldfusion',
'csharp', 'css', 'diff', 'golang', 'groovy', 'haxe', 'html',
'java', 'javascript', 'json', 'latex', 'less', 'liquid',
'lua', 'markdown', 'ocaml', 'perl', 'pgsql', 'php', 'powershell',
@@ -205,9 +206,14 @@ function getLang( language ) {
}
function highlight( element, language ) {
var data = element.innerHTML;
// Highlighting requires .innerText not
// .innerHTML. It's the difference between
// '>' and '>'.
// Firefox does not support innerText.
var data = element.innerText || element.textContent;
var mode = getLang( language );
var color = staticHighlight.render( data, mode, githubTheme );
// input, mode, theme, lineStart, disableGutter
var color = staticHighlight.render( data, mode, githubTheme, 1, true );
var newDiv = doc.createElement('div');
newDiv.innerHTML = color.html;
@@ -257,6 +263,23 @@ var makePreviewHtml = function () {
// the syntax for code highlighting means all code, even one line, contains newlines.
if ( txt.length > 1 && codeHTML.match( /\n/ ) ) {
var declaredLanguage = txt[ 1 ];
var aceMode = declaredLanguage;
// GitHub supports 'c', 'c++', 'cpp'
// which must trigger the 'c_cpp' mode in Ace.
if ( declaredLanguage === 'cpp' ) {
aceMode = 'c_cpp';
}
// '`c++'.split( /\b/ )
// ["`", "c", "++"]
if ( declaredLanguage === 'c' ) {
aceMode = 'c_cpp';
if ( txt.length > 2 && txt[ 2 ].substring( 0, 2 ) === '++' ) {
declaredLanguage += '++';
}
}
// txt[0] must be '`'
// txt[0] = '`'; txt[1] = 'ruby'
if ( txt[ 0 ] !== '`' || $.inArray( declaredLanguage, languages ) === -1 ) {
@@ -268,7 +291,7 @@ var makePreviewHtml = function () {
// length + 1 for the marker character.
element.innerHTML = codeHTML.substring( declaredLanguage.length + 1 ).trim();
// highlight: element
highlight( element, declaredLanguage );
highlight( element, aceMode );
} else {
// Highlighting is not for `code` inline syntax. For example `puts "string"`.
skipped++;