1.0.3 • Published 4 years ago

code-knack v1.0.3

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

Code-Knack

A code evaluator on your web page. Support both client implements and server implements.

  • Mobile compatibility
  • Allow running code at client side or server (implement yourself)
  • Inject required script files automatically
  • Good design and theme support
  • Syntax highlight editor (powered by CodeMirror)
  • Multi-languages support (powered by different projects, see table followed)

TODO

  • Java support
  • Diagram output
  • LaTeX output
  • Python 3 support
  • script state/network state detection
  • Chart

Demo

screen record

Basic Demo:

Integration:

How to use

For browser

  1. use the production version in /dist
<script src="./code-knack.min.js" type="application/javascript"></script>
  1. CodeKnack uses CodeMirror as the editor, so you need to link CodeMirror's script and css files
<link rel="stylesheet", href="./lib/codemirror/codemirror.css"></link>
<link rel="stylesheet", href="./lib/codemirror/theme/monokai.css"></link>
<link rel="stylesheet", href="./lib/codemirror/theme/base16-light.css"></link>
<script src="./lib/codemirror/codemirror.js" type="application/javascript"></script>
  1. Configure CodeKnack and init.

if you use the default output of marked, you don't need to specify elements and guessLang. Or you need to find all elements contain code(usually in pre > code) and implement guessLang(a function uses an element as argument and return language name in lowercase)

 var codeKnack = new CodeKnack({
    codeKnackPath: './lib/code-knack',  // the resource path of code-knack
    elements: elements,                 // an array contains elements with code
    guessLang: guessLang,               // a function to guess language in each element
    enabledLanguages: langs,            // enabled language array
    theme: 'dark',                      // dark theme
    lineNumbers: true,                  // enabled line numbers
    languages: {                        // language config, if you want to add language support manually
      ...
    }
 })
 codeKnack.init()

See Demo for more details.

For npm package

WIP

CodeKnack Options

OptionsRequired?DefaultsDescription
codeKnackPathYes'/lib/code-knack/'path to CodeKnack
enabledLanguagesYes[]enabled languages array
elementsOptionalall elements pre > codean array contains DOM elements
guessLangOptionalelements with class="language-{name and options}"a function to guess language for each element
keepSessionOptionalfalseif true, all codeblocks in same page will be considered in one session
themeOptional'dark'dark or light theme
lineNumbersOptionaltruetoggle line number
languagesOptional-see followed

CodeKnack Language Config

By default, Code-Knack has built-in language configs (here).

Specified the languages field if you want to add new language support, or want to overwrite the existed config

  languages: {
    "YOUR_LANGUAGE_NAME": {
      "mode": "...",              // 'view', 'browser' or 'proxy'
      "output": "...",            // 'text' or 'html'
      "proxyUrl": "...",          // required when mode == 'proxy'. A url to run code 
      "scripts": {      
        "syntax": ["..."],        // url of codemirror language mode files
        "engine": ["..."]         // required when mode == 'browser', url of code-knack browser engine files
      }
    },
    ...
  }

Executable Languages

LanguageImplement
C/CPPJSCPP
javascript-
python 2.7Skulpt
rubyOpal
schemeBiwascheme
swiftiSwift

Developement

install dependences.

$ npm install

build dev version

$ npm run dev

build production version

$ npm run prod