[IMPROVE] Load code highlighting languages on demand and fixes on new message parser (#23232)

pull/23256/head^2
Guilherme Gazzo 4 years ago committed by GitHub
parent 2fd913c0b8
commit 5c1a7623b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      app/lib/server/startup/settings.js
  2. 714
      app/markdown/lib/hljs.js
  3. 3
      app/markdown/lib/parser/marked/marked.js
  4. 14
      app/markdown/lib/parser/original/code.js
  5. 10
      client/components/Message/Attachments/DefaultAttachment.tsx
  6. 2
      client/components/Message/Attachments/FieldsAttachment/Field.tsx
  7. 6
      client/components/Message/Attachments/FieldsAttachment/index.tsx
  8. 2
      client/components/Message/Body/Body.tsx
  9. 3
      client/components/Message/Body/Bold.tsx
  10. 61
      client/components/Message/Body/Code.tsx
  11. 21
      client/components/Message/Body/Image.tsx
  12. 3
      client/components/Message/Body/Inline.tsx
  13. 3
      client/components/Message/Body/Italic.tsx
  14. 3
      client/components/Message/Body/Strike.tsx
  15. 13
      client/startup/startup.ts
  16. 12
      package-lock.json
  17. 4
      package.json
  18. 2
      packages/rocketchat-i18n/i18n/en.i18n.json

@ -1286,6 +1286,11 @@ settings.addGroup('Message', function() {
},
],
});
this.add('Message_Code_highlight', 'javascript,css,markdown,dockerfile,json,go,rust,clean,bash,plaintext,powershell,scss,shell,yaml,vim', {
type: 'string',
public: true,
});
});
settings.addGroup('Meta', function() {

@ -1,371 +1,361 @@
import hljs from 'highlight.js/lib/highlight';
// import onec from 'highlight.js/lib/languages/1c';
// import abnf from 'highlight.js/lib/languages/abnf';
// import accesslog from 'highlight.js/lib/languages/accesslog';
// import actionscript from 'highlight.js/lib/languages/actionscript';
// import ada from 'highlight.js/lib/languages/ada';
// import angelscript from 'highlight.js/lib/languages/angelscript';
// import apache from 'highlight.js/lib/languages/apache';
// import applescript from 'highlight.js/lib/languages/applescript';
// import arcade from 'highlight.js/lib/languages/arcade';
// import cpp from 'highlight.js/lib/languages/cpp';
// import arduino from 'highlight.js/lib/languages/arduino';
// import armasm from 'highlight.js/lib/languages/armasm';
// import xml from 'highlight.js/lib/languages/xml';
// import asciidoc from 'highlight.js/lib/languages/asciidoc';
// import aspectj from 'highlight.js/lib/languages/aspectj';
// import autohotkey from 'highlight.js/lib/languages/autohotkey';
// import autoit from 'highlight.js/lib/languages/autoit';
// import avrasm from 'highlight.js/lib/languages/avrasm';
// import awk from 'highlight.js/lib/languages/awk';
// import axapta from 'highlight.js/lib/languages/axapta';
import bash from 'highlight.js/lib/languages/bash';
// import basic from 'highlight.js/lib/languages/basic';
// import bnf from 'highlight.js/lib/languages/bnf';
// import brainfuck from 'highlight.js/lib/languages/brainfuck';
// import cal from 'highlight.js/lib/languages/cal';
// import capnproto from 'highlight.js/lib/languages/capnproto';
// import ceylon from 'highlight.js/lib/languages/ceylon';
import clean from 'highlight.js/lib/languages/clean';
// import clojure from 'highlight.js/lib/languages/clojure';
// import clojureRepl from 'highlight.js/lib/languages/clojure-repl';
// import cmake from 'highlight.js/lib/languages/cmake';
// import coq from 'highlight.js/lib/languages/coq';
// import cos from 'highlight.js/lib/languages/cos';
// import crmsh from 'highlight.js/lib/languages/crmsh';
// import crystal from 'highlight.js/lib/languages/crystal';
// import cs from 'highlight.js/lib/languages/cs';
// import csp from 'highlight.js/lib/languages/csp';
import css from 'highlight.js/lib/languages/css';
// import d from 'highlight.js/lib/languages/d';
import markdown from 'highlight.js/lib/languages/markdown';
// import dart from 'highlight.js/lib/languages/dart';
// import delphi from 'highlight.js/lib/languages/delphi';
// import diff from 'highlight.js/lib/languages/diff';
// import django from 'highlight.js/lib/languages/django';
// import dns from 'highlight.js/lib/languages/dns';
import dockerfile from 'highlight.js/lib/languages/dockerfile';
// import dos from 'highlight.js/lib/languages/dos';
// import dsconfig from 'highlight.js/lib/languages/dsconfig';
// import dts from 'highlight.js/lib/languages/dts';
// import dust from 'highlight.js/lib/languages/dust';
// import ebnf from 'highlight.js/lib/languages/ebnf';
// import elixir from 'highlight.js/lib/languages/elixir';
// import elm from 'highlight.js/lib/languages/elm';
// import ruby from 'highlight.js/lib/languages/ruby';
// import erb from 'highlight.js/lib/languages/erb';
// import erlangRepl from 'highlight.js/lib/languages/erlang-repl';
// import erlang from 'highlight.js/lib/languages/erlang';
// import excel from 'highlight.js/lib/languages/excel';
// import fix from 'highlight.js/lib/languages/fix';
// import flix from 'highlight.js/lib/languages/flix';
// import fortran from 'highlight.js/lib/languages/fortran';
// import fsharp from 'highlight.js/lib/languages/fsharp';
// import gams from 'highlight.js/lib/languages/gams';
// import gauss from 'highlight.js/lib/languages/gauss';
// import gcode from 'highlight.js/lib/languages/gcode';
// import gherkin from 'highlight.js/lib/languages/gherkin';
// import glsl from 'highlight.js/lib/languages/glsl';
// import gml from 'highlight.js/lib/languages/gml';
import go from 'highlight.js/lib/languages/go';
// import golo from 'highlight.js/lib/languages/golo';
// import gradle from 'highlight.js/lib/languages/gradle';
// import groovy from 'highlight.js/lib/languages/groovy';
// import haml from 'highlight.js/lib/languages/haml';
// import handlebars from 'highlight.js/lib/languages/handlebars';
// import haskell from 'highlight.js/lib/languages/haskell';
// import haxe from 'highlight.js/lib/languages/haxe';
// import hsp from 'highlight.js/lib/languages/hsp';
// import htmlbars from 'highlight.js/lib/languages/htmlbars';
// import http from 'highlight.js/lib/languages/http';
// import hy from 'highlight.js/lib/languages/hy';
// import inform7 from 'highlight.js/lib/languages/inform7';
// import ini from 'highlight.js/lib/languages/ini';
// import irpf90 from 'highlight.js/lib/languages/irpf90';
// import isbl from 'highlight.js/lib/languages/isbl';
// import java from 'highlight.js/lib/languages/java';
import javascript from 'highlight.js/lib/languages/javascript';
// import jbossCli from 'highlight.js/lib/languages/jboss-cli';
import json from 'highlight.js/lib/languages/json';
// import julia from 'highlight.js/lib/languages/julia';
// import juliaRepl from 'highlight.js/lib/languages/julia-repl';
// import kotlin from 'highlight.js/lib/languages/kotlin';
// import lasso from 'highlight.js/lib/languages/lasso';
// import ldif from 'highlight.js/lib/languages/ldif';
// import leaf from 'highlight.js/lib/languages/leaf';
// import less from 'highlight.js/lib/languages/less';
// import lisp from 'highlight.js/lib/languages/lisp';
// import livecodeserver from 'highlight.js/lib/languages/livecodeserver';
// import llvm from 'highlight.js/lib/languages/llvm';
// import lsl from 'highlight.js/lib/languages/lsl';
// import lua from 'highlight.js/lib/languages/lua';
// import makefile from 'highlight.js/lib/languages/makefile';
// import mathematica from 'highlight.js/lib/languages/mathematica';
// import matlab from 'highlight.js/lib/languages/matlab';
// import maxima from 'highlight.js/lib/languages/maxima';
// import mel from 'highlight.js/lib/languages/mel';
// import mercury from 'highlight.js/lib/languages/mercury';
// import mipsasm from 'highlight.js/lib/languages/mipsasm';
// import mizar from 'highlight.js/lib/languages/mizar';
// import perl from 'highlight.js/lib/languages/perl';
// import mojolicious from 'highlight.js/lib/languages/mojolicious';
// import monkey from 'highlight.js/lib/languages/monkey';
// import moonscript from 'highlight.js/lib/languages/moonscript';
// import n1ql from 'highlight.js/lib/languages/n1ql';
// import nginx from 'highlight.js/lib/languages/nginx';
// import nimrod from 'highlight.js/lib/languages/nimrod';
// import nix from 'highlight.js/lib/languages/nix';
// import nsis from 'highlight.js/lib/languages/nsis';
// import objectivec from 'highlight.js/lib/languages/objectivec';
// import ocaml from 'highlight.js/lib/languages/ocaml';
// import openscad from 'highlight.js/lib/languages/openscad';
// import oxygene from 'highlight.js/lib/languages/oxygene';
// import parser3 from 'highlight.js/lib/languages/parser3';
// import pf from 'highlight.js/lib/languages/pf';
// import pgsql from 'highlight.js/lib/languages/pgsql';
// import php from 'highlight.js/lib/languages/php';
import plaintext from 'highlight.js/lib/languages/plaintext';
// import pony from 'highlight.js/lib/languages/pony';
import powershell from 'highlight.js/lib/languages/powershell';
// import processing from 'highlight.js/lib/languages/processing';
// import profile from 'highlight.js/lib/languages/profile';
// import prolog from 'highlight.js/lib/languages/prolog';
// import properties from 'highlight.js/lib/languages/properties';
// import protobuf from 'highlight.js/lib/languages/protobuf';
// import puppet from 'highlight.js/lib/languages/puppet';
// import purebasic from 'highlight.js/lib/languages/purebasic';
// import python from 'highlight.js/lib/languages/python';
// import q from 'highlight.js/lib/languages/q';
// import qml from 'highlight.js/lib/languages/qml';
// import r from 'highlight.js/lib/languages/r';
// import reasonml from 'highlight.js/lib/languages/reasonml';
// import rib from 'highlight.js/lib/languages/rib';
// import roboconf from 'highlight.js/lib/languages/roboconf';
// import routeros from 'highlight.js/lib/languages/routeros';
// import rsl from 'highlight.js/lib/languages/rsl';
// import ruleslanguage from 'highlight.js/lib/languages/ruleslanguage';
import rust from 'highlight.js/lib/languages/rust';
// import sas from 'highlight.js/lib/languages/sas';
// import scala from 'highlight.js/lib/languages/scala';
// import scheme from 'highlight.js/lib/languages/scheme';
// import scilab from 'highlight.js/lib/languages/scilab';
import scss from 'highlight.js/lib/languages/scss';
import shell from 'highlight.js/lib/languages/shell';
// import smali from 'highlight.js/lib/languages/smali';
// import smalltalk from 'highlight.js/lib/languages/smalltalk';
// import sml from 'highlight.js/lib/languages/sml';
// import sqf from 'highlight.js/lib/languages/sqf';
// import sql from 'highlight.js/lib/languages/sql';
// import stan from 'highlight.js/lib/languages/stan';
// import stata from 'highlight.js/lib/languages/stata';
// import step21 from 'highlight.js/lib/languages/step21';
// import stylus from 'highlight.js/lib/languages/stylus';
// import subunit from 'highlight.js/lib/languages/subunit';
// import swift from 'highlight.js/lib/languages/swift';
// import taggerscript from 'highlight.js/lib/languages/taggerscript';
import yaml from 'highlight.js/lib/languages/yaml';
// import tap from 'highlight.js/lib/languages/tap';
// import tcl from 'highlight.js/lib/languages/tcl';
// import tex from 'highlight.js/lib/languages/tex';
// import thrift from 'highlight.js/lib/languages/thrift';
// import tp from 'highlight.js/lib/languages/tp';
// import twig from 'highlight.js/lib/languages/twig';
// import typescript from 'highlight.js/lib/languages/typescript';
// import vala from 'highlight.js/lib/languages/vala';
// import vbnet from 'highlight.js/lib/languages/vbnet';
// import vbscript from 'highlight.js/lib/languages/vbscript';
// import vbscriptHtml from 'highlight.js/lib/languages/vbscript-html';
// import verilog from 'highlight.js/lib/languages/verilog';
// import vhdl from 'highlight.js/lib/languages/vhdl';
import vim from 'highlight.js/lib/languages/vim';
// import x86asm from 'highlight.js/lib/languages/x86asm';
// import xl from 'highlight.js/lib/languages/xl';
// import xquery from 'highlight.js/lib/languages/xquery';
// import zephir from 'highlight.js/lib/languages/zephir';
hljs.registerLanguage('javascript', javascript);
// hljs.registerLanguage('typescript', typescript);
// hljs.registerLanguage('python', python);
// hljs.registerLanguage('java', java);
// hljs.registerLanguage('php', php);
hljs.registerLanguage('css', css);
hljs.registerLanguage('markdown', markdown);
hljs.registerLanguage('dockerfile', dockerfile);
hljs.registerLanguage('json', json);
// hljs.registerLanguage('r', r);
// hljs.registerLanguage('objectivec', objectivec);
// hljs.registerLanguage('swift', swift);
// hljs.registerLanguage('matlab', matlab);
// hljs.registerLanguage('kotlin', kotlin);
hljs.registerLanguage('go', go);
// hljs.registerLanguage('ruby', ruby);
// hljs.registerLanguage('scala', scala);
hljs.registerLanguage('rust', rust);
// hljs.registerLanguage('dart', dart);
// hljs.registerLanguage('lua', lua);
// hljs.registerLanguage('ada', ada);
// hljs.registerLanguage('groovy', groovy);
// hljs.registerLanguage('julia', julia);
// hljs.registerLanguage('julia-repl', juliaRepl);
// hljs.registerLanguage('haskell', haskell);
// hljs.registerLanguage('delphi', delphi);
hljs.registerLanguage('clean', clean);
// hljs.registerLanguage('1c', onec);
// hljs.registerLanguage('abnf', abnf);
// hljs.registerLanguage('accesslog', accesslog);
// hljs.registerLanguage('actionscript', actionscript);
// hljs.registerLanguage('angelscript', angelscript);
// hljs.registerLanguage('apache', apache);
// hljs.registerLanguage('applescript', applescript);
// hljs.registerLanguage('arcade', arcade);
// hljs.registerLanguage('cpp', cpp);
// hljs.registerLanguage('arduino', arduino);
// hljs.registerLanguage('armasm', armasm);
// hljs.registerLanguage('xml', xml);
// hljs.registerLanguage('asciidoc', asciidoc);
// hljs.registerLanguage('aspectj', aspectj);
// hljs.registerLanguage('autohotkey', autohotkey);
// hljs.registerLanguage('autoit', autoit);
// hljs.registerLanguage('avrasm', avrasm);
// hljs.registerLanguage('awk', awk);
// hljs.registerLanguage('axapta', axapta);
hljs.registerLanguage('bash', bash);
// hljs.registerLanguage('basic', basic);
// hljs.registerLanguage('bnf', bnf);
// hljs.registerLanguage('brainfuck', brainfuck);
// hljs.registerLanguage('cal', cal);
// hljs.registerLanguage('capnproto', capnproto);
// hljs.registerLanguage('ceylon', ceylon);
// hljs.registerLanguage('clojure', clojure);
// hljs.registerLanguage('clojure-repl', clojureRepl);
// hljs.registerLanguage('cmake', cmake);
// hljs.registerLanguage('coq', coq);
// hljs.registerLanguage('cos', cos);
// hljs.registerLanguage('crmsh', crmsh);
// hljs.registerLanguage('crystal', crystal);
// hljs.registerLanguage('cs', cs);
// hljs.registerLanguage('csp', csp);
// hljs.registerLanguage('d', d);
// hljs.registerLanguage('diff', diff);
// hljs.registerLanguage('django', django);
// hljs.registerLanguage('dns', dns);
// hljs.registerLanguage('dos', dos);
// hljs.registerLanguage('dsconfig', dsconfig);
// hljs.registerLanguage('dts', dts);
// hljs.registerLanguage('dust', dust);
// hljs.registerLanguage('ebnf', ebnf);
// hljs.registerLanguage('elixir', elixir);
// hljs.registerLanguage('elm', elm);
// hljs.registerLanguage('erb', erb);
// hljs.registerLanguage('erlang-repl', erlangRepl);
// hljs.registerLanguage('erlang', erlang);
// hljs.registerLanguage('excel', excel);
// hljs.registerLanguage('fix', fix);
// hljs.registerLanguage('flix', flix);
// hljs.registerLanguage('fortran', fortran);
// hljs.registerLanguage('fsharp', fsharp);
// hljs.registerLanguage('gams', gams);
// hljs.registerLanguage('gauss', gauss);
// hljs.registerLanguage('gcode', gcode);
// hljs.registerLanguage('gherkin', gherkin);
// hljs.registerLanguage('glsl', glsl);
// hljs.registerLanguage('gml', gml);
// hljs.registerLanguage('golo', golo);
// hljs.registerLanguage('gradle', gradle);
// hljs.registerLanguage('haml', haml);
// hljs.registerLanguage('handlebars', handlebars);
// hljs.registerLanguage('haxe', haxe);
// hljs.registerLanguage('hsp', hsp);
// hljs.registerLanguage('htmlbars', htmlbars);
// hljs.registerLanguage('http', http);
// hljs.registerLanguage('hy', hy);
// hljs.registerLanguage('inform7', inform7);
// hljs.registerLanguage('ini', ini);
// hljs.registerLanguage('irpf90', irpf90);
// hljs.registerLanguage('isbl', isbl);
// hljs.registerLanguage('jboss-cli', jbossCli);
// hljs.registerLanguage('lasso', lasso);
// hljs.registerLanguage('ldif', ldif);
// hljs.registerLanguage('leaf', leaf);
// hljs.registerLanguage('less', less);
// hljs.registerLanguage('lisp', lisp);
// hljs.registerLanguage('livecodeserver', livecodeserver);
// hljs.registerLanguage('llvm', llvm);
// hljs.registerLanguage('lsl', lsl);
// hljs.registerLanguage('makefile', makefile);
// hljs.registerLanguage('mathematica', mathematica);
// hljs.registerLanguage('maxima', maxima);
// hljs.registerLanguage('mel', mel);
// hljs.registerLanguage('mercury', mercury);
// hljs.registerLanguage('mipsasm', mipsasm);
// hljs.registerLanguage('mizar', mizar);
// hljs.registerLanguage('perl', perl);
// hljs.registerLanguage('mojolicious', mojolicious);
// hljs.registerLanguage('monkey', monkey);
// hljs.registerLanguage('moonscript', moonscript);
// hljs.registerLanguage('n1ql', n1ql);
// hljs.registerLanguage('nginx', nginx);
// hljs.registerLanguage('nimrod', nimrod);
// hljs.registerLanguage('nix', nix);
// hljs.registerLanguage('nsis', nsis);
// hljs.registerLanguage('ocaml', ocaml);
// hljs.registerLanguage('openscad', openscad);
// hljs.registerLanguage('oxygene', oxygene);
// hljs.registerLanguage('parser3', parser3);
// hljs.registerLanguage('pf', pf);
// hljs.registerLanguage('pgsql', pgsql);
hljs.registerLanguage('plaintext', plaintext);
// hljs.registerLanguage('pony', pony);
hljs.registerLanguage('powershell', powershell);
// hljs.registerLanguage('processing', processing);
// hljs.registerLanguage('profile', profile);
// hljs.registerLanguage('prolog', prolog);
// hljs.registerLanguage('properties', properties);
// hljs.registerLanguage('protobuf', protobuf);
// hljs.registerLanguage('puppet', puppet);
// hljs.registerLanguage('purebasic', purebasic);
// hljs.registerLanguage('q', q);
// hljs.registerLanguage('qml', qml);
// hljs.registerLanguage('reasonml', reasonml);
// hljs.registerLanguage('rib', rib);
// hljs.registerLanguage('roboconf', roboconf);
// hljs.registerLanguage('routeros', routeros);
// hljs.registerLanguage('rsl', rsl);
// hljs.registerLanguage('ruleslanguage', ruleslanguage);
// hljs.registerLanguage('sas', sas);
// hljs.registerLanguage('scheme', scheme);
// hljs.registerLanguage('scilab', scilab);
hljs.registerLanguage('scss', scss);
hljs.registerLanguage('shell', shell);
// hljs.registerLanguage('smali', smali);
// hljs.registerLanguage('smalltalk', smalltalk);
// hljs.registerLanguage('sml', sml);
// hljs.registerLanguage('sqf', sqf);
// hljs.registerLanguage('sql', sql);
// hljs.registerLanguage('stan', stan);
// hljs.registerLanguage('stata', stata);
// hljs.registerLanguage('step21', step21);
// hljs.registerLanguage('stylus', stylus);
// hljs.registerLanguage('subunit', subunit);
// hljs.registerLanguage('taggerscript', taggerscript);
hljs.registerLanguage('yaml', yaml);
// hljs.registerLanguage('tap', tap);
// hljs.registerLanguage('tcl', tcl);
// hljs.registerLanguage('tex', tex);
// hljs.registerLanguage('thrift', thrift);
// hljs.registerLanguage('tp', tp);
// hljs.registerLanguage('twig', twig);
// hljs.registerLanguage('vala', vala);
// hljs.registerLanguage('vbnet', vbnet);
// hljs.registerLanguage('vbscript', vbscript);
// hljs.registerLanguage('vbscript-html', vbscriptHtml);
// hljs.registerLanguage('verilog', verilog);
// hljs.registerLanguage('vhdl', vhdl);
hljs.registerLanguage('vim', vim);
// hljs.registerLanguage('x86asm', x86asm);
// hljs.registerLanguage('xl', xl);
// hljs.registerLanguage('xquery', xquery);
// hljs.registerLanguage('zephir', zephir);
hljs.registerLanguage('javascript', javascript);
// eslint-disable-next-line complexity
export const register = async (lang) => {
switch (lang) {
case 'onec':
return hljs.registerLanguage('onec', (await import('highlight.js/lib/languages/1c')).default);
case 'abnf':
return hljs.registerLanguage('abnf', (await import('highlight.js/lib/languages/abnf')).default);
case 'accesslog':
return hljs.registerLanguage('accesslog', (await import('highlight.js/lib/languages/accesslog')).default);
case 'actionscript':
return hljs.registerLanguage('actionscript', (await import('highlight.js/lib/languages/actionscript')).default);
case 'ada':
return hljs.registerLanguage('ada', (await import('highlight.js/lib/languages/ada')).default);
case 'apache':
return hljs.registerLanguage('apache', (await import('highlight.js/lib/languages/apache')).default);
case 'applescript':
return hljs.registerLanguage('applescript', (await import('highlight.js/lib/languages/applescript')).default);
case 'arduino':
return hljs.registerLanguage('arduino', (await import('highlight.js/lib/languages/arduino')).default);
case 'armasm':
return hljs.registerLanguage('armasm', (await import('highlight.js/lib/languages/armasm')).default);
case 'asciidoc':
return hljs.registerLanguage('asciidoc', (await import('highlight.js/lib/languages/asciidoc')).default);
case 'aspectj':
return hljs.registerLanguage('aspectj', (await import('highlight.js/lib/languages/aspectj')).default);
case 'autohotkey':
return hljs.registerLanguage('autohotkey', (await import('highlight.js/lib/languages/autohotkey')).default);
case 'autoit':
return hljs.registerLanguage('autoit', (await import('highlight.js/lib/languages/autoit')).default);
case 'avrasm':
return hljs.registerLanguage('avrasm', (await import('highlight.js/lib/languages/avrasm')).default);
case 'awk':
return hljs.registerLanguage('awk', (await import('highlight.js/lib/languages/awk')).default);
case 'axapta':
return hljs.registerLanguage('axapta', (await import('highlight.js/lib/languages/axapta')).default);
case 'bash':
return hljs.registerLanguage('bash', (await import('highlight.js/lib/languages/bash')).default);
case 'basic':
return hljs.registerLanguage('basic', (await import('highlight.js/lib/languages/basic')).default);
case 'bnf':
return hljs.registerLanguage('bnf', (await import('highlight.js/lib/languages/bnf')).default);
case 'brainfuck':
return hljs.registerLanguage('brainfuck', (await import('highlight.js/lib/languages/brainfuck')).default);
case 'cal':
return hljs.registerLanguage('cal', (await import('highlight.js/lib/languages/cal')).default);
case 'capnproto':
return hljs.registerLanguage('capnproto', (await import('highlight.js/lib/languages/capnproto')).default);
case 'ceylon':
return hljs.registerLanguage('ceylon', (await import('highlight.js/lib/languages/ceylon')).default);
case 'clean':
return hljs.registerLanguage('clean', (await import('highlight.js/lib/languages/clean')).default);
case 'clojure':
return hljs.registerLanguage('clojure', (await import('highlight.js/lib/languages/clojure')).default);
case 'clojure-repl':
return hljs.registerLanguage('clojure-repl', (await import('highlight.js/lib/languages/clojure-repl')).default);
case 'cmake':
return hljs.registerLanguage('cmake', (await import('highlight.js/lib/languages/cmake')).default);
case 'coffeescript':
return hljs.registerLanguage('coffeescript', (await import('highlight.js/lib/languages/coffeescript')).default);
case 'coq':
return hljs.registerLanguage('coq', (await import('highlight.js/lib/languages/coq')).default);
case 'cos':
return hljs.registerLanguage('cos', (await import('highlight.js/lib/languages/cos')).default);
case 'cpp':
return hljs.registerLanguage('cpp', (await import('highlight.js/lib/languages/cpp')).default);
case 'crmsh':
return hljs.registerLanguage('crmsh', (await import('highlight.js/lib/languages/crmsh')).default);
case 'crystal':
return hljs.registerLanguage('crystal', (await import('highlight.js/lib/languages/crystal')).default);
case 'cs':
return hljs.registerLanguage('cs', (await import('highlight.js/lib/languages/cs')).default);
case 'csp':
return hljs.registerLanguage('csp', (await import('highlight.js/lib/languages/csp')).default);
case 'css':
return hljs.registerLanguage('css', (await import('highlight.js/lib/languages/css')).default);
case 'd':
return hljs.registerLanguage('d', (await import('highlight.js/lib/languages/d')).default);
case 'dart':
return hljs.registerLanguage('dart', (await import('highlight.js/lib/languages/dart')).default);
case 'delphi':
return hljs.registerLanguage('delphi', (await import('highlight.js/lib/languages/delphi')).default);
case 'diff':
return hljs.registerLanguage('diff', (await import('highlight.js/lib/languages/diff')).default);
case 'django':
return hljs.registerLanguage('django', (await import('highlight.js/lib/languages/django')).default);
case 'dns':
return hljs.registerLanguage('dns', (await import('highlight.js/lib/languages/dns')).default);
case 'dockerfile':
return hljs.registerLanguage('dockerfile', (await import('highlight.js/lib/languages/dockerfile')).default);
case 'dos':
return hljs.registerLanguage('dos', (await import('highlight.js/lib/languages/dos')).default);
case 'dsconfig':
return hljs.registerLanguage('dsconfig', (await import('highlight.js/lib/languages/dsconfig')).default);
case 'dts':
return hljs.registerLanguage('dts', (await import('highlight.js/lib/languages/dts')).default);
case 'dust':
return hljs.registerLanguage('dust', (await import('highlight.js/lib/languages/dust')).default);
case 'ebnf':
return hljs.registerLanguage('ebnf', (await import('highlight.js/lib/languages/ebnf')).default);
case 'elixir':
return hljs.registerLanguage('elixir', (await import('highlight.js/lib/languages/elixir')).default);
case 'elm':
return hljs.registerLanguage('elm', (await import('highlight.js/lib/languages/elm')).default);
case 'erb':
return hljs.registerLanguage('erb', (await import('highlight.js/lib/languages/erb')).default);
case 'erlang':
return hljs.registerLanguage('erlang', (await import('highlight.js/lib/languages/erlang')).default);
case 'excel':
return hljs.registerLanguage('excel', (await import('highlight.js/lib/languages/excel')).default);
case 'fix':
return hljs.registerLanguage('fix', (await import('highlight.js/lib/languages/fix')).default);
case 'flix':
return hljs.registerLanguage('flix', (await import('highlight.js/lib/languages/flix')).default);
case 'fortran':
return hljs.registerLanguage('fortran', (await import('highlight.js/lib/languages/fortran')).default);
case 'fsharp':
return hljs.registerLanguage('fsharp', (await import('highlight.js/lib/languages/fsharp')).default);
case 'gams':
return hljs.registerLanguage('gams', (await import('highlight.js/lib/languages/gams')).default);
case 'gauss':
return hljs.registerLanguage('gauss', (await import('highlight.js/lib/languages/gauss')).default);
case 'gcode':
return hljs.registerLanguage('gcode', (await import('highlight.js/lib/languages/gcode')).default);
case 'gherkin':
return hljs.registerLanguage('gherkin', (await import('highlight.js/lib/languages/gherkin')).default);
case 'glsl':
return hljs.registerLanguage('glsl', (await import('highlight.js/lib/languages/glsl')).default);
case 'go':
return hljs.registerLanguage('go', (await import('highlight.js/lib/languages/go')).default);
case 'golo':
return hljs.registerLanguage('golo', (await import('highlight.js/lib/languages/golo')).default);
case 'gradle':
return hljs.registerLanguage('gradle', (await import('highlight.js/lib/languages/gradle')).default);
case 'groovy':
return hljs.registerLanguage('groovy', (await import('highlight.js/lib/languages/groovy')).default);
case 'haml':
return hljs.registerLanguage('haml', (await import('highlight.js/lib/languages/haml')).default);
case 'handlebars':
return hljs.registerLanguage('handlebars', (await import('highlight.js/lib/languages/handlebars')).default);
case 'haskell':
return hljs.registerLanguage('haskell', (await import('highlight.js/lib/languages/haskell')).default);
case 'haxe':
return hljs.registerLanguage('haxe', (await import('highlight.js/lib/languages/haxe')).default);
case 'hsp':
return hljs.registerLanguage('hsp', (await import('highlight.js/lib/languages/hsp')).default);
case 'htmlbars':
return hljs.registerLanguage('htmlbars', (await import('highlight.js/lib/languages/htmlbars')).default);
case 'http':
return hljs.registerLanguage('http', (await import('highlight.js/lib/languages/http')).default);
case 'hy':
return hljs.registerLanguage('hy', (await import('highlight.js/lib/languages/hy')).default);
case 'inform7':
return hljs.registerLanguage('inform7', (await import('highlight.js/lib/languages/inform7')).default);
case 'ini':
return hljs.registerLanguage('ini', (await import('highlight.js/lib/languages/ini')).default);
case 'irpf90':
return hljs.registerLanguage('irpf90', (await import('highlight.js/lib/languages/irpf90')).default);
case 'java':
return hljs.registerLanguage('java', (await import('highlight.js/lib/languages/java')).default);
case 'javascript':
return hljs.registerLanguage('javascript', (await import('highlight.js/lib/languages/javascript')).default);
case 'jboss-cli':
return hljs.registerLanguage('jboss-cli', (await import('highlight.js/lib/languages/jboss-cli')).default);
case 'json':
return hljs.registerLanguage('json', (await import('highlight.js/lib/languages/json')).default);
case 'julia':
return hljs.registerLanguage('julia', (await import('highlight.js/lib/languages/julia')).default);
case 'julia-repl':
return hljs.registerLanguage('julia-repl', (await import('highlight.js/lib/languages/julia-repl')).default);
case 'kotlin':
return hljs.registerLanguage('kotlin', (await import('highlight.js/lib/languages/kotlin')).default);
case 'lasso':
return hljs.registerLanguage('lasso', (await import('highlight.js/lib/languages/lasso')).default);
case 'ldif':
return hljs.registerLanguage('ldif', (await import('highlight.js/lib/languages/ldif')).default);
case 'leaf':
return hljs.registerLanguage('leaf', (await import('highlight.js/lib/languages/leaf')).default);
case 'less':
return hljs.registerLanguage('less', (await import('highlight.js/lib/languages/less')).default);
case 'lisp':
return hljs.registerLanguage('lisp', (await import('highlight.js/lib/languages/lisp')).default);
case 'livecodeserver':
return hljs.registerLanguage('livecodeserver', (await import('highlight.js/lib/languages/livecodeserver')).default);
case 'livescript':
return hljs.registerLanguage('livescript', (await import('highlight.js/lib/languages/livescript')).default);
case 'llvm':
return hljs.registerLanguage('llvm', (await import('highlight.js/lib/languages/llvm')).default);
case 'lsl':
return hljs.registerLanguage('lsl', (await import('highlight.js/lib/languages/lsl')).default);
case 'lua':
return hljs.registerLanguage('lua', (await import('highlight.js/lib/languages/lua')).default);
case 'makefile':
return hljs.registerLanguage('makefile', (await import('highlight.js/lib/languages/makefile')).default);
case 'markdown':
return hljs.registerLanguage('markdown', (await import('highlight.js/lib/languages/markdown')).default);
case 'mathematica':
return hljs.registerLanguage('mathematica', (await import('highlight.js/lib/languages/mathematica')).default);
case 'matlab':
return hljs.registerLanguage('matlab', (await import('highlight.js/lib/languages/matlab')).default);
case 'maxima':
return hljs.registerLanguage('maxima', (await import('highlight.js/lib/languages/maxima')).default);
case 'mel':
return hljs.registerLanguage('mel', (await import('highlight.js/lib/languages/mel')).default);
case 'mercury':
return hljs.registerLanguage('mercury', (await import('highlight.js/lib/languages/mercury')).default);
case 'mipsasm':
return hljs.registerLanguage('mipsasm', (await import('highlight.js/lib/languages/mipsasm')).default);
case 'mizar':
return hljs.registerLanguage('mizar', (await import('highlight.js/lib/languages/mizar')).default);
case 'perl':
return hljs.registerLanguage('perl', (await import('highlight.js/lib/languages/perl')).default);
case 'mojolicious':
return hljs.registerLanguage('mojolicious', (await import('highlight.js/lib/languages/mojolicious')).default);
case 'monkey':
return hljs.registerLanguage('monkey', (await import('highlight.js/lib/languages/monkey')).default);
case 'moonscript':
return hljs.registerLanguage('moonscript', (await import('highlight.js/lib/languages/moonscript')).default);
case 'n1ql':
return hljs.registerLanguage('n1ql', (await import('highlight.js/lib/languages/n1ql')).default);
case 'nginx':
return hljs.registerLanguage('nginx', (await import('highlight.js/lib/languages/nginx')).default);
case 'nimrod':
return hljs.registerLanguage('nimrod', (await import('highlight.js/lib/languages/nimrod')).default);
case 'nix':
return hljs.registerLanguage('nix', (await import('highlight.js/lib/languages/nix')).default);
case 'nsis':
return hljs.registerLanguage('nsis', (await import('highlight.js/lib/languages/nsis')).default);
case 'objectivec':
return hljs.registerLanguage('objectivec', (await import('highlight.js/lib/languages/objectivec')).default);
case 'ocaml':
return hljs.registerLanguage('ocaml', (await import('highlight.js/lib/languages/ocaml')).default);
case 'openscad':
return hljs.registerLanguage('openscad', (await import('highlight.js/lib/languages/openscad')).default);
case 'oxygene':
return hljs.registerLanguage('oxygene', (await import('highlight.js/lib/languages/oxygene')).default);
case 'parser3':
return hljs.registerLanguage('parser3', (await import('highlight.js/lib/languages/parser3')).default);
case 'pf':
return hljs.registerLanguage('pf', (await import('highlight.js/lib/languages/pf')).default);
case 'php':
return hljs.registerLanguage('php', (await import('highlight.js/lib/languages/php')).default);
case 'pony':
return hljs.registerLanguage('pony', (await import('highlight.js/lib/languages/pony')).default);
case 'powershell':
return hljs.registerLanguage('powershell', (await import('highlight.js/lib/languages/powershell')).default);
case 'processing':
return hljs.registerLanguage('processing', (await import('highlight.js/lib/languages/processing')).default);
case 'profile':
return hljs.registerLanguage('profile', (await import('highlight.js/lib/languages/profile')).default);
case 'prolog':
return hljs.registerLanguage('prolog', (await import('highlight.js/lib/languages/prolog')).default);
case 'protobuf':
return hljs.registerLanguage('protobuf', (await import('highlight.js/lib/languages/protobuf')).default);
case 'puppet':
return hljs.registerLanguage('puppet', (await import('highlight.js/lib/languages/puppet')).default);
case 'purebasic':
return hljs.registerLanguage('purebasic', (await import('highlight.js/lib/languages/purebasic')).default);
case 'python':
return hljs.registerLanguage('python', (await import('highlight.js/lib/languages/python')).default);
case 'q':
return hljs.registerLanguage('q', (await import('highlight.js/lib/languages/q')).default);
case 'qml':
return hljs.registerLanguage('qml', (await import('highlight.js/lib/languages/qml')).default);
case 'r':
return hljs.registerLanguage('r', (await import('highlight.js/lib/languages/r')).default);
case 'rib':
return hljs.registerLanguage('rib', (await import('highlight.js/lib/languages/rib')).default);
case 'roboconf':
return hljs.registerLanguage('roboconf', (await import('highlight.js/lib/languages/roboconf')).default);
case 'rsl':
return hljs.registerLanguage('rsl', (await import('highlight.js/lib/languages/rsl')).default);
case 'ruleslanguage':
return hljs.registerLanguage('ruleslanguage', (await import('highlight.js/lib/languages/ruleslanguage')).default);
case 'rust':
return hljs.registerLanguage('rust', (await import('highlight.js/lib/languages/rust')).default);
case 'scala':
return hljs.registerLanguage('scala', (await import('highlight.js/lib/languages/scala')).default);
case 'scheme':
return hljs.registerLanguage('scheme', (await import('highlight.js/lib/languages/scheme')).default);
case 'scilab':
return hljs.registerLanguage('scilab', (await import('highlight.js/lib/languages/scilab')).default);
case 'scss':
return hljs.registerLanguage('scss', (await import('highlight.js/lib/languages/scss')).default);
case 'shell':
return hljs.registerLanguage('shell', (await import('highlight.js/lib/languages/shell')).default);
case 'smali':
return hljs.registerLanguage('smali', (await import('highlight.js/lib/languages/smali')).default);
case 'smalltalk':
return hljs.registerLanguage('smalltalk', (await import('highlight.js/lib/languages/smalltalk')).default);
case 'sml':
return hljs.registerLanguage('sml', (await import('highlight.js/lib/languages/sml')).default);
case 'sqf':
return hljs.registerLanguage('sqf', (await import('highlight.js/lib/languages/sqf')).default);
case 'sql':
return hljs.registerLanguage('sql', (await import('highlight.js/lib/languages/sql')).default);
case 'stan':
return hljs.registerLanguage('stan', (await import('highlight.js/lib/languages/stan')).default);
case 'stata':
return hljs.registerLanguage('stata', (await import('highlight.js/lib/languages/stata')).default);
case 'step21':
return hljs.registerLanguage('step21', (await import('highlight.js/lib/languages/step21')).default);
case 'stylus':
return hljs.registerLanguage('stylus', (await import('highlight.js/lib/languages/stylus')).default);
case 'subunit':
return hljs.registerLanguage('subunit', (await import('highlight.js/lib/languages/subunit')).default);
case 'swift':
return hljs.registerLanguage('swift', (await import('highlight.js/lib/languages/swift')).default);
case 'taggerscript':
return hljs.registerLanguage('taggerscript', (await import('highlight.js/lib/languages/taggerscript')).default);
case 'yaml':
return hljs.registerLanguage('yaml', (await import('highlight.js/lib/languages/yaml')).default);
case 'tap':
return hljs.registerLanguage('tap', (await import('highlight.js/lib/languages/tap')).default);
case 'tcl':
return hljs.registerLanguage('tcl', (await import('highlight.js/lib/languages/tcl')).default);
case 'tex':
return hljs.registerLanguage('tex', (await import('highlight.js/lib/languages/tex')).default);
case 'thrift':
return hljs.registerLanguage('thrift', (await import('highlight.js/lib/languages/thrift')).default);
case 'tp':
return hljs.registerLanguage('tp', (await import('highlight.js/lib/languages/tp')).default);
case 'twig':
return hljs.registerLanguage('twig', (await import('highlight.js/lib/languages/twig')).default);
case 'typescript':
return hljs.registerLanguage('typescript', (await import('highlight.js/lib/languages/typescript')).default);
case 'vala':
return hljs.registerLanguage('vala', (await import('highlight.js/lib/languages/vala')).default);
case 'vbnet':
return hljs.registerLanguage('vbnet', (await import('highlight.js/lib/languages/vbnet')).default);
case 'vbscript':
return hljs.registerLanguage('vbscript', (await import('highlight.js/lib/languages/vbscript')).default);
case 'vbscript-html':
return hljs.registerLanguage('vbscript-html(', (await import('highlight.js/lib/languages/vbscript-html')).default);
case 'verilog':
return hljs.registerLanguage('verilog', (await import('highlight.js/lib/languages/verilog')).default);
case 'vhdl':
return hljs.registerLanguage('vhdl', (await import('highlight.js/lib/languages/vhdl')).default);
case 'vim':
return hljs.registerLanguage('vim', (await import('highlight.js/lib/languages/vim')).default);
case 'x86asm':
return hljs.registerLanguage('x86asm', (await import('highlight.js/lib/languages/x86asm')).default);
case 'xl':
return hljs.registerLanguage('xl', (await import('highlight.js/lib/languages/xl')).default);
case 'xquery':
return hljs.registerLanguage('xquery', (await import('highlight.js/lib/languages/xquery')).default);
case 'zephir':
return hljs.registerLanguage('zephir', (await import('highlight.js/lib/languages/zephir')).default);
default:
return hljs.registerLanguage('plaintext', (await import('highlight.js/lib/languages/plaintext')).default);
}
};
export default hljs;

@ -4,7 +4,7 @@ import _marked from 'marked';
import createDOMPurify from 'dompurify';
import { unescapeHTML, escapeHTML } from '@rocket.chat/string-helpers';
import hljs from '../../hljs';
import hljs, { register } from '../../hljs';
import { getGlobalWindow } from '../../getGlobalWindow';
const renderer = new _marked.Renderer();
@ -72,6 +72,7 @@ const highlight = function(code, lang) {
return code;
}
try {
register(lang);
return hljs.highlight(lang, code).value;
} catch (e) {
// Unknown language

@ -4,7 +4,7 @@
*/
import { unescapeHTML } from '@rocket.chat/string-helpers';
import hljs from '../../hljs';
import hljs, { register } from '../../hljs';
import { addAsToken } from './token';
const inlinecode = (message) => {
@ -40,7 +40,17 @@ const codeblocks = (message) => {
const emptyLanguage = lang === '' ? unescapeHTML(codeMatch[1] + codeMatch[2]) : unescapeHTML(codeMatch[2]);
const code = singleLine ? unescapeHTML(codeMatch[1]) : emptyLanguage;
const result = lang === '' ? hljs.highlightAuto(lang + code) : hljs.highlight(lang, code);
const result = (() => {
if (lang) {
try {
register(lang);
return hljs.highlight(lang, code);
} catch (error) {
console.error(error);
}
}
return hljs.highlightAuto(lang + code);
})();
const token = addAsToken(
message,
`<pre><code class='code-colors hljs ${ result.language }'><span class='copyonly'>\`\`\`<br></span>${ result.value }<span class='copyonly'><br>\`\`\`</span></code></pre>`,

@ -78,13 +78,21 @@ const DefaultAttachment: FC<MessageAttachmentDefault> = (attachment) => {
return field;
}
const { value, ...rest } = field;
const { value, title, ...rest } = field;
return {
...rest,
title: (
<MarkdownText
variant='inline'
parseEmoji
content={title.replace(/(.*)/g, (line: string) => `${line} `)}
/>
),
value: (
<MarkdownText
variant='inline'
parseEmoji
content={value.replace(/(.*)/g, (line: string) => `${line} `)}
/>
),

@ -3,7 +3,7 @@ import React, { ComponentProps, FC, ReactNode } from 'react';
type FieldProps = {
short?: boolean;
title: string;
title: ReactNode;
value: ReactNode;
} & Omit<ComponentProps<typeof Box>, 'title' | 'value'>;

@ -4,13 +4,13 @@ import React, { FC, ReactNode } from 'react';
import Field from './Field';
import ShortField from './ShortField';
type FieldProp = {
type FieldsAttachmentProp = {
short?: boolean;
title: string;
title: ReactNode;
value: ReactNode;
};
const FieldsAttachment: FC<{ fields: FieldProp[] }> = ({ fields }): any => (
const FieldsAttachment: FC<{ fields: FieldsAttachmentProp[] }> = ({ fields }): any => (
<Box flexWrap='wrap' display='flex' mb='x4' mi='neg-x4'>
{fields.map((field, index) =>
field.short ? <ShortField {...field} key={index} /> : <Field {...field} key={index} />,

@ -47,7 +47,7 @@ const Body: FC<BodyProps> = ({ tokens, mentions }) => {
}
if (block.type === 'CODE') {
return <Code value={block.value} key={index} />;
return <Code {...block} key={index} />;
}
if (block.type === 'HEADING') {

@ -2,12 +2,15 @@ import { Bold as ASTBold } from '@rocket.chat/message-parser';
import React, { FC } from 'react';
import Italic from './Italic';
import Link from './Link';
import Strike from './Strike';
const Bold: FC<{ value: ASTBold['value'] }> = ({ value = [] }) => (
<strong>
{value.map((block, index) => {
switch (block.type) {
case 'LINK':
return <Link key={index} value={block.value} />;
case 'PLAIN_TEXT':
return block.value;
case 'STRIKE':

@ -1,19 +1,54 @@
import { Code as ASTCode } from '@rocket.chat/message-parser';
import React, { FC } from 'react';
import React, { FC, useEffect, useState } from 'react';
import hljs, { register } from '../../../../app/markdown/lib/hljs';
import CodeLine from './CodeLine';
const Code: FC<{ value: ASTCode['value'] }> = ({ value = [] }) => (
<code className='code-colors hljs'>
{value.map((block, index) => {
switch (block.type) {
case 'CODE_LINE':
return <CodeLine key={index} value={block.value} />;
default:
return null;
}
})}
</code>
);
type hljsResult = {
language: string;
code: string;
value: string;
};
const isHljsResult = (result: any): result is hljsResult => result && result.value;
const Code: FC<ASTCode> = ({ value = [], language }) => {
const [code, setCode] = useState<(JSX.Element | null)[] | { language: string; code: string }>(
() =>
value.map((block, index) => {
switch (block.type) {
case 'CODE_LINE':
return <CodeLine key={index} value={block.value} />;
default:
return null;
}
}),
);
useEffect(() => {
!language || language === 'none'
? setCode(hljs.highlightAuto(value.map((line) => line.value.value).join('\n')))
: register(language).then(() => {
setCode(hljs.highlight(language, value.map((line) => line.value.value).join('\n')));
});
}, [language, value]);
return (
<code className={`code-colors hljs ${language}`}>
<span className='copyonly'>
\`\`\`
<br />
</span>
{isHljsResult(code) ? (
<div dangerouslySetInnerHTML={{ __html: code.code || code.value }} />
) : (
code
)}
<span className='copyonly'>
<br />
\`\`\`
</span>
</code>
);
};
export default Code;

@ -0,0 +1,21 @@
import { Image as ASTImage } from '@rocket.chat/message-parser';
import React, { FC } from 'react';
type ImageProps = {
value: ASTImage['value'];
};
const style = {
maxWidth: '100%',
};
const Image: FC<ImageProps> = ({ value }) => {
const { src, label } = value;
return (
<a href={src.value} target='_blank' rel='noopener noreferrer'>
<img src={src.value} data-title={src.value} alt={String(label.value)} style={style} />
</a>
);
};
export default Image;

@ -3,6 +3,7 @@ import React, { FC } from 'react';
import Emoji from '../../Emoji';
import Bold from './Bold';
import Image from './Image';
import InlineCode from './InlineCode';
import Italic from './Italic';
import Link from './Link';
@ -18,6 +19,8 @@ const Inline: FC<{ value: ASTParagraph['value']; mentions?: UserMention[] }> = (
<>
{value.map((block, idx) => {
switch (block.type) {
case 'IMAGE':
return <Image key={idx} value={block.value} />;
case 'PLAIN_TEXT':
return block.value;
case 'BOLD':

@ -2,12 +2,15 @@ import { Italic as ASTItalic } from '@rocket.chat/message-parser';
import React, { FC } from 'react';
import Bold from './Bold';
import Link from './Link';
import Strike from './Strike';
const Italic: FC<{ value: ASTItalic['value'] }> = ({ value = [] }) => (
<i>
{value.map((block, index) => {
switch (block.type) {
case 'LINK':
return <Link key={index} value={block.value} />;
case 'PLAIN_TEXT':
return block.value;
case 'STRIKE':

@ -3,11 +3,14 @@ import React, { FC } from 'react';
import Bold from './Bold';
import Italic from './Italic';
import Link from './Link';
const Strike: FC<{ value: ASTStrike['value'] }> = ({ value = [] }) => (
<del>
{value.map((block, index) => {
switch (block.type) {
case 'LINK':
return <Link key={index} value={block.value} />;
case 'PLAIN_TEXT':
return block.value;
case 'BOLD':

@ -7,7 +7,8 @@ import { Tracker } from 'meteor/tracker';
import toastr from 'toastr';
import { hasPermission } from '../../app/authorization/client';
import hljs from '../../app/markdown/lib/hljs';
import { register } from '../../app/markdown/lib/hljs';
import { settings } from '../../app/settings/client';
import { getUserPreference, t } from '../../app/utils/client';
import 'highlight.js/styles/github.css';
import { UserStatus } from '../../definition/UserStatus';
@ -15,8 +16,6 @@ import * as banners from '../lib/banners';
import { synchronizeUserData } from '../lib/userData';
import { fireGlobalEvent } from '../lib/utils/fireGlobalEvent';
hljs.initHighlightingOnLoad();
if (window.DISABLE_ANIMATION) {
toastr.options.timeOut = 1;
toastr.options.showDuration = 0;
@ -100,3 +99,11 @@ Meteor.startup(() => {
);
});
});
Meteor.startup(() => {
Tracker.autorun(() => {
const code = settings.get('Message_Code_highlight') as string | undefined;
code?.split(',').forEach((language: string) => {
language.trim() && register(language.trim());
});
});
});

12
package-lock.json generated

@ -5450,9 +5450,9 @@
}
},
"@rocket.chat/message-parser": {
"version": "0.6.3-dev.322",
"resolved": "https://registry.npmjs.org/@rocket.chat/message-parser/-/message-parser-0.6.3-dev.322.tgz",
"integrity": "sha512-+0jSX9LIbvVkNuRHZruuW58m7yWyQ+GKiHW9k9maF0/pewDnD48YwxhB51u4eqmqhq6Yqmma36M2ucq5Twd3KA=="
"version": "0.6.3-dev.326",
"resolved": "https://registry.npmjs.org/@rocket.chat/message-parser/-/message-parser-0.6.3-dev.326.tgz",
"integrity": "sha512-jZyjROB3ueVWZ1ekKoTs4eRSLLE3h5kgIkVSWb4f23hjTnZVRt2kHh1f5YVKSHi5cfzTIv9ue6U0loPCKJqWsA=="
},
"@rocket.chat/mp3-encoder": {
"version": "0.24.0",
@ -23523,9 +23523,9 @@
}
},
"highlight.js": {
"version": "9.18.3",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz",
"integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ=="
"version": "9.18.5",
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz",
"integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA=="
},
"history": {
"version": "5.0.1",

@ -169,7 +169,7 @@
"@rocket.chat/fuselage-ui-kit": "^0.6.3-dev.322",
"@rocket.chat/icons": "^0.6.3-dev.322",
"@rocket.chat/memo": "^0.6.3-dev.322",
"@rocket.chat/message-parser": "^0.6.3-dev.322",
"@rocket.chat/message-parser": "^0.6.3-dev.326",
"@rocket.chat/mp3-encoder": "^0.24.0",
"@rocket.chat/string-helpers": "^0.6.3-dev.322",
"@rocket.chat/ui-kit": "^0.6.3-dev.322",
@ -215,7 +215,7 @@
"grapheme-splitter": "^1.0.4",
"gridfs-stream": "^1.1.1",
"he": "^1.2.0",
"highlight.js": "^9.18.3",
"highlight.js": "^9.18.5",
"iconv-lite": "^0.6.3",
"image-size": "^1.0.0",
"imap": "^0.8.19",

@ -2842,6 +2842,8 @@
"Message_BadWordsWhitelist": "Remove words from the Blacklist",
"Message_BadWordsWhitelistDescription": "Add a comma-separated list of words to be removed from filter",
"Message_Characther_Limit": "Message Character Limit",
"Message_Code_highlight": "Code highlighting languages list",
"Message_Code_highlight_Description": "Comma separated list of languages (all supported languages at https://github.com/highlightjs/highlight.js/tree/9.18.5#supported-languages) that will be used to highlight code blocks",
"message_counter": "__counter__ message",
"message_counter_plural": "__counter__ messages",
"Message_DateFormat": "Date Format",

Loading…
Cancel
Save