From f5ccfb362e724508e1a29e7f7d8cb30ffd49c2c1 Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Wed, 1 Jun 2016 08:28:54 -0400 Subject: Reorganized syntax highlighting code and added search term highlighting for code blocks with syntax highlighting (#3191) --- webapp/components/code_preview.jsx | 49 +++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 8 deletions(-) (limited to 'webapp/components/code_preview.jsx') diff --git a/webapp/components/code_preview.jsx b/webapp/components/code_preview.jsx index e769ae590..6e1af262f 100644 --- a/webapp/components/code_preview.jsx +++ b/webapp/components/code_preview.jsx @@ -2,11 +2,14 @@ // See License.txt for license information. import $ from 'jquery'; -import * as syntaxHightlighting from 'utils/syntax_hightlighting.jsx'; +import React from 'react'; + +import * as SyntaxHighlighting from 'utils/syntax_hightlighting.jsx'; import Constants from 'utils/constants.jsx'; + import FileInfoPreview from './file_info_preview.jsx'; -import React from 'react'; +import loadingGif from 'images/load.gif'; export default class CodePreview extends React.Component { constructor(props) { @@ -35,7 +38,7 @@ export default class CodePreview extends React.Component { } updateStateFromProps(props) { - var usedLanguage = syntaxHightlighting.getLang(props.filename); + var usedLanguage = SyntaxHighlighting.getLang(props.filename); if (!usedLanguage || props.fileInfo.size > Constants.CODE_PREVIEW_MAX_FILE_SIZE) { this.setState({code: '', lang: '', loading: false, success: false}); @@ -54,8 +57,7 @@ export default class CodePreview extends React.Component { } handleReceivedCode(data) { - const parsed = syntaxHightlighting.formatCode(this.state.lang, data, this.props.filename); - this.setState({code: parsed, loading: false, success: true}); + this.setState({code: data, loading: false, success: true}); } handleReceivedError() { @@ -63,7 +65,7 @@ export default class CodePreview extends React.Component { } static support(filename) { - return typeof syntaxHightlighting.getLang(filename) !== 'undefined'; + return !!SyntaxHighlighting.getLanguageFromFilename(filename); } render() { @@ -72,7 +74,7 @@ export default class CodePreview extends React.Component {
); @@ -89,7 +91,38 @@ export default class CodePreview extends React.Component { ); } - return
; + // add line numbers when viewing a code file preview + const lines = this.state.code.match(/\r\n|\r|\n|$/g).length; + let strlines = ''; + for (let i = 1; i <= lines; i++) { + if (strlines) { + strlines += '\n' + i; + } else { + strlines += i; + } + } + + const language = SyntaxHighlighting.getLanguageName(this.state.lang); + + const highlighted = SyntaxHighlighting.highlight(this.state.lang, this.state.code); + + return ( +
+ + {`${this.props.filename} - ${language}`} + + + + + + + + +
{strlines} +
+
+
+ ); } } -- cgit v1.2.3-1-g7c22