|
@@ -6,38 +6,54 @@ Showdown = require('showdown')
|
|
|
class PreviewUI extends Spine.Controller
|
|
|
tag: 'div'
|
|
|
className: 'ui-preview'
|
|
|
+ filed: null
|
|
|
live: true
|
|
|
showClose: true
|
|
|
+ autoOpen: true
|
|
|
|
|
|
events:
|
|
|
'click .close-button': 'close'
|
|
|
+ 'click .preview-button': 'render'
|
|
|
|
|
|
- constructor: (@field) ->
|
|
|
+ constructor: ->
|
|
|
super
|
|
|
- @field = $(@field) if typeof @field is String
|
|
|
- @inner = $('<div class="inner" />')
|
|
|
- @append @inner
|
|
|
-
|
|
|
- @md = new Showdown.converter()
|
|
|
-
|
|
|
- @render()
|
|
|
- @setupLivePreview() if @live
|
|
|
- @setupCloseButton() if @showClose
|
|
|
- @
|
|
|
-
|
|
|
- render: ->
|
|
|
+ if @field
|
|
|
+ @field = $(@field) if typeof @field is String
|
|
|
+ @inner = $('<div class="inner" />')
|
|
|
+ @el.append @inner
|
|
|
+
|
|
|
+ @md = new Showdown.converter()
|
|
|
+
|
|
|
+ @render()
|
|
|
+ @setupLivePreview() if @live
|
|
|
+ @setupPreviewButton() unless @live
|
|
|
+ @setupCloseButton() if @showClose
|
|
|
+ @open() if @autoOpen
|
|
|
+ @
|
|
|
+
|
|
|
+ render: (e) =>
|
|
|
contentHtml = @md.makeHtml(@field.val())
|
|
|
@inner.html contentHtml
|
|
|
|
|
|
- setupLivePreview: ->
|
|
|
- @field.on 'keyup', (e) =>
|
|
|
- @render()
|
|
|
+ setupLivePreview: =>
|
|
|
+ @field.on 'keyup', @render
|
|
|
|
|
|
setupCloseButton: ->
|
|
|
- @append $('<a class="close-button button small">x</a>')
|
|
|
+ @el.append $('<a class="close-button button small">X</a>')
|
|
|
+
|
|
|
+ setupPreviewButton: ->
|
|
|
+ @el.append $('<a class="preview-button button small">Render</a>')
|
|
|
+
|
|
|
+ open: (e) =>
|
|
|
+ e?.preventDefault()
|
|
|
+ # Add to parent form
|
|
|
+ @parentForm = @field.parents('form')
|
|
|
+ @parentForm.append @el
|
|
|
+ @parentForm.addClass('preview-mode')
|
|
|
|
|
|
- close: (e) ->
|
|
|
+ close: (e) =>
|
|
|
e?.preventDefault()
|
|
|
+ @parentForm.removeClass('preview-mode')
|
|
|
@release()
|
|
|
|
|
|
|