unless runner?
for key, func of converters
[from, to] = key.split ':'
if type is from and runners[to]
runner = runners[to]
code = func(opts, code)
if not runner?
console.error "Couldn't find a way to run #{ type } block"
return
runner opts, code
execute: ->
code = @getValue()
codeType = @getType()
@$el.trigger 'executrBeforeExecute', [code, codeType, @opts]
if @opts.setUp?
@opts.setUp(codeType, @opts)
output = @run codeType, @opts, code
if @opts.tearDown?
@opts.tearDown(output, codeType, @opts)
@$el.trigger 'executrAfterExecute', [output, code, codeType, @opts]
insertOutput @opts, output
getCodeElement = (e, opts) ->
$target = $ e.target
$code = $target.parents(opts.codeSelector)
if not $code.length and $target.is(opts.codeSelector)
$code = $target
$code
insertOutput = (opts, output) ->
if opts.outputTo
if opts.appendOutput
$(opts.outputTo).append $('<div>').text(output)
else
$(opts.outputTo).text output
$.fn.executr = (opts) ->
defaults =
codeSelector: 'code[executable]'
outputTo: false
appendOutput: true
defaultType: 'coffee'
buttonText: "RUN"
opts = $.extend {}, defaults, opts
if this.is(opts.codeSelector)