coffeescript-ui
Version:
Coffeescript User Interface System
1,107 lines (872 loc) • 23.6 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
###
class Demo.ListviewDemoTable extends Demo.DemoTable
constructor: () ->
super("demo-table")
addListview: (description, listview) ->
CUI.dom.addClass(listview.DOM, "cui-list-view-demo-frame")
@addExample(description, CUI.dom.append(CUI.dom.div("cui-demo-td-abs"), listview.DOM))
class Demo.ListViewDemo extends Demo
constructor: (@opts={}) ->
super(@opts)
createListView: ( options = {} ) ->
options.num_columns ?= 4
options.num_rows ?= 4
options.maximize_column ?= []
options.oversized_cells ?= []
options.listViewOptions ?= {}
options.listViewOptions.rowMove ?= false
options.listViewOptions.fixedRows ?= 1
options.listViewOptions.fixedCols ?= 1
options.custom_cells ?= {}
options.colspans ?= {}
options.label_rotate90 ?= false
#create the header row with the names of our columns
headerRow = new CUI.ListViewRow()
if not options.listViewOptions.cols
options.listViewOptions.cols = []
for column in [0...options.num_columns]
if column in options.maximize_column
options.listViewOptions.cols.push( "maximize" )
else
options.listViewOptions.cols.push( "auto" )
list_view = new CUI.ListView( options.listViewOptions )
if options.listViewOptions.fixedRows > 0
for column in [0...options.num_columns]
name = "Column"
sizing = options.listViewOptions.cols[column]
if sizing == "maximize"
name = "Max-Col"
else if sizing == "fixed"
name = "Fix-Col"
headerRow.addColumn(
new CUI.ListViewHeaderColumn
label:
text: name+column
rotate_90: options.label_rotate90
)
list_view.appendRow(headerRow)
for row in [0...options.num_rows] by 1
dataRow = new CUI.ListViewRow()
column = 0
while column < options.num_columns
index = column+row*options.num_columns
text = "Cell "+index
if index in options.oversized_cells
text = text+":\nOversized Oversized Oversized\nMore Text\nEven more\nYes!"
colspan = options.colspans[row]?[column]
custom = options.custom_cells[row]?[column]
if custom
dataRow.addColumn(new CUI.ListViewColumn(colspan: colspan, element: custom ))
else
if colspan > 1
text += " (COLSPAN: "+colspan+")"
dataRow.addColumn(new CUI.ListViewColumn(colspan: colspan, element: new CUI.Label(text: text, multiline: true)))
if colspan > 1
column += colspan - 1
column++
list_view.appendRow(dataRow)
list_view.render()
list_view
display: ->
tests = [
text: "Ng Examples"
content: @createNextGenTab
,
text: "Simple Examples"
content: @createSimpleTab
,
text: "Many Cells"
content: @createManyCellsTab
,
text: "Tests"
content: @createTestsTab
,
text: "Listviews inside Layouts"
content: @createLayoutsTab
,
text: "Nested Listviews"
content: @createNestedTab
,
text: "Listview inside Panels"
content: @createListviewInPanelTab
# ,
# text: "Listview Layout Performance"
# content: @createListviewLayoutPerformance
# ,
# text: "Listview Flex Performance"
# content: @createListviewFlexPerformance
# ,
# text: "Isolation"
# content: @createListviewIsolation
]
tabs = []
console.time "ListViewDemo.display"
for test in tests
txt = "ListViewDemo.display[#{test.text}]"
do (test) =>
tabs.push
text: test.text
load_on_show: true
content: =>
test.content.call(@)
tabs = new CUI.Tabs
tabs: tabs
console.timeEnd "ListViewDemo.display"
tabs.DOM
# options = {
# num_columns: 100
# num_rows: 100
# }
# list_view = @createListView(options)
# list_view.DOM
createTestsWithMaximizeOnOff: (maximize,demo_table) ->
if maximize
max = "maximize"
else
max = "auto"
options = {
listViewOptions:
maximize: maximize
cols: [max, "auto","auto","auto"]
fixedCols: 0
}
list_view = @createListView(options)
demo_table.addExample(CUI.util.dump(options),list_view)
options = {
listViewOptions:
maximize: maximize
cols: ["auto",max,"auto","auto"]
fixedCols: 1
}
list_view = @createListView(options)
demo_table.addExample(CUI.util.dump(options),list_view)
options = {
listViewOptions:
maximize: maximize
cols: ["auto","auto","auto","auto"]
fixedCols: 1
}
list_view = @createListView(options)
demo_table.addExample(CUI.util.dump(options),list_view)
createTestsTab: ->
demo_table = new Demo.ListviewDemoTable()
@createTestsWithMaximizeOnOff(true,demo_table)
@createTestsWithMaximizeOnOff(false,demo_table)
options = {
listViewOptions:
cols: ["fixed","fixed","fixed","fixed"]
oversized_cells: [6,8]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
#reduce amount of examples
return demo_table.table
options = {
listViewOptions:
cols: ["maximize","maximize","auto","auto"]
fixedCols: 0
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
cols: ["auto","auto","maximize","maximize"]
fixedCols: 2
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
cols: ["auto","auto","auto","maximize"]
fixedCols: 3
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
cols: ["auto","auto","auto","maximize"]
fixedRows: 3
fixedCols: 3
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
cols: ["auto","auto","auto","maximize"]
fixedRows: 2
fixedCols: 2
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
cols: ["auto","auto","auto","maximize"]
fixedRows: 2
fixedCols: 1
num_rows: 1
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
demo_table.table
createNextGenTab: ->
options = {
maximize_column: [1]
listViewOptions:
fixedRows: 1
fixedCols: 1
colResize: true
colspans:
5: 2: 2
custom_cells:
10: 2: new CUI.Input(textarea: true, content_size: true).start().DOM
13: 1: new CUI.Input(textarea: true).start().DOM
num_rows: 30
oversized_cells: [5,10]
}
list_view = @createListView(options)
createSimpleTab: ->
demo_table = new Demo.ListviewDemoTable()
if false
options = {
listViewOptions:
fixedCols: 0
oversized_cells: [2,4,14]
colspans:
# third regular row, second column gets a colspan of "2"
2: 1: 2
custom_cells:
2: 1: new CUI.Label( text:"a very long text that should be copied from somewhere else.").DOM
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
}
list_view = @createListView()
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
maximize_column: [1]
oversized_cells: [6,8]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
maximize_column: [0]
listViewOptions:
fixedCols: 0
oversized_cells: [4,10]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
maximize_column: [0]
listViewOptions:
fixedCols: 0
colClasses: [null, "list-view-demo-width-100", "list-view-demo-width-100", "list-view-demo-width-100"]
oversized_cells: [4,10]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
maximize_column: []
listViewOptions:
maximize: false
fixedCols: 0
colClasses: ["list-view-demo-width-100", "list-view-demo-width-100", "list-view-demo-width-100", "list-view-demo-width-100"]
oversized_cells: [4,10]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
maximize_column: []
listViewOptions:
maximize: false
fixedCols: 0
colClasses: ["list-view-demo-width-100", "list-view-demo-width-100", "list-view-demo-width-100", "list-view-demo-width-100"]
label_rotate90: true
oversized_cells: [4,10]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
if 1
options = {
# maximize_column: [0]
listViewOptions:
fixedCols: 2
oversized_cells: [4,10]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
# maximize_column: [0]
listViewOptions:
fixedCols: 2
fixedRows: 2
oversized_cells: [4,10]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
fixedCols: 2
oversized_cells: [2,4,14]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
fixedCols: 1
rowMove: true
oversized_cells: [2,4,14]
}
list_view = @createListView(options)
demo_table.addListview("Moveable rows:"+CUI.util.dump(options),list_view)
options = {
listViewOptions:
fixedCols: 1
rowMove: true
oversized_cells: [2,4,14]
}
list_view = @createListView(options)
demo_table.addListview("Moveable rows:"+CUI.util.dump(options),list_view)
options = {
listViewOptions:
fixedCols: 0
rowMove: true
oversized_cells: [2,4,14]
}
list_view = @createListView(options)
demo_table.addListview("Moveable rows, No FixedCols: "+CUI.util.dump(options),list_view)
options = {
listViewOptions:
fixedCols: 1
rowMove: true
oversized_cells: [2,4,14]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
cols: ["auto","fixed","auto","auto"]
oversized_cells: [2,4,14]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
listViewOptions:
fixedCols: 0
fixedRows: 0
cols: ["auto","maximize","auto","maximize"]
# maximize_column: [0]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
demo_table.table
createManyCellsTab: ->
demo_table = new Demo.ListviewDemoTable()
options = {
num_columns: 100
num_rows: 10
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
#return @__table
options = {
num_columns: 10
num_rows: 20
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
num_columns: 10
num_rows: 4
maximize_column: [3]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
options = {
num_columns: 4
num_rows: 20
maximize_column: [3]
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
demo_table.table
createLayoutsTab: ->
demo_table = new Demo.ListviewDemoTable()
# -------------------
options = {
num_columns: 3
num_rows: 4
listViewOptions:
maximize: true
maximize_column: [1]
custom_cells:
0: 1: CUI.dom.append(CUI.dom.div(), CUI.dom.text("a very long text that should be copied from somewhere else."))
}
list_view = @createListView(options)
vertical_layout = new CUI.HorizontalLayout
class: "cui-list-view-demo-frame"
left:
flexHandle:
hidden: false
closed: false
content: "left"
right:
flexHandle:
hidden: false
closed: false
content: "right"
center:
content: list_view.DOM
demo_table.addListview("maximized Listview inside HorizontalLayout",vertical_layout)
# -------------------
options = {
num_columns: 3
num_rows: 4
listViewOptions:
maximize: true
fixedCols: 0
maximize_column: [1]
custom_cells:
4: CUI.dom.append(CUI.dom.div(), CUI.dom.text("a very long text that should be copied from somewhere else."))
}
list_view = @createListView(options)
vertical_layout = new CUI.HorizontalLayout
class: "cui-list-view-demo-frame"
left:
flexHandle:
hidden: false
closed: false
content: "left"
right:
flexHandle:
hidden: false
closed: false
content: "right"
center:
content: list_view.DOM
demo_table.addListview("maximized Listview inside HorizontalLayout",vertical_layout)
# -----------------------
options = {
num_columns: 4
num_rows: 10
}
list_view = @createListView(options)
vertical_layout = new CUI.VerticalLayout
class: "cui-list-view-demo-frame"
top:
flexHandle:
hidden: false
closed: false
content: "top"
bottom:
flexHandle:
hidden: false
closed: false
content: "bottom"
center:
content: list_view.DOM
demo_table.addListview("maximized Listview inside VerticalLayout",vertical_layout)
# -------------------
options = {
num_columns: 4
num_rows: 10
listViewOptions:
maximize: false
}
list_view = @createListView(options)
vertical_layout = new CUI.VerticalLayout
class: "cui-list-view-demo-frame"
top:
flexHandle:
hidden: false
closed: false
content: "top"
bottom:
flexHandle:
hidden: false
closed: false
content: "bottom"
center:
content: list_view.DOM
demo_table.addListview("maximized Listview inside VerticalLayout",vertical_layout)
# -------------------
options = {
num_columns: 10
num_rows: 10
listViewOptions:
maximize: false
}
list_view = @createListView(options)
vertical_layout = new CUI.HorizontalLayout
class: "cui-list-view-demo-frame"
left:
flexHandle:
hidden: false
closed: false
content: "left"
right:
flexHandle:
hidden: false
closed: false
content: "right"
center:
content: list_view.DOM
demo_table.addListview("maximized Listview inside HorizontalLayout",vertical_layout)
# -------------------
options = {
num_columns: 3
num_rows: 10
listViewOptions:
maximize: true
maximize_column: [1]
}
list_view = @createListView(options)
vertical_layout = new CUI.HorizontalLayout
class: "cui-list-view-demo-frame"
left:
flexHandle:
hidden: false
closed: false
content: "left"
right:
flexHandle:
hidden: false
closed: false
content: "right"
center:
content: list_view.DOM
demo_table.addListview("maximized Listview inside HorizontalLayout",vertical_layout)
demo_table.table
createNestedTab: ->
demo_table = new Demo.ListviewDemoTable()
# -------------- nested tabs
optionsInnerListview =
num_columns: 2
num_rows: 2
listViewOptions:
maximize: false
innerListview = @createListView( optionsInnerListview )
tabs = new CUI.Tabs
footer_right: "Right"
footer_left: "Left"
maximize: false
tabs: [
text: "testTab1"
content: innerListview.DOM
,
text: "testTab2"
content: new CUI.Label( text: "Tab 2: Very short test text. 1 2 3 4 5").DOM
]
options =
num_columns: 4
num_rows: 4
custom_cells:
0: 1: tabs.DOM
list_view = @createListView(options)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame")
demo_table.addListview(CUI.util.dump(options)+CUI.util.dump(options2),list_view)
# -------------- nested inside fixed column
options =
num_columns: 2
num_rows: 2
listViewOptions:
maximize: false
child_list_view = @createListView(options)
options2 =
num_columns: 4
num_rows: 4
colspans:
1: 2: 2
custom_cells:
0: 1: child_list_view.DOM
list_view = @createListView(options2)
demo_table.addListview(CUI.util.dump(options)+CUI.util.dump(options2),list_view)
# -------------- nested inside fixed column with colspan
options =
num_columns: 2
num_rows: 2
listViewOptions:
maximize: false
oversized_cells: [1,2]
child_list_view = @createListView(options)
options2 =
num_columns: 4
num_rows: 4
colspans:
0: 1: 2
custom_cells:
0: 1: child_list_view.DOM
list_view = @createListView(options2)
demo_table.addListview(CUI.util.dump(options)+CUI.util.dump(options2),list_view)
# -------------------------nested listview inside maxed column ----------------
options = {
num_columns: 2
num_rows: 2
}
child_list_view = @createListView(options)
options2 = {
num_columns: 5
num_rows: 5
listViewOptions:
fixedCols: 1
rowMove: true
maximize_column: [1]
}
child_list_view2 = @createListView(options2)
options3 = {
num_columns: 4
num_rows: 4
custom_cells: {
1: 1: child_list_view.DOM
3: 1: child_list_view2.DOM
}
maximize_column: [1]
}
list_view = @createListView(options3)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame-y")
demo_table.addListview(CUI.util.dump(options)+CUI.util.dump(options2)+CUI.util.dump(options3),list_view)
# ----------------------------nested listview inside non maxed column-------------
options = {
num_columns: 2
num_rows: 2
}
child_list_view = @createListView(options)
options2 = {
num_columns: 5
num_rows: 5
listViewOptions:
fixedCols: 1
rowMove: true
maximize_column: [1]
}
child_list_view2 = @createListView(options2)
options = {
num_columns: 4
num_rows: 4
custom_cells: {
1: 3: child_list_view.DOM
4: 2: child_list_view2.DOM
}
#maximize_column: [1]
}
list_view = @createListView(options)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame-y")
demo_table.addListview(CUI.util.dump(options),list_view)
# ----------------------------maxed listview inside non maxed-x listview inside non maxed-x listview-------------
options = {
num_columns: 2
num_rows: 2
}
child_list_view = @createListView(options)
options3 = {
num_columns: 4
num_rows: 4
listViewOptions:
fixedCols: 1
rowMove: true
maximize_column: [1]
}
child_list_view3 = @createListView(options3)
options2 = {
num_columns: 4
num_rows: 4
listViewOptions:
fixedCols: 1
rowMove: true
maximize_column: [2]
custom_cells: {
0: 1: child_list_view3.DOM
}
}
child_list_view2 = @createListView(options2)
options = {
num_columns: 4
num_rows: 4
custom_cells: {
0: 2: child_list_view.DOM
2: 4: child_list_view2.DOM
}
#maximize_column: [1]
}
list_view = @createListView(options)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame-y")
demo_table.addListview(CUI.util.dump(options),list_view)
# ----------------------------maxed listview inside non maxed-x listview inside non maxed-x listview- with fixedcols0------------
options = {
num_columns: 2
num_rows: 2
}
child_list_view = @createListView(options)
options3 = {
num_columns: 4
num_rows: 4
listViewOptions:
rowMove: true
maximize_column: [1]
}
child_list_view3 = @createListView(options3)
options2 = {
num_columns: 4
num_rows: 4
listViewOptions:
rowMove: true
maximize_column: [2]
custom_cells: {
2: 3: child_list_view3.DOM
}
}
child_list_view2 = @createListView(options2)
options = {
num_columns: 4
num_rows: 4
listViewOptions:
fixedCols: 0
rowMove: true
custom_cells: {
2: 3: child_list_view.DOM
3: 3: child_list_view2.DOM
}
#maximize_column: [1]
}
list_view = @createListView(options)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame-y")
demo_table.addListview(CUI.util.dump(options),list_view)
# ----------------------------maxed listview inside non maxed-x listview inside non maxed-x listview- with fixedcols0------------
options2 = {
num_columns: 4
num_rows: 4
listViewOptions:
rowMove: true
maximize_column: [2]
}
child_list_view2 = @createListView(options2)
options = {
num_columns: 4
num_rows: 4
listViewOptions:
fixedCols: 0
rowMove: true
custom_cells: {
9: child_list_view2.DOM
}
#maximize_column: [1]
}
list_view = @createListView(options)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame-y")
demo_table.addListview(CUI.util.dump(options),list_view)
# ---------------- table inside listview ------------------
inner_table = CUI.dom.table("inner-table")
CUI.dom.append(inner_table, CUI.dom.append(CUI.dom.tr_one_row( CUI.dom.div( ), CUI.dom.text("innerTable"))))
options = {
listViewOptions:
fixedCols: 0
num_columns: 2
num_rows: 2
custom_cells: {
0: inner_table
}
}
list_view = @createListView(options)
demo_table.addListview(CUI.util.dump(options),list_view)
demo_table.table
createListviewInPanelTab: ()->
demo_table = new Demo.ListviewDemoTable()
# --------------------------
options = {
listViewOptions:
fixedCols: 1
num_columns: 4
num_rows: 4
maximize_column: [3]
}
list_view = @createListView(options)
options2 = {
listViewOptions:
fixedCols: 1
maximize: false
num_columns: 4
num_rows: 4
}
list_view2 = @createListView(options2)
p1 = new CUI.Panel
text: "Panel with maximized Listview"
content: list_view.DOM
p2 = new CUI.Panel
text: "Panel with non-maximized Listview"
closed: true
content: list_view2.DOM
layout = CUI.dom.append(CUI.dom.append(CUI.dom.div("listview-in-panel-panels-container"), p1.DOM), p2.DOM)
demo_table.addListview("Listviews inside Panels",layout)
#----------------------
demo_table.table
createListviewLayoutPerformance: ()->
options2 = {
listViewOptions:
fixedCols: 1
maximize: true
num_columns: 4
num_rows: 10
}
horizontal_layout = new CUI.HorizontalLayout
left:
content: @createListView(options2)
center:
content:
new CUI.VerticalLayout
center:
content: [
@createListView(options2)
,
@createListView(options2)
,
@createListView(options2)
]
right:
content: @createListView(options2)
horizontal_layout.DOM
createListviewFlexPerformance: ->
array = []
for i in [0..10]
options = {
listViewOptions:
fixedCols: 1
maximize: true
num_columns: 4
num_rows: 10
maximize_column: [1]
}
list_view = @createListView(options)
array.push(list_view.DOM)
array
createListviewIsolation: ->
array = []
options = {
listViewOptions:
fixedCols: 1
maximize: true
num_columns: 100
num_rows: 100
maximize_column: [1]
}
list_view = @createListView(options)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame")
array.push(list_view.DOM)
options = {
listViewOptions:
fixedCols: 1
maximize: true
num_columns: 4
num_rows: 10
maximize_column: [1]
}
list_view = @createListView(options)
CUI.dom.addClass(list_view.DOM, "cui-list-view-demo-frame")
array.push(list_view.DOM)
array
Demo.register(new Demo.ListViewDemo())