app/assets/javascripts/activeadmin/trumbowyg/plugins/highlight/trumbowyg.highlight.js in activeadmin_trumbowyg-0.2.12 vs app/assets/javascripts/activeadmin/trumbowyg/plugins/highlight/trumbowyg.highlight.js in activeadmin_trumbowyg-0.2.14
- old
+ new
@@ -1,48 +1,247 @@
/* globals Prism */
(function ($, Prism) {
'use strict';
// My plugin default options
- var defaultOptions = {};
+ var defaultOptions = {
+ enableLineHighlight: true,
+ languageNames: {
+ // For updated list of languages
+ // see https://github.com/PrismJS/prism/blob/master/plugins/show-language/prism-show-language.js
+ 'html': 'HTML',
+ 'xml': 'XML',
+ 'svg': 'SVG',
+ 'mathml': 'MathML',
+ 'ssml': 'SSML',
+ 'css': 'CSS',
+ 'clike': 'C-like',
+ 'js': 'JavaScript',
+ 'abap': 'ABAP',
+ 'abnf': 'Augmented Backus–Naur form',
+ 'al': 'AL',
+ 'antlr4': 'ANTLR4',
+ 'g4': 'ANTLR4',
+ 'apacheconf': 'Apache Configuration',
+ 'apl': 'APL',
+ 'aql': 'AQL',
+ 'arff': 'ARFF',
+ 'asciidoc': 'AsciiDoc',
+ 'adoc': 'AsciiDoc',
+ 'asm6502': '6502 Assembly',
+ 'aspnet': 'ASP.NET (C#)',
+ 'autohotkey': 'AutoHotkey',
+ 'autoit': 'AutoIt',
+ 'basic': 'BASIC',
+ 'bbcode': 'BBcode',
+ 'bnf': 'Backus–Naur form',
+ 'rbnf': 'Routing Backus–Naur form',
+ 'conc': 'Concurnas',
+ 'csharp': 'C#',
+ 'cs': 'C#',
+ 'dotnet': 'C#',
+ 'cpp': 'C++',
+ 'cil': 'CIL',
+ 'coffee': 'CoffeeScript',
+ 'cmake': 'CMake',
+ 'csp': 'Content-Security-Policy',
+ 'css-extras': 'CSS Extras',
+ 'dax': 'DAX',
+ 'django': 'Django/Jinja2',
+ 'jinja2': 'Django/Jinja2',
+ 'dns-zone-file': 'DNS zone file',
+ 'dns-zone': 'DNS zone file',
+ 'dockerfile': 'Docker',
+ 'ebnf': 'Extended Backus–Naur form',
+ 'ejs': 'EJS',
+ 'etlua': 'Embedded Lua templating',
+ 'erb': 'ERB',
+ 'excel-formula': 'Excel Formula',
+ 'xlsx': 'Excel Formula',
+ 'xls': 'Excel Formula',
+ 'fsharp': 'F#',
+ 'firestore-security-rules': 'Firestore security rules',
+ 'ftl': 'FreeMarker Template Language',
+ 'gcode': 'G-code',
+ 'gdscript': 'GDScript',
+ 'gedcom': 'GEDCOM',
+ 'glsl': 'GLSL',
+ 'gml': 'GameMaker Language',
+ 'gamemakerlanguage': 'GameMaker Language',
+ 'graphql': 'GraphQL',
+ 'hs': 'Haskell',
+ 'hcl': 'HCL',
+ 'hlsl': 'HLSL',
+ 'http': 'HTTP',
+ 'hpkp': 'HTTP Public-Key-Pins',
+ 'hsts': 'HTTP Strict-Transport-Security',
+ 'ichigojam': 'IchigoJam',
+ 'iecst': 'Structured Text (IEC 61131-3)',
+ 'inform7': 'Inform 7',
+ 'javadoc': 'JavaDoc',
+ 'javadoclike': 'JavaDoc-like',
+ 'javastacktrace': 'Java stack trace',
+ 'jq': 'JQ',
+ 'jsdoc': 'JSDoc',
+ 'js-extras': 'JS Extras',
+ 'js-templates': 'JS Templates',
+ 'json': 'JSON',
+ 'jsonp': 'JSONP',
+ 'json5': 'JSON5',
+ 'latex': 'LaTeX',
+ 'tex': 'TeX',
+ 'context': 'ConTeXt',
+ 'lilypond': 'LilyPond',
+ 'ly': 'LilyPond',
+ 'emacs': 'Lisp',
+ 'elisp': 'Lisp',
+ 'emacs-lisp': 'Lisp',
+ 'llvm': 'LLVM IR',
+ 'lolcode': 'LOLCODE',
+ 'md': 'Markdown',
+ 'markup-templating': 'Markup templating',
+ 'matlab': 'MATLAB',
+ 'mel': 'MEL',
+ 'moon': 'MoonScript',
+ 'n1ql': 'N1QL',
+ 'n4js': 'N4JS',
+ 'n4jsd': 'N4JS',
+ 'nand2tetris-hdl': 'Nand To Tetris HDL',
+ 'nasm': 'NASM',
+ 'neon': 'NEON',
+ 'nginx': 'nginx',
+ 'nsis': 'NSIS',
+ 'objectivec': 'Objective-C',
+ 'objc': 'Objective-C',
+ 'ocaml': 'OCaml',
+ 'opencl': 'OpenCL',
+ 'parigp': 'PARI/GP',
+ 'objectpascal': 'Object Pascal',
+ 'pcaxis': 'PC-Axis',
+ 'px': 'PC-Axis',
+ 'peoplecode': 'PeopleCode',
+ 'pcode': 'PeopleCode',
+ 'php': 'PHP',
+ 'phpdoc': 'PHPDoc',
+ 'php-extras': 'PHP Extras',
+ 'plsql': 'PL/SQL',
+ 'powerquery': 'PowerQuery',
+ 'pq': 'PowerQuery',
+ 'mscript': 'PowerQuery',
+ 'powershell': 'PowerShell',
+ 'properties': '.properties',
+ 'protobuf': 'Protocol Buffers',
+ 'py': 'Python',
+ 'q': 'Q (kdb+ database)',
+ 'qml': 'QML',
+ 'rkt': 'Racket',
+ 'jsx': 'React JSX',
+ 'tsx': 'React TSX',
+ 'renpy': 'Ren\'py',
+ 'rest': 'reST (reStructuredText)',
+ 'robotframework': 'Robot Framework',
+ 'robot': 'Robot Framework',
+ 'rb': 'Ruby',
+ 'sas': 'SAS',
+ 'sass': 'Sass (Sass)',
+ 'scss': 'Sass (Scss)',
+ 'shell-session': 'Shell session',
+ 'solidity': 'Solidity (Ethereum)',
+ 'solution-file': 'Solution file',
+ 'sln': 'Solution file',
+ 'soy': 'Soy (Closure Template)',
+ 'sparql': 'SPARQL',
+ 'rq': 'SPARQL',
+ 'splunk-spl': 'Splunk SPL',
+ 'sqf': 'SQF: Status Quo Function (Arma 3)',
+ 'sql': 'SQL',
+ 'tap': 'TAP',
+ 'toml': 'TOML',
+ 'tt2': 'Template Toolkit 2',
+ 'trig': 'TriG',
+ 'ts': 'TypeScript',
+ 't4-cs': 'T4 Text Templates (C#)',
+ 't4': 'T4 Text Templates (C#)',
+ 't4-vb': 'T4 Text Templates (VB)',
+ 't4-templating': 'T4 templating',
+ 'uscript': 'UnrealScript',
+ 'uc': 'UnrealScript',
+ 'vbnet': 'VB.Net',
+ 'vhdl': 'VHDL',
+ 'vim': 'vim',
+ 'visual-basic': 'Visual Basic',
+ 'vb': 'Visual Basic',
+ 'wasm': 'WebAssembly',
+ 'wiki': 'Wiki markup',
+ 'xeoracube': 'XeoraCube',
+ 'xojo': 'Xojo (REALbasic)',
+ 'xquery': 'XQuery',
+ 'yaml': 'YAML',
+ 'yml': 'YAML'
+ }
+ };
function highlightIt(text, language, lineHighlight) {
return [
'<pre class="language-' + language + '" ' + (lineHighlight ? 'data-line="' + lineHighlight + '"' : '') + '>',
'<code class="language-' + language + '">' + Prism.highlight(text, Prism.languages[language]) + '</code>',
'</pre>',
].join('');
}
+ function escapeHtml(html) {
+ return $('<div/>').text(html).html();
+ }
+
+ function buildHighlightOptions(trumbowyg) {
+ var languageNames = trumbowyg.o.plugins.highlight.languageNames;
+ var languageNameKeys = Object.keys(languageNames);
+ var prismLanguageKeys = Object.keys(Prism.languages);
+
+ var options = prismLanguageKeys.filter(function (languageKey) {
+ return languageNameKeys.indexOf(languageKey) >= 0;
+ }).map(function (languageKey) {
+ return {
+ id: languageKey,
+ name: languageNames[languageKey]
+ };
+ }).sort(function(a, b){
+ // Sort languages by name
+ return a.name.localeCompare(b.name);
+ }).map(function( language){
+ // Generate a list of options
+ return '<option value="' + escapeHtml(language.id) + '">' + escapeHtml(language.name) + '</option>';
+ }).join('');
+
+ return options;
+ }
+
+ function buildLineHighlightFieldIfEnabled(trumbowyg) {
+ if (trumbowyg.o.plugins.highlight.enableLineHighlight === false) {
+ return '';
+ }
+
+ return '<div class="' + trumbowyg.o.prefix + 'highlight-form-group">' +
+ ' <input placeholder="' + trumbowyg.lang.highlightLine +
+ '" class="' + trumbowyg.o.prefix + 'highlight-form-control trumbowyg-line-highlight"/>' +
+ '</div>';
+ }
+
// If my plugin is a button
function buildButtonDef(trumbowyg) {
return {
fn: function () {
var $modal = trumbowyg.openModal('Code', [
'<div class="' + trumbowyg.o.prefix + 'highlight-form-group">',
- ' <select class="' + trumbowyg.o.prefix + 'highlight-form-control language">',
- (function () {
- var options = '';
-
- for (var lang in Prism.languages) {
- if (Prism.languages.hasOwnProperty(lang)) {
- options += '<option value="' + lang + '">' + lang + '</option>';
- }
- }
-
- return options;
- })(),
+ ' <select class="' + trumbowyg.o.prefix + 'highlight-form-control language" autofocus>',
+ buildHighlightOptions(trumbowyg),
' </select>',
'</div>',
'<div class="' + trumbowyg.o.prefix + 'highlight-form-group">',
' <textarea class="' + trumbowyg.o.prefix + 'highlight-form-control code"></textarea>',
'</div>',
- '<div class="' + trumbowyg.o.prefix + 'highlight-form-group">',
- ' <input title="'+ trumbowyg.lang.prismHighlightPluginAlert +
- '" placeholder="' + trumbowyg.lang.highlightLine +
- '" class="' + trumbowyg.o.prefix + 'highlight-form-control trumbowyg-line-highlight"/>',
- '</div>'
+ buildLineHighlightFieldIfEnabled(trumbowyg),
].join('\n')),
$language = $modal.find('.language'),
$code = $modal.find('.code'),
$lineHighlight = $modal.find('.trumbowyg-line-highlight');
@@ -66,16 +265,18 @@
// Add some translations
langs: {
// jshint camelcase:false
en: {
highlight: 'Code syntax highlight',
- highlightLine: 'Highlight lines, e.g.: 1,3-5',
- prismHighlightPluginAlert: 'You must have Prism Line Highlight plugin installed'
+ highlightLine: 'Highlight lines, e.g.: 1,3-5'
},
es: {
highlight: 'Resaltado de sintaxis de código',
- highlightLine: 'Resaltar lineas, ej: 1,3-5',
- prismHighlightPluginAlert: 'Debes de tener el plugin Prism Line Highlight instalado'
+ highlightLine: 'Resaltar lineas, ej: 1,3-5'
+ },
+ et: {
+ highlight: 'Koodi esiletoomine',
+ highlightLine: 'Koodiread, näiteks: 1,3-5'
},
hu: {
highlight: 'Kód kiemelés'
},
ko: {