coffeescript-ui
Version:
Coffeescript User Interface System
718 lines (676 loc) • 13.7 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
###
CUI.Template.loadTemplateText(require('./FormDemo.html'));
class Demo.FormDemo extends Demo
display: ->
multi_input_control = new CUI.MultiInputControl
user_control: true
preferred_key: "de-DE"
keys: [
name: "de-DE"
tag: "DE"
enabled: true
,
name: "en-US"
tag: "EN"
,
name: "fr-FR"
tag: "FR"
]
@tmpl = t = new CUI.Template
name: "form-demo"
map:
form: true
data: true
data_button: true
data =
simple_input: "Huhu"
number_input: 12.34
multiline_input: "This is a multiline input..."
cb_without: true
horst: "henk"
output: "This is simple Output Only."
its_time_date: "2009-09-19T12:37:27Z"
multi_output:
"de-DE": "Deutsch"
"en-US": "English"
"fr-FR": "Francais"
group: [2,3]
radio2: "B"
email:
pop_input: "pop input email"
pop_cb: true
data_table: []
radio: [ "Eriwan" ]
select: "Republik"
for i in [0..100]
data.data_table.push
HeaderColumnA: "value #{i}"
HeaderColumnRotated90: Math.random()>0.5
actionButton = (df) ->
menu_action_button = new CUI.Button
text: df.getName() or df.__cls
menu:
items: [
text: "hide"
onClick: (ev, btn) ->
df.hide()
CUI.setTimeout ->
df.show()
,
2000
,
text: "show"
onClick: (ev, btn) ->
df.show()
,
text: "disable"
onClick: (ev, btn) ->
df.disable()
,
text: "enable"
onClick: (ev, btn) ->
df.enable()
,
text: "getValue"
onClick: (ev, btn) ->
CUI.util.alert_dump(df.getValue())
,
text: "getInitValue"
onClick: (ev, btn) ->
CUI.util.alert_dump(df.getInitValue())
,
text: "getLastValue"
onClick: (ev, btn) ->
CUI.util.alert_dump(df.getLastValue())
,
text: "getValueForCheckChanged"
onClick: (ev, btn) ->
CUI.util.alert_dump(df.getValueForCheckChanged())
,
text: "reset"
onClick: (ev, btn) ->
df.reset()
,
text: "undo"
onClick: (ev, btn) ->
ret = df.undo()
if ret == false
alert("no more")
,
text: "redo"
onClick: (ev, btn) ->
ret = df.redo()
if ret == false
alert("no more")
,
text: "reload"
onClick: (ev, btn) ->
df.reload()
alert("done reload:"+form)
,
text: "remove"
onClick: (ev, btn) ->
df.remove()
alert("done remove:"+form)
,
text: "start"
onClick: (ev, btn) ->
df.start()
alert("done start:"+form)
,
text: "render"
onClick: (ev, btn) ->
df.render()
alert("done render:"+form)
,
text: "displayValue"
onClick: (ev, btn) ->
df.displayValue()
,
text: "isChanged"
onClick: (ev, btn) ->
alert(df.isChanged())
,
text: "getForm"
onClick: (ev, btn) ->
alert(df.getForm())
,
text: "getRootForm"
onClick: (ev, btn) ->
alert(df.getRootForm())
,
text: "focus"
onClick: (ev, btn) ->
if not df.focus
alert(df+" has no method .focus")
else
df.focus()
,
text: "setValue"
menu_on_hover: true
menu:
placement: "es"
items: [
text: "true"
onClick: (ev, btn) ->
setValue.call(df, true)
,
text: "false"
onClick: (ev, btn) ->
setValue.call(df, false)
,
text: "null"
onClick: (ev, btn) ->
setValue.call(df, null)
,
text: "\"Henk\""
onClick: (ev, btn) ->
setValue.call(df, "Henk")
]
]
menu_action_button
setValue = (v) ->
try
@setValue(v, no_store: true)
catch err
alert(err)
form = new CUI.Form
#REMARKED form should make the design
# class_table: "demo-table"
onDataChanged: (data, field) =>
@log("onDataChanged", field.getName(), field.getLastValue(), field.getValue())
show_data()
data: data
fields: [
form:
label: "Simple Input"
right: actionButton
placeholder: "INPUT"
type: CUI.Input
name: "simple_input"
,
form:
label: "Number Input"
right: actionButton
placeholder: "INPUT"
type: CUI.NumberInput
decimalpoint: ","
symbol: "€"
separator: "."
decimals: 2
name: "number_input"
,
form:
label: "DateTime"
right: actionButton
type: CUI.DateTime
name: "its_time"
,
form:
label: "DateTime (Date only)"
right: actionButton
type: CUI.DateTime
input_types: ["date"]
name: "its_time_date"
,
type: CUI.Form
form:
label: "Password Input"
right: actionButton
fields: [
type: CUI.Password
placeholder: "PASSWORD"
name: "password"
form:
right: actionButton
,
type: CUI.Checkbox
text: "Show Password"
name: "show_password"
tooltip:
text: "Reveal Password"
mark_changed: false
onActivate: (cb) ->
@log("btn", cb, cb.getForm().getFieldByIdx(0).showPassword())
onDeactivate: (cb) ->
@log("btn de", cb, cb.getForm().getFieldByIdx(0).hidePassword())
]
,
form:
label: "Without"
right: actionButton
name: "cb_without"
onDataChanged: =>
@log("without onDataChanged called")
# value: horst: "henk"
type: CUI.Checkbox
,
form:
label: "Single"
right: actionButton
name: "cb_single"
type: CUI.Checkbox
text: "Single"
,
form:
label: "Radio"
right: actionButton
type: CUI.Options
name: "radio"
min_checked: 0
radio: "tunein"
options: [
text: "Moscow"
,
text: "Eriwan"
,
text: "BBC"
]
,
form:
label: "Radio (continued)"
right: actionButton
type: CUI.Options
name: "radio"
min_checked: 0
radio: "tunein"
options: [
text: "104.6RTL"
,
text: "94.3RS2"
,
text: "Fritz"
]
,
form:
label: "Radio2"
right: actionButton
type: CUI.Options
name: "radio2"
radio: true
options: [
text: "A"
,
text: "B"
,
text: "C"
,
text: "D"
,
text: "E"
]
,
form:
label: "Multi Single Line Input"
right: actionButton
type: CUI.MultiInput
name: "multi_single_line_input"
placeholder:
"de-DE": "INPUT de"
"en-US": "INPUT en"
"fr-FR": "INPUT fr"
control: multi_input_control
,
type: CUI.Options
form:
label: "Empty Group"
right: actionButton
name: "empty_group"
placeholder: "No Options."
options: []
,
type: CUI.Options
form:
label: "Minimal Group"
right: actionButton
name: "minimal_group"
options: [
value: "one_cb"
text: "One Checkbox Only"
]
,
type: CUI.Options
form:
label: "Sortable Group"
right: actionButton
name: "sortable_group"
sortable: true
options: [
value: 1
text: "One"
,
value: 2
text: "Two"
,
value: 3
text: "Three"
,
value: 4
text: "Four"
]
,
type: CUI.Options
form:
label: "Group (minimum 1)"
right: actionButton
min_checked: 1
name: "group"
options: [
value: 1
text: "A1"
,
value: 2
text: "B1"
,
value: 3
text: "C1"
,
value: 4
text: "D1"
,
value: 5
text: "E1"
,
value: 6
disabled: true
text: "E2"
]
horizontal: 5
,
type: CUI.Input
form:
label: "Multiline Input"
right: actionButton
name: "multiline_input"
placeholder: "TEXTAREA<&>'\""
textarea: true
,
type: CUI.MultiInput
form:
label: "Multi Multi Line Input"
right: actionButton
name: "multi_multi_line_input"
textarea: true
placeholder:
"de-DE": "TEXTAREA de"
"en-US": "TEXTAREA en"
"fr-FR": "TEXTAREA fr"
control: multi_input_control
,
type: CUI.Form
fields: [
type: CUI.Checkbox
form:
label: "With Data Field"
right: actionButton
name: "cb_with_form"
text: "Click here"
,
type: CUI.Form
fields: [
type: CUI.Input
name: "horst"
]
]
,
form:
label: "Popover Form (Function)"
right: actionButton
type: CUI.FormPopover
name: "email"
button:
icon: new CUI.Icon(icon: "email")
text: "henk"
popover:
pane:
header_left: "Form Popover"
renderDisplayContent: (df) ->
data = df.getData()
new CUI.Label( text: CUI.util.toHtml(data.pop_input+" ["+data.pop_cb+"]") )
fields: (form) ->
if not form.getData()
return []
[
form:
label: "Date"
type: CUI.DateTime
,
form:
label: "Input"
type: CUI.Input
name: "pop_input"
,
form:
label: "Checkbox"
type: CUI.Checkbox
name: "pop_cb"
]
,
form:
label: "Popover Form (Array)"
right: actionButton
button:
icon: new CUI.Icon(icon: "email")
text: "button text"
type: CUI.FormPopover
popover: {}
fields: [
form:
label: "Date"
type: CUI.Output
text: ""+(new Date()).toUTCString()
,
form:
label: "DataTable"
right: actionButton
type: CUI.DataTable
rowMove: true
name: "data_table_pop"
fields: [
form:
label: "Horst"
type: CUI.Input
name: "horst"
,
form:
rotate_90: true
type: CUI.Checkbox
name: "Vertical Label"
,
form:
rotate_90: true
type: CUI.NumberInput
name: "int"
]
]
,
form:
label: "Modal Form (Function)"
right: actionButton
type: CUI.FormModal
name: "modal"
button:
icon: new CUI.Icon(icon: "email")
text: "henk"
modal:
cancel: true
pane:
header_left: "Form Modal"
apply_button:
text: "Yo - Custom Text"
renderDisplayContent: (df) ->
data = df.getData()
new CUI.Label( text:CUI.util.toHtml(data.pop_input+" ["+data.pop_cb+"]") )
fields: (form) ->
if not form.getData()
return []
[
form:
label: "Date"
type: CUI.DateTime
,
form:
label: "Input"
type: CUI.Input
name: "pop_input"
,
form:
label: "Checkbox"
type: CUI.Checkbox
name: "pop_cb"
]
,
form:
label: "FormButton"
right: actionButton
type: CUI.FormButton
onClick: (data, element) ->
alert "you clicked the form button"
icon: new CUI.Icon(class: "fa-trash-o")
,
form:
label: "Output"
right: actionButton
type: CUI.Output
name: "output"
,
form:
label: "MultiOutput"
right: actionButton
type: CUI.MultiOutput
control: multi_input_control
name: "multi_output"
,
form:
label: "Select"
right: actionButton
type: CUI.Select
empty_text: "- Pick an Option -"
name: "select"
options: -> [
text: "Banana"
,
text: "Republic"
value: "Republik"
,
divider: true
,
text: "Really?"
,
text: ""+(new Date()).toUTCString()
disabled: true
]
,
form:
label: "DataTable"
right: actionButton
type: CUI.DataTable
rowMove: true
name: "data_table"
fields: [
form:
label: "HeaderColumnA Label"
type: CUI.Input
name: "HeaderColumnA"
,
form:
rotate_90: true
type: CUI.Checkbox
name: "HeaderColumnRotated90"
]
]
options = [
value: "_all"
text: "- all -"
]
for f in form.getDataFields()
options.push
value: f.getName()
text: f.getName()+" ["+f.__cls+"]"
show_data_filter =
field: "_all"
reveal_all: false
data_form = new CUI.Form
data: show_data_filter
onDataChanged: ->
show_data()
fields: [
type: CUI.Select
form:
label: "Field"
mark_changed: false
name: "field"
options: options
,
type: CUI.Checkbox
form:
label: "Reveal All"
mark_changed: false
name: "reveal_all"
]
t.replace(data_form, "data_button")
data_form.start()
show_data = ->
v = show_data_filter.field
ra = show_data_filter.reveal_all
if ra
_d = form.getData()
else
_d = form.getValue()
if v == "_all"
d = _d
else
d = {}
d[v] = _d[v]
if ra
d._undo = {}
d._undo[v] = _d._undo[v]
t.replace(CUI.util.dump(d), "data")
show_data()
console.debug "FORM created", ""+form
btn = actionButton(form)
t.replace(btn, "form")
t.append(form, "form")
form.start()
form2 = new CUI.Form
# horizontal: true
fields: [
form:
use_field_as_label: true
type: CUI.Output
text: "Label with Colspan"
,
form:
label: "B"
type: CUI.Input
,
form:
label: "C"
type: CUI.Input
textarea: true
]
.start()
t.append(form2, "form")
CUI.Events.listen
node: @tmpl
type: "data-changed"
call: (ev, info) =>
console.debug ev.getType(), info
t
log: ->
s = []
for a in arguments
if CUI.util.isString(a)
s.push("\"#{a}\"")
else
s.push(JSON.stringify(a))
#@tmpl.append(CUI.dom.pre().text(s.join(" ")), "log")
super(s.join(" "))
#@tmpl
undisplay: ->
Demo.register(new Demo.FormDemo())