UNPKG

@init-kz/init-code-highlight-ts

Version:

A micro code-editor for awesome web pages

192 lines (141 loc) 4.21 kB
<p align="center"> <p align="center"> <a href="https://init.kz/en"> <img src="assets/favicon.svg" width="100" height="100" alt="Logo"> </a> </p> InitCodeHighlight: A micro code-editor for awesome web pages.<br> (Originally A Fork of <a href="https://github.com/kazzkiq/CodeFlask">CodeFlask</a>) </p> <p align="center"> <img src="assets/code.png" width="739"> </p> ## Why? CodeFlask was a brilliant project, but seems to be unmaintained. ### Kitchen Sink Example ```js cup = new InitCodeHighlight('#cf_holder', { language: "javascript", lineNumbers: true , copyButton: true, maxLines : 15, minLines : 5 }); ``` ### Changes * Added max line number option * Switched from rollup to webpack * Added example folder * disabled e2e tests * Small theme tweaks (Border, rounded corners.) > [!IMPORTANT] > Languages are now loaded async (via prismjs), so you can load any language you want, without having to bundle them all. - Jan 2024 > [!NOTE] > Languages supported are : [https://prismjs.com/#supported-languages](https://prismjs.com/#supported-languages) ### Core Changes as PR > (Submitted as [PR](https://github.com/kazzkiq/CodeFlask/pull/134) to CodeFlask, incase it gets picked up again) * Added support to destroy * Added Linenumber add / remove * Added Linenumber toggle * Added Readonly toggle --- ## Installation You can install InitCodeHighlight via npm: ``` npm i @init-kz/init-code-highlight-ts ``` ## Usage ```js import InitCodeHighlight from '@init-kz/init-code-highlight-ts'; const cup = new InitCodeHighlight('#my-selector', { language: 'js' }); ``` You can also pass a DOM element instead of a selector: ```js import InitCodeHighlight from '@init-kz/init-code-highlight-ts'; const editorElem = document.getElementById('editor'); const cup = new InitCodeHighlight(editorElem, { language: 'js' }); ``` Usage with Shadow DOM: ```js import InitCodeHighlight from '@init-kz/init-code-highlight-ts'; ... const shadowElem = this.shadowRoot.querySelector('#editor'); const cup = new InitCodeHighlight(shadowElem, { language: 'js', styleParent: this.shadowRoot }); ``` ### Listening for changes in editor ```js cup.onUpdate((code) => { // do something with code here. // this will trigger whenever the code // in the editor changes. }); ``` ### Updating the editor programatically ```js // This will also trigger .onUpdate() cup.updateCode('const my_new_code_here = "Blabla"'); ``` ### Getting the current code from editor ```js const code = cup.getCode(); ``` ### Copy Button The copy button is now enabled by default, and will copy the code to the clipboard when clicked. it can be disabled by passing `copyButton: false` in the options. ```js const cup = new InitCodeHighlight('#my-selector', { language: 'javascript', copyButton: false }); ``` ### Enabling line numbers ```js import InitCodeHighlight from '@init-kz/init-code-highlight-ts'; const cup = new InitCodeHighlight('#my-selector', { language: 'js', lineNumbers: true }); ``` You can also toggle line numbers after the editor is created: ```js cup.toggleLineNumbers(); ``` ### Setting max and min lines > [!IMPORTANT] > As of `1.90`, You can also set the max line number, (Default is 100), And the min line number, (Default is 1) > [!NOTE] > If you want it to be a fixed number of lines, set both to the same number. ```js import InitCodeHighlight from '@init-kz/init-code-highlight-ts'; const cup = new InitCodeHighlight('#my-selector', { language: 'js', lineNumbers: true, maxLines: 10, minLines: 10 }); ``` ### Enabling read only mode ```js import InitCodeHighlight from '@init-kz/init-code-highlight-ts'; const cup = new InitCodeHighlight('#my-selector', { language: 'javascript', readonly: true }); ``` ### changing other languages support: ```js cup.updateLanguage('ruby') // cup.updateLanguage('javascript') // ``` #### For Example to add change dynamically from 'Ruby' to 'javascript' ```js import Prism from 'prismjs'; import InitCodeHighlight from '@init-kz/init-code-highlight-ts'; const cup = new InitCodeHighlight('#my-selector', { language: 'ruby', readonly: true }); cup.updateLanguage('javascript'); ```