Merge pull request #1074 from kyrias/only-highlight-specified-language

Only syntax highlight if language was specified
pull/21833/head
Matthew Hodgson 2017-06-26 18:25:33 +01:00 committed by GitHub
commit 447f93ba73
4 changed files with 32 additions and 1 deletions

View File

@ -124,6 +124,7 @@ var sanitizeHtmlParams = {
// would make sense if we did // would make sense if we did
img: ['src'], img: ['src'],
ol: ['start'], ol: ['start'],
code: ['class'], // We don't actually allow all classes, we filter them in transformTags
}, },
// Lots of these won't come up by default because we don't allow them // Lots of these won't come up by default because we don't allow them
selfClosing: ['img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta'], selfClosing: ['img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta'],
@ -165,6 +166,19 @@ var sanitizeHtmlParams = {
attribs.rel = 'noopener'; // https://mathiasbynens.github.io/rel-noopener/ attribs.rel = 'noopener'; // https://mathiasbynens.github.io/rel-noopener/
return { tagName: tagName, attribs : attribs }; return { tagName: tagName, attribs : attribs };
}, },
'code': function(tagName, attribs) {
if (typeof attribs.class !== 'undefined') {
// Filter out all classes other than ones starting with language- for syntax highlighting.
let classes = attribs.class.split(/\s+/).filter(function(cl) {
return cl.startsWith('language-');
});
attribs.class = classes.join(' ');
}
return {
tagName: tagName,
attribs: attribs,
};
},
'*': function(tagName, attribs) { '*': function(tagName, attribs) {
// Delete any style previously assigned, style is an allowedTag for font and span // Delete any style previously assigned, style is an allowedTag for font and span
// because attributes are stripped after transforming // because attributes are stripped after transforming

View File

@ -93,6 +93,10 @@ const SETTINGS_LABELS = [
id: 'disableMarkdown', id: 'disableMarkdown',
label: 'Disable markdown formatting', label: 'Disable markdown formatting',
}, },
{
id: 'enableSyntaxHighlightLanguageDetection',
label: 'Enable automatic language detection for syntax highlighting',
},
/* /*
{ {
id: 'useFixedWidthFont', id: 'useFixedWidthFont',

View File

@ -29,6 +29,7 @@ import Modal from '../../../Modal';
import SdkConfig from '../../../SdkConfig'; import SdkConfig from '../../../SdkConfig';
import dis from '../../../dispatcher'; import dis from '../../../dispatcher';
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import UserSettingsStore from "../../../UserSettingsStore";
linkifyMatrix(linkify); linkifyMatrix(linkify);
@ -90,8 +91,19 @@ module.exports = React.createClass({
setTimeout(() => { setTimeout(() => {
if (this._unmounted) return; if (this._unmounted) return;
for (let i = 0; i < blocks.length; i++) { for (let i = 0; i < blocks.length; i++) {
if (UserSettingsStore.getSyncedSetting("enableSyntaxHighlightLanguageDetection", false)) {
highlight.highlightBlock(blocks[i])
} else {
// Only syntax highlight if there's a class starting with language-
let classes = blocks[i].className.split(/\s+/).filter(function (cl) {
return cl.startsWith('language-');
});
if (classes.length != 0) {
highlight.highlightBlock(blocks[i]); highlight.highlightBlock(blocks[i]);
} }
}
}
}, 10); }, 10);
} }
// add event handlers to the 'copy code' buttons // add event handlers to the 'copy code' buttons

View File

@ -268,6 +268,7 @@
"Email address (optional)": "Email address (optional)", "Email address (optional)": "Email address (optional)",
"Email, name or matrix ID": "Email, name or matrix ID", "Email, name or matrix ID": "Email, name or matrix ID",
"Emoji": "Emoji", "Emoji": "Emoji",
"Enable automatic language detection for syntax highlighting": "Enable automatic language detection for syntax highlighting",
"Enable encryption": "Enable encryption", "Enable encryption": "Enable encryption",
"Enable Notifications": "Enable Notifications", "Enable Notifications": "Enable Notifications",
"enabled": "enabled", "enabled": "enabled",