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: {