From b8f979d636e9b14898d39343094c4e57e1e1cfc2 Mon Sep 17 00:00:00 2001 From: Yauheni Pakala Date: Sat, 25 Feb 2023 22:10:17 +0200 Subject: [PATCH 1/4] WIP: add fallback option --- src/highlightjs-lang.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/highlightjs-lang.js b/src/highlightjs-lang.js index 3c679af..0f1db44 100644 --- a/src/highlightjs-lang.js +++ b/src/highlightjs-lang.js @@ -56,7 +56,7 @@ if (lang !== '') { var langPanel = document.createElement('div'); langPanel.className = 'hljs-lang'; - langPanel.textContent = convertLangName(lang, internalOptions.overrideNames); + langPanel.textContent = convertLangName(lang, internalOptions); element.parentNode.insertBefore(langPanel, element); } } @@ -70,6 +70,7 @@ options = options || {}; return { overrideNames: getOverrideNamesOption(element, langKey, options), + fallback: getFallbackOption(options), }; } @@ -91,6 +92,23 @@ return overrideNames; } + function getFallbackOption (options) { + return !!options.fallback + ? options.fallback + : defaultFallbackOption; + } + + function defaultFallbackOption (codeLang) { + if (!!codeLang) { + var lang = codeLang.trim(); + if (lang.length > 0) { + lang[0] = lang[0].toUpperCase(); + return lang; + } + } + return codeLang; + } + function getLangNameFromElement (element) { var classes = element.className.split(' '); var lang = getLangNameFromClasses(classes); @@ -105,9 +123,9 @@ return ''; } - function convertLangName(langKey, overrideNamesMap) + function convertLangName(langKey, options) { - var overriddenLangName = overrideNamesMap[langKey]; + var overriddenLangName = options.overrideNames[langKey]; if (!!overriddenLangName) { return overriddenLangName; } @@ -117,7 +135,7 @@ return langName; } - return langKey; + return options.fallback(langKey); } /** From f9a91d148004b8335109cd3e0f3be9421b846f56 Mon Sep 17 00:00:00 2001 From: Yauheni Pakala Date: Sat, 25 Feb 2023 22:10:46 +0200 Subject: [PATCH 2/4] Setup npm package content --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index a20d464..a97442c 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,10 @@ "version": "1.1.0", "description": "Highlight.js plugin for display language of syntax highlight.", "main": "gulpfile.js", + "files": [ + "/src", + "/dist" + ], "devDependencies": { "gulp": "^4.0.2", "gulp-rename": "^2.0.0", From dc8b23fdbb0f7edec843ede8479dad23c2802a51 Mon Sep 17 00:00:00 2001 From: Yauheni Pakala Date: Sun, 26 Feb 2023 23:13:34 +0200 Subject: [PATCH 3/4] Finalize fallback option --- README.md | 21 +++++++++++++++++++++ dist/highlightjs-lang.min.js | 2 +- index.html | 12 ++++++++++-- src/highlightjs-lang.js | 11 ++--------- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f41c1bc..e52f5e3 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@ After version 1.1.0 plugin has optional parameter `options` - for custom setup: version | name | type | default value | description --------|---------------|---------|---------------|----------------------- v1.1.0 | overrideNames | object | {} | [Override the default language names](#overrideNames) +v1.1.1 | fallback | func(str): str | (lang) => lang | [Fallback to convert unknown names](#fallback) ### Examples of using @@ -118,6 +119,26 @@ In both cases language name will be `C#`. > [List of default language names](https://github.com/wcoder/highlightjs-lang.js/blob/master/src/highlightjs-lang.js#L4-L10) +### fallback + +Specifying the desired format for undeclared language names: + +```js +var myOptions = { + // ... + fallback: function (lang) { + return '~~' + lang; + }, + // ... +}; +``` + +Convert all undeclared language names to names with `~~` prefix: + +``` +xyz -> ~~xyz +``` + ## Skipping some blocks (Applies to `hljs.initLangOnLoad()` initialization only.) diff --git a/dist/highlightjs-lang.min.js b/dist/highlightjs-lang.min.js index 2686279..1ca48fd 100644 --- a/dist/highlightjs-lang.min.js +++ b/dist/highlightjs-lang.min.js @@ -1 +1 @@ -!function(r,o){"use strict";var a={cpp:"C++",cs:"C#",csharp:"C#",fsharp:"F#",objectivec:"Objective-C"};function t(e){try{var t,n=o.querySelectorAll("code.hljs,code.nohighlight");for(t in n)!n.hasOwnProperty(t)||n[t].classList.contains("nohljslang")||i(n[t],e)}catch(e){r.console.error("hljs-lang error: ",e)}}function i(e,t){var n,r;"object"==typeof e&&(n=function(e){if(e&&1 diff --git a/src/highlightjs-lang.js b/src/highlightjs-lang.js index 0f1db44..1c9e18d 100644 --- a/src/highlightjs-lang.js +++ b/src/highlightjs-lang.js @@ -98,15 +98,8 @@ : defaultFallbackOption; } - function defaultFallbackOption (codeLang) { - if (!!codeLang) { - var lang = codeLang.trim(); - if (lang.length > 0) { - lang[0] = lang[0].toUpperCase(); - return lang; - } - } - return codeLang; + function defaultFallbackOption (langKey) { + return langKey; } function getLangNameFromElement (element) { From c8bc04a209ca8a1867e4a71613fd71f77c5db673 Mon Sep 17 00:00:00 2001 From: Yauheni Pakala Date: Sun, 26 Feb 2023 23:13:45 +0200 Subject: [PATCH 4/4] Refactor README --- README.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e52f5e3..44b0266 100644 --- a/README.md +++ b/README.md @@ -12,19 +12,13 @@ npm i highlightjs-lang.js ``` -### Bower - -```bash -bower install highlightjs-lang -``` - #### Getting the library from CDN ```html - + ``` -highlightjs-lang.js 1.1.0 is known to work with highlight.js 11.3.1. +highlightjs-lang.js 1.1.0 is known to work with highlight.js 11.3.1+ ## Usage @@ -33,6 +27,7 @@ Download plugin and include file after highlight.js: ```html + ``` @@ -57,7 +52,7 @@ Initialize plugin after highlight.js: ```js hljs.highlightAll(); -hljs.initLangOnLoad(); +hljs.initLangOnLoad(); // <-- init plugin ``` Here’s an equivalent way to calling `initLangBlock` using jQuery: @@ -99,9 +94,11 @@ If you want to override the default language name, you can specify a _overridden ```js var myOptions = { + // ... overrideNames: { cs: 'C#', - } + }, + // ... }; ```