mirror of
https://github.com/snipe/snipe-it.git
synced 2024-12-29 07:29:44 -08:00
114 lines
2.5 KiB
CoffeeScript
114 lines
2.5 KiB
CoffeeScript
|
{uniqueId} = Tether.Utils
|
||
|
|
||
|
SETUP_JS = """
|
||
|
yellowBox = $('.yellow-box', $output);
|
||
|
greenBox = $('.green-box', $output);
|
||
|
scrollBox = $('.scroll-box', $output);
|
||
|
"""
|
||
|
|
||
|
OUTPUT_HTML = (key) -> """
|
||
|
<div class="scroll-box">
|
||
|
<div class="scroll-content">
|
||
|
<div class="yellow-box" data-example="#{ key }"></div>
|
||
|
<div class="green-box" data-example="#{ key }"></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
"""
|
||
|
|
||
|
tethers = {}
|
||
|
|
||
|
getOutput = ($block) ->
|
||
|
key = $block.data('example')
|
||
|
if key and typeof key is 'string'
|
||
|
return $("output[data-example='#{ key }']")
|
||
|
else
|
||
|
return $block.parents('pre').nextAll('output').first()
|
||
|
|
||
|
run = (key) ->
|
||
|
if typeof key is 'string'
|
||
|
$block = $("code[data-example='#{ key }']")
|
||
|
else
|
||
|
$block = key
|
||
|
|
||
|
key = $block.attr('data-example')
|
||
|
|
||
|
$output = getOutput $block
|
||
|
|
||
|
code = $block.text()
|
||
|
code = SETUP_JS + code
|
||
|
|
||
|
window.$output = $output
|
||
|
tethers[key] = eval code
|
||
|
|
||
|
setupBlock = ($block) ->
|
||
|
key = $block.data('example')
|
||
|
|
||
|
$output = getOutput $block
|
||
|
|
||
|
if not key
|
||
|
key = uniqueId()
|
||
|
$block.attr('data-example', key)
|
||
|
$output.attr('data-example', key)
|
||
|
$output.find('.tether-element').attr('data-example', key)
|
||
|
|
||
|
$output.html OUTPUT_HTML(key)
|
||
|
|
||
|
$scrollBox = $output.find('.scroll-box')
|
||
|
$scrollContent = $scrollBox.find('.scroll-content')
|
||
|
$scrollBox.scrollTop(parseInt($scrollContent.css('height')) / 2 - $scrollBox.height() / 2)
|
||
|
$scrollBox.scrollLeft(parseInt($scrollContent.css('width')) / 2 - $scrollBox.width() / 2)
|
||
|
setTimeout ->
|
||
|
$scrollBox.on 'scroll', ->
|
||
|
$output.addClass 'scrolled'
|
||
|
|
||
|
$scrollBox.css 'height', "#{ $block.parent().outerHeight() }px"
|
||
|
|
||
|
if not $output.attr('deactivated')?
|
||
|
run $block
|
||
|
|
||
|
$(document.body).on 'click', (e) ->
|
||
|
if $(e.target).is('output[deactivated]')
|
||
|
activate $(e.target)
|
||
|
false
|
||
|
else if $(e.target).is('output[activated]')
|
||
|
deactivate $(e.target)
|
||
|
false
|
||
|
|
||
|
activate = ($output) ->
|
||
|
$block = $output.prev().find('code')
|
||
|
|
||
|
run $block
|
||
|
|
||
|
$output.find('.tether-element').show()
|
||
|
|
||
|
key = $output.data('example')
|
||
|
$(tethers[key].element).show()
|
||
|
tethers[key].enable()
|
||
|
|
||
|
$output.removeAttr('deactivated')
|
||
|
$output.attr('activated', true)
|
||
|
|
||
|
deactivate = ($output) ->
|
||
|
$block = $output.prev().find('code')
|
||
|
key = $output.data('example')
|
||
|
|
||
|
tethers[key].disable()
|
||
|
|
||
|
$el = $(tethers[key].element)
|
||
|
$el.detach()
|
||
|
$output.find('.scroll-content').append $el
|
||
|
$el.hide()
|
||
|
|
||
|
$output.removeAttr('activated')
|
||
|
$output.attr('deactivated', true)
|
||
|
|
||
|
init = ->
|
||
|
$blocks = $('code[data-example]')
|
||
|
|
||
|
setupBlock($ block) for block in $blocks
|
||
|
|
||
|
window.EXECUTR_OPTIONS =
|
||
|
codeSelector: 'code[executable]'
|
||
|
|
||
|
$ init
|