coffeescript-ui
Version:
Coffeescript User Interface System
182 lines (149 loc) • 4.04 kB
text/coffeescript
###
* coffeescript-ui - Coffeescript User Interface System (CUI)
* Copyright (c) 2013 - 2016 Programmfabrik GmbH
* MIT Licence
* https://github.com/programmfabrik/coffeescript-ui, http://www.coffeescript-ui.org
###
# Modal
#
class CUI.Modal extends CUI.LayerPane
:
cancel_tooltip: text: "Close Dialog"
#Construct a new CUI.Modal.
#
constructor: (opts) ->
super(opts)
toggleFillScreenButton = CUI.Pane.getToggleFillScreenButton(tooltip: )
do_cancel = (ev) =>
toggleFillScreenButton.deactivate()
htbn = "cancel",
class: "ez5-modal-close-button"
icon: "close"
tooltip: or CUI.Modal.defaults.cancel_tooltip
appearance: "normal"
onClick: (ev) =>
do_cancel(ev)
.addClass("cui-pane--window")
if
CUI.Events.listen
type: ["start-fill-screen", "end-fill-screen"]
node:
call: (ev) =>
.call(@, ev, @)
if and and == "auto"
bd =
if bd
CUI.Events.listen
type: "click"
node: bd
call: (ev) =>
do_cancel(ev)
return
initOpts: ->
super()
"backdrop",
default:
policy: "modal"
add_bounce_class: true
content: null
cancel:
check: Boolean
cancel_action:
default: "destroy"
check: ["destroy", "hide"]
cancel_tooltip:
check: "PlainObject"
cancel_with_click_on_backdrop:
mandatory: true
default: true
check: Boolean
onCancel:
check: Function
# show a fill screen button
fill_screen_button:
check: Boolean
fill_screen_button_tooltip:
check: "PlainObject"
onToggleFillScreen:
check: Function
"placement",
default: "c"
readOpts: ->
if .cancel and CUI.util.isPlainObject(.pane)
.pane.force_header = true
super()
__addHeaderButton: (pname, _btn) ->
if not @["_#{pname}"]
return
if CUI.util.isPlainObject(_btn)
btn = new CUI.defaults.class.Button(_btn)
else
btn = _btn
CUI.util.assert(btn instanceof CUI.Button, "Modal.__addHeaderButton", "Button needs to be instance of Button", btn: btn)
CUI.util.assert( instanceof CUI.SimplePane, "new #{@__cls}", "opts.#{pname} can only be used if opts.pane is instance of SimplePane.", pane: , opts: )
return btn
__runOnAllButtons: (func) ->
for el in CUI.dom.matchSelector(.DOM, ".cui-button,.cui-data-field")
btn = CUI.dom.data(el, "element")
if btn instanceof CUI.Button or btn instanceof CUI.DataField
btn[func]()
return
disableAllButtons: ->
enableAllButtons: ->
isKeyboardCancellable: (ev) ->
if
true
else
super(ev)
doCancel: (ev, force_callback = false, button = null) ->
if not and not force_callback
super(ev)
else
ret = ?(ev, @)
if CUI.util.isPromise(ret)
if button
button.disable()
button.startSpinner()
ret.always =>
button.stopSpinner()
button.enable()
ret.done (value) => @[](ev, value)
else if ret != false
@[](ev, ret)
return
focusOnShow: (ev) ->
if ev == CUI.KeyboardEvent
# set focus back on hide
= true
else
= false
.focus()
@
forceFocusOnShow: ->
true
# PROXY some functions
empty: (key="center") ->
.empty(key)
@
append: (content, key="center") ->
.append(content, key)
@
replace: (content, key="center") ->
.replace(content, key)
@
setContent: (content) ->
.replace(content, 'center')
@
hide: (ev) ->
.endFillScreen(false) # no transition
super(ev)