forked from fanruan/fineui
98 changed files with 25761 additions and 70015 deletions
@ -1,62 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
var items = [], header = [], columnSize = []; |
||||
|
||||
var rowCount = 100, columnCount = 100; |
||||
for (var i = 0; i < 1; i++) { |
||||
header[i] = []; |
||||
for (var j = 0; j < columnCount; j++) { |
||||
header[i][j] = { |
||||
type: "bi.label", |
||||
text: "表头" + i + "-" + j |
||||
}; |
||||
columnSize[j] = 100; |
||||
} |
||||
} |
||||
for (var i = 0; i < rowCount; i++) { |
||||
items[i] = []; |
||||
for (var j = 0; j < columnCount; j++) { |
||||
items[i][j] = { |
||||
type: "bi.label", |
||||
text: (i < 3 ? 0 : i) + "-" + j |
||||
}; |
||||
} |
||||
} |
||||
|
||||
var table = BI.createWidget({ |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.collection_table" |
||||
}, |
||||
width: 600, |
||||
height: 500, |
||||
isResizeAdapt: true, |
||||
isNeedResize: true, |
||||
isNeedMerge: true, |
||||
mergeCols: [0, 1], |
||||
mergeRule: function (col1, col2) { |
||||
return BI.isEqual(col1, col2); |
||||
}, |
||||
isNeedFreeze: true, |
||||
freezeCols: [0, 1], |
||||
columnSize: columnSize, |
||||
items: items, |
||||
header: header |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: table, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.collection_table", Demo.Func); |
@ -1,57 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
var items = [], header = [], columnSize = []; |
||||
|
||||
var rowCount = 100, columnCount = 100; |
||||
for (var i = 0; i < 1; i++) { |
||||
header[i] = []; |
||||
for (var j = 0; j < columnCount; j++) { |
||||
header[i][j] = { |
||||
type: "bi.label", |
||||
text: "表头" + i + "-" + j |
||||
}; |
||||
columnSize[j] = 100; |
||||
} |
||||
} |
||||
for (var i = 0; i < rowCount; i++) { |
||||
items[i] = []; |
||||
for (var j = 0; j < columnCount; j++) { |
||||
items[i][j] = { |
||||
type: "bi.label", |
||||
text: (i < 3 ? 0 : i) + "-" + j |
||||
}; |
||||
} |
||||
} |
||||
|
||||
var table = BI.createWidget({ |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.grid_table" |
||||
}, |
||||
width: 600, |
||||
height: 500, |
||||
isResizeAdapt: true, |
||||
isNeedResize: true, |
||||
isNeedFreeze: true, |
||||
freezeCols: [0, 1], |
||||
columnSize: columnSize, |
||||
items: items, |
||||
header: header |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: table, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.grid_table", Demo.Func); |
@ -1,57 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
var items = [], header = [], columnSize = []; |
||||
|
||||
var rowCount = 100, columnCount = 100; |
||||
for (var i = 0; i < 1; i++) { |
||||
header[i] = []; |
||||
for (var j = 0; j < columnCount; j++) { |
||||
header[i][j] = { |
||||
type: "bi.label", |
||||
text: "表头" + i + "-" + j |
||||
}; |
||||
columnSize[j] = 100; |
||||
} |
||||
} |
||||
for (var i = 0; i < rowCount; i++) { |
||||
items[i] = []; |
||||
for (var j = 0; j < columnCount; j++) { |
||||
items[i][j] = { |
||||
type: "bi.label", |
||||
text: (i < 3 ? 0 : i) + "-" + j |
||||
}; |
||||
} |
||||
} |
||||
|
||||
var table = BI.createWidget({ |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.grid_table" |
||||
}, |
||||
width: 600, |
||||
height: 500, |
||||
isResizeAdapt: true, |
||||
isNeedResize: true, |
||||
isNeedFreeze: true, |
||||
freezeCols: [0, 1], |
||||
columnSize: columnSize, |
||||
items: items, |
||||
header: header |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: table, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.resizable_table", Demo.Func); |
@ -1,367 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
var items = [[{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}], [{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}], [{ |
||||
text: "第三行第一列" |
||||
}, { |
||||
text: "第三行第二列" |
||||
}, { |
||||
text: "第三行第三列" |
||||
}], [{ |
||||
text: "第四行第一列" |
||||
}, { |
||||
text: "第四行第二列" |
||||
}, { |
||||
text: "第四行第三列" |
||||
}], [{ |
||||
text: "第五行第一列" |
||||
}, { |
||||
text: "第五行第二列" |
||||
}, { |
||||
text: "第五行第三列" |
||||
}], [{ |
||||
text: "第六行第一列" |
||||
}, { |
||||
text: "第六行第二列" |
||||
}, { |
||||
text: "第六行第三列" |
||||
}], [{ |
||||
text: "第七行第一列" |
||||
}, { |
||||
text: "第七行第二列" |
||||
}, { |
||||
text: "第七行第三列" |
||||
}], [{ |
||||
text: "第八行第一列" |
||||
}, { |
||||
text: "第八行第二列" |
||||
}, { |
||||
text: "第八行第三列" |
||||
}], [{ |
||||
text: "第九行第一列" |
||||
}, { |
||||
text: "第九行第二列" |
||||
}, { |
||||
text: "第九行第三列" |
||||
}], [{ |
||||
text: "第十行第一列" |
||||
}, { |
||||
text: "第十行第二列" |
||||
}, { |
||||
text: "第十行第三列" |
||||
}], [{ |
||||
text: "第十一行第一列" |
||||
}, { |
||||
text: "第十一行第二列" |
||||
}, { |
||||
text: "第十一行第三列" |
||||
}], [{ |
||||
text: "第十二行第一列" |
||||
}, { |
||||
text: "第十二行第二列" |
||||
}, { |
||||
text: "第十二行第三列" |
||||
}], [{ |
||||
text: "第十三行第一列" |
||||
}, { |
||||
text: "第十三行第二列" |
||||
}, { |
||||
text: "第十三行第三列" |
||||
}], [{ |
||||
text: "第十四行第一列" |
||||
}, { |
||||
text: "第十四行第二列" |
||||
}, { |
||||
text: "第十四行第三列" |
||||
}], [{ |
||||
text: "第十五行第一列" |
||||
}, { |
||||
text: "第十五行第二列" |
||||
}, { |
||||
text: "第十五行第三列" |
||||
}], [{ |
||||
text: "第十六行第一列" |
||||
}, { |
||||
text: "第十六行第二列" |
||||
}, { |
||||
text: "第十六行第三列" |
||||
}], [{ |
||||
text: "第十七行第一列" |
||||
}, { |
||||
text: "第十七行第二列" |
||||
}, { |
||||
text: "第十七行第三列" |
||||
}], [{ |
||||
text: "第十八行第一列" |
||||
}, { |
||||
text: "第十八行第二列" |
||||
}, { |
||||
text: "第十八行第三列" |
||||
}]]; |
||||
|
||||
|
||||
var items2 = [[{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第二列" |
||||
}, { |
||||
text: "第一行第三列" |
||||
}, { |
||||
text: "第一行第四列" |
||||
}, { |
||||
text: "第一行第五列" |
||||
}], [{ |
||||
text: "第二行第一列" |
||||
}, { |
||||
text: "第二行第二列" |
||||
}, { |
||||
text: "第二行第三列" |
||||
}, { |
||||
text: "第二行第四列" |
||||
}, { |
||||
text: "第二行第五列" |
||||
}], [{ |
||||
text: "第二行第一列" |
||||
}, { |
||||
text: "第二行第二列" |
||||
}, { |
||||
text: "第三行第三列" |
||||
}, { |
||||
text: "第三行第四列" |
||||
}, { |
||||
text: "第三行第五列" |
||||
}], [{ |
||||
text: "第二行第一列" |
||||
}, { |
||||
text: "第四行第二列" |
||||
}, { |
||||
text: "第四行第三列" |
||||
}, { |
||||
text: "第四行第四列" |
||||
}, { |
||||
text: "第四行第五列" |
||||
}], |
||||
|
||||
|
||||
[{ |
||||
text: "第五行第一列" |
||||
}, { |
||||
text: "第五行第一列" |
||||
}, { |
||||
text: "第五行第三列" |
||||
}, { |
||||
text: "第五行第四列" |
||||
}, { |
||||
text: "第五行第五列" |
||||
}], [{ |
||||
text: "第六行第一列" |
||||
}, { |
||||
text: "第六行第一列" |
||||
}, { |
||||
text: "第六行第三列" |
||||
}, { |
||||
text: "第六行第四列" |
||||
}, { |
||||
text: "第六行第五列" |
||||
}], [{ |
||||
text: "第七行第一列" |
||||
}, { |
||||
text: "第七行第二列" |
||||
}, { |
||||
text: "第七行第三列" |
||||
}, { |
||||
text: "第七行第四列" |
||||
}, { |
||||
text: "第七行第五列" |
||||
}], [{ |
||||
text: "第八行第一列" |
||||
}, { |
||||
text: "第八行第二列" |
||||
}, { |
||||
text: "第八行第三列" |
||||
}, { |
||||
text: "第八行第四列" |
||||
}, { |
||||
text: "第八行第五列" |
||||
}], [{ |
||||
text: "第九行第一列" |
||||
}, { |
||||
text: "第九行第二列" |
||||
}, { |
||||
text: "第九行第三列" |
||||
}, { |
||||
text: "第九行第四列" |
||||
}, { |
||||
text: "第九行第五列" |
||||
}], [{ |
||||
text: "第十行第一列" |
||||
}, { |
||||
text: "第十行第二列" |
||||
}, { |
||||
text: "第十行第三列" |
||||
}, { |
||||
text: "第十行第四列" |
||||
}, { |
||||
text: "第十行第五列" |
||||
}], [{ |
||||
text: "第十一行第一列" |
||||
}, { |
||||
text: "第十一行第二列" |
||||
}, { |
||||
text: "第十一行第三列" |
||||
}, { |
||||
text: "第十一行第四列" |
||||
}, { |
||||
text: "第十一行第五列" |
||||
}], [{ |
||||
text: "第十二行第一列" |
||||
}, { |
||||
text: "第十二行第二列" |
||||
}, { |
||||
text: "第十二行第三列" |
||||
}, { |
||||
text: "第十二行第四列" |
||||
}, { |
||||
text: "第十二行第五列" |
||||
}], [{ |
||||
text: "第十三行第一列" |
||||
}, { |
||||
text: "第十三行第二列" |
||||
}, { |
||||
text: "第十三行第三列" |
||||
}, { |
||||
text: "第十三行第四列" |
||||
}, { |
||||
text: "第十三行第五列" |
||||
}], [{ |
||||
text: "第十四行第一列" |
||||
}, { |
||||
text: "第十四行第二列" |
||||
}, { |
||||
text: "第十四行第三列" |
||||
}, { |
||||
text: "第十四行第四列" |
||||
}, { |
||||
text: "第十四行第五列" |
||||
}]]; |
||||
|
||||
var header = [[{ |
||||
text: "表头1" |
||||
}, { |
||||
text: "表头2" |
||||
}, { |
||||
text: "表头3" |
||||
}]]; |
||||
|
||||
var header2 = [[{ |
||||
text: "表头1" |
||||
}, { |
||||
text: "表头2" |
||||
}, { |
||||
text: "表头3" |
||||
}, { |
||||
text: "表头4" |
||||
}, { |
||||
text: "表头5" |
||||
}]]; |
||||
|
||||
var table1 = BI.createWidget({ |
||||
type: "bi.table_view", |
||||
isNeedResize: true, |
||||
isNeedMerge: true, |
||||
mergeCols: [0, 1], |
||||
columnSize: [100, 200, 300], |
||||
items: items, |
||||
header: header |
||||
}); |
||||
var table2 = BI.createWidget({ |
||||
type: "bi.table_view", |
||||
isNeedMerge: true, |
||||
isNeedFreeze: true, |
||||
freezeCols: [0, 1], |
||||
mergeCols: [0, 1], |
||||
columnSize: [100, 200, 300, 400, 500], |
||||
items: items2, |
||||
header: header2 |
||||
}); |
||||
var table3 = BI.createWidget({ |
||||
type: "bi.table_view", |
||||
isNeedMerge: true, |
||||
isNeedFreeze: true, |
||||
freezeCols: [4], |
||||
mergeCols: [0, 1], |
||||
columnSize: [100, 200, 300, 400, 100], |
||||
items: items2, |
||||
header: header2 |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.grid", |
||||
columns: 2, |
||||
rows: 2, |
||||
items: [{ |
||||
column: 0, |
||||
row: 0, |
||||
el: table1 |
||||
}, { |
||||
column: 1, |
||||
row: 0, |
||||
el: table2 |
||||
}, { |
||||
column: 0, |
||||
row: 1, |
||||
el: table3 |
||||
}, { |
||||
column: 1, |
||||
row: 1, |
||||
el: { |
||||
type: "bi.vertical", |
||||
items: [{ |
||||
type: "bi.button", |
||||
text: "第一个表setColumnSize([300, 200, 100])", |
||||
handler: function () { |
||||
table1.setColumnSize([300, 200, 100]); |
||||
} |
||||
}, { |
||||
type: "bi.button", |
||||
text: "第二个表setColumnSize([50, 100, 150, 200, 250])", |
||||
handler: function () { |
||||
table2.setColumnSize([50, 100, 150, 200, 250]); |
||||
} |
||||
}, { |
||||
type: "bi.button", |
||||
text: "第三个表setColumnSize([50, 100, 150, 200, 50])", |
||||
handler: function () { |
||||
table3.setColumnSize([50, 100, 150, 200, 50]); |
||||
} |
||||
}], |
||||
vgap: 10 |
||||
} |
||||
}] |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.table_view", Demo.Func); |
@ -1,160 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [[{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}], [{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}], [{ |
||||
text: "第三行第一列" |
||||
}, { |
||||
text: "第三行第二列" |
||||
}, { |
||||
text: "第三行第三列" |
||||
}], [{ |
||||
text: "第四行第一列" |
||||
}, { |
||||
text: "第四行第二列" |
||||
}, { |
||||
text: "第四行第三列" |
||||
}], [{ |
||||
text: "第五行第一列" |
||||
}, { |
||||
text: "第五行第二列" |
||||
}, { |
||||
text: "第五行第三列" |
||||
}], [{ |
||||
text: "第六行第一列" |
||||
}, { |
||||
text: "第六行第二列" |
||||
}, { |
||||
text: "第六行第三列" |
||||
}], [{ |
||||
text: "第七行第一列" |
||||
}, { |
||||
text: "第七行第二列" |
||||
}, { |
||||
text: "第七行第三列" |
||||
}], [{ |
||||
text: "第八行第一列" |
||||
}, { |
||||
text: "第八行第二列" |
||||
}, { |
||||
text: "第八行第三列" |
||||
}], [{ |
||||
text: "第九行第一列" |
||||
}, { |
||||
text: "第九行第二列" |
||||
}, { |
||||
text: "第九行第三列" |
||||
}], [{ |
||||
text: "第十行第一列" |
||||
}, { |
||||
text: "第十行第二列" |
||||
}, { |
||||
text: "第十行第三列" |
||||
}], [{ |
||||
text: "第十一行第一列" |
||||
}, { |
||||
text: "第十一行第二列" |
||||
}, { |
||||
text: "第十一行第三列" |
||||
}], [{ |
||||
text: "第十二行第一列" |
||||
}, { |
||||
text: "第十二行第二列" |
||||
}, { |
||||
text: "第十二行第三列" |
||||
}], [{ |
||||
text: "第十三行第一列" |
||||
}, { |
||||
text: "第十三行第二列" |
||||
}, { |
||||
text: "第十三行第三列" |
||||
}], [{ |
||||
text: "第十四行第一列" |
||||
}, { |
||||
text: "第十四行第二列" |
||||
}, { |
||||
text: "第十四行第三列" |
||||
}], [{ |
||||
text: "第十五行第一列" |
||||
}, { |
||||
text: "第十五行第二列" |
||||
}, { |
||||
text: "第十五行第三列" |
||||
}], [{ |
||||
text: "第十六行第一列" |
||||
}, { |
||||
text: "第十六行第二列" |
||||
}, { |
||||
text: "第十六行第三列" |
||||
}], [{ |
||||
text: "第十七行第一列" |
||||
}, { |
||||
text: "第十七行第二列" |
||||
}, { |
||||
text: "第十七行第三列" |
||||
}], [{ |
||||
text: "第十八行第一列" |
||||
}, { |
||||
text: "第十八行第二列" |
||||
}, { |
||||
text: "第十八行第三列" |
||||
}]]; |
||||
|
||||
var header = [[{ |
||||
text: "表头1" |
||||
}, { |
||||
text: "表头2" |
||||
}, { |
||||
text: "表头3" |
||||
}]]; |
||||
|
||||
var table = BI.createWidget({ |
||||
type: "bi.adaptive_table", |
||||
el: { |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.grid_table" |
||||
} |
||||
}, |
||||
width: 600, |
||||
height: 400, |
||||
minColumnSize: [100, 100, 100], |
||||
columnSize: [100, 100, 100], |
||||
header: header, |
||||
items: items |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.grid", |
||||
columns: 1, |
||||
rows: 1, |
||||
items: [[{ |
||||
el: table |
||||
}]] |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.adaptive_table", Demo.Func); |
@ -1,149 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [{ |
||||
children: [{ |
||||
text: "节点1", |
||||
children: [{ |
||||
text: "子节点1", |
||||
children: [{ |
||||
text: "叶节点1", |
||||
values: [{text: 11}, {text: 12}, {text: 11}, {text: 12}, {text: 11}, {text: 12}, {text: 112}] |
||||
}, { |
||||
text: "叶节点2", |
||||
values: [{text: 21}, {text: 22}, {text: 21}, {text: 22}, {text: 21}, {text: 22}, {text: 122}] |
||||
}], |
||||
values: [{text: 101}, {text: 102}, {text: 101}, {text: 102}, {text: 101}, {text: 102}, {text: 1102}] |
||||
}, { |
||||
text: "子节点2", |
||||
children: [{ |
||||
text: "叶节点3", |
||||
values: [{text: 31}, {text: 32}, {text: 31}, {text: 32}, {text: 31}, {text: 32}, {text: 132}] |
||||
}, { |
||||
text: "叶节点4", |
||||
values: [{text: 41}, {text: 42}, {text: 41}, {text: 42}, {text: 41}, {text: 42}, {text: 142}] |
||||
}], |
||||
values: [{text: 201}, {text: 202}, {text: 201}, {text: 202}, {text: 201}, {text: 202}, {text: 1202}] |
||||
}, { |
||||
text: "子节点3", |
||||
children: [{ |
||||
text: "叶节点5", |
||||
values: [{text: 51}, {text: 52}, {text: 51}, {text: 52}, {text: 51}, {text: 52}, {text: 152}] |
||||
}], |
||||
values: [{text: 301}, {text: 302}, {text: 301}, {text: 302}, {text: 301}, {text: 302}, {text: 1302}] |
||||
}], |
||||
values: [{text: 1001}, {text: 1002}, {text: 1001}, {text: 1002}, {text: 1001}, {text: 1002}, {text: 11002}] |
||||
}, { |
||||
text: "节点2", |
||||
values: [{text: 2001}, {text: 2002}, {text: 2001}, {text: 2002}, {text: 2001}, {text: 2002}, {text: 12002}] |
||||
}], |
||||
values: [{text: 12001}, {text: 12002}, {text: 12001}, {text: 12002}, {text: 12001}, {text: 12002}, {text: 112002}] |
||||
}]; |
||||
|
||||
var header = [{ |
||||
text: "header1" |
||||
}, { |
||||
text: "header2" |
||||
}, { |
||||
text: "header3" |
||||
}, { |
||||
text: "金额", |
||||
tag: 1 |
||||
}, { |
||||
text: "金额", |
||||
tag: 2 |
||||
}, { |
||||
text: "金额", |
||||
tag: 3 |
||||
}, { |
||||
text: "金额", |
||||
tag: 4 |
||||
}, { |
||||
text: "金额", |
||||
tag: 5 |
||||
}, { |
||||
text: "金额", |
||||
tag: 6 |
||||
}, { |
||||
text: "金额", |
||||
tag: 7 |
||||
}]; |
||||
|
||||
var crossHeader = [{ |
||||
text: "cross1" |
||||
}, { |
||||
text: "cross2" |
||||
}]; |
||||
|
||||
var crossItems = [{ |
||||
children: [{ |
||||
text: "节点1", |
||||
children: [{ |
||||
text: "子节点1" |
||||
}, { |
||||
text: "子节点2" |
||||
}], |
||||
values: [0] |
||||
}, { |
||||
text: "节点2", |
||||
children: [{ |
||||
text: "子节点3" |
||||
}, { |
||||
text: "子节点4" |
||||
}], |
||||
values: [0] |
||||
}], |
||||
values: [0] |
||||
}]; |
||||
|
||||
var table = BI.createWidget({ |
||||
type: "bi.layer_tree_table", |
||||
el: { |
||||
type: "bi.adaptive_table", |
||||
el: { |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.collection_table", |
||||
mergeRule: function (col1, col2) { |
||||
return BI.isEqual(col1, col2); |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
width: 600, |
||||
height: 400, |
||||
isNeedFreeze: true, |
||||
isNeedMerge: true, |
||||
freezeCols: [0, 1, 2], |
||||
mergeCols: [0, 1, 2], |
||||
minColumnSize: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
columnSize: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
header: header, |
||||
items: items, |
||||
crossHeader: crossHeader, |
||||
crossItems: crossItems |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.grid", |
||||
columns: 1, |
||||
rows: 1, |
||||
items: [[{ |
||||
el: table |
||||
}]] |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.layer_tree_table", Demo.Func); |
@ -1,149 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [{ |
||||
children: [{ |
||||
text: "节点1", |
||||
children: [{ |
||||
text: "子节点1", |
||||
children: [{ |
||||
text: "叶节点1", |
||||
values: [{text: 11}, {text: 12}, {text: 11}, {text: 12}, {text: 11}, {text: 12}, {text: 112}] |
||||
}, { |
||||
text: "叶节点2", |
||||
values: [{text: 21}, {text: 22}, {text: 21}, {text: 22}, {text: 21}, {text: 22}, {text: 122}] |
||||
}], |
||||
values: [{text: 101}, {text: 102}, {text: 101}, {text: 102}, {text: 101}, {text: 102}, {text: 1102}] |
||||
}, { |
||||
text: "子节点2", |
||||
children: [{ |
||||
text: "叶节点3", |
||||
values: [{text: 31}, {text: 32}, {text: 31}, {text: 32}, {text: 31}, {text: 32}, {text: 132}] |
||||
}, { |
||||
text: "叶节点4", |
||||
values: [{text: 41}, {text: 42}, {text: 41}, {text: 42}, {text: 41}, {text: 42}, {text: 142}] |
||||
}], |
||||
values: [{text: 201}, {text: 202}, {text: 201}, {text: 202}, {text: 201}, {text: 202}, {text: 1202}] |
||||
}, { |
||||
text: "子节点3", |
||||
children: [{ |
||||
text: "叶节点5", |
||||
values: [{text: 51}, {text: 52}, {text: 51}, {text: 52}, {text: 51}, {text: 52}, {text: 152}] |
||||
}], |
||||
values: [{text: 301}, {text: 302}, {text: 301}, {text: 302}, {text: 301}, {text: 302}, {text: 1302}] |
||||
}], |
||||
values: [{text: 1001}, {text: 1002}, {text: 1001}, {text: 1002}, {text: 1001}, {text: 1002}, {text: 11002}] |
||||
}, { |
||||
text: "节点2", |
||||
values: [{text: 2001}, {text: 2002}, {text: 2001}, {text: 2002}, {text: 2001}, {text: 2002}, {text: 12002}] |
||||
}], |
||||
values: [{text: 12001}, {text: 12002}, {text: 12001}, {text: 12002}, {text: 12001}, {text: 12002}, {text: 112002}] |
||||
}]; |
||||
|
||||
var header = [{ |
||||
text: "header1" |
||||
}, { |
||||
text: "header2" |
||||
}, { |
||||
text: "header3" |
||||
}, { |
||||
text: "金额", |
||||
tag: 1 |
||||
}, { |
||||
text: "金额", |
||||
tag: 2 |
||||
}, { |
||||
text: "金额", |
||||
tag: 3 |
||||
}, { |
||||
text: "金额", |
||||
tag: 4 |
||||
}, { |
||||
text: "金额", |
||||
tag: 5 |
||||
}, { |
||||
text: "金额", |
||||
tag: 6 |
||||
}, { |
||||
text: "金额", |
||||
tag: 7 |
||||
}]; |
||||
|
||||
var crossHeader = [{ |
||||
text: "cross1" |
||||
}, { |
||||
text: "cross2" |
||||
}]; |
||||
|
||||
var crossItems = [{ |
||||
children: [{ |
||||
text: "节点1", |
||||
children: [{ |
||||
text: "子节点1" |
||||
}, { |
||||
text: "子节点2" |
||||
}], |
||||
values: [0] |
||||
}, { |
||||
text: "节点2", |
||||
children: [{ |
||||
text: "子节点3" |
||||
}, { |
||||
text: "子节点4" |
||||
}], |
||||
values: [0] |
||||
}], |
||||
values: [0] |
||||
}]; |
||||
|
||||
var table = BI.createWidget({ |
||||
type: "bi.tree_table", |
||||
el: { |
||||
type: "bi.adaptive_table", |
||||
el: { |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.collection_table", |
||||
mergeRule: function (col1, col2) { |
||||
return BI.isEqual(col1, col2); |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
width: 600, |
||||
height: 400, |
||||
isNeedFreeze: true, |
||||
isNeedMerge: true, |
||||
freezeCols: [0, 1, 2], |
||||
mergeCols: [0, 1, 2], |
||||
minColumnSize: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
columnSize: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
header: header, |
||||
items: items, |
||||
crossHeader: crossHeader, |
||||
crossItems: crossItems |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.grid", |
||||
columns: 1, |
||||
rows: 1, |
||||
items: [[{ |
||||
el: table |
||||
}]] |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.tree_table", Demo.Func); |
@ -1,54 +0,0 @@
|
||||
/* 文件管理导航 |
||||
Created by dailer on 2017 / 7 / 21. |
||||
*/ |
||||
Demo.FileManager = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [{ |
||||
id: "1", |
||||
value: "1", |
||||
text: "根目录", |
||||
lastModify: 1454316355142 |
||||
}, { |
||||
id: "11", |
||||
pId: "1", |
||||
value: "11", |
||||
text: "第一级子目录1", |
||||
lastModify: 1454316355142 |
||||
}, { |
||||
id: "12", |
||||
pId: "1", |
||||
value: "12", |
||||
text: "第一级子目录2", |
||||
lastModify: 1454316355142 |
||||
}, { |
||||
id: "111", |
||||
pId: "11", |
||||
value: "111", |
||||
text: "第二级子目录", |
||||
lastModify: 1454316355142 |
||||
}, { |
||||
id: "121", |
||||
pId: "111", |
||||
buildUrl: "www.baidu.com", |
||||
value: "121", |
||||
text: "文件1", |
||||
lastModify: 1454316355142 |
||||
}, { |
||||
id: "122", |
||||
pId: "111", |
||||
buildUrl: "www.baidu.com", |
||||
value: "122", |
||||
text: "文件2", |
||||
lastModify: 1454316355142 |
||||
}]; |
||||
return { |
||||
type: "bi.file_manager", |
||||
items: items |
||||
}; |
||||
} |
||||
}); |
||||
BI.shortcut("demo.file_manager", Demo.FileManager); |
@ -1,215 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [{ |
||||
children: [{ |
||||
type: "bi.page_table_cell", |
||||
text: "node1", |
||||
children: [{ |
||||
type: "bi.page_table_cell", |
||||
text: "childnode1", |
||||
values: [{type: "bi.page_table_cell", text: 101}, { |
||||
type: "bi.page_table_cell", |
||||
text: 102 |
||||
}, {type: "bi.page_table_cell", text: 101}, { |
||||
type: "bi.page_table_cell", |
||||
text: 102 |
||||
}, {type: "bi.page_table_cell", text: 101}] |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "childnode2", |
||||
values: [{type: "bi.page_table_cell", text: 201}, { |
||||
type: "bi.page_table_cell", |
||||
text: 202 |
||||
}, {type: "bi.page_table_cell", text: 201}, { |
||||
type: "bi.page_table_cell", |
||||
text: 202 |
||||
}, {type: "bi.page_table_cell", text: 201}] |
||||
}], |
||||
values: [{type: "bi.page_table_cell", text: 1001}, { |
||||
type: "bi.page_table_cell", |
||||
text: 1002 |
||||
}, {type: "bi.page_table_cell", text: 1001}, { |
||||
type: "bi.page_table_cell", |
||||
text: 1002 |
||||
}, {type: "bi.page_table_cell", text: 1001}] |
||||
}], values: [{type: "bi.page_table_cell", text: 12001}, { |
||||
type: "bi.page_table_cell", |
||||
text: 12002 |
||||
}, {type: "bi.page_table_cell", text: 12001}, { |
||||
type: "bi.page_table_cell", |
||||
text: 12002 |
||||
}, {type: "bi.page_table_cell", text: 12001}] |
||||
}]; |
||||
|
||||
var header = [{ |
||||
type: "bi.page_table_cell", |
||||
text: "header1" |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "header2" |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "jine", |
||||
tag: 1 |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "jine", |
||||
tag: 2 |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "jine", |
||||
tag: 3 |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "金额汇总", |
||||
tag: 4 |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "金额汇总2", |
||||
tag: 5 |
||||
}]; |
||||
|
||||
var crossHeader = [{ |
||||
type: "bi.page_table_cell", |
||||
text: "cross1" |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "cross2" |
||||
}]; |
||||
|
||||
var crossItems = [{ |
||||
children: [{ |
||||
type: "bi.page_table_cell", |
||||
text: "node1", |
||||
values: [1, 2, 3] |
||||
}, { |
||||
type: "bi.page_table_cell", |
||||
text: "node3", |
||||
values: [1, 2] |
||||
}] |
||||
// values: [1, 2]
|
||||
}]; |
||||
|
||||
var table1 = BI.createWidget({ |
||||
type: "bi.page_table", |
||||
el: { |
||||
type: "bi.sequence_table", |
||||
showSequence: true, |
||||
el: { |
||||
type: "bi.dynamic_summary_tree_table", |
||||
el: { |
||||
type: "bi.adaptive_table", |
||||
el: { |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.collection_table" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
sequence: { |
||||
type: "bi.sequence_table_dynamic_number" |
||||
} |
||||
}, |
||||
summaryCellStyleGetter: function (isLast) { |
||||
return isLast ? { |
||||
backgroundColor: "#6495ED", |
||||
color: "#ffffff" |
||||
} : { |
||||
backgroundColor: "#B0C4DE", |
||||
color: "#ffffff" |
||||
}; |
||||
}, |
||||
sequenceCellStyleGetter: function (index) { |
||||
return { |
||||
backgroundColor: "#87CEEB", |
||||
color: "#ffffff" |
||||
}; |
||||
}, |
||||
headerCellStyleGetter: function () { |
||||
return { |
||||
backgroundColor: "#6495ED", |
||||
color: "#ffffff" |
||||
}; |
||||
}, |
||||
pager: { |
||||
horizontal: { |
||||
pages: false, // 总页数
|
||||
curr: 1, // 初始化当前页, pages为数字时可用
|
||||
|
||||
hasPrev: function (page) { |
||||
return page > 1; |
||||
}, |
||||
hasNext: function (page) { |
||||
return page < 3; |
||||
} |
||||
}, |
||||
vertical: { |
||||
pages: false, // 总页数
|
||||
curr: 1, // 初始化当前页, pages为数字时可用
|
||||
|
||||
hasPrev: function (page) { |
||||
return page > 1; |
||||
}, |
||||
hasNext: function (page) { |
||||
return page < 3; |
||||
} |
||||
} |
||||
}, |
||||
itemsCreator: function (op, populate) { |
||||
var vpage = op.vpage || ""; |
||||
var hpage = op.hpage || ""; |
||||
BI.each(header, function (i, h) { |
||||
h.text = h.text + "V" + vpage + "H" + hpage; |
||||
}); |
||||
populate(items, header, crossItems, crossHeader); |
||||
}, |
||||
width: 600, |
||||
height: 400, |
||||
columnSize: [100, 100, 100, 100, 100, 100, 100], |
||||
minColumnSize: [100, 100, 100, 100, 100, 100, 100], |
||||
isNeedMerge: true, |
||||
isNeedFreeze: true, |
||||
mergeCols: [0, 1], |
||||
mergeRule: function (col1, col2) { |
||||
if (col1 === col2) { |
||||
return true; |
||||
} |
||||
if (col1.tag && col2.tag) { |
||||
return col1.tag === col2.tag; |
||||
} |
||||
return col1 === col2; |
||||
}, |
||||
freezeCols: [0, 1], |
||||
header: header, |
||||
items: items, |
||||
crossHeader: crossHeader, |
||||
crossItems: crossItems |
||||
}); |
||||
table1.populate(); |
||||
// table1.populate(items, header, crossItems, crossHeader);
|
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.grid", |
||||
columns: 1, |
||||
rows: 1, |
||||
items: [[{ |
||||
el: table1 |
||||
}]] |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.page_table", Demo.Func); |
@ -1,233 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [[{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第二列" |
||||
}, { |
||||
text: "第一行第三列" |
||||
}], [{ |
||||
text: "第二行第一列" |
||||
}, { |
||||
text: "第二行第二列" |
||||
}, { |
||||
text: "第二行第三列" |
||||
}], [{ |
||||
text: "第二行第一列" |
||||
}, { |
||||
text: "第三行第二列" |
||||
}, { |
||||
text: "第三行第三列" |
||||
}], [{ |
||||
text: "第二行第一列" |
||||
}, { |
||||
text: "第四行第二列" |
||||
}, { |
||||
text: "第四行第三列" |
||||
}], [{ |
||||
text: "第五行第一列" |
||||
}, { |
||||
text: "第五行第二列" |
||||
}, { |
||||
text: "第五行第三列" |
||||
}], [{ |
||||
text: "第六行第一列" |
||||
}, { |
||||
text: "第六行第二列" |
||||
}, { |
||||
text: "第六行第三列" |
||||
}], [{ |
||||
text: "第七行第一列" |
||||
}, { |
||||
text: "第七行第二列" |
||||
}, { |
||||
text: "第七行第三列" |
||||
}], [{ |
||||
text: "第八行第一列" |
||||
}, { |
||||
text: "第八行第二列" |
||||
}, { |
||||
text: "第八行第三列" |
||||
}], [{ |
||||
text: "第九行第一列" |
||||
}, { |
||||
text: "第九行第二列" |
||||
}, { |
||||
text: "第九行第三列" |
||||
}], [{ |
||||
text: "第十行第一列" |
||||
}, { |
||||
text: "第十行第二列" |
||||
}, { |
||||
text: "第十行第三列" |
||||
}], [{ |
||||
text: "第十一行第一列" |
||||
}, { |
||||
text: "第十一行第二列" |
||||
}, { |
||||
text: "第十一行第三列" |
||||
}], [{ |
||||
text: "第十二行第一列" |
||||
}, { |
||||
text: "第十二行第二列" |
||||
}, { |
||||
text: "第十二行第三列" |
||||
}], [{ |
||||
text: "第十三行第一列" |
||||
}, { |
||||
text: "第十三行第二列" |
||||
}, { |
||||
text: "第十三行第三列" |
||||
}], [{ |
||||
text: "第十四行第一列" |
||||
}, { |
||||
text: "第十四行第二列" |
||||
}, { |
||||
text: "第十四行第三列" |
||||
}], [{ |
||||
text: "第十五行第一列" |
||||
}, { |
||||
text: "第十五行第二列" |
||||
}, { |
||||
text: "第十五行第三列" |
||||
}], [{ |
||||
text: "第十六行第一列" |
||||
}, { |
||||
text: "第十六行第二列" |
||||
}, { |
||||
text: "第十六行第三列" |
||||
}], [{ |
||||
text: "第十七行第一列" |
||||
}, { |
||||
text: "第十七行第二列" |
||||
}, { |
||||
text: "第十七行第三列" |
||||
}], [{ |
||||
text: "第十八行第一列" |
||||
}, { |
||||
text: "第十八行第二列" |
||||
}, { |
||||
text: "第十八行第三列" |
||||
}]]; |
||||
|
||||
var header = [[{ |
||||
text: "表头1" |
||||
}, { |
||||
text: "表头2" |
||||
}, { |
||||
text: "表头3" |
||||
}]]; |
||||
|
||||
var table1 = BI.createWidget({ |
||||
type: "bi.preview_table", |
||||
columnSize: ["", "", ""], |
||||
header: header, |
||||
items: items |
||||
}); |
||||
var table2 = BI.createWidget({ |
||||
type: "bi.preview_table", |
||||
header: header, |
||||
columnSize: [100, "", 50], |
||||
items: items |
||||
}); |
||||
var table3 = BI.createWidget({ |
||||
type: "bi.preview_table", |
||||
header: header, |
||||
columnSize: [0.2, 0.4, 0.4], |
||||
headerRowSize: 30, |
||||
items: items |
||||
}); |
||||
var table4 = BI.createWidget({ |
||||
type: "bi.preview_table", |
||||
header: header, |
||||
isNeedFreeze: true, |
||||
freezeCols: [0, 1], |
||||
columnSize: [0.2, "", 0.4], |
||||
items: items |
||||
}); |
||||
var table5 = BI.createWidget({ |
||||
type: "bi.preview_table", |
||||
header: header, |
||||
isNeedFreeze: true, |
||||
freezeCols: [0, 1], |
||||
columnSize: [200, 100, ""], |
||||
items: items |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.grid", |
||||
columns: 3, |
||||
rows: 2, |
||||
items: [[{ |
||||
el: { |
||||
type: "bi.absolute", |
||||
items: [{ |
||||
el: table1, |
||||
left: 5, |
||||
right: 5, |
||||
top: 5, |
||||
bottom: 5 |
||||
}] |
||||
} |
||||
}, { |
||||
el: { |
||||
type: "bi.absolute", |
||||
items: [{ |
||||
el: table2, |
||||
left: 5, |
||||
right: 5, |
||||
top: 5, |
||||
bottom: 5 |
||||
}] |
||||
} |
||||
}, { |
||||
el: { |
||||
type: "bi.absolute", |
||||
items: [{ |
||||
el: table3, |
||||
left: 5, |
||||
right: 5, |
||||
top: 5, |
||||
bottom: 5 |
||||
}] |
||||
} |
||||
}], [{ |
||||
el: { |
||||
type: "bi.absolute", |
||||
items: [{ |
||||
el: table4, |
||||
left: 5, |
||||
right: 5, |
||||
top: 5, |
||||
bottom: 5 |
||||
}] |
||||
} |
||||
}, { |
||||
el: { |
||||
type: "bi.absolute", |
||||
items: [{ |
||||
el: table5, |
||||
left: 5, |
||||
right: 5, |
||||
top: 5, |
||||
bottom: 5 |
||||
}] |
||||
} |
||||
}]] |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.preview_table", Demo.Func); |
@ -1,159 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [[{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}], [{ |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}, { |
||||
text: "第一行第一列" |
||||
}], [{ |
||||
text: "第三行第一列" |
||||
}, { |
||||
text: "第三行第二列" |
||||
}, { |
||||
text: "第三行第三列" |
||||
}], [{ |
||||
text: "第四行第一列" |
||||
}, { |
||||
text: "第四行第二列" |
||||
}, { |
||||
text: "第四行第三列" |
||||
}], [{ |
||||
text: "第五行第一列" |
||||
}, { |
||||
text: "第五行第二列" |
||||
}, { |
||||
text: "第五行第三列" |
||||
}], [{ |
||||
text: "第六行第一列" |
||||
}, { |
||||
text: "第六行第二列" |
||||
}, { |
||||
text: "第六行第三列" |
||||
}], [{ |
||||
text: "第七行第一列" |
||||
}, { |
||||
text: "第七行第二列" |
||||
}, { |
||||
text: "第七行第三列" |
||||
}], [{ |
||||
text: "第八行第一列" |
||||
}, { |
||||
text: "第八行第二列" |
||||
}, { |
||||
text: "第八行第三列" |
||||
}], [{ |
||||
text: "第九行第一列" |
||||
}, { |
||||
text: "第九行第二列" |
||||
}, { |
||||
text: "第九行第三列" |
||||
}], [{ |
||||
text: "第十行第一列" |
||||
}, { |
||||
text: "第十行第二列" |
||||
}, { |
||||
text: "第十行第三列" |
||||
}], [{ |
||||
text: "第十一行第一列" |
||||
}, { |
||||
text: "第十一行第二列" |
||||
}, { |
||||
text: "第十一行第三列" |
||||
}], [{ |
||||
text: "第十二行第一列" |
||||
}, { |
||||
text: "第十二行第二列" |
||||
}, { |
||||
text: "第十二行第三列" |
||||
}], [{ |
||||
text: "第十三行第一列" |
||||
}, { |
||||
text: "第十三行第二列" |
||||
}, { |
||||
text: "第十三行第三列" |
||||
}], [{ |
||||
text: "第十四行第一列" |
||||
}, { |
||||
text: "第十四行第二列" |
||||
}, { |
||||
text: "第十四行第三列" |
||||
}], [{ |
||||
text: "第十五行第一列" |
||||
}, { |
||||
text: "第十五行第二列" |
||||
}, { |
||||
text: "第十五行第三列" |
||||
}], [{ |
||||
text: "第十六行第一列" |
||||
}, { |
||||
text: "第十六行第二列" |
||||
}, { |
||||
text: "第十六行第三列" |
||||
}], [{ |
||||
text: "第十七行第一列" |
||||
}, { |
||||
text: "第十七行第二列" |
||||
}, { |
||||
text: "第十七行第三列" |
||||
}], [{ |
||||
text: "第十八行第一列" |
||||
}, { |
||||
text: "第十八行第二列" |
||||
}, { |
||||
text: "第十八行第三列" |
||||
}]]; |
||||
|
||||
|
||||
var header = [[{ |
||||
text: "表头1" |
||||
}, { |
||||
text: "表头2" |
||||
}, { |
||||
text: "表头3" |
||||
}]]; |
||||
|
||||
|
||||
var table1 = BI.createWidget({ |
||||
type: "bi.responsive_table", |
||||
isNeedMerge: true, |
||||
isNeedFreeze: true, |
||||
mergeCols: [0, 1], |
||||
items: [], |
||||
header: [] |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.tab", |
||||
showIndex: 1, |
||||
cardCreator: function (v) { |
||||
switch (v) { |
||||
case 1: |
||||
table1.attr("columnSize", ["", "", ""]); |
||||
table1.populate(items, header); |
||||
return table1; |
||||
} |
||||
} |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 10 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.responsive_table", Demo.Func); |
@ -1,159 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
render: function () { |
||||
var items = [{ |
||||
children: [{ |
||||
text: "节点1", |
||||
children: [{ |
||||
text: "子节点1", |
||||
children: [{ |
||||
text: "叶节点1", |
||||
values: [{text: 11}, {text: 12}, {text: 11}, {text: 12}, {text: 11}, {text: 12}, {text: 112}] |
||||
}, { |
||||
text: "叶节点2", |
||||
values: [{text: 21}, {text: 22}, {text: 21}, {text: 22}, {text: 21}, {text: 22}, {text: 122}] |
||||
}], |
||||
values: [{text: 101}, {text: 102}, {text: 101}, {text: 102}, {text: 101}, {text: 102}, {text: 1102}] |
||||
}, { |
||||
text: "子节点2", |
||||
children: [{ |
||||
text: "叶节点3", |
||||
values: [{text: 31}, {text: 32}, {text: 31}, {text: 32}, {text: 31}, {text: 32}, {text: 132}] |
||||
}, { |
||||
text: "叶节点4", |
||||
values: [{text: 41}, {text: 42}, {text: 41}, {text: 42}, {text: 41}, {text: 42}, {text: 142}] |
||||
}], |
||||
values: [{text: 201}, {text: 202}, {text: 201}, {text: 202}, {text: 201}, {text: 202}, {text: 1202}] |
||||
}, { |
||||
text: "子节点3", |
||||
children: [{ |
||||
text: "叶节点5", |
||||
values: [{text: 51}, {text: 52}, {text: 51}, {text: 52}, {text: 51}, {text: 52}, {text: 152}] |
||||
}], |
||||
values: [{text: 301}, {text: 302}, {text: 301}, {text: 302}, {text: 301}, {text: 302}, {text: 1302}] |
||||
}], |
||||
values: [{text: 1001}, {text: 1002}, {text: 1001}, {text: 1002}, {text: 1001}, {text: 1002}, {text: 11002}] |
||||
}, { |
||||
text: "节点2", |
||||
values: [{text: 2001}, {text: 2002}, {text: 2001}, {text: 2002}, {text: 2001}, {text: 2002}, {text: 12002}] |
||||
}], |
||||
values: [{text: 12001}, {text: 12002}, {text: 12001}, {text: 12002}, {text: 12001}, {text: 12002}, {text: 112002}] |
||||
}]; |
||||
|
||||
var header = [{ |
||||
text: "header1" |
||||
}, { |
||||
text: "header2" |
||||
}, { |
||||
text: "header3" |
||||
}, { |
||||
text: "金额", |
||||
tag: 1 |
||||
}, { |
||||
text: "金额", |
||||
tag: 2 |
||||
}, { |
||||
text: "金额", |
||||
tag: 3 |
||||
}, { |
||||
text: "金额", |
||||
tag: 4 |
||||
}, { |
||||
text: "金额", |
||||
tag: 5 |
||||
}, { |
||||
text: "金额", |
||||
tag: 6 |
||||
}, { |
||||
text: "金额", |
||||
tag: 7 |
||||
}]; |
||||
|
||||
var crossHeader = [{ |
||||
text: "cross1" |
||||
}, { |
||||
text: "cross2" |
||||
}]; |
||||
|
||||
var crossItems = [{ |
||||
children: [{ |
||||
text: "节点1", |
||||
children: [{ |
||||
text: "子节点1" |
||||
}, { |
||||
text: "子节点2" |
||||
}], |
||||
values: [0] |
||||
}, { |
||||
text: "节点2", |
||||
children: [{ |
||||
text: "子节点3" |
||||
}, { |
||||
text: "子节点4" |
||||
}], |
||||
values: [0] |
||||
}], |
||||
values: [0] |
||||
}]; |
||||
var table = BI.createWidget({ |
||||
type: "bi.sequence_table", |
||||
el: { |
||||
type: "bi.tree_table", |
||||
el: { |
||||
type: "bi.adaptive_table", |
||||
el: { |
||||
type: "bi.resizable_table", |
||||
el: { |
||||
type: "bi.collection_table" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
sequence: { |
||||
type: "bi.sequence_table_tree_number" |
||||
}, |
||||
showSequence: true, |
||||
width: 600, |
||||
height: 400, |
||||
isNeedResize: true, |
||||
isNeedMerge: true, |
||||
mergeRule: function (row1, row2) { |
||||
return row1 === row2; |
||||
}, |
||||
columnSize: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
minColumnSize: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100], |
||||
isNeedFreeze: true, |
||||
freezeCols: [0, 1, 2], |
||||
mergeCols: [0, 1, 2], |
||||
header: header, |
||||
items: items, |
||||
crossHeader: crossHeader, |
||||
crossItems: crossItems |
||||
}); |
||||
|
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.grid", |
||||
columns: 1, |
||||
rows: 1, |
||||
items: [{ |
||||
column: 0, |
||||
row: 0, |
||||
el: table |
||||
}] |
||||
}, |
||||
left: 10, |
||||
right: 10, |
||||
top: 10, |
||||
bottom: 50 |
||||
}] |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("demo.sequence_table", Demo.Func); |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,155 +0,0 @@
|
||||
/** |
||||
* |
||||
* 原生表格滚动条,为了IE8的兼容 |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.NativeTableScrollbar |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.NativeTableScrollbar = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.NativeTableScrollbar.superclass._defaultConfig.apply(this, arguments), { |
||||
attributes: { |
||||
tabIndex: 0 |
||||
}, |
||||
contentSize: 0, |
||||
defaultPosition: 0, |
||||
position: 0, |
||||
size: 0 |
||||
}); |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this, o = this.options; |
||||
// 把滚动台size改掉
|
||||
this.element.width(36); |
||||
|
||||
var throttle = BI.throttle(function () { |
||||
self.fireEvent(BI.NativeTableScrollbar.EVENT_SCROLL, self.element.scrollTop()); |
||||
}, 150, {leading: false}); |
||||
this.element.scroll(function () { |
||||
throttle(); |
||||
}); |
||||
return { |
||||
type: "bi.default", |
||||
scrolly: true, |
||||
items: [{ |
||||
type: "bi.layout", |
||||
width: 1, |
||||
ref: function (_ref) { |
||||
self.inner = _ref; |
||||
} |
||||
}] |
||||
}; |
||||
}, |
||||
|
||||
mounted: function () { |
||||
this._populate(); |
||||
}, |
||||
|
||||
_populate: function () { |
||||
var self = this, o = this.options; |
||||
if (o.size < 1 || o.contentSize <= o.size) { |
||||
this.setVisible(false); |
||||
return; |
||||
} |
||||
this.setVisible(true); |
||||
try { |
||||
this.element.scrollTop(o.position); |
||||
} catch (e) { |
||||
|
||||
} |
||||
this.inner.element.height(o.contentSize); |
||||
}, |
||||
|
||||
setContentSize: function (contentSize) { |
||||
this.options.contentSize = contentSize; |
||||
}, |
||||
|
||||
setPosition: function (position) { |
||||
this.options.position = position; |
||||
}, |
||||
|
||||
setSize: function (size) { |
||||
this.setHeight(size); |
||||
this.options.size = size; |
||||
}, |
||||
|
||||
populate: function () { |
||||
this._populate(); |
||||
} |
||||
}); |
||||
BI.NativeTableScrollbar.EVENT_SCROLL = "EVENT_SCROLL"; |
||||
BI.shortcut("bi.native_table_scrollbar", BI.NativeTableScrollbar); |
||||
|
||||
|
||||
BI.NativeTableHorizontalScrollbar = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.NativeTableHorizontalScrollbar.superclass._defaultConfig.apply(this, arguments), { |
||||
attributes: { |
||||
tabIndex: 0 |
||||
}, |
||||
contentSize: 0, |
||||
position: 0, |
||||
size: 0 |
||||
}); |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this, o = this.options; |
||||
// 把滚动台size改掉
|
||||
this.element.height(36); |
||||
|
||||
var throttle = BI.throttle(function () { |
||||
self.fireEvent(BI.NativeTableScrollbar.EVENT_SCROLL, self.element.scrollLeft()); |
||||
}, 150, {leading: false}); |
||||
this.element.scroll(function () { |
||||
throttle(); |
||||
}); |
||||
return { |
||||
type: "bi.default", |
||||
scrollx: true, |
||||
items: [{ |
||||
type: "bi.layout", |
||||
height: 1, |
||||
ref: function (_ref) { |
||||
self.inner = _ref; |
||||
} |
||||
}] |
||||
}; |
||||
}, |
||||
|
||||
setContentSize: function (contentSize) { |
||||
this.options.contentSize = contentSize; |
||||
}, |
||||
|
||||
setPosition: function (position) { |
||||
this.options.position = position; |
||||
}, |
||||
|
||||
setSize: function (size) { |
||||
this.setWidth(size); |
||||
this.options.size = size; |
||||
}, |
||||
|
||||
_populate: function () { |
||||
var self = this, o = this.options; |
||||
if (o.size < 1 || o.contentSize <= o.size) { |
||||
this.setVisible(false); |
||||
return; |
||||
} |
||||
this.setVisible(true); |
||||
try { |
||||
this.element.scrollLeft(o.position); |
||||
} catch (e) { |
||||
|
||||
} |
||||
this.inner.element.width(o.contentSize); |
||||
}, |
||||
|
||||
populate: function () { |
||||
this._populate(); |
||||
} |
||||
}); |
||||
BI.NativeTableHorizontalScrollbar.EVENT_SCROLL = "EVENT_SCROLL"; |
||||
BI.shortcut("bi.native_table_horizontal_scrollbar", BI.NativeTableHorizontalScrollbar); |
@ -1,36 +0,0 @@
|
||||
/** |
||||
* |
||||
* 表格 |
||||
* |
||||
* Created by GUY on 2015/9/22. |
||||
* @class BI.TableCell |
||||
* @extends BI.Single |
||||
*/ |
||||
BI.TableCell = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.TableCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-table-cell", |
||||
textAlign: "left", |
||||
text: "" |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.TableCell.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
BI.createWidget({ |
||||
type: "bi.label", |
||||
element: this, |
||||
whiteSpace: o.whiteSpace || "nowrap", |
||||
textAlign: this.options.textAlign, |
||||
height: this.options.height, |
||||
text: this.options.text, |
||||
value: this.options.value, |
||||
lgap: o.lgap, |
||||
rgap: o.rgap, |
||||
hgap: o.hgap || 5 |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.table_cell", BI.TableCell); |
@ -1,57 +0,0 @@
|
||||
/** |
||||
* |
||||
* 表格单元格 |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.CollectionTableCell |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.CollectionTableCell = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.CollectionTableCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-collection-table-cell bi-border-right bi-border-bottom", |
||||
width: 0, |
||||
height: 0, |
||||
_left: 0, |
||||
_top: 0, |
||||
cell: {} |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.CollectionTableCell.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell = BI.createWidget(BI.extend({ |
||||
type: "bi.label" |
||||
}, o.cell, { |
||||
cls: (o.cell.cls || "") + " collection-table-cell-wrapper", |
||||
width: o.width - (o._left === 0 ? 1 : 0) - 1, |
||||
height: o.height - (o._top === 0 ? 1 : 0) - 1 |
||||
})); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.cell, |
||||
left: 0, |
||||
right: 0, |
||||
top: 0, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.CollectionTableCell.superclass.setWidth.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell.setWidth(o.width - (o._left === 0 ? 1 : 0) - 1); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.CollectionTableCell.superclass.setHeight.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell.setHeight(o.height - (o._top === 0 ? 1 : 0) - 1); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.collection_table_cell", BI.CollectionTableCell); |
@ -1,558 +0,0 @@
|
||||
/** |
||||
* CollectionTable |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.CollectionTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.CollectionTable = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.CollectionTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-collection-table", |
||||
headerRowSize: 25, |
||||
rowSize: 25, |
||||
columnSize: [], |
||||
isNeedFreeze: false, |
||||
freezeCols: [], |
||||
isNeedMerge: false, |
||||
mergeCols: [], |
||||
mergeRule: BI.emptyFn, |
||||
header: [], |
||||
items: [], |
||||
regionColumnSize: [] |
||||
}); |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this, o = this.options; |
||||
this._width = 0; |
||||
this._height = 0; |
||||
this._scrollBarSize = BI.DOM.getScrollWidth(); |
||||
this.topLeftCollection = BI.createWidget({ |
||||
type: "bi.collection_view", |
||||
cellSizeAndPositionGetter: function (index) { |
||||
return self.topLeftItems[index]; |
||||
} |
||||
}); |
||||
this.topLeftCollection.on(BI.CollectionView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomLeftCollection.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.topRightCollection = BI.createWidget({ |
||||
type: "bi.collection_view", |
||||
cellSizeAndPositionGetter: function (index) { |
||||
return self.topRightItems[index]; |
||||
} |
||||
}); |
||||
this.topRightCollection.on(BI.CollectionView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomRightCollection.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.bottomLeftCollection = BI.createWidget({ |
||||
type: "bi.collection_view", |
||||
cellSizeAndPositionGetter: function (index) { |
||||
return self.bottomLeftItems[index]; |
||||
} |
||||
}); |
||||
this.bottomLeftCollection.on(BI.CollectionView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomRightCollection.setScrollTop(scroll.scrollTop); |
||||
self.topLeftCollection.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.bottomRightCollection = BI.createWidget({ |
||||
type: "bi.collection_view", |
||||
cellSizeAndPositionGetter: function (index) { |
||||
return self.bottomRightItems[index]; |
||||
} |
||||
}); |
||||
this.bottomRightCollection.on(BI.CollectionView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomLeftCollection.setScrollTop(scroll.scrollTop); |
||||
self.topRightCollection.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.topLeft = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.topLeftCollection] |
||||
}); |
||||
this.topRight = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.topRightCollection] |
||||
}); |
||||
this.bottomLeft = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.bottomLeftCollection] |
||||
}); |
||||
this.bottomRight = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.bottomRightCollection] |
||||
}); |
||||
this.contextLayout = BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.topLeft, |
||||
top: 0, |
||||
left: 0 |
||||
}, { |
||||
el: this.topRight, |
||||
top: 0 |
||||
}, { |
||||
el: this.bottomLeft, |
||||
left: 0 |
||||
}, { |
||||
el: this.bottomRight |
||||
}] |
||||
}); |
||||
|
||||
this.topScrollbar = BI.createWidget({ |
||||
type: "bi.grid_table_scrollbar", |
||||
width: BI.GridTableScrollbar.SIZE |
||||
}); |
||||
this.topScrollbar.on(BI.GridTableScrollbar.EVENT_SCROLL, function (scrollTop) { |
||||
self.bottomLeftCollection.setScrollTop(scrollTop); |
||||
self.bottomRightCollection.setScrollTop(scrollTop); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.leftScrollbar = BI.createWidget({ |
||||
type: "bi.grid_table_horizontal_scrollbar", |
||||
height: BI.GridTableScrollbar.SIZE |
||||
}); |
||||
this.leftScrollbar.on(BI.GridTableScrollbar.EVENT_SCROLL, function (scrollLeft) { |
||||
self.topLeftCollection.setScrollLeft(scrollLeft); |
||||
self.bottomLeftCollection.setScrollLeft(scrollLeft); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.rightScrollbar = BI.createWidget({ |
||||
type: "bi.grid_table_horizontal_scrollbar", |
||||
height: BI.GridTableScrollbar.SIZE |
||||
}); |
||||
this.rightScrollbar.on(BI.GridTableScrollbar.EVENT_SCROLL, function (scrollLeft) { |
||||
self.topRightCollection.setScrollLeft(scrollLeft); |
||||
self.bottomRightCollection.setScrollLeft(scrollLeft); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.scrollBarLayout = BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.topScrollbar, |
||||
right: 0, |
||||
top: 0 |
||||
}, { |
||||
el: this.leftScrollbar, |
||||
left: 0 |
||||
}, { |
||||
el: this.rightScrollbar |
||||
}] |
||||
}); |
||||
this._width = o.width - BI.GridTableScrollbar.SIZE; |
||||
this._height = o.height - BI.GridTableScrollbar.SIZE; |
||||
}, |
||||
|
||||
mounted: function () { |
||||
var o = this.options; |
||||
if (o.items.length > 0 || o.header.length > 0) { |
||||
this._digest(); |
||||
this._populate(); |
||||
} |
||||
}, |
||||
|
||||
_getFreezeColLength: function () { |
||||
var o = this.options; |
||||
return o.isNeedFreeze === true ? BI.clamp(o.freezeCols.length, 0, o.columnSize.length) : 0; |
||||
}, |
||||
|
||||
_getFreezeHeaderHeight: function () { |
||||
var o = this.options; |
||||
if (o.header.length * o.headerRowSize >= this._height) { |
||||
return 0; |
||||
} |
||||
return o.header.length * o.headerRowSize; |
||||
}, |
||||
|
||||
_getActualItems: function () { |
||||
var o = this.options; |
||||
if (o.header.length * o.headerRowSize >= this._height) { |
||||
return o.header.concat(o.items); |
||||
} |
||||
return o.items; |
||||
}, |
||||
|
||||
_populateScrollbar: function () { |
||||
var o = this.options; |
||||
var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, |
||||
summaryColumnSizeArray = []; |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { |
||||
totalLeftColumnSize += size; |
||||
} else { |
||||
totalRightColumnSize += size; |
||||
} |
||||
totalColumnSize += size; |
||||
if (i === 0) { |
||||
summaryColumnSizeArray[i] = size; |
||||
} else { |
||||
summaryColumnSizeArray[i] = summaryColumnSizeArray[i - 1] + size; |
||||
} |
||||
}); |
||||
this.topScrollbar.setContentSize(this._getActualItems().length * o.rowSize); |
||||
this.topScrollbar.setSize(this._height - this._getFreezeHeaderHeight()); |
||||
this.topScrollbar.setPosition(this.bottomRightCollection.getScrollTop()); |
||||
this.topScrollbar.populate(); |
||||
|
||||
this.leftScrollbar.setContentSize(totalLeftColumnSize); |
||||
this.leftScrollbar.setSize(regionSize); |
||||
this.leftScrollbar.setPosition(this.bottomLeftCollection.getScrollLeft()); |
||||
this.leftScrollbar.populate(); |
||||
|
||||
this.rightScrollbar.setContentSize(totalRightColumnSize); |
||||
this.rightScrollbar.setSize(this._width - regionSize); |
||||
this.rightScrollbar.setPosition(this.bottomRightCollection.getScrollLeft()); |
||||
this.rightScrollbar.populate(); |
||||
|
||||
var items = this.scrollBarLayout.attr("items"); |
||||
items[0].top = this._getFreezeHeaderHeight(); |
||||
items[1].top = this._height; |
||||
items[2].top = this._height; |
||||
items[2].left = regionSize; |
||||
this.scrollBarLayout.attr("items", items); |
||||
this.scrollBarLayout.resize(); |
||||
}, |
||||
|
||||
_populateTable: function () { |
||||
var self = this, o = this.options; |
||||
var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, |
||||
summaryColumnSizeArray = []; |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { |
||||
totalLeftColumnSize += size; |
||||
} else { |
||||
totalRightColumnSize += size; |
||||
} |
||||
totalColumnSize += size; |
||||
if (i === 0) { |
||||
summaryColumnSizeArray[i] = size; |
||||
} else { |
||||
summaryColumnSizeArray[i] = summaryColumnSizeArray[i - 1] + size; |
||||
} |
||||
}); |
||||
|
||||
var otlw = regionSize; |
||||
var otlh = this._getFreezeHeaderHeight(); |
||||
var otrw = this._width - regionSize; |
||||
var otrh = this._getFreezeHeaderHeight(); |
||||
var oblw = regionSize; |
||||
var oblh = this._height - otlh; |
||||
var obrw = this._width - regionSize; |
||||
var obrh = this._height - otrh; |
||||
|
||||
var tlw = otlw + this._scrollBarSize; |
||||
var tlh = otlh + this._scrollBarSize; |
||||
var trw = otrw + this._scrollBarSize; |
||||
var trh = otrh + this._scrollBarSize; |
||||
var blw = oblw + this._scrollBarSize; |
||||
var blh = oblh + this._scrollBarSize; |
||||
var brw = obrw + this._scrollBarSize; |
||||
var brh = obrh + this._scrollBarSize; |
||||
|
||||
var digest = function (el) { |
||||
el.element.css({ |
||||
overflow: "scroll", |
||||
overflowX: "scroll", |
||||
overflowY: "scroll" |
||||
}); |
||||
}; |
||||
|
||||
this.topLeft.setWidth(otlw); |
||||
this.topLeft.setHeight(otlh); |
||||
this.topRight.setWidth(otrw); |
||||
this.topRight.setHeight(otrh); |
||||
this.bottomLeft.setWidth(oblw); |
||||
this.bottomLeft.setHeight(oblh); |
||||
this.bottomRight.setWidth(obrw); |
||||
this.bottomRight.setHeight(obrh); |
||||
|
||||
this.topLeftCollection.setWidth(tlw); |
||||
this.topLeftCollection.setHeight(tlh); |
||||
this.topRightCollection.setWidth(trw); |
||||
this.topRightCollection.setHeight(trh); |
||||
this.bottomLeftCollection.setWidth(blw); |
||||
this.bottomLeftCollection.setHeight(blh); |
||||
this.bottomRightCollection.setWidth(brw); |
||||
this.bottomRightCollection.setHeight(brh); |
||||
|
||||
digest(this.topLeftCollection); |
||||
digest(this.topRightCollection); |
||||
digest(this.bottomLeftCollection); |
||||
digest(this.bottomRightCollection); |
||||
|
||||
var items = this.contextLayout.attr("items"); |
||||
items[1].left = regionSize; |
||||
items[2].top = this._getFreezeHeaderHeight(); |
||||
items[3].left = regionSize; |
||||
items[3].top = this._getFreezeHeaderHeight(); |
||||
this.contextLayout.attr("items", items); |
||||
this.contextLayout.resize(); |
||||
|
||||
var leftHeader = [], rightHeader = [], leftItems = [], rightItems = []; |
||||
var run = function (positions, items, rendered) { |
||||
BI.each(positions, function (i, item) { |
||||
var cell = { |
||||
type: "bi.collection_table_cell", |
||||
cell: items[item.row][item.col] |
||||
}; |
||||
rendered.push(cell); |
||||
}); |
||||
}; |
||||
run(this.topLeftItems, o.header, leftHeader); |
||||
run(this.topRightItems, o.header, rightHeader); |
||||
run(this.bottomLeftItems, this._getActualItems(), leftItems); |
||||
run(this.bottomRightItems, this._getActualItems(), rightItems); |
||||
|
||||
this.topLeftCollection._populate(leftHeader); |
||||
this.topRightCollection._populate(rightHeader); |
||||
this.bottomLeftCollection._populate(leftItems); |
||||
this.bottomRightCollection._populate(rightItems); |
||||
}, |
||||
|
||||
_digest: function () { |
||||
var o = this.options; |
||||
var freezeColLength = this._getFreezeColLength(); |
||||
// 如果表头位置不够,取消表头冻结
|
||||
if (this._getFreezeHeaderHeight() <= 0) { |
||||
this.topLeftItems = []; |
||||
this.topRightItems = []; |
||||
this.bottomLeftItems = this._serialize(this._getActualItems(), 0, freezeColLength, o.rowSize, o.columnSize, o.mergeCols, BI.range(o.header.length)); |
||||
this.bottomRightItems = this._serialize(this._getActualItems(), freezeColLength, o.columnSize.length, o.rowSize, o.columnSize, o.mergeCols, BI.range(o.header.length)); |
||||
} else { |
||||
this.topLeftItems = this._serialize(o.header, 0, freezeColLength, o.headerRowSize, o.columnSize, o.mergeCols); |
||||
this.topRightItems = this._serialize(o.header, freezeColLength, o.columnSize.length, o.headerRowSize, o.columnSize, true); |
||||
this.bottomLeftItems = this._serialize(o.items, 0, freezeColLength, o.rowSize, o.columnSize, o.mergeCols); |
||||
this.bottomRightItems = this._serialize(o.items, freezeColLength, o.columnSize.length, o.rowSize, o.columnSize, o.mergeCols); |
||||
} |
||||
}, |
||||
|
||||
_serialize: function (items, startCol, endCol, rowHeight, columnSize, mergeCols, mergeRows) { |
||||
mergeCols = mergeCols || []; |
||||
mergeRows = mergeRows || []; |
||||
var self = this, o = this.options; |
||||
var result = [], cache = {}, preCol = {}, preRow = {}, map = {}; |
||||
var summaryColumnSize = []; |
||||
for (var i = startCol; i < endCol; i++) { |
||||
if (i === startCol) { |
||||
summaryColumnSize[i] = columnSize[i]; |
||||
} else { |
||||
summaryColumnSize[i] = summaryColumnSize[i - 1] + columnSize[i]; |
||||
} |
||||
} |
||||
var mergeRow = function (i, j) { |
||||
preCol[j]._height += rowHeight; |
||||
preCol[j].__mergeRows.push(i); |
||||
}; |
||||
|
||||
var mergeCol = function (i, j) { |
||||
preRow[i]._width += columnSize[j]; |
||||
preRow[i].__mergeCols.push(j); |
||||
}; |
||||
|
||||
var createOneEl = function (r, c) { |
||||
var width = columnSize[c]; |
||||
var height = rowHeight; |
||||
map[r][c]._row = r; |
||||
map[r][c]._col = c; |
||||
map[r][c]._width = width; |
||||
map[r][c]._height = height; |
||||
preCol[c] = map[r][c]; |
||||
preCol[c].__mergeRows = [r]; |
||||
preRow[r] = map[r][c]; |
||||
preRow[r].__mergeCols = [c]; |
||||
|
||||
result.push({ |
||||
x: summaryColumnSize[c] - columnSize[c], |
||||
y: +r * rowHeight, |
||||
item: map[r][c] |
||||
}); |
||||
}; |
||||
|
||||
BI.each(items, function (i, cols) { |
||||
for (var j = startCol; j < endCol; j++) { |
||||
if (!cache[i]) { |
||||
cache[i] = {}; |
||||
} |
||||
if (!map[i]) { |
||||
map[i] = {}; |
||||
} |
||||
cache[i][j] = cols[j]; |
||||
map[i][j] = {}; |
||||
if (mergeCols === true || mergeCols.indexOf(j) > -1 || mergeRows === true || mergeRows.indexOf(i) > -1) { |
||||
if (i === 0 && j === startCol) { |
||||
createOneEl(0, startCol); |
||||
} else if (j === startCol && i > 0) { |
||||
var isNeedMergeRow = o.mergeRule(cache[i][j], cache[i - 1][j]); |
||||
if (isNeedMergeRow === true) { |
||||
mergeRow(i, j); |
||||
preRow[i] = preCol[j]; |
||||
} else { |
||||
createOneEl(i, j); |
||||
} |
||||
} else if (i === 0 && j > startCol) { |
||||
var isNeedMergeCol = o.mergeRule(cache[i][j], cache[i][j - 1]); |
||||
if (isNeedMergeCol === true) { |
||||
mergeCol(i, j); |
||||
preCol[j] = preRow[i]; |
||||
} else { |
||||
createOneEl(i, j); |
||||
} |
||||
} else { |
||||
var isNeedMergeRow = o.mergeRule(cache[i][j], cache[i - 1][j]); |
||||
var isNeedMergeCol = o.mergeRule(cache[i][j], cache[i][j - 1]); |
||||
if (isNeedMergeCol && isNeedMergeRow) { |
||||
continue; |
||||
// mergeRow(i, j);//优先合并列
|
||||
} |
||||
if (isNeedMergeCol) { |
||||
mergeCol(i, j); |
||||
} |
||||
if (isNeedMergeRow) { |
||||
mergeRow(i, j); |
||||
} |
||||
if (!isNeedMergeCol && !isNeedMergeRow) { |
||||
createOneEl(i, j); |
||||
} |
||||
} |
||||
} else { |
||||
createOneEl(i, j); |
||||
} |
||||
} |
||||
}); |
||||
return BI.map(result, function (i, item) { |
||||
return { |
||||
x: item.x, |
||||
y: item.y, |
||||
row: item.item._row, |
||||
col: item.item._col, |
||||
width: item.item._width, |
||||
height: item.item._height |
||||
}; |
||||
}); |
||||
}, |
||||
|
||||
_populate: function () { |
||||
if (this._width <= 0 || this._height <= 0) { |
||||
return; |
||||
} |
||||
if (this._isNeedDigest === true) { |
||||
this._digest(); |
||||
} |
||||
this._isNeedDigest = false; |
||||
this._populateTable(); |
||||
this._populateScrollbar(); |
||||
}, |
||||
|
||||
getRegionSize: function () { |
||||
var o = this.options; |
||||
var regionSize = o.regionColumnSize[0] || 0; |
||||
if (o.isNeedFreeze === false || o.freezeCols.length === 0) { |
||||
return 0; |
||||
} |
||||
if (!regionSize) { |
||||
BI.each(o.freezeCols, function (i, col) { |
||||
regionSize += o.columnSize[col]; |
||||
}); |
||||
} |
||||
return regionSize; |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.bottomLeftCollection.setScrollTop(scrollTop); |
||||
this.bottomRightCollection.setScrollTop(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.topLeftCollection.setScrollLeft(scrollLeft); |
||||
this.bottomLeftCollection.setScrollLeft(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.topRightCollection.setScrollLeft(scrollLeft); |
||||
this.bottomRightCollection.setScrollLeft(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.bottomRightCollection.getScrollTop(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.bottomLeftCollection.getScrollLeft(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.bottomRightCollection.getScrollLeft(); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.CollectionTable.superclass.setWidth.apply(this, arguments); |
||||
this._width = this.options.width - BI.GridTableScrollbar.SIZE; |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.CollectionTable.superclass.setHeight.apply(this, arguments); |
||||
this._height = this.options.height - BI.GridTableScrollbar.SIZE; |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this._isNeedDigest = true; |
||||
this.options.columnSize = columnSize; |
||||
}, |
||||
|
||||
setRegionColumnSize: function (regionColumnSize) { |
||||
this._isNeedDigest = true; |
||||
this.options.regionColumnSize = regionColumnSize; |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.options.columnSize; |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.options.regionColumnSize; |
||||
}, |
||||
|
||||
populate: function (items, header) { |
||||
if (items && items !== this.options.items) { |
||||
this._isNeedDigest = true; |
||||
this.options.items = items; |
||||
this._restore(); |
||||
} |
||||
if (header && header !== this.options.header) { |
||||
this._isNeedDigest = true; |
||||
this.options.header = header; |
||||
this._restore(); |
||||
} |
||||
this._populate(); |
||||
}, |
||||
|
||||
_restore: function () { |
||||
this.topLeftCollection.restore(); |
||||
this.topRightCollection.restore(); |
||||
this.bottomLeftCollection.restore(); |
||||
this.bottomRightCollection.restore(); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this._restore(); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.collection_table", BI.CollectionTable); |
@ -1,191 +0,0 @@
|
||||
/** |
||||
* QuickCollectionTable |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.QuickCollectionTable |
||||
* @extends BI.CollectionTable |
||||
*/ |
||||
BI.QuickCollectionTable = BI.inherit(BI.CollectionTable, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.QuickCollectionTable.superclass._defaultConfig.apply(this, arguments), { |
||||
extraCls: "bi-quick-collection-table" |
||||
}); |
||||
}, |
||||
|
||||
render: function () { |
||||
BI.QuickCollectionTable.superclass.render.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.topLeftCollection.setOverflowX(false); |
||||
this.topLeftCollection.setOverflowY(false); |
||||
this.topRightCollection.setOverflowX(false); |
||||
this.topRightCollection.setOverflowY(false); |
||||
this.bottomLeftCollection.setOverflowX(false); |
||||
this.bottomLeftCollection.setOverflowY(false); |
||||
this.bottomRightCollection.setOverflowX(false); |
||||
this.bottomRightCollection.setOverflowY(false); |
||||
}, |
||||
|
||||
mounted: function () { |
||||
BI.QuickCollectionTable.superclass.mounted.apply(this, arguments); |
||||
var self = this; |
||||
this._topLeftWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelLeft, this), |
||||
BI.bind(this._shouldHandleLeftX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this._topRightWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelRight, this), |
||||
BI.bind(this._shouldHandleRightX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this._bottomLeftWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelLeft, this), |
||||
BI.bind(this._shouldHandleLeftX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this._bottomRightWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelRight, this), |
||||
BI.bind(this._shouldHandleRightX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this.topLeftCollection.element.mousewheel(function (e) { |
||||
self._topLeftWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
this.topRightCollection.element.mousewheel(function (e) { |
||||
self._topRightWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
this.bottomLeftCollection.element.mousewheel(function (e) { |
||||
self._bottomLeftWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
this.bottomRightCollection.element.mousewheel(function (e) { |
||||
self._bottomRightWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
}, |
||||
|
||||
_shouldHandleLeftX: function (delta) { |
||||
if (delta > 0) { |
||||
return this.bottomLeftCollection.getScrollLeft() < this.bottomLeftCollection.getMaxScrollLeft(); |
||||
} |
||||
return this.bottomLeftCollection.getScrollLeft() > 0; |
||||
|
||||
}, |
||||
|
||||
_shouldHandleRightX: function (delta) { |
||||
if (delta > 0) { |
||||
return this.bottomRightCollection.getScrollLeft() < this.bottomRightCollection.getMaxScrollLeft(); |
||||
} |
||||
return this.bottomRightCollection.getScrollLeft() > 0; |
||||
|
||||
}, |
||||
|
||||
_shouldHandleY: function (delta) { |
||||
if (delta > 0) { |
||||
return this.bottomRightCollection.getScrollTop() < this.bottomRightCollection.getMaxScrollTop(); |
||||
} |
||||
return this.bottomRightCollection.getScrollTop() > 0; |
||||
|
||||
}, |
||||
|
||||
_onWheelLeft: function (deltaX, deltaY) { |
||||
var self = this; |
||||
var scrollTop = this.bottomLeftCollection.getScrollTop(); |
||||
var scrollLeft = this.bottomLeftCollection.getScrollLeft(); |
||||
scrollTop += deltaY; |
||||
scrollLeft += deltaX; |
||||
this.bottomLeftCollection.setScrollTop(scrollTop); |
||||
this.bottomRightCollection.setScrollTop(scrollTop); |
||||
this.topLeftCollection.setScrollLeft(scrollLeft); |
||||
this.bottomLeftCollection.setScrollLeft(scrollLeft); |
||||
self._populateScrollbar(); |
||||
this.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}, |
||||
|
||||
_onWheelRight: function (deltaX, deltaY) { |
||||
var self = this; |
||||
var scrollTop = this.bottomRightCollection.getScrollTop(); |
||||
var scrollLeft = this.bottomRightCollection.getScrollLeft(); |
||||
scrollTop += deltaY; |
||||
scrollLeft += deltaX; |
||||
this.bottomLeftCollection.setScrollTop(scrollTop); |
||||
this.bottomRightCollection.setScrollTop(scrollTop); |
||||
this.topRightCollection.setScrollLeft(scrollLeft); |
||||
this.bottomRightCollection.setScrollLeft(scrollLeft); |
||||
self._populateScrollbar(); |
||||
this.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}, |
||||
|
||||
_populateTable: function () { |
||||
var self = this, o = this.options; |
||||
var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, |
||||
summaryColumnSizeArray = []; |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { |
||||
totalLeftColumnSize += size; |
||||
} else { |
||||
totalRightColumnSize += size; |
||||
} |
||||
totalColumnSize += size; |
||||
if (i === 0) { |
||||
summaryColumnSizeArray[i] = size; |
||||
} else { |
||||
summaryColumnSizeArray[i] = summaryColumnSizeArray[i - 1] + size; |
||||
} |
||||
}); |
||||
|
||||
var otlw = regionSize; |
||||
var otlh = this._getFreezeHeaderHeight(); |
||||
var otrw = this._width - regionSize; |
||||
var otrh = this._getFreezeHeaderHeight(); |
||||
var oblw = regionSize; |
||||
var oblh = this._height - otlh; |
||||
var obrw = this._width - regionSize; |
||||
var obrh = this._height - otrh; |
||||
|
||||
this.topLeft.setWidth(otlw); |
||||
this.topLeft.setHeight(otlh); |
||||
this.topRight.setWidth(otrw); |
||||
this.topRight.setHeight(otrh); |
||||
this.bottomLeft.setWidth(oblw); |
||||
this.bottomLeft.setHeight(oblh); |
||||
this.bottomRight.setWidth(obrw); |
||||
this.bottomRight.setHeight(obrh); |
||||
|
||||
this.topLeftCollection.setWidth(otlw); |
||||
this.topLeftCollection.setHeight(otlh); |
||||
this.topRightCollection.setWidth(otrw); |
||||
this.topRightCollection.setHeight(otrh); |
||||
this.bottomLeftCollection.setWidth(oblw); |
||||
this.bottomLeftCollection.setHeight(oblh); |
||||
this.bottomRightCollection.setWidth(obrw); |
||||
this.bottomRightCollection.setHeight(obrh); |
||||
|
||||
var items = this.contextLayout.attr("items"); |
||||
items[1].left = regionSize; |
||||
items[2].top = this._getFreezeHeaderHeight(); |
||||
items[3].left = regionSize; |
||||
items[3].top = this._getFreezeHeaderHeight(); |
||||
this.contextLayout.attr("items", items); |
||||
this.contextLayout.resize(); |
||||
|
||||
var leftHeader = [], rightHeader = [], leftItems = [], rightItems = []; |
||||
var run = function (positions, items, rendered) { |
||||
BI.each(positions, function (i, item) { |
||||
var cell = { |
||||
type: "bi.collection_table_cell", |
||||
cell: items[item.row][item.col] |
||||
}; |
||||
rendered.push(cell); |
||||
}); |
||||
}; |
||||
run(this.topLeftItems, o.header, leftHeader); |
||||
run(this.topRightItems, o.header, rightHeader); |
||||
run(this.bottomLeftItems, this._getActualItems(), leftItems); |
||||
run(this.bottomRightItems, this._getActualItems(), rightItems); |
||||
|
||||
this.topLeftCollection.populate(leftHeader); |
||||
this.topRightCollection.populate(rightHeader); |
||||
this.bottomLeftCollection.populate(leftItems); |
||||
this.bottomRightCollection.populate(rightItems); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.quick_collection_table", BI.QuickCollectionTable); |
@ -1,59 +0,0 @@
|
||||
/** |
||||
* |
||||
* 表格单元格 |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.GridTableCell |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.GridTableCell = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.GridTableCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-grid-table-cell bi-border-right bi-border-bottom", |
||||
width: 0, |
||||
height: 0, |
||||
_rowIndex: 0, |
||||
_columnIndex: 0, |
||||
_left: 0, |
||||
_top: 0, |
||||
cell: {} |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.GridTableCell.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell = BI.createWidget(BI.extend({ |
||||
type: "bi.label" |
||||
}, o.cell, { |
||||
cls: (o.cell.cls || "") + "grid-table-cell-wrapper", |
||||
width: o.width - (o._columnIndex === 0 ? 1 : 0) - 1, |
||||
height: o.height - (o._rowIndex === 0 ? 1 : 0) - 1 |
||||
})); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.cell, |
||||
left: 0, |
||||
right: 0, |
||||
top: 0, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.GridTableCell.superclass.setWidth.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell.setWidth(o.width - (o._columnIndex === 0 ? 1 : 0) - 1); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.GridTableCell.superclass.setHeight.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell.setHeight(o.height - (o._rowIndex === 0 ? 1 : 0) - 1); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.grid_table_cell", BI.GridTableCell); |
@ -1,488 +0,0 @@
|
||||
/** |
||||
* GridTable |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.GridTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.GridTable = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.GridTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-grid-table", |
||||
headerRowSize: 25, |
||||
rowSize: 25, |
||||
columnSize: [], |
||||
isNeedFreeze: false, |
||||
freezeCols: [], |
||||
header: [], |
||||
items: [], |
||||
regionColumnSize: [] |
||||
}); |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this, o = this.options; |
||||
this._width = 0; |
||||
this._height = 0; |
||||
this._scrollBarSize = BI.DOM.getScrollWidth(); |
||||
var rowHeightGetter = function () { |
||||
return o.rowSize; |
||||
}; |
||||
var columnLeftWidthGetter = function (index) { |
||||
return o.columnSize[index]; |
||||
}; |
||||
var columnRightWidthGetter = function (index) { |
||||
return o.columnSize[index + self._getFreezeColLength()]; |
||||
}; |
||||
this.topLeftGrid = BI.createWidget({ |
||||
type: "bi.grid_view", |
||||
rowHeightGetter: rowHeightGetter, |
||||
columnWidthGetter: columnLeftWidthGetter |
||||
}); |
||||
this.topLeftGrid.on(BI.GridView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomLeftGrid.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.topRightGrid = BI.createWidget({ |
||||
type: "bi.grid_view", |
||||
rowHeightGetter: rowHeightGetter, |
||||
columnWidthGetter: columnRightWidthGetter |
||||
}); |
||||
this.topRightGrid.on(BI.GridView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomRightGrid.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.bottomLeftGrid = BI.createWidget({ |
||||
type: "bi.grid_view", |
||||
rowHeightGetter: rowHeightGetter, |
||||
columnWidthGetter: columnLeftWidthGetter |
||||
}); |
||||
this.bottomLeftGrid.on(BI.GridView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomRightGrid.setScrollTop(scroll.scrollTop); |
||||
self.topLeftGrid.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.bottomRightGrid = BI.createWidget({ |
||||
type: "bi.grid_view", |
||||
rowHeightGetter: rowHeightGetter, |
||||
columnWidthGetter: columnRightWidthGetter |
||||
}); |
||||
this.bottomRightGrid.on(BI.GridView.EVENT_SCROLL, function (scroll) { |
||||
self.bottomLeftGrid.setScrollTop(scroll.scrollTop); |
||||
self.topRightGrid.setScrollLeft(scroll.scrollLeft); |
||||
self._populateScrollbar(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.topLeft = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.topLeftGrid] |
||||
}); |
||||
this.topRight = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.topRightGrid] |
||||
}); |
||||
this.bottomLeft = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.bottomLeftGrid] |
||||
}); |
||||
this.bottomRight = BI.createWidget({ |
||||
type: "bi.vertical", |
||||
scrollable: false, |
||||
scrolly: false, |
||||
items: [this.bottomRightGrid] |
||||
}); |
||||
this.contextLayout = BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.topLeft, |
||||
top: 0, |
||||
left: 0 |
||||
}, { |
||||
el: this.topRight, |
||||
top: 0 |
||||
}, { |
||||
el: this.bottomLeft, |
||||
left: 0 |
||||
}, { |
||||
el: this.bottomRight |
||||
}] |
||||
}); |
||||
|
||||
this.topScrollbar = BI.createWidget({ |
||||
type: "bi.grid_table_scrollbar", |
||||
width: BI.GridTableScrollbar.SIZE |
||||
}); |
||||
this.topScrollbar.on(BI.GridTableScrollbar.EVENT_SCROLL, function (scrollTop) { |
||||
self.bottomLeftGrid.setScrollTop(scrollTop); |
||||
self.bottomRightGrid.setScrollTop(scrollTop); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.leftScrollbar = BI.createWidget({ |
||||
type: "bi.grid_table_horizontal_scrollbar", |
||||
height: BI.GridTableScrollbar.SIZE |
||||
}); |
||||
this.leftScrollbar.on(BI.GridTableHorizontalScrollbar.EVENT_SCROLL, function (scrollLeft) { |
||||
self.topLeftGrid.setScrollLeft(scrollLeft); |
||||
self.bottomLeftGrid.setScrollLeft(scrollLeft); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.rightScrollbar = BI.createWidget({ |
||||
type: "bi.grid_table_horizontal_scrollbar", |
||||
height: BI.GridTableScrollbar.SIZE |
||||
}); |
||||
this.rightScrollbar.on(BI.GridTableHorizontalScrollbar.EVENT_SCROLL, function (scrollLeft) { |
||||
self.topRightGrid.setScrollLeft(scrollLeft); |
||||
self.bottomRightGrid.setScrollLeft(scrollLeft); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.scrollBarLayout = BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.topScrollbar, |
||||
right: 0, |
||||
top: 0 |
||||
}, { |
||||
el: this.leftScrollbar, |
||||
left: 0 |
||||
}, { |
||||
el: this.rightScrollbar |
||||
}] |
||||
}); |
||||
this._width = o.width - BI.GridTableScrollbar.SIZE; |
||||
this._height = o.height - BI.GridTableScrollbar.SIZE; |
||||
this.header = this._getHeader(); |
||||
this.items = this._getItems(); |
||||
}, |
||||
|
||||
mounted: function () { |
||||
var o = this.options; |
||||
if (o.items.length > 0 || o.header.length > 0) { |
||||
this._populate(); |
||||
} |
||||
}, |
||||
|
||||
_getFreezeColLength: function () { |
||||
var o = this.options; |
||||
return o.isNeedFreeze === true ? BI.clamp(o.freezeCols.length, 0, o.columnSize.length) : 0; |
||||
}, |
||||
|
||||
_getFreezeHeaderHeight: function () { |
||||
var o = this.options; |
||||
if (o.header.length * o.headerRowSize >= this._height) { |
||||
return 0; |
||||
} |
||||
return o.header.length * o.headerRowSize; |
||||
}, |
||||
|
||||
_getActualItems: function () { |
||||
var o = this.options; |
||||
if (o.header.length * o.headerRowSize >= this._height) { |
||||
return o.header.concat(o.items); |
||||
} |
||||
return o.items; |
||||
}, |
||||
|
||||
_populateScrollbar: function () { |
||||
var o = this.options; |
||||
var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, |
||||
summaryColumnSizeArray = []; |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { |
||||
totalLeftColumnSize += size; |
||||
} else { |
||||
totalRightColumnSize += size; |
||||
} |
||||
totalColumnSize += size; |
||||
if (i === 0) { |
||||
summaryColumnSizeArray[i] = size; |
||||
} else { |
||||
summaryColumnSizeArray[i] = summaryColumnSizeArray[i - 1] + size; |
||||
} |
||||
}); |
||||
this.topScrollbar.setContentSize(this._getActualItems().length * o.rowSize); |
||||
this.topScrollbar.setSize(this._height - this._getFreezeHeaderHeight()); |
||||
this.topScrollbar.setPosition(Math.min(this.bottomLeftGrid.getScrollTop(), this.bottomRightGrid.getScrollTop())); |
||||
this.topScrollbar.populate(); |
||||
|
||||
this.leftScrollbar.setContentSize(totalLeftColumnSize); |
||||
this.leftScrollbar.setSize(regionSize); |
||||
this.leftScrollbar.setPosition(this.bottomLeftGrid.getScrollLeft()); |
||||
this.leftScrollbar.populate(); |
||||
|
||||
this.rightScrollbar.setContentSize(totalRightColumnSize); |
||||
this.rightScrollbar.setSize(this._width - regionSize); |
||||
this.rightScrollbar.setPosition(this.bottomRightGrid.getScrollLeft()); |
||||
this.rightScrollbar.populate(); |
||||
|
||||
var items = this.scrollBarLayout.attr("items"); |
||||
items[0].top = this._getFreezeHeaderHeight(); |
||||
items[1].top = this._height; |
||||
items[2].top = this._height; |
||||
items[2].left = regionSize; |
||||
this.scrollBarLayout.attr("items", items); |
||||
this.scrollBarLayout.resize(); |
||||
}, |
||||
|
||||
_getHeader: function () { |
||||
var o = this.options; |
||||
var freezeColLength = this._getFreezeColLength(); |
||||
var leftHeader = [], rightHeader = []; |
||||
BI.each(o.header, function (i, cols) { |
||||
leftHeader[i] = []; |
||||
rightHeader[i] = []; |
||||
BI.each(cols, function (j, col) { |
||||
var cell = { |
||||
type: "bi.grid_table_cell", |
||||
cell: col |
||||
}; |
||||
if (j < freezeColLength) { |
||||
leftHeader[i].push(cell); |
||||
} else { |
||||
rightHeader[i].push(cell); |
||||
} |
||||
}); |
||||
}); |
||||
return [leftHeader, rightHeader]; |
||||
}, |
||||
|
||||
_getItems: function () { |
||||
var o = this.options; |
||||
var freezeColLength = this._getFreezeColLength(); |
||||
var leftItems = [], rightItems = []; |
||||
BI.each(this._getActualItems(), function (i, cols) { |
||||
leftItems[i] = []; |
||||
rightItems[i] = []; |
||||
BI.each(cols, function (j, col) { |
||||
var cell = { |
||||
type: "bi.grid_table_cell", |
||||
cell: col |
||||
}; |
||||
if (j < freezeColLength) { |
||||
leftItems[i].push(cell); |
||||
} else { |
||||
rightItems[i].push(cell); |
||||
} |
||||
}); |
||||
}); |
||||
return [leftItems, rightItems]; |
||||
}, |
||||
|
||||
_populateTable: function () { |
||||
var self = this, o = this.options; |
||||
var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, |
||||
summaryColumnSizeArray = []; |
||||
var freezeColLength = this._getFreezeColLength(); |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { |
||||
totalLeftColumnSize += size; |
||||
} else { |
||||
totalRightColumnSize += size; |
||||
} |
||||
totalColumnSize += size; |
||||
if (i === 0) { |
||||
summaryColumnSizeArray[i] = size; |
||||
} else { |
||||
summaryColumnSizeArray[i] = summaryColumnSizeArray[i - 1] + size; |
||||
} |
||||
}); |
||||
|
||||
var otlw = regionSize; |
||||
var otlh = this._getFreezeHeaderHeight(); |
||||
var otrw = this._width - regionSize; |
||||
var otrh = this._getFreezeHeaderHeight(); |
||||
var oblw = regionSize; |
||||
var oblh = this._height - otlh; |
||||
var obrw = this._width - regionSize; |
||||
var obrh = this._height - otrh; |
||||
|
||||
var tlw = otlw + this._scrollBarSize; |
||||
var tlh = otlh + this._scrollBarSize; |
||||
var trw = otrw + this._scrollBarSize; |
||||
var trh = otrh + this._scrollBarSize; |
||||
var blw = oblw + this._scrollBarSize; |
||||
var blh = oblh + this._scrollBarSize; |
||||
var brw = obrw + this._scrollBarSize; |
||||
var brh = obrh + this._scrollBarSize; |
||||
|
||||
var digest = function (el) { |
||||
el.element.css({ |
||||
overflow: "scroll", |
||||
overflowX: "scroll", |
||||
overflowY: "scroll" |
||||
}); |
||||
}; |
||||
|
||||
this.topLeft.setWidth(otlw); |
||||
this.topLeft.setHeight(otlh); |
||||
this.topRight.setWidth(otrw); |
||||
this.topRight.setHeight(otrh); |
||||
this.bottomLeft.setWidth(oblw); |
||||
this.bottomLeft.setHeight(oblh); |
||||
this.bottomRight.setWidth(obrw); |
||||
this.bottomRight.setHeight(obrh); |
||||
|
||||
this.topLeftGrid.setWidth(tlw); |
||||
this.topLeftGrid.setHeight(tlh); |
||||
this.topRightGrid.setWidth(trw); |
||||
this.topRightGrid.setHeight(trh); |
||||
this.bottomLeftGrid.setWidth(blw); |
||||
this.bottomLeftGrid.setHeight(blh); |
||||
this.bottomRightGrid.setWidth(brw); |
||||
this.bottomRightGrid.setHeight(brh); |
||||
|
||||
digest(this.topLeftGrid); |
||||
digest(this.topRightGrid); |
||||
digest(this.bottomLeftGrid); |
||||
digest(this.bottomRightGrid); |
||||
|
||||
this.topLeftGrid.setEstimatedColumnSize(freezeColLength > 0 ? totalLeftColumnSize / freezeColLength : 0); |
||||
this.topLeftGrid.setEstimatedRowSize(o.headerRowSize); |
||||
this.topRightGrid.setEstimatedColumnSize((o.columnSize.length - freezeColLength) > 0 ? (totalRightColumnSize / (o.columnSize.length - freezeColLength)) : 0); |
||||
this.topRightGrid.setEstimatedRowSize(o.headerRowSize); |
||||
this.bottomLeftGrid.setEstimatedColumnSize(freezeColLength > 0 ? totalLeftColumnSize / freezeColLength : 0); |
||||
this.bottomLeftGrid.setEstimatedRowSize(o.rowSize); |
||||
this.bottomRightGrid.setEstimatedColumnSize((o.columnSize.length - freezeColLength) > 0 ? (totalRightColumnSize / (o.columnSize.length - freezeColLength)) : 0); |
||||
this.bottomRightGrid.setEstimatedRowSize(o.rowSize); |
||||
|
||||
this.topLeftGrid.setColumnCount(freezeColLength); |
||||
this.topRightGrid.setColumnCount(o.columnSize.length - freezeColLength); |
||||
this.bottomLeftGrid.setColumnCount(freezeColLength); |
||||
this.bottomRightGrid.setColumnCount(o.columnSize.length - freezeColLength); |
||||
|
||||
var items = this.contextLayout.attr("items"); |
||||
items[1].left = regionSize; |
||||
items[2].top = this._getFreezeHeaderHeight(); |
||||
items[3].left = regionSize; |
||||
items[3].top = this._getFreezeHeaderHeight(); |
||||
this.contextLayout.attr("items", items); |
||||
this.contextLayout.resize(); |
||||
|
||||
this.topLeftGrid._populate(this.header[0]); |
||||
this.topRightGrid._populate(this.header[1]); |
||||
this.bottomLeftGrid._populate(this.items[0]); |
||||
this.bottomRightGrid._populate(this.items[1]); |
||||
}, |
||||
|
||||
_populate: function () { |
||||
if (this._width <= 0 || this._height <= 0) { |
||||
return; |
||||
} |
||||
this._populateTable(); |
||||
this._populateScrollbar(); |
||||
}, |
||||
|
||||
getRegionSize: function () { |
||||
var o = this.options; |
||||
var regionSize = o.regionColumnSize[0] || 0; |
||||
if (o.isNeedFreeze === false || o.freezeCols.length === 0) { |
||||
return 0; |
||||
} |
||||
if (!regionSize) { |
||||
BI.each(o.freezeCols, function (i, col) { |
||||
regionSize += o.columnSize[col]; |
||||
}); |
||||
} |
||||
return regionSize; |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.bottomLeftGrid.setScrollTop(scrollTop); |
||||
this.bottomRightGrid.setScrollTop(scrollTop); |
||||
this._populateScrollbar(); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.topLeftGrid.setScrollLeft(scrollLeft); |
||||
this.bottomLeftGrid.setScrollLeft(scrollLeft); |
||||
this._populateScrollbar(); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.topRightGrid.setScrollLeft(scrollLeft); |
||||
this.bottomRightGrid.setScrollLeft(scrollLeft); |
||||
this._populateScrollbar(); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.bottomRightGrid.getScrollTop(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.bottomLeftGrid.getScrollLeft(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.bottomRightGrid.getScrollLeft(); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.GridTable.superclass.setWidth.apply(this, arguments); |
||||
this._width = this.options.width - BI.GridTableScrollbar.SIZE; |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.GridTable.superclass.setHeight.apply(this, arguments); |
||||
this._height = this.options.height - BI.GridTableScrollbar.SIZE; |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.options.columnSize = columnSize; |
||||
this._isNeedDigest = true; |
||||
}, |
||||
|
||||
setRegionColumnSize: function (regionColumnSize) { |
||||
this.options.regionColumnSize = regionColumnSize; |
||||
this._isNeedDigest = true; |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.options.columnSize; |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.options.regionColumnSize; |
||||
}, |
||||
|
||||
populate: function (items, header) { |
||||
var headerChanged = this.options.header !== header; |
||||
var itemsChanged = this.options.items !== items; |
||||
if(header && headerChanged) { |
||||
this.options.header = header; |
||||
} |
||||
if(items && itemsChanged) { |
||||
this.options.items = items; |
||||
} |
||||
if (items && itemsChanged) { |
||||
this.items = this._getItems(); |
||||
this._restore(); |
||||
} |
||||
if (header && headerChanged) { |
||||
this.header = this._getHeader(); |
||||
this._restore(); |
||||
} |
||||
this._populate(); |
||||
}, |
||||
|
||||
_restore: function () { |
||||
this.topLeftGrid.restore(); |
||||
this.topRightGrid.restore(); |
||||
this.bottomLeftGrid.restore(); |
||||
this.bottomRightGrid.restore(); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this._restore(); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.grid_table", BI.GridTable); |
@ -1,223 +0,0 @@
|
||||
/** |
||||
* QuickGridTable |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.QuickGridTable |
||||
* @extends BI.GridTable |
||||
*/ |
||||
BI.QuickGridTable = BI.inherit(BI.GridTable, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.QuickGridTable.superclass._defaultConfig.apply(this, arguments), { |
||||
extraCls: "bi-quick-grid-table" |
||||
}); |
||||
}, |
||||
|
||||
render: function () { |
||||
BI.QuickGridTable.superclass.render.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.topLeftGrid.setOverflowX(false); |
||||
this.topLeftGrid.setOverflowY(false); |
||||
this.topRightGrid.setOverflowX(false); |
||||
this.topRightGrid.setOverflowY(false); |
||||
this.bottomLeftGrid.setOverflowX(false); |
||||
this.bottomLeftGrid.setOverflowY(false); |
||||
this.bottomRightGrid.setOverflowX(false); |
||||
this.bottomRightGrid.setOverflowY(false); |
||||
}, |
||||
|
||||
mounted: function () { |
||||
BI.QuickGridTable.superclass.mounted.apply(this, arguments); |
||||
var self = this; |
||||
this._topLeftWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelLeft, this), |
||||
BI.bind(this._shouldHandleLeftX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this._topRightWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelRight, this), |
||||
BI.bind(this._shouldHandleRightX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this._bottomLeftWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelLeft, this), |
||||
BI.bind(this._shouldHandleLeftX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this._bottomRightWheelHandler = new BI.WheelHandler( |
||||
BI.bind(this._onWheelRight, this), |
||||
BI.bind(this._shouldHandleRightX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this.topLeftGrid.element.mousewheel(function (e) { |
||||
self._topLeftWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
this.topRightGrid.element.mousewheel(function (e) { |
||||
self._topRightWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
this.bottomLeftGrid.element.mousewheel(function (e) { |
||||
self._bottomLeftWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
this.bottomRightGrid.element.mousewheel(function (e) { |
||||
self._bottomRightWheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
}, |
||||
|
||||
_shouldHandleLeftX: function (delta) { |
||||
if (delta > 0) { |
||||
return this.bottomLeftGrid.getScrollLeft() < this.bottomLeftGrid.getMaxScrollLeft(); |
||||
} |
||||
return this.bottomLeftGrid.getScrollLeft() > 0; |
||||
|
||||
}, |
||||
|
||||
_shouldHandleRightX: function (delta) { |
||||
if (delta > 0) { |
||||
return this.bottomRightGrid.getScrollLeft() < this.bottomRightGrid.getMaxScrollLeft(); |
||||
} |
||||
return this.bottomRightGrid.getScrollLeft() > 0; |
||||
|
||||
}, |
||||
|
||||
_shouldHandleY: function (delta) { |
||||
if (delta > 0) { |
||||
return this.bottomRightGrid.getScrollTop() < this.bottomRightGrid.getMaxScrollTop(); |
||||
} |
||||
return this.bottomRightGrid.getScrollTop() > 0; |
||||
|
||||
}, |
||||
|
||||
_onWheelLeft: function (deltaX, deltaY) { |
||||
var self = this; |
||||
var scrollTop = this.bottomLeftGrid.getScrollTop(); |
||||
var scrollLeft = this.bottomLeftGrid.getScrollLeft(); |
||||
scrollTop += deltaY; |
||||
scrollLeft += deltaX; |
||||
this.bottomLeftGrid.setScrollTop(scrollTop); |
||||
this.bottomRightGrid.setScrollTop(scrollTop); |
||||
this.topLeftGrid.setScrollLeft(scrollLeft); |
||||
this.bottomLeftGrid.setScrollLeft(scrollLeft); |
||||
self._populateScrollbar(); |
||||
this.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}, |
||||
|
||||
_onWheelRight: function (deltaX, deltaY) { |
||||
var self = this; |
||||
var scrollTop = this.bottomRightGrid.getScrollTop(); |
||||
var scrollLeft = this.bottomRightGrid.getScrollLeft(); |
||||
scrollTop += deltaY; |
||||
scrollLeft += deltaX; |
||||
this.bottomLeftGrid.setScrollTop(scrollTop); |
||||
this.bottomRightGrid.setScrollTop(scrollTop); |
||||
this.topRightGrid.setScrollLeft(scrollLeft); |
||||
this.bottomRightGrid.setScrollLeft(scrollLeft); |
||||
self._populateScrollbar(); |
||||
this.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}, |
||||
|
||||
_populateTable: function () { |
||||
var self = this, o = this.options; |
||||
var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, |
||||
summaryColumnSizeArray = []; |
||||
var freezeColLength = this._getFreezeColLength(); |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { |
||||
totalLeftColumnSize += size; |
||||
} else { |
||||
totalRightColumnSize += size; |
||||
} |
||||
totalColumnSize += size; |
||||
if (i === 0) { |
||||
summaryColumnSizeArray[i] = size; |
||||
} else { |
||||
summaryColumnSizeArray[i] = summaryColumnSizeArray[i - 1] + size; |
||||
} |
||||
}); |
||||
|
||||
var otlw = regionSize; |
||||
var otlh = this._getFreezeHeaderHeight(); |
||||
var otrw = this._width - regionSize; |
||||
var otrh = this._getFreezeHeaderHeight(); |
||||
var oblw = regionSize; |
||||
var oblh = this._height - otlh; |
||||
var obrw = this._width - regionSize; |
||||
var obrh = this._height - otrh; |
||||
|
||||
this.topLeft.setWidth(otlw); |
||||
this.topLeft.setHeight(otlh); |
||||
this.topRight.setWidth(otrw); |
||||
this.topRight.setHeight(otrh); |
||||
this.bottomLeft.setWidth(oblw); |
||||
this.bottomLeft.setHeight(oblh); |
||||
this.bottomRight.setWidth(obrw); |
||||
this.bottomRight.setHeight(obrh); |
||||
|
||||
this.topLeftGrid.setWidth(otlw); |
||||
this.topLeftGrid.setHeight(otlh); |
||||
this.topRightGrid.setWidth(otrw); |
||||
this.topRightGrid.setHeight(otrh); |
||||
this.bottomLeftGrid.setWidth(oblw); |
||||
this.bottomLeftGrid.setHeight(oblh); |
||||
this.bottomRightGrid.setWidth(obrw); |
||||
this.bottomRightGrid.setHeight(obrh); |
||||
|
||||
this.topLeftGrid.setEstimatedColumnSize(freezeColLength > 0 ? totalLeftColumnSize / freezeColLength : 0); |
||||
this.topLeftGrid.setEstimatedRowSize(o.headerRowSize); |
||||
this.topRightGrid.setEstimatedColumnSize((o.columnSize.length - freezeColLength) > 0 ? (totalRightColumnSize / (o.columnSize.length - freezeColLength)) : 0); |
||||
this.topRightGrid.setEstimatedRowSize(o.headerRowSize); |
||||
this.bottomLeftGrid.setEstimatedColumnSize(freezeColLength > 0 ? totalLeftColumnSize / freezeColLength : 0); |
||||
this.bottomLeftGrid.setEstimatedRowSize(o.rowSize); |
||||
this.bottomRightGrid.setEstimatedColumnSize((o.columnSize.length - freezeColLength) > 0 ? (totalRightColumnSize / (o.columnSize.length - freezeColLength)) : 0); |
||||
this.bottomRightGrid.setEstimatedRowSize(o.rowSize); |
||||
|
||||
this.topLeftGrid.setColumnCount(freezeColLength); |
||||
this.topRightGrid.setColumnCount(o.columnSize.length - freezeColLength); |
||||
this.bottomLeftGrid.setColumnCount(freezeColLength); |
||||
this.bottomRightGrid.setColumnCount(o.columnSize.length - freezeColLength); |
||||
|
||||
var items = this.contextLayout.attr("items"); |
||||
items[1].left = regionSize; |
||||
items[2].top = this._getFreezeHeaderHeight(); |
||||
items[3].left = regionSize; |
||||
items[3].top = this._getFreezeHeaderHeight(); |
||||
this.contextLayout.attr("items", items); |
||||
this.contextLayout.resize(); |
||||
|
||||
var leftHeader = [], rightHeader = [], leftItems = [], rightItems = []; |
||||
BI.each(o.header, function (i, cols) { |
||||
leftHeader[i] = []; |
||||
rightHeader[i] = []; |
||||
BI.each(cols, function (j, col) { |
||||
var cell = { |
||||
type: "bi.grid_table_cell", |
||||
cell: col |
||||
}; |
||||
if (j < freezeColLength) { |
||||
leftHeader[i].push(cell); |
||||
} else { |
||||
rightHeader[i].push(cell); |
||||
} |
||||
}); |
||||
}); |
||||
BI.each(this._getActualItems(), function (i, cols) { |
||||
leftItems[i] = []; |
||||
rightItems[i] = []; |
||||
BI.each(cols, function (j, col) { |
||||
var cell = { |
||||
type: "bi.grid_table_cell", |
||||
cell: col |
||||
}; |
||||
if (j < freezeColLength) { |
||||
leftItems[i].push(cell); |
||||
} else { |
||||
rightItems[i].push(cell); |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
this.topLeftGrid.populate(leftHeader); |
||||
this.topRightGrid.populate(rightHeader); |
||||
this.bottomLeftGrid.populate(leftItems); |
||||
this.bottomRightGrid.populate(rightItems); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.quick_grid_table", BI.QuickGridTable); |
@ -1,420 +0,0 @@
|
||||
/** |
||||
* |
||||
* 表格滚动条 |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.GridTableScrollbar |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.GridTableScrollbar = BI.inherit(BI.Widget, { |
||||
_const: { |
||||
FACE_MARGIN: 4, |
||||
FACE_MARGIN_2: 4 * 2, |
||||
FACE_SIZE_MIN: 30, |
||||
KEYBOARD_SCROLL_AMOUNT: 40 |
||||
}, |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.GridTableScrollbar.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "scrollbar-layout-main public-scrollbar-main", |
||||
attributes: { |
||||
tabIndex: 0 |
||||
}, |
||||
contentSize: 0, |
||||
defaultPosition: 0, |
||||
isOpaque: false, |
||||
orientation: "vertical", |
||||
position: 0, |
||||
size: 0 |
||||
}); |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this, o = this.options; |
||||
this.focused = false; |
||||
this.isDragging = false; |
||||
this.face = BI.createWidget({ |
||||
type: "bi.layout", |
||||
cls: "scrollbar-layout-face public-scrollbar-face " |
||||
+ (this._isHorizontal() ? "scrollbar-layout-face-horizontal" : "scrollbar-layout-face-vertical") |
||||
}); |
||||
this.contextLayout = BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.face, |
||||
left: 0, |
||||
top: 0 |
||||
}] |
||||
}); |
||||
}, |
||||
|
||||
mounted: function () { |
||||
var self = this, o = this.options; |
||||
var onWheel = o.orientation === "horizontal" ? this._onWheelX : this._onWheelY; |
||||
this._wheelHandler = new BI.WheelHandler( |
||||
BI.bind(onWheel, this), |
||||
BI.bind(this._shouldHandleX, this), |
||||
BI.bind(this._shouldHandleY, this) |
||||
); |
||||
this._mouseMoveTracker = new BI.MouseMoveTracker( |
||||
BI.bind(this._onMouseMove, this), |
||||
BI.bind(this._onMouseMoveEnd, this), |
||||
document |
||||
); |
||||
this.element.on("mousedown", BI.bind(this._onMouseDown, this)); |
||||
this.element.on("mousewheel", function (e) { |
||||
self._wheelHandler.onWheel(e.originalEvent); |
||||
}); |
||||
this.element.on("keydown", BI.bind(this._onKeyDown, this)); |
||||
this.element.on("focus", function () { |
||||
self.focused = true; |
||||
self._populate(); |
||||
}); |
||||
this.element.on("blur", function () { |
||||
self.focused = false; |
||||
self._populate(); |
||||
}); |
||||
if (this._isHorizontal()) { |
||||
this.element.addClass("scrollbar-layout-main-horizontal"); |
||||
} else { |
||||
this.element.addClass("scrollbar-layout-main-vertical"); |
||||
} |
||||
this._populate(); |
||||
}, |
||||
|
||||
_isHorizontal: function () { |
||||
return this.options.orientation === "horizontal"; |
||||
}, |
||||
|
||||
_getScale: function () { |
||||
var o = this.options; |
||||
var scale = o.size / o.contentSize; |
||||
var faceSize = o.size * scale; |
||||
|
||||
if (faceSize < this._const.FACE_SIZE_MIN) { |
||||
scale = (o.size - this._const.FACE_SIZE_MIN) / (o.contentSize - o.size); |
||||
} |
||||
return scale; |
||||
}, |
||||
|
||||
_getFaceSize: function () { |
||||
var o = this.options; |
||||
var scale = o.size / o.contentSize; |
||||
var faceSize = o.size * scale; |
||||
|
||||
if (faceSize < this._const.FACE_SIZE_MIN) { |
||||
faceSize = this._const.FACE_SIZE_MIN; |
||||
} |
||||
return faceSize; |
||||
}, |
||||
|
||||
_shouldHandleX: function (delta) { |
||||
return this.options.orientation === "horizontal" ? |
||||
this._shouldHandleChange(delta) : |
||||
false; |
||||
}, |
||||
|
||||
_shouldHandleY: function (delta) { |
||||
return this.options.orientation !== "horizontal" ? |
||||
this._shouldHandleChange(delta) : |
||||
false; |
||||
}, |
||||
|
||||
_shouldHandleChange: function (delta) { |
||||
return this.options.position + delta !== this.options.position; |
||||
}, |
||||
|
||||
_onWheelY: function (deltaX, deltaY) { |
||||
this._onWheel(deltaY); |
||||
}, |
||||
|
||||
_onWheelX: function (deltaX, deltaY) { |
||||
this._onWheel(deltaX); |
||||
}, |
||||
|
||||
_onWheel: function (delta) { |
||||
var maxPosition = this.options.contentSize - this.options.size; |
||||
this.options.position += delta; |
||||
if (this.options.position < 0) { |
||||
this.options.position = 0; |
||||
} else if (this.options.position > maxPosition) { |
||||
this.options.position = maxPosition; |
||||
} |
||||
this._populate(); |
||||
this.fireEvent(BI.GridTableScrollbar.EVENT_SCROLL, this.options.position); |
||||
}, |
||||
|
||||
_onMouseDown: function (e) { |
||||
if (e.target !== this.face.element[0]) { |
||||
var position = this._isHorizontal() ? e.offsetX : e.offsetY; |
||||
position /= this._getScale(); |
||||
this.options.position = BI.clamp(position - (this._getFaceSize() * 0.5 / this._getScale()), 0, this.options.contentSize - this.options.size); |
||||
this._populate(); |
||||
this.fireEvent(BI.GridTableScrollbar.EVENT_SCROLL, this.options.position); |
||||
} else { |
||||
this._mouseMoveTracker.captureMouseMoves(e); |
||||
} |
||||
try { |
||||
this.element[0].focus(); |
||||
} catch (e) { |
||||
|
||||
} |
||||
}, |
||||
|
||||
_onMouseMove: function (deltaX, deltaY) { |
||||
var delta = this._isHorizontal() ? deltaX : deltaY; |
||||
delta /= this._getScale(); |
||||
this.options.position = BI.clamp(this.options.position + delta, 0, this.options.contentSize - this.options.size); |
||||
this.isDragging = this._mouseMoveTracker.isDragging(); |
||||
this._populate(); |
||||
this.fireEvent(BI.GridTableScrollbar.EVENT_SCROLL, this.options.position); |
||||
}, |
||||
|
||||
_onMouseMoveEnd: function (event) { |
||||
this._mouseMoveTracker.releaseMouseMoves(); |
||||
if (this.isDragging === true) { |
||||
this.isDragging = false; |
||||
this._populate(); |
||||
} |
||||
}, |
||||
|
||||
_onKeyDown: function (event) { |
||||
var Keys = { |
||||
BACKSPACE: 8, |
||||
TAB: 9, |
||||
RETURN: 13, |
||||
ALT: 18, |
||||
ESC: 27, |
||||
SPACE: 32, |
||||
PAGE_UP: 33, |
||||
PAGE_DOWN: 34, |
||||
END: 35, |
||||
HOME: 36, |
||||
LEFT: 37, |
||||
UP: 38, |
||||
RIGHT: 39, |
||||
DOWN: 40, |
||||
DELETE: 46, |
||||
COMMA: 188, |
||||
PERIOD: 190, |
||||
A: 65, |
||||
Z: 90, |
||||
ZERO: 48, |
||||
NUMPAD_0: 96, |
||||
NUMPAD_9: 105 |
||||
}; |
||||
var keyCode = event.keyCode; |
||||
|
||||
if (keyCode === Keys.TAB) { |
||||
return; |
||||
} |
||||
|
||||
var distance = 40; |
||||
var direction = 0; |
||||
|
||||
if (this._isHorizontal()) { |
||||
switch (keyCode) { |
||||
case Keys.HOME: |
||||
direction = -1; |
||||
distance = this.options.contentSize; |
||||
break; |
||||
|
||||
case Keys.LEFT: |
||||
direction = -1; |
||||
break; |
||||
|
||||
case Keys.RIGHT: |
||||
direction = 1; |
||||
break; |
||||
|
||||
default: |
||||
return; |
||||
} |
||||
} |
||||
|
||||
if (!this._isHorizontal()) { |
||||
switch (keyCode) { |
||||
case Keys.SPACE: |
||||
if (event.shiftKey) { |
||||
direction = -1; |
||||
} else { |
||||
direction = 1; |
||||
} |
||||
break; |
||||
|
||||
case Keys.HOME: |
||||
direction = -1; |
||||
distance = this.options.contentSize; |
||||
break; |
||||
|
||||
case Keys.UP: |
||||
direction = -1; |
||||
break; |
||||
|
||||
case Keys.DOWN: |
||||
direction = 1; |
||||
break; |
||||
|
||||
case Keys.PAGE_UP: |
||||
direction = -1; |
||||
distance = this.options.size; |
||||
break; |
||||
|
||||
case Keys.PAGE_DOWN: |
||||
direction = 1; |
||||
distance = this.options.size; |
||||
break; |
||||
|
||||
default: |
||||
return; |
||||
} |
||||
} |
||||
|
||||
this.options.position = BI.clamp(this.options.position + (distance * direction), 0, this.options.contentSize - this.options.size); |
||||
event.preventDefault(); |
||||
this._populate(); |
||||
this.fireEvent(BI.GridTableScrollbar.EVENT_SCROLL, this.options.position); |
||||
}, |
||||
|
||||
_populate: function () { |
||||
var self = this, o = this.options; |
||||
if (o.size < 1 || o.contentSize <= o.size) { |
||||
this.setVisible(false); |
||||
return; |
||||
} |
||||
this.setVisible(true); |
||||
|
||||
var size = o.size; |
||||
var isHorizontal = this._isHorizontal(); |
||||
var isActive = this.focused || this.isDragging; |
||||
|
||||
var faceSize = this._getFaceSize(); |
||||
var isOpaque = o.isOpaque; |
||||
this.element[isOpaque === true ? "addClass" : "removeClass"]("public-scrollbar-main-opaque"); |
||||
this.element[isActive === true ? "addClass" : "removeClass"]("public-scrollbar-main-active"); |
||||
|
||||
this.face.element[isActive === true ? "addClass" : "removeClass"]("public-scrollbar-face-active"); |
||||
|
||||
var position = o.position * this._getScale() + this._const.FACE_MARGIN; |
||||
|
||||
var items = this.contextLayout.attr("items"); |
||||
if (isHorizontal) { |
||||
this.setWidth(size); |
||||
this.face.setWidth(faceSize - this._const.FACE_MARGIN_2); |
||||
items[0].left = position; |
||||
items[0].top = 0; |
||||
} else { |
||||
this.setHeight(size); |
||||
this.face.setHeight(faceSize - this._const.FACE_MARGIN_2); |
||||
items[0].left = 0; |
||||
items[0].top = position; |
||||
} |
||||
this.contextLayout.attr("items", items); |
||||
this.contextLayout.resize(); |
||||
}, |
||||
|
||||
setContentSize: function (contentSize) { |
||||
this.options.contentSize = contentSize; |
||||
}, |
||||
|
||||
setPosition: function (position) { |
||||
this.options.position = position; |
||||
}, |
||||
|
||||
setSize: function (size) { |
||||
this.options.size = size; |
||||
}, |
||||
|
||||
populate: function () { |
||||
this._populate(); |
||||
} |
||||
}); |
||||
BI.GridTableScrollbar.SIZE = 10; |
||||
BI.GridTableScrollbar.EVENT_SCROLL = "EVENT_SCROLL"; |
||||
BI.shortcut("bi.grid_table_scrollbar", BI.GridTableScrollbar); |
||||
|
||||
|
||||
BI.GridTableHorizontalScrollbar = BI.inherit(BI.Widget, { |
||||
_const: { |
||||
FACE_MARGIN: 4, |
||||
FACE_MARGIN_2: 4 * 2, |
||||
FACE_SIZE_MIN: 30, |
||||
KEYBOARD_SCROLL_AMOUNT: 40 |
||||
}, |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.GridTableHorizontalScrollbar.superclass._defaultConfig.apply(this, arguments), { |
||||
attributes: { |
||||
tabIndex: 0 |
||||
}, |
||||
contentSize: 0, |
||||
position: 0, |
||||
size: 0 |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.GridTableHorizontalScrollbar.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.scrollbar = BI.createWidget({ |
||||
type: "bi.grid_table_scrollbar", |
||||
orientation: "horizontal", |
||||
isOpaque: true, |
||||
position: o.position, |
||||
contentSize: o.contentSize, |
||||
size: o.size |
||||
}); |
||||
this.scrollbar.on(BI.GridTableScrollbar.EVENT_SCROLL, function () { |
||||
self.fireEvent(BI.GridTableHorizontalScrollbar.EVENT_SCROLL, arguments); |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
cls: "horizontal-scrollbar", |
||||
element: this, |
||||
width: o.size, |
||||
height: BI.GridTableScrollbar.SIZE, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.absolute", |
||||
scrollable: false, |
||||
height: BI.GridTableScrollbar.SIZE, |
||||
items: [{ |
||||
el: this.scrollbar, |
||||
left: 0, |
||||
top: 0 |
||||
}] |
||||
}, |
||||
top: 0, |
||||
left: 0, |
||||
right: 0 |
||||
}] |
||||
}); |
||||
}, |
||||
|
||||
setContentSize: function (contentSize) { |
||||
this.options.contentSize = contentSize; |
||||
this.scrollbar.setContentSize(contentSize); |
||||
}, |
||||
|
||||
setPosition: function (position) { |
||||
this.options.position = position; |
||||
this.scrollbar.setPosition(position); |
||||
}, |
||||
|
||||
setSize: function (size) { |
||||
this.setWidth(size); |
||||
this.options.size = size; |
||||
this.scrollbar.setSize(size); |
||||
}, |
||||
|
||||
populate: function () { |
||||
this.scrollbar.populate(); |
||||
var o = this.options; |
||||
if (o.size < 1 || o.contentSize <= o.size) { |
||||
this.setVisible(false); |
||||
return; |
||||
} |
||||
this.setVisible(true); |
||||
} |
||||
}); |
||||
BI.GridTableHorizontalScrollbar.EVENT_SCROLL = "EVENT_SCROLL"; |
||||
BI.shortcut("bi.grid_table_horizontal_scrollbar", BI.GridTableHorizontalScrollbar); |
@ -1,34 +0,0 @@
|
||||
/** |
||||
* |
||||
* 表格 |
||||
* |
||||
* Created by GUY on 2015/9/22. |
||||
* @class BI.TableHeaderCell |
||||
* @extends BI.Single |
||||
*/ |
||||
BI.TableHeaderCell = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.TableHeaderCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-table-header-cell", |
||||
text: "" |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.TableHeaderCell.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
BI.createWidget({ |
||||
type: "bi.label", |
||||
element: this, |
||||
textAlign: o.textAlign || "center", |
||||
height: this.options.height, |
||||
text: this.options.text, |
||||
value: this.options.value, |
||||
lgap: o.lgap, |
||||
rgap: o.rgap, |
||||
hgap: o.hgap || 5 |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.table_header_cell", BI.TableHeaderCell); |
@ -1,115 +0,0 @@
|
||||
/** |
||||
* |
||||
* 表格单元格 |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.ResizableTableCell |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.ResizableTableCell = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.ResizableTableCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-resizable-table-cell", |
||||
cell: {}, |
||||
minSize: 15, |
||||
// suitableSize,
|
||||
maxSize: Number.MAX_VALUE, |
||||
start: BI.emptyFn, |
||||
resize: BI.emptyFn, |
||||
stop: BI.emptyFn |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.ResizableTableCell.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.cell = BI.createWidget(BI.extend({type: "bi.label"}, o.cell, {width: o.width, height: o.height})); |
||||
|
||||
var startDrag = false; |
||||
var size = 0, offset = 0, defaultSize = o.width; |
||||
|
||||
function optimizeSize (s) { |
||||
var optSize = BI.clamp(s, o.minSize, o.maxSize || Number.MAX_VALUE); |
||||
// if (o.suitableSize) {
|
||||
// if (Math.abs(o.suitableSize - optSize) < 5) {
|
||||
// optSize = o.suitableSize;
|
||||
// self.handler.element.addClass("suitable");
|
||||
// } else {
|
||||
// self.handler.element.removeClass("suitable");
|
||||
// }
|
||||
// }
|
||||
return optSize; |
||||
} |
||||
|
||||
var mouseMoveTracker = new BI.MouseMoveTracker(function (deltaX, deltaY) { |
||||
if (mouseMoveTracker.isDragging()) { |
||||
startDrag = true; |
||||
offset += deltaX; |
||||
size = optimizeSize(defaultSize + offset); |
||||
self.handler.element.addClass("dragging"); |
||||
o.resize(size); |
||||
} |
||||
}, function () { |
||||
if (startDrag === true) { |
||||
size = optimizeSize(size); |
||||
o.stop(size); |
||||
size = 0; |
||||
offset = 0; |
||||
defaultSize = o.width; |
||||
startDrag = false; |
||||
} |
||||
self.handler.element.removeClass("dragging"); |
||||
self.handler.element.removeClass("suitable"); |
||||
mouseMoveTracker.releaseMouseMoves(); |
||||
}, document); |
||||
this.handler = BI.createWidget({ |
||||
type: "bi.absolute", |
||||
cls: "resizable-table-cell-resizer-container", |
||||
width: 6, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.layout", |
||||
cls: "resizable-table-cell-resizer-knob", |
||||
width: 4 |
||||
}, |
||||
right: 0, |
||||
top: 0, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
this.handler.element.on("mousedown", function (event) { |
||||
defaultSize = o.width; |
||||
optimizeSize(defaultSize); |
||||
mouseMoveTracker.captureMouseMoves(event); |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.cell, |
||||
left: 0, |
||||
right: 0, |
||||
top: 0, |
||||
bottom: 0 |
||||
}, { |
||||
el: this.handler, |
||||
right: 0, |
||||
top: 0, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.ResizableTableCell.superclass.setWidth.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell.setWidth(o.width); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.ResizableTableCell.superclass.setHeight.apply(this, arguments); |
||||
var o = this.options; |
||||
this.cell.setHeight(o.height); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.resizable_table_cell", BI.ResizableTableCell); |
@ -1,365 +0,0 @@
|
||||
/** |
||||
* |
||||
* 可调整列宽的grid表格 |
||||
* |
||||
* Created by GUY on 2016/1/12. |
||||
* @class BI.ResizableTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.ResizableTable = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.ResizableTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-resizable-table", |
||||
el: { |
||||
type: "bi.grid_table" |
||||
}, |
||||
isNeedFreeze: false, |
||||
isNeedResize: true, |
||||
isResizeAdapt: false, |
||||
headerRowSize: 25, |
||||
rowSize: 25, |
||||
isNeedMerge: true, // 是否需要合并单元格
|
||||
mergeCols: [], |
||||
mergeRule: BI.emptyFn, |
||||
columnSize: [], |
||||
minColumnSize: [], |
||||
maxColumnSize: [], |
||||
freezeCols: [], |
||||
header: [], |
||||
items: [], |
||||
regionColumnSize: [] |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.ResizableTable.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.resizer = BI.createWidget({ |
||||
type: "bi.layout", |
||||
cls: "resizable-table-resizer", |
||||
invisible: true, |
||||
width: 2 |
||||
}); |
||||
this.regionResizerHandler = this._createResizerHandler(); |
||||
this.table = BI.createWidget(o.el, { |
||||
type: "bi.grid_table", |
||||
element: this, |
||||
width: o.width, |
||||
height: o.height, |
||||
headerRowSize: o.headerRowSize, |
||||
rowSize: o.rowSize, |
||||
columnSize: o.columnSize, |
||||
|
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: o.freezeCols, |
||||
isNeedMerge: o.isNeedMerge, |
||||
mergeCols: o.mergeCols, |
||||
mergeRule: BI.bind(this._mergeRule, this), |
||||
|
||||
header: this._formatHeader(o.header), |
||||
items: o.items, |
||||
regionColumnSize: o.regionColumnSize |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: this, |
||||
items: [{ |
||||
el: this.regionResizerHandler, |
||||
left: 0, |
||||
top: 0, |
||||
bottom: 0 |
||||
}, { |
||||
el: this.resizer, |
||||
left: 0, |
||||
top: 0 |
||||
}] |
||||
}); |
||||
this._populate(); |
||||
}, |
||||
|
||||
_mergeRule: function (row1, row2) { |
||||
var o = this.options; |
||||
if (row1.type === "bi.resizable_table_cell") { |
||||
row1 = row1.cell; |
||||
} |
||||
if (row2.type === "bi.resizable_table_cell") { |
||||
row2 = row2.cell; |
||||
} |
||||
return o.mergeRule(row1, row2); |
||||
}, |
||||
|
||||
_createResizerHandler: function () { |
||||
var self = this, o = this.options; |
||||
var regionResizerHandler = BI.createWidget({ |
||||
type: "bi.absolute", |
||||
cls: "resizable-table-region-resizer", |
||||
invisible: true, |
||||
width: 6, |
||||
items: [{ |
||||
el: { |
||||
type: "bi.layout", |
||||
width: 2, |
||||
cls: "resizable-table-region-resizer-knob" |
||||
}, |
||||
left: 2, |
||||
top: 0, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
var size = 0, offset = 0, defaultSize = 0, start = false; |
||||
var mouseMoveTracker = new BI.MouseMoveTracker(function (deltaX, deltaY) { |
||||
if (mouseMoveTracker.isDragging()) { |
||||
start = true; |
||||
offset += deltaX; |
||||
size = BI.clamp(defaultSize + offset, 30, o.width - 40); |
||||
|
||||
self.regionResizerHandler.element.addClass("dragging"); |
||||
self._setRegionResizerHandlerPosition(size - 3, 0); |
||||
} |
||||
|
||||
}, function () { |
||||
if (start === true) { |
||||
o.regionColumnSize[0] = BI.clamp(size, 30, o.width - 40); |
||||
self.table.setRegionColumnSize(o.regionColumnSize); |
||||
if (o.isResizeAdapt === true) { |
||||
var freezeColumnSize = self._getFreezeColumnSize(); |
||||
o.columnSize[self._getFreezeColLength() - 1] += o.regionColumnSize[0] - freezeColumnSize; |
||||
self.table.setColumnSize(o.columnSize); |
||||
} |
||||
// self.table.populate();
|
||||
self._populate(); |
||||
self.regionResizerHandler.element.removeClass("dragging"); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE); |
||||
start = false; |
||||
} |
||||
mouseMoveTracker.releaseMouseMoves(); |
||||
}, document); |
||||
regionResizerHandler.element.on("mousedown", function (event) { |
||||
defaultSize = size = self._getRegionSize(); |
||||
offset = 0; |
||||
self._setResizerPosition(0, 0); |
||||
mouseMoveTracker.captureMouseMoves(event); |
||||
}); |
||||
return regionResizerHandler; |
||||
}, |
||||
|
||||
_setResizerPosition: function (left, top) { |
||||
this.resizer.element.css({ |
||||
left: left + "px", |
||||
top: top + "px" |
||||
}); |
||||
}, |
||||
|
||||
_setRegionResizerHandlerPosition: function (left, top) { |
||||
this.regionResizerHandler.element.css({ |
||||
left: left + "px", |
||||
top: top + "px" |
||||
}); |
||||
}, |
||||
|
||||
_getRegionSize: function () { |
||||
var o = this.options; |
||||
var regionSize = o.regionColumnSize[0] || 0; |
||||
if (o.isNeedFreeze === false || o.freezeCols.length === 0) { |
||||
return 0; |
||||
} |
||||
if (!regionSize) { |
||||
BI.each(o.freezeCols, function (i, col) { |
||||
regionSize += o.columnSize[col]; |
||||
}); |
||||
} |
||||
return regionSize; |
||||
}, |
||||
|
||||
_getRegionRowSize: function () { |
||||
var o = this.options; |
||||
return [o.header.length * o.headerRowSize, |
||||
Math.min(o.height - o.header.length * o.headerRowSize, o.items.length * o.rowSize)]; |
||||
}, |
||||
|
||||
_getFreezeColLength: function () { |
||||
var o = this.options; |
||||
return o.isNeedFreeze === true ? BI.clamp(o.freezeCols.length, 0, o.columnSize.length) : 0; |
||||
}, |
||||
|
||||
_getFreezeColumnSize: function () { |
||||
var columnSize = this.options.columnSize; |
||||
var sum = 0; |
||||
for (var i = 0, len = this._getFreezeColLength(); i < len; i++) { |
||||
sum += columnSize[i]; |
||||
} |
||||
return sum; |
||||
}, |
||||
|
||||
_getResizerLeft: function (j) { |
||||
var left = 0; |
||||
var columnSize = this.options.columnSize; |
||||
var freezeColLength = this._getFreezeColLength(); |
||||
for (var i = (j >= freezeColLength ? freezeColLength : 0); i < j; i++) { |
||||
left += columnSize[i] || 0; |
||||
} |
||||
if (j >= freezeColLength) { |
||||
left += this.table.getRegionSize(); |
||||
left -= this.table.getRightHorizontalScroll(); |
||||
} else { |
||||
left -= this.table.getLeftHorizontalScroll(); |
||||
} |
||||
return left; |
||||
}, |
||||
|
||||
_formatHeader: function (header) { |
||||
var self = this, o = this.options; |
||||
var result = []; |
||||
var resize = function (j, size) { |
||||
self.resizer.setVisible(true); |
||||
var height = o.headerRowSize + self._getRegionRowSize()[1]; |
||||
self.resizer.setHeight(height); |
||||
// TODO 不知道为什么加入这段代码会使得列宽调整出问题
|
||||
// if (o.minColumnSize[j]) {
|
||||
// if (size === o.minColumnSize[j]) {
|
||||
// self.resizer.element.addClass("suitable");
|
||||
// } else {
|
||||
// self.resizer.element.removeClass("suitable");
|
||||
// }
|
||||
// }
|
||||
self._setResizerPosition(self._getResizerLeft(j) + size, (o.header.length - 1) * o.headerRowSize); |
||||
}; |
||||
var stop = function (j, size) { |
||||
self.resizer.setVisible(false); |
||||
var columnSize = o.columnSize.slice(); |
||||
columnSize[j] = size; |
||||
o.columnSize = columnSize; |
||||
self.table.setColumnSize(columnSize); |
||||
// self.table.populate();
|
||||
self._populate(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE); |
||||
}; |
||||
BI.each(header, function (i, cols) { |
||||
if (i === header.length - 1) { |
||||
result[i] = []; |
||||
BI.each(cols, function (j, col) { |
||||
if (j === self._getFreezeColLength() - 1 || j === cols.length - 1) { |
||||
result[i][j] = col; |
||||
} else { |
||||
result[i][j] = { |
||||
type: "bi.resizable_table_cell", |
||||
cell: col, |
||||
suitableSize: o.minColumnSize[j], |
||||
maxSize: o.maxColumnSize[j], |
||||
resize: BI.bind(resize, null, j), |
||||
stop: BI.bind(stop, null, j) |
||||
}; |
||||
if (o.isNeedMerge) { |
||||
var r = i; |
||||
while (r > 0 && self._mergeRule(result[r][j], result[r - 1][j])) { |
||||
result[r - 1][j] = { |
||||
type: "bi.resizable_table_cell", |
||||
cell: result[r - 1][j], |
||||
suitableSize: o.minColumnSize[j], |
||||
maxSize: o.maxColumnSize[j], |
||||
resize: BI.bind(resize, null, j), |
||||
stop: BI.bind(stop, null, j) |
||||
}; |
||||
r--; |
||||
} |
||||
} |
||||
} |
||||
}); |
||||
} else { |
||||
result.push(cols); |
||||
} |
||||
}); |
||||
return result; |
||||
}, |
||||
|
||||
_populate: function () { |
||||
var o = this.options; |
||||
var regionSize = this._getRegionSize(); |
||||
if (regionSize > 0) { |
||||
this.regionResizerHandler.setVisible(true); |
||||
this._setRegionResizerHandlerPosition(regionSize - 3, 0); |
||||
} else { |
||||
this.regionResizerHandler.setVisible(false); |
||||
} |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.ResizableTable.superclass.setWidth.apply(this, arguments); |
||||
this.table.setWidth(width); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.ResizableTable.superclass.setHeight.apply(this, arguments); |
||||
this.table.setHeight(height); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.options.columnSize = columnSize; |
||||
this.table.setColumnSize(columnSize); |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.table.getColumnSize(); |
||||
}, |
||||
|
||||
setRegionColumnSize: function (columnSize) { |
||||
this.options.regionColumnSize = columnSize; |
||||
this.table.setRegionColumnSize(columnSize); |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
attr: function () { |
||||
BI.ResizableTable.superclass.attr.apply(this, arguments); |
||||
this.table.attr.apply(this.table, arguments); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this.table.restore(); |
||||
}, |
||||
|
||||
populate: function (items, header) { |
||||
if (items) { |
||||
this.options.items = items; |
||||
} |
||||
if (header) { |
||||
this.options.header = header; |
||||
if (this.options.isNeedResize) { |
||||
header = this._formatHeader(header); |
||||
} |
||||
} |
||||
this.table.populate(items, header); |
||||
this._populate(); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.resizable_table", BI.ResizableTable); |
File diff suppressed because it is too large
Load Diff
@ -1,50 +0,0 @@
|
||||
/** |
||||
* 复制 |
||||
* Created by GUY on 2016/2/16. |
||||
* @class BI.ClipBoard |
||||
* @extends BI.BasicButton |
||||
*/ |
||||
BI.ClipBoard = BI.inherit(BI.BasicButton, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.ClipBoard.superclass._defaultConfig.apply(this, arguments), { |
||||
extraCls: "bi-clipboard", |
||||
el: { |
||||
type: "bi.layout" |
||||
}, |
||||
copy: BI.emptyFn, |
||||
afterCopy: BI.emptyFn |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.ClipBoard.superclass._init.apply(this, arguments); |
||||
BI.createWidget(this.options.el, { |
||||
element: this |
||||
}); |
||||
}, |
||||
|
||||
mounted: function () { |
||||
var self = this, o = this.options; |
||||
if (window.Clipboard) { |
||||
this.clipboard = new Clipboard(this.element[0], { |
||||
text: function () { |
||||
return BI.isFunction(o.copy) ? o.copy() : o.copy; |
||||
} |
||||
}); |
||||
this.clipboard.on("success", o.afterCopy); |
||||
} else { |
||||
this.element.zclip({ |
||||
path: BI.resourceURL + "/ZeroClipboard.swf", |
||||
copy: o.copy, |
||||
beforeCopy: o.beforeCopy, |
||||
afterCopy: o.afterCopy |
||||
}); |
||||
} |
||||
}, |
||||
|
||||
destroyed: function () { |
||||
this.clipboard && this.clipboard.destroy(); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.clipboard", BI.ClipBoard); |
@ -0,0 +1,78 @@
|
||||
/** |
||||
* Created by Young's on 2016/4/28. |
||||
*/ |
||||
BI.EditorIconCheckCombo = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.EditorIconCheckCombo.superclass._defaultConfig.apply(this, arguments), { |
||||
baseClass: "bi-check-editor-combo", |
||||
width: 100, |
||||
height: 24, |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, |
||||
validationChecker: BI.emptyFn, |
||||
quitChecker: BI.emptyFn, |
||||
allowBlank: true, |
||||
watermark: "", |
||||
errorText: "" |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.EditorIconCheckCombo.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.trigger = BI.createWidget({ |
||||
type: "bi.editor_trigger", |
||||
items: o.items, |
||||
height: o.height, |
||||
validationChecker: o.validationChecker, |
||||
quitChecker: o.quitChecker, |
||||
allowBlank: o.allowBlank, |
||||
watermark: o.watermark, |
||||
errorText: o.errorText, |
||||
value: o.value |
||||
}); |
||||
this.trigger.on(BI.EditorTrigger.EVENT_CHANGE, function () { |
||||
self.popup.setValue(this.getValue()); |
||||
self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE); |
||||
}); |
||||
this.popup = BI.createWidget({ |
||||
type: "bi.text_value_check_combo_popup", |
||||
chooseType: o.chooseType, |
||||
items: o.items, |
||||
value: o.value |
||||
}); |
||||
this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () { |
||||
self.setValue(self.popup.getValue()); |
||||
self.editorIconCheckCombo.hideView(); |
||||
self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE); |
||||
}); |
||||
this.popup.on(BI.Controller.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
||||
}); |
||||
this.editorIconCheckCombo = BI.createWidget({ |
||||
type: "bi.combo", |
||||
container: o.container, |
||||
element: this, |
||||
adjustLength: 2, |
||||
el: this.trigger, |
||||
popup: { |
||||
el: this.popup, |
||||
maxHeight: 300 |
||||
} |
||||
}); |
||||
}, |
||||
|
||||
setValue: function (v) { |
||||
this.editorIconCheckCombo.setValue(v); |
||||
}, |
||||
|
||||
getValue: function () { |
||||
return this.trigger.getValue(); |
||||
}, |
||||
|
||||
populate: function (items) { |
||||
this.options.items = items; |
||||
this.editorIconCheckCombo.populate(items); |
||||
} |
||||
}); |
||||
BI.EditorIconCheckCombo.EVENT_CHANGE = "EVENT_CHANGE"; |
||||
BI.shortcut("bi.editor_icon_check_combo", BI.EditorIconCheckCombo); |
@ -1,234 +0,0 @@
|
||||
/** |
||||
* 自适应宽度的表格 |
||||
* |
||||
* Created by GUY on 2016/2/3. |
||||
* @class BI.AdaptiveTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.AdaptiveTable = BI.inherit(BI.Widget, { |
||||
|
||||
_const: { |
||||
perColumnSize: 100 |
||||
}, |
||||
|
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.AdaptiveTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-adaptive-table", |
||||
el: { |
||||
type: "bi.resizable_table" |
||||
}, |
||||
isNeedResize: true, |
||||
isNeedFreeze: false, // 是否需要冻结单元格
|
||||
freezeCols: [], // 冻结的列号,从0开始,isNeedFreeze为true时生效
|
||||
|
||||
isNeedMerge: false, // 是否需要合并单元格
|
||||
mergeCols: [], // 合并的单元格列号
|
||||
mergeRule: BI.emptyFn, |
||||
|
||||
columnSize: [], |
||||
minColumnSize: [], |
||||
maxColumnSize: [], |
||||
|
||||
headerRowSize: 25, |
||||
rowSize: 25, |
||||
|
||||
regionColumnSize: [], |
||||
|
||||
header: [], |
||||
items: [], // 二维数组
|
||||
|
||||
// 交叉表头
|
||||
crossHeader: [], |
||||
crossItems: [] |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.AdaptiveTable.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
|
||||
var data = this._digest(); |
||||
this.table = BI.createWidget(o.el, { |
||||
type: "bi.resizable_table", |
||||
element: this, |
||||
width: o.width, |
||||
height: o.height, |
||||
isNeedResize: o.isNeedResize, |
||||
isResizeAdapt: false, |
||||
|
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: data.freezeCols, |
||||
|
||||
isNeedMerge: o.isNeedMerge, |
||||
mergeCols: o.mergeCols, |
||||
mergeRule: o.mergeRule, |
||||
|
||||
columnSize: data.columnSize, |
||||
|
||||
headerRowSize: o.headerRowSize, |
||||
rowSize: o.rowSize, |
||||
|
||||
regionColumnSize: data.regionColumnSize, |
||||
|
||||
header: o.header, |
||||
items: o.items, |
||||
// 交叉表头
|
||||
crossHeader: o.crossHeader, |
||||
crossItems: o.crossItems |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { |
||||
o.regionColumnSize = this.getRegionColumnSize(); |
||||
self._populate(); |
||||
self.table.populate(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); |
||||
}); |
||||
|
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { |
||||
o.columnSize = this.getColumnSize(); |
||||
self._populate(); |
||||
self.table.populate(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
_getFreezeColLength: function () { |
||||
var o = this.options; |
||||
return o.isNeedFreeze === true ? BI.clamp(o.freezeCols.length, 0, o.columnSize.length) : 0; |
||||
}, |
||||
|
||||
_digest: function () { |
||||
var o = this.options; |
||||
var columnSize = o.columnSize.slice(); |
||||
var regionColumnSize = o.regionColumnSize.slice(); |
||||
var freezeCols = o.freezeCols.slice(); |
||||
var regionSize = o.regionColumnSize[0]; |
||||
var freezeColLength = this._getFreezeColLength(); |
||||
if (!regionSize || regionSize > o.width - 10 || regionSize < 10) { |
||||
var rs = BI.sum(columnSize, function (i, size) { |
||||
if (i < freezeColLength) { |
||||
return size; |
||||
} |
||||
return 0; |
||||
}); |
||||
regionSize = BI.clamp(rs, 1 / 5 * o.width, 4 / 5 * o.width); |
||||
} |
||||
if (freezeColLength === 0) { |
||||
regionSize = 0; |
||||
} |
||||
if (freezeCols.length >= columnSize.length) { |
||||
freezeCols = []; |
||||
} |
||||
if (!BI.isNumber(columnSize[0])) { |
||||
columnSize = o.minColumnSize.slice(); |
||||
} |
||||
var summaryFreezeColumnSize = 0, summaryColumnSize = 0; |
||||
BI.each(columnSize, function (i, size) { |
||||
if (i < freezeColLength) { |
||||
summaryFreezeColumnSize += size; |
||||
} |
||||
summaryColumnSize += size; |
||||
}); |
||||
if (freezeColLength > 0) { |
||||
columnSize[freezeColLength - 1] = BI.clamp(regionSize - (summaryFreezeColumnSize - columnSize[freezeColLength - 1]), |
||||
o.minColumnSize[freezeColLength - 1] || 10, o.maxColumnSize[freezeColLength - 1] || Number.MAX_VALUE); |
||||
} |
||||
if (columnSize.length > 0) { |
||||
columnSize[columnSize.length - 1] = BI.clamp(o.width - BI.GridTableScrollbar.SIZE - regionSize - (summaryColumnSize - summaryFreezeColumnSize - columnSize[columnSize.length - 1]), |
||||
o.minColumnSize[columnSize.length - 1] || 10, o.maxColumnSize[columnSize.length - 1] || Number.MAX_VALUE); |
||||
} |
||||
regionColumnSize[0] = regionSize; |
||||
|
||||
return { |
||||
freezeCols: freezeCols, |
||||
columnSize: columnSize, |
||||
regionColumnSize: regionColumnSize |
||||
}; |
||||
}, |
||||
|
||||
_populate: function () { |
||||
var o = this.options; |
||||
var data = this._digest(); |
||||
o.regionColumnSize = data.regionColumnSize; |
||||
o.columnSize = data.columnSize; |
||||
this.table.setColumnSize(data.columnSize); |
||||
this.table.setRegionColumnSize(data.regionColumnSize); |
||||
this.table.attr("freezeCols", data.freezeCols); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.AdaptiveTable.superclass.setWidth.apply(this, arguments); |
||||
this.table.setWidth(width); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.AdaptiveTable.superclass.setHeight.apply(this, arguments); |
||||
this.table.setHeight(height); |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.options.columnSize = columnSize; |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.table.getColumnSize(); |
||||
}, |
||||
|
||||
setRegionColumnSize: function (regionColumnSize) { |
||||
this.options.regionColumnSize = regionColumnSize; |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
attr: function (key, value) { |
||||
var v = BI.AdaptiveTable.superclass.attr.apply(this, arguments); |
||||
if (key === "freezeCols") { |
||||
return v; |
||||
} |
||||
return this.table.attr.apply(this.table, arguments); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this.table.restore(); |
||||
}, |
||||
|
||||
populate: function (items) { |
||||
var self = this, o = this.options; |
||||
this._populate(); |
||||
this.table.populate.apply(this.table, arguments); |
||||
}, |
||||
|
||||
destroy: function () { |
||||
this.table.destroy(); |
||||
BI.AdaptiveTable.superclass.destroy.apply(this, arguments); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.adaptive_table", BI.AdaptiveTable); |
@ -1,336 +0,0 @@
|
||||
/** |
||||
* |
||||
* 层级树状结构的表格 |
||||
* |
||||
* Created by GUY on 2016/8/12. |
||||
* @class BI.DynamicSummaryLayerTreeTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.DynamicSummaryLayerTreeTable = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.DynamicSummaryLayerTreeTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-dynamic-summary-layer-tree-table", |
||||
|
||||
el: { |
||||
type: "bi.resizable_table" |
||||
}, |
||||
isNeedResize: true, // 是否需要调整列宽
|
||||
isResizeAdapt: true, // 是否需要在调整列宽或区域宽度的时候它们自适应变化
|
||||
|
||||
isNeedFreeze: false, // 是否需要冻结单元格
|
||||
freezeCols: [], // 冻结的列号,从0开始,isNeedFreeze为tree时生效
|
||||
|
||||
isNeedMerge: true, // 是否需要合并单元格
|
||||
mergeCols: [], |
||||
mergeRule: BI.emptyFn, |
||||
|
||||
columnSize: [], |
||||
minColumnSize: [], |
||||
maxColumnSize: [], |
||||
headerRowSize: 25, |
||||
footerRowSize: 25, |
||||
rowSize: 25, |
||||
|
||||
regionColumnSize: [], |
||||
|
||||
// 行表头
|
||||
rowHeaderCreator: null, |
||||
|
||||
headerCellStyleGetter: BI.emptyFn, |
||||
summaryCellStyleGetter: BI.emptyFn, |
||||
sequenceCellStyleGetter: BI.emptyFn, |
||||
|
||||
header: [], |
||||
footer: false, |
||||
items: [], |
||||
|
||||
// 交叉表头
|
||||
crossHeader: [], |
||||
crossItems: [] |
||||
}); |
||||
}, |
||||
|
||||
_getVDeep: function () { |
||||
return this.options.crossHeader.length;// 纵向深度
|
||||
}, |
||||
|
||||
_getHDeep: function () { |
||||
var o = this.options; |
||||
return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1); |
||||
}, |
||||
|
||||
_createHeader: function (vDeep) { |
||||
var self = this, o = this.options; |
||||
var header = o.header || [], crossHeader = o.crossHeader || []; |
||||
var items = BI.TableTree.formatCrossItems(o.crossItems, vDeep, o.headerCellStyleGetter); |
||||
var result = []; |
||||
BI.each(items, function (row, node) { |
||||
var c = [crossHeader[row]]; |
||||
result.push(c.concat(node || [])); |
||||
}); |
||||
var rowHeaderCreator = BI.isFunction(o.rowHeaderCreator) ? o.rowHeaderCreator() : o.rowHeaderCreator; |
||||
if (header && header.length > 0) { |
||||
var newHeader = this._formatColumns(header); |
||||
var deep = this._getHDeep(); |
||||
if (deep <= 0) { |
||||
newHeader.unshift(rowHeaderCreator || { |
||||
type: "bi.table_style_cell", |
||||
text: BI.i18nText("BI-Row_Header"), |
||||
styleGetter: o.headerCellStyleGetter |
||||
}); |
||||
} else { |
||||
newHeader[0] = rowHeaderCreator || { |
||||
type: "bi.table_style_cell", |
||||
text: BI.i18nText("BI-Row_Header"), |
||||
styleGetter: o.headerCellStyleGetter |
||||
}; |
||||
} |
||||
result.push(newHeader); |
||||
} |
||||
return result; |
||||
}, |
||||
|
||||
_formatItems: function (nodes, header, deep) { |
||||
var self = this, o = this.options; |
||||
var result = []; |
||||
|
||||
function track (node, layer) { |
||||
node.type || (node.type = "bi.layer_tree_table_cell"); |
||||
node.layer = layer; |
||||
var next = [node]; |
||||
next = next.concat(node.values || []); |
||||
if (next.length > 0) { |
||||
result.push(next); |
||||
} |
||||
if (BI.isNotEmptyArray(node.children)) { |
||||
BI.each(node.children, function (index, child) { |
||||
track(child, layer + 1); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
BI.each(nodes, function (i, node) { |
||||
BI.each(node.children, function (j, c) { |
||||
track(c, 0); |
||||
}); |
||||
if (BI.isArray(node.values)) { |
||||
var next = [{ |
||||
type: "bi.table_style_cell", |
||||
text: BI.i18nText("BI-Summary_Values"), |
||||
styleGetter: function () { |
||||
return o.summaryCellStyleGetter(true); |
||||
} |
||||
}].concat(node.values); |
||||
result.push(next); |
||||
} |
||||
}); |
||||
return BI.DynamicSummaryTreeTable.formatSummaryItems(result, header, o.crossItems, 1); |
||||
}, |
||||
|
||||
_formatColumns: function (columns, deep) { |
||||
if (BI.isNotEmptyArray(columns)) { |
||||
deep = deep || this._getHDeep(); |
||||
return columns.slice(Math.max(0, deep - 1)); |
||||
} |
||||
return columns; |
||||
}, |
||||
|
||||
_formatFreezeCols: function () { |
||||
if (this.options.freezeCols.length > 0) { |
||||
return [0]; |
||||
} |
||||
return []; |
||||
}, |
||||
|
||||
_formatColumnSize: function (columnSize, deep) { |
||||
if (columnSize.length <= 0) { |
||||
return []; |
||||
} |
||||
var result = [0]; |
||||
deep = deep || this._getHDeep(); |
||||
BI.each(columnSize, function (i, size) { |
||||
if (i < deep) { |
||||
result[0] += size; |
||||
return; |
||||
} |
||||
result.push(size); |
||||
}); |
||||
return result; |
||||
}, |
||||
|
||||
_recomputeColumnSize: function () { |
||||
var o = this.options; |
||||
o.regionColumnSize = this.table.getRegionColumnSize(); |
||||
var columnSize = this.table.getColumnSize().slice(); |
||||
if (o.freezeCols.length > 1) { |
||||
for (var i = 0; i < o.freezeCols.length - 1; i++) { |
||||
columnSize.splice(1, 0, 0); |
||||
} |
||||
} |
||||
o.columnSize = columnSize; |
||||
}, |
||||
|
||||
_digest: function () { |
||||
var o = this.options; |
||||
var deep = this._getHDeep(); |
||||
var vDeep = this._getVDeep(); |
||||
var header = this._createHeader(vDeep); |
||||
var data = this._formatItems(o.items, header, deep); |
||||
var columnSize = o.columnSize.slice(); |
||||
var minColumnSize = o.minColumnSize.slice(); |
||||
var maxColumnSize = o.maxColumnSize.slice(); |
||||
BI.removeAt(columnSize, data.deletedCols); |
||||
BI.removeAt(minColumnSize, data.deletedCols); |
||||
BI.removeAt(maxColumnSize, data.deletedCols); |
||||
return { |
||||
header: data.header, |
||||
items: data.items, |
||||
columnSize: this._formatColumnSize(columnSize, deep), |
||||
minColumnSize: this._formatColumns(minColumnSize, deep), |
||||
maxColumnSize: this._formatColumns(maxColumnSize, deep), |
||||
freezeCols: this._formatFreezeCols() |
||||
}; |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.DynamicSummaryLayerTreeTable.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
var data = this._digest(); |
||||
this.table = BI.createWidget(o.el, { |
||||
type: "bi.resizable_table", |
||||
element: this, |
||||
width: o.width, |
||||
height: o.height, |
||||
isNeedResize: o.isNeedResize, |
||||
isResizeAdapt: o.isResizeAdapt, |
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: data.freezeCols, |
||||
isNeedMerge: o.isNeedMerge, |
||||
mergeCols: [], |
||||
mergeRule: o.mergeRule, |
||||
columnSize: data.columnSize, |
||||
minColumnSize: data.minColumnSize, |
||||
maxColumnSize: data.maxColumnSize, |
||||
headerRowSize: o.headerRowSize, |
||||
rowSize: o.rowSize, |
||||
regionColumnSize: o.regionColumnSize, |
||||
header: data.header, |
||||
items: data.items |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { |
||||
self._recomputeColumnSize(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { |
||||
self._recomputeColumnSize(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.DynamicSummaryLayerTreeTable.superclass.setWidth.apply(this, arguments); |
||||
this.table.setWidth(width); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.DynamicSummaryLayerTreeTable.superclass.setHeight.apply(this, arguments); |
||||
this.table.setHeight(height); |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.options.columnSize = columnSize; |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.options.columnSize; |
||||
}, |
||||
|
||||
setRegionColumnSize: function (columnSize) { |
||||
this.options.regionColumnSize = columnSize; |
||||
this.table.setRegionColumnSize(columnSize); |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
attr: function (key, value) { |
||||
var self = this; |
||||
if (BI.isObject(key)) { |
||||
BI.each(key, function (k, v) { |
||||
self.attr(k, v); |
||||
}); |
||||
return; |
||||
} |
||||
BI.DynamicSummaryLayerTreeTable.superclass.attr.apply(this, arguments); |
||||
switch (key) { |
||||
case "columnSize": |
||||
case "minColumnSize": |
||||
case "maxColumnSize": |
||||
case "freezeCols": |
||||
case "mergeCols": |
||||
return; |
||||
} |
||||
this.table.attr.apply(this.table, [key, value]); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this.table.restore(); |
||||
}, |
||||
|
||||
populate: function (items, header, crossItems, crossHeader) { |
||||
var o = this.options; |
||||
if (items) { |
||||
o.items = items; |
||||
} |
||||
if (header) { |
||||
o.header = header; |
||||
} |
||||
if (crossItems) { |
||||
o.crossItems = crossItems; |
||||
} |
||||
if (crossHeader) { |
||||
o.crossHeader = crossHeader; |
||||
} |
||||
var data = this._digest(); |
||||
this.table.setColumnSize(data.columnSize); |
||||
this.table.attr("minColumnSize", data.minColumnSize); |
||||
this.table.attr("maxColumnSize", data.maxColumnSize); |
||||
this.table.attr("freezeCols", data.freezeCols); |
||||
this.table.populate(data.items, data.header); |
||||
}, |
||||
|
||||
destroy: function () { |
||||
this.table.destroy(); |
||||
BI.DynamicSummaryLayerTreeTable.superclass.destroy.apply(this, arguments); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.dynamic_summary_layer_tree_table", BI.DynamicSummaryLayerTreeTable); |
@ -1,360 +0,0 @@
|
||||
/** |
||||
* |
||||
* 树状结构的表格 |
||||
* |
||||
* Created by GUY on 2015/8/12. |
||||
* @class BI.DynamicSummaryTreeTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.DynamicSummaryTreeTable = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.DynamicSummaryTreeTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-dynamic-summary-tree-table", |
||||
el: { |
||||
type: "bi.resizable_table" |
||||
}, |
||||
|
||||
isNeedResize: true, // 是否需要调整列宽
|
||||
isResizeAdapt: true, // 是否需要在调整列宽或区域宽度的时候它们自适应变化
|
||||
|
||||
isNeedFreeze: false, // 是否需要冻结单元格
|
||||
freezeCols: [], // 冻结的列号,从0开始,isNeedFreeze为tree时生效
|
||||
|
||||
isNeedMerge: true, // 是否需要合并单元格
|
||||
mergeCols: [], |
||||
mergeRule: BI.emptyFn, |
||||
|
||||
columnSize: [], |
||||
minColumnSize: [], |
||||
maxColumnSize: [], |
||||
headerRowSize: 25, |
||||
footerRowSize: 25, |
||||
rowSize: 25, |
||||
|
||||
regionColumnSize: [], |
||||
|
||||
headerCellStyleGetter: BI.emptyFn, |
||||
summaryCellStyleGetter: BI.emptyFn, |
||||
sequenceCellStyleGetter: BI.emptyFn, |
||||
|
||||
header: [], |
||||
footer: false, |
||||
items: [], |
||||
|
||||
// 交叉表头
|
||||
crossHeader: [], |
||||
crossItems: [] |
||||
}); |
||||
}, |
||||
|
||||
_getVDeep: function () { |
||||
return this.options.crossHeader.length;// 纵向深度
|
||||
}, |
||||
|
||||
_getHDeep: function () { |
||||
var o = this.options; |
||||
return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.DynamicSummaryTreeTable.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
var data = this._digest(); |
||||
this.table = BI.createWidget(o.el, { |
||||
type: "bi.resizable_table", |
||||
element: this, |
||||
width: o.width, |
||||
height: o.height, |
||||
|
||||
isNeedResize: o.isNeedResize, |
||||
isResizeAdapt: o.isResizeAdapt, |
||||
|
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: o.freezeCols, |
||||
isNeedMerge: o.isNeedMerge, |
||||
mergeCols: o.mergeCols, |
||||
mergeRule: o.mergeRule, |
||||
|
||||
columnSize: o.columnSize, |
||||
minColumnSize: o.minColumnSize, |
||||
maxColumnSize: o.maxColumnSize, |
||||
headerRowSize: o.headerRowSize, |
||||
rowSize: o.rowSize, |
||||
|
||||
regionColumnSize: o.regionColumnSize, |
||||
|
||||
header: data.header, |
||||
items: data.items |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { |
||||
o.regionColumnSize = this.getRegionColumnSize(); |
||||
var columnSize = this.getColumnSize(); |
||||
var length = o.columnSize.length - columnSize.length; |
||||
o.columnSize = columnSize.slice(); |
||||
o.columnSize = o.columnSize.concat(BI.makeArray(length, 0)); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { |
||||
o.regionColumnSize = this.getRegionColumnSize(); |
||||
var columnSize = this.getColumnSize(); |
||||
var length = o.columnSize.length - columnSize.length; |
||||
o.columnSize = columnSize.slice(); |
||||
o.columnSize = o.columnSize.concat(BI.makeArray(length, 0)); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
_digest: function () { |
||||
var o = this.options; |
||||
var deep = this._getHDeep(); |
||||
var vDeep = this._getVDeep(); |
||||
var header = BI.TableTree.formatHeader(o.header, o.crossHeader, o.crossItems, deep, vDeep, o.headerCellStyleGetter); |
||||
var items = BI.DynamicSummaryTreeTable.formatHorizontalItems(o.items, deep, false, o.summaryCellStyleGetter); |
||||
var data = BI.DynamicSummaryTreeTable.formatSummaryItems(items, header, o.crossItems, deep); |
||||
var columnSize = o.columnSize.slice(); |
||||
var minColumnSize = o.minColumnSize.slice(); |
||||
var maxColumnSize = o.maxColumnSize.slice(); |
||||
BI.removeAt(columnSize, data.deletedCols); |
||||
BI.removeAt(minColumnSize, data.deletedCols); |
||||
BI.removeAt(maxColumnSize, data.deletedCols); |
||||
return { |
||||
header: data.header, |
||||
items: data.items, |
||||
columnSize: columnSize, |
||||
minColumnSize: minColumnSize, |
||||
maxColumnSize: maxColumnSize |
||||
}; |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.DynamicSummaryTreeTable.superclass.setWidth.apply(this, arguments); |
||||
this.table.setWidth(width); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.DynamicSummaryTreeTable.superclass.setHeight.apply(this, arguments); |
||||
this.table.setHeight(height); |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.options.columnSize = columnSize; |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.options.columnSize; |
||||
}, |
||||
|
||||
setRegionColumnSize: function (columnSize) { |
||||
this.options.regionColumnSize = columnSize; |
||||
this.table.setRegionColumnSize(columnSize); |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
attr: function (key) { |
||||
BI.DynamicSummaryTreeTable.superclass.attr.apply(this, arguments); |
||||
switch (key) { |
||||
case "minColumnSize": |
||||
case "maxColumnSize": |
||||
return; |
||||
} |
||||
this.table.attr.apply(this.table, arguments); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this.table.restore(); |
||||
}, |
||||
|
||||
populate: function (items, header, crossItems, crossHeader) { |
||||
var o = this.options; |
||||
if (items) { |
||||
o.items = items; |
||||
} |
||||
if (header) { |
||||
o.header = header; |
||||
} |
||||
if (crossItems) { |
||||
o.crossItems = crossItems; |
||||
} |
||||
if (crossHeader) { |
||||
o.crossHeader = crossHeader; |
||||
} |
||||
var data = this._digest(); |
||||
this.table.setColumnSize(data.columnSize); |
||||
this.table.attr("minColumnSize", data.minColumnSize); |
||||
this.table.attr("maxColumnSize", data.maxColumnSize); |
||||
this.table.populate(data.items, data.header); |
||||
}, |
||||
|
||||
destroy: function () { |
||||
this.table.destroy(); |
||||
BI.DynamicSummaryTreeTable.superclass.destroy.apply(this, arguments); |
||||
} |
||||
}); |
||||
|
||||
BI.extend(BI.DynamicSummaryTreeTable, { |
||||
|
||||
formatHorizontalItems: function (nodes, deep, isCross, styleGetter) { |
||||
var result = []; |
||||
|
||||
function track (store, node) { |
||||
var next; |
||||
if (BI.isArray(node.children)) { |
||||
BI.each(node.children, function (index, child) { |
||||
var next; |
||||
if (store != -1) { |
||||
next = store.slice(); |
||||
next.push(node); |
||||
} else { |
||||
next = []; |
||||
} |
||||
track(next, child); |
||||
}); |
||||
if (store != -1) { |
||||
next = store.slice(); |
||||
next.push(node); |
||||
} else { |
||||
next = []; |
||||
} |
||||
if ((store == -1 || node.children.length > 1) && BI.isNotEmptyArray(node.values)) { |
||||
var summary = { |
||||
text: BI.i18nText("BI-Summary_Values"), |
||||
type: "bi.table_style_cell", |
||||
styleGetter: function () { |
||||
return styleGetter(store === -1); |
||||
} |
||||
}; |
||||
for (var i = next.length; i < deep; i++) { |
||||
next.push(summary); |
||||
} |
||||
if (!isCross) { |
||||
next = next.concat(node.values); |
||||
} |
||||
if (next.length > 0) { |
||||
if (!isCross) { |
||||
result.push(next); |
||||
} else { |
||||
for (var k = 0, l = node.values.length; k < l; k++) { |
||||
result.push(next); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return; |
||||
} |
||||
if (store != -1) { |
||||
next = store.slice(); |
||||
for (var i = next.length; i < deep; i++) { |
||||
next.push(node); |
||||
} |
||||
} else { |
||||
next = []; |
||||
} |
||||
if (!isCross && BI.isArray(node.values)) { |
||||
next = next.concat(node.values); |
||||
} |
||||
if (isCross && BI.isArray(node.values)) { |
||||
for (var i = 0, len = node.values.length; i < len - 1; i++) { |
||||
if (next.length > 0) { |
||||
result.push(next); |
||||
} |
||||
} |
||||
} |
||||
if (next.length > 0) { |
||||
result.push(next); |
||||
} |
||||
} |
||||
|
||||
BI.each(nodes, function (i, node) { |
||||
track(-1, node); |
||||
}); |
||||
// 填充空位
|
||||
BI.each(result, function (i, line) { |
||||
var last = BI.last(line); |
||||
for (var j = line.length; j < deep; j++) { |
||||
line.push(last); |
||||
} |
||||
}); |
||||
return result; |
||||
}, |
||||
|
||||
formatSummaryItems: function (items, header, crossItems, deep) { |
||||
// 求纵向需要去除的列
|
||||
var cols = []; |
||||
var leaf = 0; |
||||
|
||||
function track (node) { |
||||
if (BI.isArray(node.children)) { |
||||
BI.each(node.children, function (index, child) { |
||||
track(child); |
||||
}); |
||||
if (BI.isNotEmptyArray(node.values)) { |
||||
if (node.children.length === 1) { |
||||
for (var i = 0; i < node.values.length; i++) { |
||||
cols.push(leaf + i + deep); |
||||
} |
||||
} |
||||
leaf += node.values.length; |
||||
} |
||||
return; |
||||
} |
||||
if (node.values && node.values.length > 1) { |
||||
leaf += node.values.length; |
||||
} else { |
||||
leaf++; |
||||
} |
||||
} |
||||
|
||||
BI.each(crossItems, function (i, node) { |
||||
track(node); |
||||
}); |
||||
|
||||
if (cols.length > 0) { |
||||
var nHeader = [], nItems = []; |
||||
BI.each(header, function (i, node) { |
||||
var nNode = node.slice(); |
||||
BI.removeAt(nNode, cols); |
||||
nHeader.push(nNode); |
||||
}); |
||||
BI.each(items, function (i, node) { |
||||
var nNode = node.slice(); |
||||
BI.removeAt(nNode, cols); |
||||
nItems.push(nNode); |
||||
}); |
||||
header = nHeader; |
||||
items = nItems; |
||||
} |
||||
return {items: items, header: header, deletedCols: cols}; |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.dynamic_summary_tree_table", BI.DynamicSummaryTreeTable); |
@ -1,32 +0,0 @@
|
||||
/** |
||||
* Created by GUY on 2016/5/7. |
||||
* @class BI.LayerTreeTableCell |
||||
* @extends BI.Single |
||||
*/ |
||||
BI.LayerTreeTableCell = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.LayerTreeTableCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-layer-tree-table-cell", |
||||
layer: 0, |
||||
text: "" |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.LayerTreeTableCell.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
BI.createWidget({ |
||||
type: "bi.label", |
||||
element: this.element, |
||||
textAlign: "left", |
||||
whiteSpace: "nowrap", |
||||
height: o.height, |
||||
text: o.text, |
||||
value: o.value, |
||||
lgap: 5 + 30 * o.layer, |
||||
rgap: 5 |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.layer_tree_table_cell", BI.LayerTreeTableCell); |
@ -1,318 +0,0 @@
|
||||
/** |
||||
* |
||||
* 层级树状结构的表格 |
||||
* |
||||
* Created by GUY on 2016/5/7. |
||||
* @class BI.LayerTreeTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.LayerTreeTable = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.LayerTreeTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-layer-tree-table", |
||||
el: { |
||||
type: "bi.resizable_table" |
||||
}, |
||||
|
||||
isNeedResize: false, // 是否需要调整列宽
|
||||
isResizeAdapt: true, // 是否需要在调整列宽或区域宽度的时候它们自适应变化
|
||||
|
||||
isNeedFreeze: false, // 是否需要冻结单元格
|
||||
freezeCols: [], // 冻结的列号,从0开始,isNeedFreeze为tree时生效
|
||||
|
||||
isNeedMerge: true, // 是否需要合并单元格
|
||||
mergeCols: [], |
||||
mergeRule: BI.emptyFn, |
||||
|
||||
columnSize: [], |
||||
minColumnSize: [], |
||||
maxColumnSize: [], |
||||
|
||||
headerRowSize: 25, |
||||
rowSize: 25, |
||||
|
||||
regionColumnSize: [], |
||||
|
||||
rowHeaderCreator: null, |
||||
|
||||
headerCellStyleGetter: BI.emptyFn, |
||||
summaryCellStyleGetter: BI.emptyFn, |
||||
sequenceCellStyleGetter: BI.emptyFn, |
||||
|
||||
header: [], |
||||
items: [], |
||||
|
||||
// 交叉表头
|
||||
crossHeader: [], |
||||
crossItems: [] |
||||
}); |
||||
}, |
||||
|
||||
_getVDeep: function () { |
||||
return this.options.crossHeader.length;// 纵向深度
|
||||
}, |
||||
|
||||
_getHDeep: function () { |
||||
var o = this.options; |
||||
return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1); |
||||
}, |
||||
|
||||
_createHeader: function (vDeep) { |
||||
var self = this, o = this.options; |
||||
var header = o.header || [], crossHeader = o.crossHeader || []; |
||||
var items = BI.TableTree.formatCrossItems(o.crossItems, vDeep, o.headerCellStyleGetter); |
||||
var result = []; |
||||
BI.each(items, function (row, node) { |
||||
var c = [crossHeader[row]]; |
||||
result.push(c.concat(node || [])); |
||||
}); |
||||
if (header && header.length > 0) { |
||||
var newHeader = this._formatColumns(header); |
||||
var deep = this._getHDeep(); |
||||
if (deep <= 0) { |
||||
newHeader.unshift(o.rowHeaderCreator || { |
||||
type: "bi.table_style_cell", |
||||
text: BI.i18nText("BI-Row_Header"), |
||||
styleGetter: o.headerCellStyleGetter |
||||
}); |
||||
} else { |
||||
newHeader[0] = o.rowHeaderCreator || { |
||||
type: "bi.table_style_cell", |
||||
text: BI.i18nText("BI-Row_Header"), |
||||
styleGetter: o.headerCellStyleGetter |
||||
}; |
||||
} |
||||
result.push(newHeader); |
||||
} |
||||
return result; |
||||
}, |
||||
|
||||
_formatItems: function (nodes) { |
||||
var self = this, o = this.options; |
||||
var result = []; |
||||
|
||||
function track (node, layer) { |
||||
node.type || (node.type = "bi.layer_tree_table_cell"); |
||||
node.layer = layer; |
||||
var next = [node]; |
||||
next = next.concat(node.values || []); |
||||
if (next.length > 0) { |
||||
result.push(next); |
||||
} |
||||
if (BI.isNotEmptyArray(node.children)) { |
||||
BI.each(node.children, function (index, child) { |
||||
track(child, layer + 1); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
BI.each(nodes, function (i, node) { |
||||
BI.each(node.children, function (j, c) { |
||||
track(c, 0); |
||||
}); |
||||
if (BI.isArray(node.values)) { |
||||
var next = [{ |
||||
type: "bi.table_style_cell", text: BI.i18nText("BI-Summary_Values"), styleGetter: function () { |
||||
return o.summaryCellStyleGetter(true); |
||||
} |
||||
}].concat(node.values); |
||||
result.push(next); |
||||
} |
||||
}); |
||||
return result; |
||||
}, |
||||
|
||||
_formatColumns: function (columns, deep) { |
||||
if (BI.isNotEmptyArray(columns)) { |
||||
deep = deep || this._getHDeep(); |
||||
return columns.slice(Math.max(0, deep - 1)); |
||||
} |
||||
return columns; |
||||
}, |
||||
|
||||
_formatFreezeCols: function () { |
||||
if (this.options.freezeCols.length > 0) { |
||||
return [0]; |
||||
} |
||||
return []; |
||||
}, |
||||
|
||||
_formatColumnSize: function (columnSize, deep) { |
||||
if (columnSize.length <= 0) { |
||||
return []; |
||||
} |
||||
var result = [0]; |
||||
deep = deep || this._getHDeep(); |
||||
BI.each(columnSize, function (i, size) { |
||||
if (i < deep) { |
||||
result[0] += size; |
||||
return; |
||||
} |
||||
result.push(size); |
||||
}); |
||||
return result; |
||||
}, |
||||
|
||||
_digest: function () { |
||||
var o = this.options; |
||||
var deep = this._getHDeep(); |
||||
var vDeep = this._getVDeep(); |
||||
return { |
||||
header: this._createHeader(vDeep), |
||||
items: this._formatItems(o.items), |
||||
columnSize: this._formatColumnSize(o.columnSize, deep), |
||||
minColumnSize: this._formatColumns(o.minColumnSize, deep), |
||||
maxColumnSize: this._formatColumns(o.maxColumnSize, deep), |
||||
freezeCols: this._formatFreezeCols() |
||||
}; |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.LayerTreeTable.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
|
||||
var data = this._digest(); |
||||
this.table = BI.createWidget(o.el, { |
||||
type: "bi.resizable_table", |
||||
element: this, |
||||
width: o.width, |
||||
height: o.height, |
||||
isNeedResize: o.isNeedResize, |
||||
isResizeAdapt: o.isResizeAdapt, |
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: data.freezeCols, |
||||
isNeedMerge: o.isNeedMerge, |
||||
mergeCols: [], |
||||
mergeRule: o.mergeRule, |
||||
columnSize: data.columnSize, |
||||
minColumnSize: data.minColumnSize, |
||||
maxColumnSize: data.maxColumnSize, |
||||
headerRowSize: o.headerRowSize, |
||||
rowSize: o.rowSize, |
||||
regionColumnSize: o.regionColumnSize, |
||||
header: data.header, |
||||
items: data.items |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { |
||||
o.regionColumnSize = this.getRegionColumnSize(); |
||||
o.columnSize = this.getColumnSize(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { |
||||
o.regionColumnSize = this.getRegionColumnSize(); |
||||
o.columnSize = this.getColumnSize(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.LayerTreeTable.superclass.setWidth.apply(this, arguments); |
||||
this.table.setWidth(width); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.LayerTreeTable.superclass.setHeight.apply(this, arguments); |
||||
this.table.setHeight(height); |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.options.columnSize = columnSize; |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
var columnSize = this.table.getColumnSize(); |
||||
var deep = this._getHDeep(); |
||||
var pre = []; |
||||
if (deep > 0) { |
||||
pre = BI.makeArray(deep, columnSize[0] / deep); |
||||
} |
||||
return pre.concat(columnSize.slice(1)); |
||||
}, |
||||
|
||||
setRegionColumnSize: function (columnSize) { |
||||
this.options.regionColumnSize = columnSize; |
||||
this.table.setRegionColumnSize(columnSize); |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
attr: function (key, value) { |
||||
var self = this; |
||||
if (BI.isObject(key)) { |
||||
BI.each(key, function (k, v) { |
||||
self.attr(k, v); |
||||
}); |
||||
return; |
||||
} |
||||
BI.LayerTreeTable.superclass.attr.apply(this, arguments); |
||||
switch (key) { |
||||
case "columnSize": |
||||
case "minColumnSize": |
||||
case "maxColumnSize": |
||||
case "freezeCols": |
||||
case "mergeCols": |
||||
return; |
||||
} |
||||
this.table.attr.apply(this.table, [key, value]); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this.table.restore(); |
||||
}, |
||||
|
||||
populate: function (items, header, crossItems, crossHeader) { |
||||
var o = this.options; |
||||
o.items = items || []; |
||||
if (header) { |
||||
o.header = header; |
||||
} |
||||
if (crossItems) { |
||||
o.crossItems = crossItems; |
||||
} |
||||
if (crossHeader) { |
||||
o.crossHeader = crossHeader; |
||||
} |
||||
var data = this._digest(); |
||||
this.table.setColumnSize(data.columnSize); |
||||
this.table.attr("freezeCols", data.freezeCols); |
||||
this.table.attr("minColumnSize", data.minColumnSize); |
||||
this.table.attr("maxColumnSize", data.maxColumnSize); |
||||
this.table.populate(data.items, data.header); |
||||
}, |
||||
|
||||
destroy: function () { |
||||
this.table.destroy(); |
||||
BI.LayerTreeTable.superclass.destroy.apply(this, arguments); |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.layer_tree_table", BI.LayerTreeTable); |
@ -1,47 +0,0 @@
|
||||
/** |
||||
* |
||||
* Created by GUY on 2016/5/26. |
||||
* @class BI.TableStyleCell |
||||
* @extends BI.Single |
||||
*/ |
||||
BI.TableStyleCell = BI.inherit(BI.Single, { |
||||
|
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.TableStyleCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-table-style-cell", |
||||
styleGetter: BI.emptyFn |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.TableStyleCell.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
this.text = BI.createWidget({ |
||||
type: "bi.label", |
||||
element: this, |
||||
height: o.height, |
||||
textAlign: "left", |
||||
forceCenter: true, |
||||
hgap: 5, |
||||
text: o.text |
||||
}); |
||||
this._digestStyle(); |
||||
}, |
||||
|
||||
_digestStyle: function () { |
||||
var o = this.options; |
||||
var style = o.styleGetter(); |
||||
if (style) { |
||||
this.text.element.css(style); |
||||
} |
||||
}, |
||||
|
||||
setText: function (text) { |
||||
this.text.setText(text); |
||||
}, |
||||
|
||||
populate: function () { |
||||
this._digestStyle(); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.table_style_cell", BI.TableStyleCell); |
@ -1,326 +0,0 @@
|
||||
/** |
||||
* |
||||
* 树状结构的表格 |
||||
* |
||||
* Created by GUY on 2015/9/22. |
||||
* @class BI.TableTree |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.TableTree = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.TableTree.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-table-tree", |
||||
el: { |
||||
type: "bi.resizable_table" |
||||
}, |
||||
isNeedResize: true, // 是否需要调整列宽
|
||||
isResizeAdapt: true, // 是否需要在调整列宽或区域宽度的时候它们自适应变化
|
||||
|
||||
freezeCols: [], // 冻结的列号,从0开始,isNeedFreeze为tree时生效
|
||||
|
||||
isNeedMerge: true, // 是否需要合并单元格
|
||||
mergeCols: [], |
||||
mergeRule: BI.emptyFn, |
||||
|
||||
columnSize: [], |
||||
minColumnSize: [], |
||||
maxColumnSize: [], |
||||
headerRowSize: 25, |
||||
rowSize: 25, |
||||
|
||||
regionColumnSize: [], |
||||
|
||||
headerCellStyleGetter: BI.emptyFn, |
||||
summaryCellStyleGetter: BI.emptyFn, |
||||
sequenceCellStyleGetter: BI.emptyFn, |
||||
|
||||
header: [], |
||||
items: [], |
||||
|
||||
// 交叉表头
|
||||
crossHeader: [], |
||||
crossItems: [] |
||||
}); |
||||
}, |
||||
|
||||
_getVDeep: function () { |
||||
return this.options.crossHeader.length;// 纵向深度
|
||||
}, |
||||
|
||||
_getHDeep: function () { |
||||
var o = this.options; |
||||
return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.TableTree.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
var data = this._digest(); |
||||
this.table = BI.createWidget(o.el, { |
||||
type: "bi.resizable_table", |
||||
element: this, |
||||
width: o.width, |
||||
height: o.height, |
||||
isNeedResize: o.isNeedResize, |
||||
isResizeAdapt: o.isResizeAdapt, |
||||
|
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: o.freezeCols, |
||||
isNeedMerge: o.isNeedMerge, |
||||
mergeCols: o.mergeCols, |
||||
mergeRule: o.mergeRule, |
||||
|
||||
columnSize: o.columnSize, |
||||
minColumnSize: o.minColumnSize, |
||||
maxColumnSize: o.maxColumnSize, |
||||
|
||||
headerRowSize: o.headerRowSize, |
||||
rowSize: o.rowSize, |
||||
|
||||
regionColumnSize: o.regionColumnSize, |
||||
|
||||
header: data.header, |
||||
items: data.items |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { |
||||
o.regionColumnSize = this.getRegionColumnSize(); |
||||
o.columnSize = this.getColumnSize(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { |
||||
o.regionColumnSize = this.getRegionColumnSize(); |
||||
o.columnSize = this.getColumnSize(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
_digest: function () { |
||||
var self = this, o = this.options; |
||||
var deep = this._getHDeep(); |
||||
var vDeep = this._getVDeep(); |
||||
var header = BI.TableTree.formatHeader(o.header, o.crossHeader, o.crossItems, deep, vDeep, o.headerCellStyleGetter); |
||||
var items = BI.TableTree.formatItems(o.items, deep, false, o.summaryCellStyleGetter); |
||||
return { |
||||
header: header, |
||||
items: items |
||||
}; |
||||
}, |
||||
|
||||
setWidth: function (width) { |
||||
BI.TableTree.superclass.setWidth.apply(this, arguments); |
||||
this.table.setWidth(width); |
||||
}, |
||||
|
||||
setHeight: function (height) { |
||||
BI.TableTree.superclass.setHeight.apply(this, arguments); |
||||
this.table.setHeight(height); |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.options.columnSize = columnSize; |
||||
this.table.setColumnSize(columnSize); |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.table.getColumnSize(); |
||||
}, |
||||
|
||||
setRegionColumnSize: function (columnSize) { |
||||
this.options.regionColumnSize = columnSize; |
||||
this.table.setRegionColumnSize(columnSize); |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
attr: function () { |
||||
BI.TableTree.superclass.attr.apply(this, arguments); |
||||
this.table.attr.apply(this.table, arguments); |
||||
}, |
||||
|
||||
restore: function () { |
||||
this.table.restore(); |
||||
}, |
||||
|
||||
populate: function (items, header, crossItems, crossHeader) { |
||||
var o = this.options; |
||||
if (items) { |
||||
o.items = items || []; |
||||
} |
||||
if (header) { |
||||
o.header = header; |
||||
} |
||||
if (crossItems) { |
||||
o.crossItems = crossItems; |
||||
} |
||||
if (crossHeader) { |
||||
o.crossHeader = crossHeader; |
||||
} |
||||
var data = this._digest(); |
||||
this.table.populate(data.items, data.header); |
||||
}, |
||||
|
||||
destroy: function () { |
||||
this.table.destroy(); |
||||
BI.TableTree.superclass.destroy.apply(this, arguments); |
||||
} |
||||
}); |
||||
|
||||
BI.extend(BI.TableTree, { |
||||
formatHeader: function (header, crossHeader, crossItems, hDeep, vDeep, styleGetter) { |
||||
var items = BI.TableTree.formatCrossItems(crossItems, vDeep, styleGetter); |
||||
var result = []; |
||||
for (var i = 0; i < vDeep; i++) { |
||||
var c = []; |
||||
for (var j = 0; j < hDeep; j++) { |
||||
c.push(crossHeader[i]); |
||||
} |
||||
result.push(c.concat(items[i] || [])); |
||||
} |
||||
if (header && header.length > 0) { |
||||
result.push(header); |
||||
} |
||||
return result; |
||||
}, |
||||
|
||||
formatItems: function (nodes, deep, isCross, styleGetter) { |
||||
var self = this; |
||||
var result = []; |
||||
|
||||
function track (store, node) { |
||||
var next; |
||||
if (BI.isArray(node.children)) { |
||||
BI.each(node.children, function (index, child) { |
||||
var next; |
||||
if (store != -1) { |
||||
next = store.slice(); |
||||
next.push(node); |
||||
} else { |
||||
next = []; |
||||
} |
||||
track(next, child); |
||||
}); |
||||
if (store != -1) { |
||||
next = store.slice(); |
||||
next.push(node); |
||||
} else { |
||||
next = []; |
||||
} |
||||
if (/** (store == -1 || node.children.length > 1) &&**/ BI.isNotEmptyArray(node.values)) { |
||||
var summary = { |
||||
text: BI.i18nText("BI-Summary_Values"), |
||||
type: "bi.table_style_cell", |
||||
styleGetter: function () { |
||||
return styleGetter(store === -1); |
||||
} |
||||
}; |
||||
for (var i = next.length; i < deep; i++) { |
||||
next.push(summary); |
||||
} |
||||
if (!isCross) { |
||||
next = next.concat(node.values); |
||||
} |
||||
if (next.length > 0) { |
||||
if (!isCross) { |
||||
result.push(next); |
||||
} else { |
||||
for (var k = 0, l = node.values.length; k < l; k++) { |
||||
result.push(next); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
return; |
||||
} |
||||
if (store != -1) { |
||||
next = store.slice(); |
||||
for (var i = next.length; i < deep; i++) { |
||||
next.push(node); |
||||
} |
||||
} else { |
||||
next = []; |
||||
} |
||||
if (!isCross && BI.isArray(node.values)) { |
||||
next = next.concat(node.values); |
||||
} |
||||
if (isCross && BI.isArray(node.values)) { |
||||
for (var i = 0, len = node.values.length; i < len - 1; i++) { |
||||
if (next.length > 0) { |
||||
result.push(next); |
||||
} |
||||
} |
||||
} |
||||
if (next.length > 0) { |
||||
result.push(next); |
||||
} |
||||
} |
||||
|
||||
BI.each(nodes, function (i, node) { |
||||
track(-1, node); |
||||
}); |
||||
// 填充空位
|
||||
BI.each(result, function (i, line) { |
||||
var last = BI.last(line); |
||||
for (var j = line.length; j < deep; j++) { |
||||
line.push(last); |
||||
} |
||||
}); |
||||
return result; |
||||
}, |
||||
|
||||
formatCrossItems: function (nodes, deep, styleGetter) { |
||||
var items = BI.TableTree.formatItems(nodes, deep, true, styleGetter); |
||||
return BI.unzip(items); |
||||
}, |
||||
|
||||
maxDeep: function (nodes) { |
||||
function track (deep, node) { |
||||
var d = deep; |
||||
if (BI.isNotEmptyArray(node.children)) { |
||||
BI.each(node.children, function (index, child) { |
||||
d = Math.max(d, track(deep + 1, child)); |
||||
}); |
||||
} |
||||
return d; |
||||
} |
||||
|
||||
var deep = 1; |
||||
if (BI.isObject(nodes)) { |
||||
BI.each(nodes, function (i, node) { |
||||
deep = Math.max(deep, track(1, node)); |
||||
}); |
||||
} |
||||
return deep; |
||||
} |
||||
}); |
||||
|
||||
BI.shortcut("bi.tree_table", BI.TableTree); |
@ -1,470 +0,0 @@
|
||||
/** |
||||
* 表关联树 |
||||
* |
||||
* Created by GUY on 2015/12/15. |
||||
* @class BI.BranchRelation |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.BranchRelation = BI.inherit(BI.Widget, { |
||||
|
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.BranchRelation.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-branch-relation-tree", |
||||
items: [], |
||||
|
||||
centerOffset: 0, // 重心偏移量
|
||||
direction: BI.Direction.Bottom, |
||||
align: BI.VerticalAlign.Top |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.BranchRelation.superclass._init.apply(this, arguments); |
||||
this.populate(this.options.items); |
||||
}, |
||||
|
||||
// 树分层
|
||||
_stratification: function () { |
||||
var levels = []; |
||||
this.tree.recursion(function (node, route) { |
||||
// node.isRoot = route.length <= 1;
|
||||
node.leaf = node.isLeaf(); |
||||
if (!levels[route.length - 1]) { |
||||
levels[route.length - 1] = []; |
||||
} |
||||
levels[route.length - 1].push(node); |
||||
}); |
||||
return levels; |
||||
}, |
||||
|
||||
// 计算所有节点的叶子结点个数
|
||||
_calculateLeaves: function () { |
||||
var count = 0; |
||||
|
||||
function track (node) { |
||||
var c = 0; |
||||
if (node.isLeaf()) { |
||||
return 1; |
||||
} |
||||
BI.each(node.getChildren(), function (i, child) { |
||||
c += track(child); |
||||
}); |
||||
node.set("leaves", c); |
||||
return c; |
||||
} |
||||
|
||||
count = track(this.tree.getRoot()); |
||||
return count; |
||||
}, |
||||
|
||||
// 树平移
|
||||
_translate: function (levels) { |
||||
var adjust = []; |
||||
var maxLevel = levels.length; |
||||
BI.each(levels, function (i, nodes) { |
||||
if (!adjust[i]) { |
||||
adjust[i] = []; |
||||
} |
||||
BI.each(nodes, function (j, node) { |
||||
if (node.isLeaf() && i < maxLevel - 1) { |
||||
var newNode = new BI.Node(BI.UUID()); |
||||
// newNode.isEmptyRoot = node.isRoot || node.isEmptyRoot;
|
||||
newNode.isNew = true; |
||||
// 把node向下一层移
|
||||
var tar = 0; |
||||
if (j > 0) { |
||||
var c = nodes[j - 1].getLastChild(); |
||||
tar = levels[i + 1].indexOf(c) + 1; |
||||
} |
||||
levels[i + 1].splice(tar, 0, node); |
||||
// 新增一个临时树节点
|
||||
var index = node.parent.getChildIndex(node.id); |
||||
node.parent.removeChildByIndex(index); |
||||
node.parent.addChild(newNode, index); |
||||
newNode.addChild(node); |
||||
adjust[i].push(newNode); |
||||
nodes[j] = newNode; |
||||
} else { |
||||
adjust[i].push(node); |
||||
} |
||||
}); |
||||
}); |
||||
return adjust; |
||||
}, |
||||
|
||||
// 树补白
|
||||
_fill: function (levels) { |
||||
var adjust = []; |
||||
var maxLevel = levels.length; |
||||
BI.each(levels, function (i, nodes) { |
||||
if (!adjust[i]) { |
||||
adjust[i] = []; |
||||
} |
||||
BI.each(nodes, function (j, node) { |
||||
if (node.isLeaf() && i < maxLevel - 1) { |
||||
var newNode = new BI.Node(BI.UUID()); |
||||
newNode.leaf = true; |
||||
newNode.width = node.width; |
||||
newNode.height = node.height; |
||||
newNode.isNew = true; |
||||
// 把node向下一层移
|
||||
var tar = 0; |
||||
if (j > 0) { |
||||
var c = nodes[j - 1].getLastChild(); |
||||
tar = levels[i + 1].indexOf(c) + 1; |
||||
} |
||||
levels[i + 1].splice(tar, 0, newNode); |
||||
// 新增一个临时树节点
|
||||
node.addChild(newNode); |
||||
} |
||||
adjust[i].push(node); |
||||
}); |
||||
}); |
||||
return adjust; |
||||
}, |
||||
|
||||
// 树调整
|
||||
_adjust: function (adjust) { |
||||
while (true) { |
||||
var isAllNeedAjust = false; |
||||
BI.backEach(adjust, function (i, nodes) { |
||||
BI.each(nodes, function (j, node) { |
||||
if (!node.isNew) { |
||||
var needAdjust = true; |
||||
BI.any(node.getChildren(), function (k, n) { |
||||
if (!n.isNew) { |
||||
needAdjust = false; |
||||
return true; |
||||
} |
||||
}); |
||||
if (!node.isLeaf() && needAdjust === true) { |
||||
var allChilds = []; |
||||
BI.each(node.getChildren(), function (k, n) { |
||||
allChilds = allChilds.concat(n.getChildren()); |
||||
}); |
||||
node.removeAllChilds(); |
||||
BI.each(allChilds, function (k, c) { |
||||
node.addChild(c); |
||||
}); |
||||
var newNode = new BI.Node(BI.UUID()); |
||||
// newNode.isEmptyRoot = node.isRoot || node.isEmptyRoot;
|
||||
newNode.isNew = true; |
||||
var index = node.parent.getChildIndex(node.id); |
||||
node.parent.removeChildByIndex(index); |
||||
node.parent.addChild(newNode, index); |
||||
newNode.addChild(node); |
||||
isAllNeedAjust = true; |
||||
} |
||||
} |
||||
}); |
||||
}); |
||||
if (isAllNeedAjust === false) { |
||||
break; |
||||
} else {// 树重构
|
||||
adjust = this._stratification(); |
||||
} |
||||
} |
||||
return adjust; |
||||
}, |
||||
|
||||
_calculateWidth: function () { |
||||
var o = this.options; |
||||
var width = 0; |
||||
|
||||
function track1 (node) { |
||||
var w = 0; |
||||
if (node.isLeaf()) { |
||||
return node.width; |
||||
} |
||||
BI.each(node.getChildren(), function (i, child) { |
||||
w += track1(child); |
||||
}); |
||||
return w; |
||||
} |
||||
|
||||
function track2 (node) { |
||||
var w = 0; |
||||
if (node.isLeaf()) { |
||||
return node.height; |
||||
} |
||||
BI.each(node.getChildren(), function (i, child) { |
||||
w += track2(child); |
||||
}); |
||||
return w; |
||||
} |
||||
|
||||
if (this._isVertical()) { |
||||
width = track1(this.tree.getRoot()); |
||||
} else { |
||||
width = track2(this.tree.getRoot()); |
||||
} |
||||
|
||||
return width; |
||||
}, |
||||
|
||||
_isVertical: function () { |
||||
var o = this.options; |
||||
return o.direction === BI.Direction.Top || o.direction === BI.Direction.Bottom; |
||||
}, |
||||
|
||||
_calculateHeight: function () { |
||||
var o = this.options; |
||||
var height = 0; |
||||
|
||||
function track1 (node) { |
||||
var h = 0; |
||||
BI.each(node.getChildren(), function (i, child) { |
||||
h = Math.max(h, track1(child)); |
||||
}); |
||||
return h + (node.height || 0); |
||||
} |
||||
|
||||
function track2 (node) { |
||||
var h = 0; |
||||
BI.each(node.getChildren(), function (i, child) { |
||||
h = Math.max(h, track2(child)); |
||||
}); |
||||
return h + (node.width || 0); |
||||
} |
||||
|
||||
if (this._isVertical()) { |
||||
height = track1(this.tree.getRoot()); |
||||
} else { |
||||
height = track2(this.tree.getRoot()); |
||||
} |
||||
return height; |
||||
}, |
||||
|
||||
_calculateXY: function (levels) { |
||||
var o = this.options; |
||||
var width = this._calculateWidth(); |
||||
var height = this._calculateHeight(); |
||||
var levelCount = levels.length; |
||||
var allLeavesCount = this._calculateLeaves(); |
||||
// 计算坐标
|
||||
var xy = {}; |
||||
var levelHeight = height / levelCount; |
||||
BI.each(levels, function (i, nodes) { |
||||
// 计算权重
|
||||
var weights = []; |
||||
BI.each(nodes, function (j, node) { |
||||
weights[j] = (node.get("leaves") || 1) / allLeavesCount; |
||||
}); |
||||
BI.each(nodes, function (j, node) { |
||||
// 求前j个元素的权重
|
||||
var weight = BI.sum(weights.slice(0, j)); |
||||
// 求坐标
|
||||
var x = weight * width + weights[j] * width / 2; |
||||
var y = i * levelHeight + levelHeight / 2; |
||||
xy[node.id] = {x: x, y: y}; |
||||
}); |
||||
}); |
||||
return xy; |
||||
}, |
||||
|
||||
_stroke: function (levels, xy) { |
||||
var height = this._calculateHeight(); |
||||
var levelCount = levels.length; |
||||
var levelHeight = height / levelCount; |
||||
var self = this, o = this.options; |
||||
switch (o.direction) { |
||||
case BI.Direction.Top: |
||||
BI.each(levels, function (i, nodes) { |
||||
BI.each(nodes, function (j, node) { |
||||
if (node.getChildrenLength() > 0 && !node.leaf) { |
||||
var path = ""; |
||||
var start = xy[node.id]; |
||||
var split = start.y + levelHeight / 2; |
||||
path += "M" + start.x + "," + (start.y + o.centerOffset) + "L" + start.x + "," + split; |
||||
var end = []; |
||||
BI.each(node.getChildren(), function (t, c) { |
||||
var e = end[t] = xy[c.id]; |
||||
path += "M" + e.x + "," + (e.y + o.centerOffset) + "L" + e.x + "," + split; |
||||
}); |
||||
if (end.length > 0) { |
||||
path += "M" + BI.first(end).x + "," + split + "L" + BI.last(end).x + "," + split; |
||||
} |
||||
self.svg.path(path).attr("stroke", "#d4dadd"); |
||||
} |
||||
}); |
||||
}); |
||||
break; |
||||
case BI.Direction.Bottom: |
||||
BI.each(levels, function (i, nodes) { |
||||
BI.each(nodes, function (j, node) { |
||||
if (node.getChildrenLength() > 0 && !node.leaf) { |
||||
var path = ""; |
||||
var start = xy[node.id]; |
||||
var split = start.y - levelHeight / 2; |
||||
path += "M" + start.x + "," + (start.y - o.centerOffset) + "L" + start.x + "," + split; |
||||
var end = []; |
||||
BI.each(node.getChildren(), function (t, c) { |
||||
var e = end[t] = xy[c.id]; |
||||
path += "M" + e.x + "," + (e.y - o.centerOffset) + "L" + e.x + "," + split; |
||||
}); |
||||
if (end.length > 0) { |
||||
path += "M" + BI.first(end).x + "," + split + "L" + BI.last(end).x + "," + split; |
||||
} |
||||
self.svg.path(path).attr("stroke", "#d4dadd"); |
||||
} |
||||
}); |
||||
}); |
||||
break; |
||||
case BI.Direction.Left: |
||||
BI.each(levels, function (i, nodes) { |
||||
BI.each(nodes, function (j, node) { |
||||
if (node.getChildrenLength() > 0 && !node.leaf) { |
||||
var path = ""; |
||||
var start = xy[node.id]; |
||||
var split = start.y + levelHeight / 2; |
||||
path += "M" + (start.y + o.centerOffset) + "," + start.x + "L" + split + "," + start.x; |
||||
var end = []; |
||||
BI.each(node.getChildren(), function (t, c) { |
||||
var e = end[t] = xy[c.id]; |
||||
path += "M" + (e.y + o.centerOffset) + "," + e.x + "L" + split + "," + e.x; |
||||
}); |
||||
if (end.length > 0) { |
||||
path += "M" + split + "," + BI.first(end).x + "L" + split + "," + BI.last(end).x; |
||||
} |
||||
self.svg.path(path).attr("stroke", "#d4dadd"); |
||||
} |
||||
}); |
||||
}); |
||||
break; |
||||
case BI.Direction.Right: |
||||
BI.each(levels, function (i, nodes) { |
||||
BI.each(nodes, function (j, node) { |
||||
if (node.getChildrenLength() > 0 && !node.leaf) { |
||||
var path = ""; |
||||
var start = xy[node.id]; |
||||
var split = start.y - levelHeight / 2; |
||||
path += "M" + (start.y - o.centerOffset) + "," + start.x + "L" + split + "," + start.x; |
||||
var end = []; |
||||
BI.each(node.getChildren(), function (t, c) { |
||||
var e = end[t] = xy[c.id]; |
||||
path += "M" + (e.y - o.centerOffset) + "," + e.x + "L" + split + "," + e.x; |
||||
}); |
||||
if (end.length > 0) { |
||||
path += "M" + split + "," + BI.first(end).x + "L" + split + "," + BI.last(end).x; |
||||
} |
||||
self.svg.path(path).attr("stroke", "#d4dadd"); |
||||
} |
||||
}); |
||||
}); |
||||
break; |
||||
} |
||||
}, |
||||
|
||||
_createBranches: function (levels) { |
||||
var self = this, o = this.options; |
||||
if (o.direction === BI.Direction.Bottom || o.direction === BI.Direction.Right) { |
||||
levels = levels.reverse(); |
||||
} |
||||
var xy = this._calculateXY(levels); |
||||
// 画图
|
||||
this._stroke(levels, xy); |
||||
}, |
||||
|
||||
_isNeedAdjust: function () { |
||||
var o = this.options; |
||||
return o.direction === BI.Direction.Top && o.align === BI.VerticalAlign.Bottom || o.direction === BI.Direction.Bottom && o.align === BI.VerticalAlign.Top |
||||
|| o.direction === BI.Direction.Left && o.align === BI.HorizontalAlign.Right || o.direction === BI.Direction.Right && o.align === BI.HorizontalAlign.Left; |
||||
}, |
||||
|
||||
setValue: function (value) { |
||||
|
||||
}, |
||||
|
||||
getValue: function () { |
||||
|
||||
}, |
||||
|
||||
populate: function (items) { |
||||
var self = this, o = this.options; |
||||
o.items = items || []; |
||||
this.empty(); |
||||
items = BI.Tree.transformToTreeFormat(o.items); |
||||
this.tree = new BI.Tree(); |
||||
this.tree.initTree(items); |
||||
|
||||
this.svg = BI.createWidget({ |
||||
type: "bi.svg" |
||||
}); |
||||
|
||||
// 树分层
|
||||
var levels = this._stratification(); |
||||
|
||||
if (this._isNeedAdjust()) { |
||||
// 树平移
|
||||
var adjust = this._translate(levels); |
||||
// 树调整
|
||||
adjust = this._adjust(adjust); |
||||
|
||||
this._createBranches(adjust); |
||||
} else { |
||||
var adjust = this._fill(levels); |
||||
|
||||
this._createBranches(adjust); |
||||
} |
||||
|
||||
var container = BI.createWidget({ |
||||
type: "bi.layout", |
||||
width: this._isVertical() ? this._calculateWidth() : this._calculateHeight(), |
||||
height: this._isVertical() ? this._calculateHeight() : this._calculateWidth() |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: container, |
||||
items: [{ |
||||
el: this.svg, |
||||
top: 0, |
||||
left: 0, |
||||
right: 0, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
if (this._isVertical()) { |
||||
items = [{ |
||||
type: "bi.handstand_branch_tree", |
||||
expander: { |
||||
direction: o.direction |
||||
}, |
||||
el: { |
||||
layouts: [{ |
||||
type: "bi.horizontal_adapt", |
||||
verticalAlign: o.align |
||||
}] |
||||
}, |
||||
items: items |
||||
}]; |
||||
} else { |
||||
items = [{ |
||||
type: "bi.branch_tree", |
||||
expander: { |
||||
direction: o.direction |
||||
}, |
||||
el: { |
||||
layouts: [{ |
||||
type: "bi.vertical" |
||||
}, { |
||||
type: o.align === BI.HorizontalAlign.Left ? "bi.left" : "bi.right" |
||||
}] |
||||
}, |
||||
items: items |
||||
}]; |
||||
} |
||||
BI.createWidget({ |
||||
type: "bi.adaptive", |
||||
element: container, |
||||
items: items |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.center_adapt", |
||||
scrollable: true, |
||||
element: this, |
||||
items: [container] |
||||
}); |
||||
} |
||||
}); |
||||
BI.BranchRelation.EVENT_CHANGE = "BranchRelation.EVENT_CHANGE"; |
||||
BI.shortcut("bi.branch_relation", BI.BranchRelation); |
@ -1,60 +0,0 @@
|
||||
/** |
||||
* 倒立的Branch |
||||
* @class BI.HandStandBranchExpander |
||||
* @extend BI.Widget |
||||
* create by young |
||||
*/ |
||||
BI.HandStandBranchExpander = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.HandStandBranchExpander.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-handstand-branch-expander", |
||||
direction: BI.Direction.Top, |
||||
logic: { |
||||
dynamic: true |
||||
}, |
||||
el: {type: "bi.label"}, |
||||
popup: {} |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.HandStandBranchExpander.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
this._initExpander(); |
||||
this._initBranchView(); |
||||
BI.createWidget(BI.extend({ |
||||
element: this |
||||
}, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, { |
||||
items: BI.LogicFactory.createLogicItemsByDirection(o.direction, { |
||||
type: "bi.center_adapt", |
||||
items: [this.expander] |
||||
}, this.branchView) |
||||
})))); |
||||
}, |
||||
|
||||
_initExpander: function () { |
||||
var self = this, o = this.options; |
||||
this.expander = BI.createWidget(o.el); |
||||
this.expander.on(BI.Controller.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
_initBranchView: function () { |
||||
var self = this, o = this.options; |
||||
this.branchView = BI.createWidget(o.popup, {}); |
||||
this.branchView.on(BI.Controller.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
populate: function (items) { |
||||
this.branchView.populate.apply(this.branchView, arguments); |
||||
}, |
||||
|
||||
getValue: function () { |
||||
return this.branchView.getValue(); |
||||
} |
||||
}); |
||||
BI.HandStandBranchExpander.EVENT_CHANGE = "EVENT_CHANGE"; |
||||
BI.shortcut("bi.handstand_branch_expander", BI.HandStandBranchExpander); |
@ -1,60 +0,0 @@
|
||||
/** |
||||
* @class BI.BranchExpander |
||||
* @extend BI.Widget |
||||
* create by young |
||||
*/ |
||||
BI.BranchExpander = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.BranchExpander.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-branch-expander", |
||||
direction: BI.Direction.Left, |
||||
logic: { |
||||
dynamic: true |
||||
}, |
||||
el: {}, |
||||
popup: {} |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.BranchExpander.superclass._init.apply(this, arguments); |
||||
var o = this.options; |
||||
this._initExpander(); |
||||
this._initBranchView(); |
||||
BI.createWidget(BI.extend({ |
||||
element: this |
||||
}, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, { |
||||
items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.expander, this.branchView) |
||||
})))); |
||||
}, |
||||
|
||||
_initExpander: function () { |
||||
var self = this, o = this.options; |
||||
this.expander = BI.createWidget(o.el, { |
||||
type: "bi.label", |
||||
width: 30, |
||||
height: "100%" |
||||
}); |
||||
this.expander.on(BI.Controller.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
_initBranchView: function () { |
||||
var self = this, o = this.options; |
||||
this.branchView = BI.createWidget(o.popup, {}); |
||||
this.branchView.on(BI.Controller.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
populate: function (items) { |
||||
this.branchView.populate.apply(this.branchView, arguments); |
||||
}, |
||||
|
||||
getValue: function () { |
||||
return this.branchView.getValue(); |
||||
} |
||||
}); |
||||
BI.BranchExpander.EVENT_CHANGE = "EVENT_CHANGE"; |
||||
BI.shortcut("bi.branch_expander", BI.BranchExpander); |
@ -1,55 +0,0 @@
|
||||
/** |
||||
* @class BI.HandStandBranchTree |
||||
* @extends BI.Widget |
||||
* create by young |
||||
* 横向分支的树 |
||||
*/ |
||||
BI.HandStandBranchTree = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.HandStandBranchTree.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-handstand-branch-tree", |
||||
expander: {}, |
||||
el: {}, |
||||
items: [] |
||||
}); |
||||
}, |
||||
_init: function () { |
||||
BI.HandStandBranchTree.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.branchTree = BI.createWidget({ |
||||
type: "bi.custom_tree", |
||||
element: this, |
||||
expander: BI.extend({ |
||||
type: "bi.handstand_branch_expander", |
||||
el: {}, |
||||
popup: { |
||||
type: "bi.custom_tree" |
||||
} |
||||
}, o.expander), |
||||
el: BI.extend({ |
||||
type: "bi.button_tree", |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, |
||||
layouts: [{ |
||||
type: "bi.horizontal_adapt" |
||||
}] |
||||
}, o.el), |
||||
items: this.options.items |
||||
}); |
||||
this.branchTree.on(BI.CustomTree.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.HandStandBranchTree.EVENT_CHANGE, arguments); |
||||
}); |
||||
this.branchTree.on(BI.Controller.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
populate: function () { |
||||
this.branchTree.populate.apply(this.branchTree, arguments); |
||||
}, |
||||
|
||||
getValue: function () { |
||||
return this.branchTree.getValue(); |
||||
} |
||||
}); |
||||
BI.HandStandBranchTree.EVENT_CHANGE = "EVENT_CHANGE"; |
||||
BI.shortcut("bi.handstand_branch_tree", BI.HandStandBranchTree); |
@ -1,55 +0,0 @@
|
||||
/** |
||||
* @class BI.BranchTree |
||||
* @extends BI.Widget |
||||
* create by young |
||||
* 横向分支的树 |
||||
*/ |
||||
BI.BranchTree = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.BranchTree.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-branch-tree", |
||||
expander: {}, |
||||
el: {}, |
||||
items: [] |
||||
}); |
||||
}, |
||||
_init: function () { |
||||
BI.BranchTree.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
this.branchTree = BI.createWidget({ |
||||
type: "bi.custom_tree", |
||||
element: this, |
||||
expander: BI.extend({ |
||||
type: "bi.branch_expander", |
||||
el: {}, |
||||
popup: { |
||||
type: "bi.custom_tree" |
||||
} |
||||
}, o.expander), |
||||
el: BI.extend({ |
||||
type: "bi.button_tree", |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, |
||||
layouts: [{ |
||||
type: "bi.vertical" |
||||
}] |
||||
}, o.el), |
||||
items: this.options.items |
||||
}); |
||||
this.branchTree.on(BI.CustomTree.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.BranchTree.EVENT_CHANGE, arguments); |
||||
}); |
||||
this.branchTree.on(BI.Controller.EVENT_CHANGE, function () { |
||||
self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
populate: function () { |
||||
this.branchTree.populate.apply(this.branchTree, arguments); |
||||
}, |
||||
|
||||
getValue: function () { |
||||
return this.branchTree.getValue(); |
||||
} |
||||
}); |
||||
BI.BranchTree.EVENT_CHANGE = "EVENT_CHANGE"; |
||||
BI.shortcut("bi.branch_tree", BI.BranchTree); |
@ -1,130 +0,0 @@
|
||||
|
||||
!(function () { |
||||
|
||||
var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; |
||||
|
||||
|
||||
// private method for UTF-8 encoding
|
||||
var _utf8_encode = function (string) { |
||||
string = string.replace(/\r\n/g, "\n"); |
||||
var utftext = ""; |
||||
|
||||
for (var n = 0; n < string.length; n++) { |
||||
|
||||
var c = string.charCodeAt(n); |
||||
|
||||
if (c < 128) { |
||||
utftext += String.fromCharCode(c); |
||||
} else if ((c > 127) && (c < 2048)) { |
||||
utftext += String.fromCharCode((c >> 6) | 192); |
||||
utftext += String.fromCharCode((c & 63) | 128); |
||||
} else { |
||||
utftext += String.fromCharCode((c >> 12) | 224); |
||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128); |
||||
utftext += String.fromCharCode((c & 63) | 128); |
||||
} |
||||
|
||||
} |
||||
|
||||
return utftext; |
||||
}; |
||||
|
||||
// private method for UTF-8 decoding
|
||||
var _utf8_decode = function (utftext) { |
||||
var string = ""; |
||||
var i = 0; |
||||
var c = 0, c3 = 0, c2 = 0; |
||||
|
||||
while (i < utftext.length) { |
||||
|
||||
c = utftext.charCodeAt(i); |
||||
|
||||
if (c < 128) { |
||||
string += String.fromCharCode(c); |
||||
i++; |
||||
} else if ((c > 191) && (c < 224)) { |
||||
c2 = utftext.charCodeAt(i + 1); |
||||
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); |
||||
i += 2; |
||||
} else { |
||||
c2 = utftext.charCodeAt(i + 1); |
||||
c3 = utftext.charCodeAt(i + 2); |
||||
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); |
||||
i += 3; |
||||
} |
||||
|
||||
} |
||||
return string; |
||||
}; |
||||
|
||||
_.extend(BI, { |
||||
|
||||
encode: function (input) { |
||||
var output = ""; |
||||
var chr1, chr2, chr3, enc1, enc2, enc3, enc4; |
||||
var i = 0; |
||||
|
||||
input = _utf8_encode(input); |
||||
|
||||
while (i < input.length) { |
||||
|
||||
chr1 = input.charCodeAt(i++); |
||||
chr2 = input.charCodeAt(i++); |
||||
chr3 = input.charCodeAt(i++); |
||||
|
||||
enc1 = chr1 >> 2; |
||||
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); |
||||
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); |
||||
enc4 = chr3 & 63; |
||||
|
||||
if (isNaN(chr2)) { |
||||
enc3 = enc4 = 64; |
||||
} else if (isNaN(chr3)) { |
||||
enc4 = 64; |
||||
} |
||||
|
||||
output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); |
||||
|
||||
} |
||||
|
||||
return output; |
||||
}, |
||||
|
||||
// public method for decoding
|
||||
decode: function (input) { |
||||
var output = ""; |
||||
var chr1, chr2, chr3; |
||||
var enc1, enc2, enc3, enc4; |
||||
var i = 0; |
||||
|
||||
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); |
||||
|
||||
while (i < input.length) { |
||||
|
||||
enc1 = _keyStr.indexOf(input.charAt(i++)); |
||||
enc2 = _keyStr.indexOf(input.charAt(i++)); |
||||
enc3 = _keyStr.indexOf(input.charAt(i++)); |
||||
enc4 = _keyStr.indexOf(input.charAt(i++)); |
||||
|
||||
chr1 = (enc1 << 2) | (enc2 >> 4); |
||||
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); |
||||
chr3 = ((enc3 & 3) << 6) | enc4; |
||||
|
||||
output = output + String.fromCharCode(chr1); |
||||
|
||||
if (enc3 != 64) { |
||||
output = output + String.fromCharCode(chr2); |
||||
} |
||||
if (enc4 != 64) { |
||||
output = output + String.fromCharCode(chr3); |
||||
} |
||||
|
||||
} |
||||
|
||||
output = _utf8_decode(output); |
||||
|
||||
return output; |
||||
|
||||
} |
||||
}); |
||||
})(); |
@ -1,263 +0,0 @@
|
||||
(function () { |
||||
var clamp = function (min, value, max) { |
||||
if (value < min) { |
||||
return min; |
||||
} |
||||
if (value > max) { |
||||
return max; |
||||
} |
||||
return value; |
||||
}; |
||||
|
||||
var BUFFER_ROWS = 5; |
||||
var NO_ROWS_SCROLL_RESULT = { |
||||
index: 0, |
||||
offset: 0, |
||||
position: 0, |
||||
contentHeight: 0 |
||||
}; |
||||
|
||||
BI.TableScrollHelper = function (rowCount, |
||||
defaultRowHeight, |
||||
viewportHeight, |
||||
rowHeightGetter) { |
||||
this._rowOffsets = BI.PrefixIntervalTree.uniform(rowCount, defaultRowHeight); |
||||
this._storedHeights = new Array(rowCount); |
||||
for (var i = 0; i < rowCount; ++i) { |
||||
this._storedHeights[i] = defaultRowHeight; |
||||
} |
||||
this._rowCount = rowCount; |
||||
this._position = 0; |
||||
this._contentHeight = rowCount * defaultRowHeight; |
||||
this._defaultRowHeight = defaultRowHeight; |
||||
this._rowHeightGetter = rowHeightGetter ? |
||||
rowHeightGetter : function () { |
||||
return defaultRowHeight; |
||||
}; |
||||
this._viewportHeight = viewportHeight; |
||||
|
||||
this._updateHeightsInViewport(0, 0); |
||||
}; |
||||
|
||||
BI.TableScrollHelper.prototype = { |
||||
constructor: BI.TableScrollHelper, |
||||
setRowHeightGetter: function (rowHeightGetter) { |
||||
this._rowHeightGetter = rowHeightGetter; |
||||
}, |
||||
|
||||
setViewportHeight: function (viewportHeight) { |
||||
this._viewportHeight = viewportHeight; |
||||
}, |
||||
|
||||
getContentHeight: function () { |
||||
return this._contentHeight; |
||||
}, |
||||
|
||||
_updateHeightsInViewport: function (firstRowIndex, |
||||
firstRowOffset) { |
||||
var top = firstRowOffset; |
||||
var index = firstRowIndex; |
||||
while (top <= this._viewportHeight && index < this._rowCount) { |
||||
this._updateRowHeight(index); |
||||
top += this._storedHeights[index]; |
||||
index++; |
||||
} |
||||
}, |
||||
|
||||
_updateHeightsAboveViewport: function (firstRowIndex) { |
||||
var index = firstRowIndex - 1; |
||||
while (index >= 0 && index >= firstRowIndex - BUFFER_ROWS) { |
||||
var delta = this._updateRowHeight(index); |
||||
this._position += delta; |
||||
index--; |
||||
} |
||||
}, |
||||
|
||||
_updateRowHeight: function (rowIndex) { |
||||
if (rowIndex < 0 || rowIndex >= this._rowCount) { |
||||
return 0; |
||||
} |
||||
var newHeight = this._rowHeightGetter(rowIndex); |
||||
if (newHeight !== this._storedHeights[rowIndex]) { |
||||
var change = newHeight - this._storedHeights[rowIndex]; |
||||
this._rowOffsets.set(rowIndex, newHeight); |
||||
this._storedHeights[rowIndex] = newHeight; |
||||
this._contentHeight += change; |
||||
return change; |
||||
} |
||||
return 0; |
||||
}, |
||||
|
||||
getRowPosition: function (rowIndex) { |
||||
this._updateRowHeight(rowIndex); |
||||
return this._rowOffsets.sumUntil(rowIndex); |
||||
}, |
||||
|
||||
scrollBy: function (delta) { |
||||
if (this._rowCount === 0) { |
||||
return NO_ROWS_SCROLL_RESULT; |
||||
} |
||||
var firstRow = this._rowOffsets.greatestLowerBound(this._position); |
||||
firstRow = clamp(firstRow, 0, Math.max(this._rowCount - 1, 0)); |
||||
var firstRowPosition = this._rowOffsets.sumUntil(firstRow); |
||||
var rowIndex = firstRow; |
||||
var position = this._position; |
||||
|
||||
var rowHeightChange = this._updateRowHeight(rowIndex); |
||||
if (firstRowPosition !== 0) { |
||||
position += rowHeightChange; |
||||
} |
||||
var visibleRowHeight = this._storedHeights[rowIndex] - |
||||
(position - firstRowPosition); |
||||
|
||||
if (delta >= 0) { |
||||
|
||||
while (delta > 0 && rowIndex < this._rowCount) { |
||||
if (delta < visibleRowHeight) { |
||||
position += delta; |
||||
delta = 0; |
||||
} else { |
||||
delta -= visibleRowHeight; |
||||
position += visibleRowHeight; |
||||
rowIndex++; |
||||
} |
||||
if (rowIndex < this._rowCount) { |
||||
this._updateRowHeight(rowIndex); |
||||
visibleRowHeight = this._storedHeights[rowIndex]; |
||||
} |
||||
} |
||||
} else if (delta < 0) { |
||||
delta = -delta; |
||||
var invisibleRowHeight = this._storedHeights[rowIndex] - visibleRowHeight; |
||||
|
||||
while (delta > 0 && rowIndex >= 0) { |
||||
if (delta < invisibleRowHeight) { |
||||
position -= delta; |
||||
delta = 0; |
||||
} else { |
||||
position -= invisibleRowHeight; |
||||
delta -= invisibleRowHeight; |
||||
rowIndex--; |
||||
} |
||||
if (rowIndex >= 0) { |
||||
var change = this._updateRowHeight(rowIndex); |
||||
invisibleRowHeight = this._storedHeights[rowIndex]; |
||||
position += change; |
||||
} |
||||
} |
||||
} |
||||
|
||||
var maxPosition = this._contentHeight - this._viewportHeight; |
||||
position = clamp(position, 0, maxPosition); |
||||
this._position = position; |
||||
var firstRowIndex = this._rowOffsets.greatestLowerBound(position); |
||||
firstRowIndex = clamp(firstRowIndex, 0, Math.max(this._rowCount - 1, 0)); |
||||
firstRowPosition = this._rowOffsets.sumUntil(firstRowIndex); |
||||
var firstRowOffset = firstRowPosition - position; |
||||
|
||||
this._updateHeightsInViewport(firstRowIndex, firstRowOffset); |
||||
this._updateHeightsAboveViewport(firstRowIndex); |
||||
|
||||
return { |
||||
index: firstRowIndex, |
||||
offset: firstRowOffset, |
||||
position: this._position, |
||||
contentHeight: this._contentHeight |
||||
}; |
||||
}, |
||||
|
||||
_getRowAtEndPosition: function (rowIndex) { |
||||
// We need to update enough rows above the selected one to be sure that when
|
||||
// we scroll to selected position all rows between first shown and selected
|
||||
// one have most recent heights computed and will not resize
|
||||
this._updateRowHeight(rowIndex); |
||||
var currentRowIndex = rowIndex; |
||||
var top = this._storedHeights[currentRowIndex]; |
||||
while (top < this._viewportHeight && currentRowIndex >= 0) { |
||||
currentRowIndex--; |
||||
if (currentRowIndex >= 0) { |
||||
this._updateRowHeight(currentRowIndex); |
||||
top += this._storedHeights[currentRowIndex]; |
||||
} |
||||
} |
||||
var position = this._rowOffsets.sumTo(rowIndex) - this._viewportHeight; |
||||
if (position < 0) { |
||||
position = 0; |
||||
} |
||||
return position; |
||||
}, |
||||
|
||||
scrollTo: function (position) { |
||||
if (this._rowCount === 0) { |
||||
return NO_ROWS_SCROLL_RESULT; |
||||
} |
||||
if (position <= 0) { |
||||
// If position less than or equal to 0 first row should be fully visible
|
||||
// on top
|
||||
this._position = 0; |
||||
this._updateHeightsInViewport(0, 0); |
||||
|
||||
return { |
||||
index: 0, |
||||
offset: 0, |
||||
position: this._position, |
||||
contentHeight: this._contentHeight |
||||
}; |
||||
} else if (position >= this._contentHeight - this._viewportHeight) { |
||||
// If position is equal to or greater than max scroll value, we need
|
||||
// to make sure to have bottom border of last row visible.
|
||||
var rowIndex = this._rowCount - 1; |
||||
position = this._getRowAtEndPosition(rowIndex); |
||||
} |
||||
this._position = position; |
||||
|
||||
var firstRowIndex = this._rowOffsets.greatestLowerBound(position); |
||||
firstRowIndex = clamp(firstRowIndex, 0, Math.max(this._rowCount - 1, 0)); |
||||
var firstRowPosition = this._rowOffsets.sumUntil(firstRowIndex); |
||||
var firstRowOffset = firstRowPosition - position; |
||||
|
||||
this._updateHeightsInViewport(firstRowIndex, firstRowOffset); |
||||
this._updateHeightsAboveViewport(firstRowIndex); |
||||
|
||||
return { |
||||
index: firstRowIndex, |
||||
offset: firstRowOffset, |
||||
position: this._position, |
||||
contentHeight: this._contentHeight |
||||
}; |
||||
}, |
||||
|
||||
/** |
||||
* Allows to scroll to selected row with specified offset. It always |
||||
* brings that row to top of viewport with that offset |
||||
*/ |
||||
scrollToRow: function (rowIndex, offset) { |
||||
rowIndex = clamp(rowIndex, 0, Math.max(this._rowCount - 1, 0)); |
||||
offset = clamp(offset, -this._storedHeights[rowIndex], 0); |
||||
var firstRow = this._rowOffsets.sumUntil(rowIndex); |
||||
return this.scrollTo(firstRow - offset); |
||||
}, |
||||
|
||||
/** |
||||
* Allows to scroll to selected row by bringing it to viewport with minimal |
||||
* scrolling. This that if row is fully visible, scroll will not be changed. |
||||
* If top border of row is above top of viewport it will be scrolled to be |
||||
* fully visible on the top of viewport. If the bottom border of row is |
||||
* below end of viewport, it will be scrolled up to be fully visible on the |
||||
* bottom of viewport. |
||||
*/ |
||||
scrollRowIntoView: function (rowIndex) { |
||||
rowIndex = clamp(rowIndex, 0, Math.max(this._rowCount - 1, 0)); |
||||
var rowBegin = this._rowOffsets.sumUntil(rowIndex); |
||||
var rowEnd = rowBegin + this._storedHeights[rowIndex]; |
||||
if (rowBegin < this._position) { |
||||
return this.scrollTo(rowBegin); |
||||
} else if (this._position + this._viewportHeight < rowEnd) { |
||||
var position = this._getRowAtEndPosition(rowIndex); |
||||
return this.scrollTo(position); |
||||
} |
||||
return this.scrollTo(this._position); |
||||
} |
||||
}; |
||||
|
||||
})(); |
@ -1,145 +0,0 @@
|
||||
// Data structure that allows to store values and assign positions to them
|
||||
// in a way to minimize changing positions of stored values when new ones are
|
||||
// added or when some values are replaced. Stored elements are alwasy assigned
|
||||
// a consecutive set of positoins startin from 0 up to count of elements less 1
|
||||
// Following actions can be executed
|
||||
// * get position assigned to given value (null if value is not stored)
|
||||
// * create new entry for new value and get assigned position back
|
||||
// * replace value that is furthest from specified value range with new value
|
||||
// and get it's position back
|
||||
// All operations take amortized log(n) time where n is number of elements in
|
||||
// the set.
|
||||
BI.IntegerBufferSet = function () { |
||||
this._valueToPositionMap = {}; |
||||
this._size = 0; |
||||
this._smallValues = new BI.Heap( |
||||
[], // Initial data in the heap
|
||||
this._smallerComparator |
||||
); |
||||
this._largeValues = new BI.Heap( |
||||
[], // Initial data in the heap
|
||||
this._greaterComparator |
||||
); |
||||
|
||||
}; |
||||
|
||||
BI.IntegerBufferSet.prototype = { |
||||
constructor: BI.IntegerBufferSet, |
||||
getSize: function () /* number*/ { |
||||
return this._size; |
||||
}, |
||||
|
||||
getValuePosition: function (/* number*/ value) /* ?number*/ { |
||||
if (this._valueToPositionMap[value] === undefined) { |
||||
return null; |
||||
} |
||||
return this._valueToPositionMap[value]; |
||||
}, |
||||
|
||||
getNewPositionForValue: function (/* number*/ value) /* number*/ { |
||||
var newPosition = this._size; |
||||
this._size++; |
||||
this._pushToHeaps(newPosition, value); |
||||
this._valueToPositionMap[value] = newPosition; |
||||
return newPosition; |
||||
}, |
||||
|
||||
replaceFurthestValuePosition: function (/* number*/ lowValue, |
||||
/* number*/ highValue, |
||||
/* number*/ newValue) /* ?number*/ { |
||||
this._cleanHeaps(); |
||||
if (this._smallValues.empty() || this._largeValues.empty()) { |
||||
// Threre are currently no values stored. We will have to create new
|
||||
// position for this value.
|
||||
return null; |
||||
} |
||||
|
||||
var minValue = this._smallValues.peek().value; |
||||
var maxValue = this._largeValues.peek().value; |
||||
if (minValue >= lowValue && maxValue <= highValue) { |
||||
// All values currently stored are necessary, we can't reuse any of them.
|
||||
return null; |
||||
} |
||||
|
||||
var valueToReplace; |
||||
if (lowValue - minValue > maxValue - highValue) { |
||||
// minValue is further from provided range. We will reuse it's position.
|
||||
valueToReplace = minValue; |
||||
this._smallValues.pop(); |
||||
} else { |
||||
valueToReplace = maxValue; |
||||
this._largeValues.pop(); |
||||
} |
||||
var position = this._valueToPositionMap[valueToReplace]; |
||||
delete this._valueToPositionMap[valueToReplace]; |
||||
this._valueToPositionMap[newValue] = position; |
||||
this._pushToHeaps(position, newValue); |
||||
|
||||
return position; |
||||
}, |
||||
|
||||
_pushToHeaps: function (/* number*/ position, /* number*/ value) { |
||||
var element = { |
||||
position: position, |
||||
value: value |
||||
}; |
||||
// We can reuse the same object in both heaps, because we don't mutate them
|
||||
this._smallValues.push(element); |
||||
this._largeValues.push(element); |
||||
}, |
||||
|
||||
_cleanHeaps: function () { |
||||
// We not usually only remove object from one heap while moving value.
|
||||
// Here we make sure that there is no stale data on top of heaps.
|
||||
this._cleanHeap(this._smallValues); |
||||
this._cleanHeap(this._largeValues); |
||||
var minHeapSize = |
||||
Math.min(this._smallValues.size(), this._largeValues.size()); |
||||
var maxHeapSize = |
||||
Math.max(this._smallValues.size(), this._largeValues.size()); |
||||
if (maxHeapSize > 10 * minHeapSize) { |
||||
// There are many old values in one of heaps. We nned to get rid of them
|
||||
// to not use too avoid memory leaks
|
||||
this._recreateHeaps(); |
||||
} |
||||
}, |
||||
|
||||
_recreateHeaps: function () { |
||||
var sourceHeap = this._smallValues.size() < this._largeValues.size() ? |
||||
this._smallValues : |
||||
this._largeValues; |
||||
var newSmallValues = new Heap( |
||||
[], // Initial data in the heap
|
||||
this._smallerComparator |
||||
); |
||||
var newLargeValues = new Heap( |
||||
[], // Initial datat in the heap
|
||||
this._greaterComparator |
||||
); |
||||
while (!sourceHeap.empty()) { |
||||
var element = sourceHeap.pop(); |
||||
// Push all stil valid elements to new heaps
|
||||
if (this._valueToPositionMap[element.value] !== undefined) { |
||||
newSmallValues.push(element); |
||||
newLargeValues.push(element); |
||||
} |
||||
} |
||||
this._smallValues = newSmallValues; |
||||
this._largeValues = newLargeValues; |
||||
}, |
||||
|
||||
_cleanHeap: function (/* object*/ heap) { |
||||
while (!heap.empty() && |
||||
this._valueToPositionMap[heap.peek().value] === undefined) { |
||||
heap.pop(); |
||||
} |
||||
}, |
||||
|
||||
_smallerComparator: function (/* object*/ lhs, /* object*/ rhs) /* boolean*/ { |
||||
return lhs.value < rhs.value; |
||||
}, |
||||
|
||||
_greaterComparator: function (/* object*/ lhs, /* object*/ rhs) /* boolean*/ { |
||||
return lhs.value > rhs.value; |
||||
} |
||||
}; |
@ -1,240 +0,0 @@
|
||||
|
||||
!(function () { |
||||
var MD5 = function (hexcase) { |
||||
this.hexcase = !hexcase ? 0 : 1; |
||||
/* hex output format. 0 - lowercase; 1 - uppercase */ |
||||
this.b64pad = ""; |
||||
/* base-64 pad character. "=" for strict RFC compliance */ |
||||
this.chrsz = 8; |
||||
/* bits per input character. 8 - ASCII; 16 - Unicode */ |
||||
}; |
||||
|
||||
/* |
||||
* These are the functions you'll usually want to call |
||||
* They take string arguments and return either hex or base-64 encoded strings |
||||
*/ |
||||
MD5.prototype.hex_md5 = function (s) { |
||||
return this.binl2hex(this.core_md5(this.str2binl(s), s.length * this.chrsz)); |
||||
}; |
||||
|
||||
MD5.prototype.hex_md5_salt = function (s) { |
||||
var md5ed = this.hex_md5(s); |
||||
|
||||
var items1 = []; |
||||
var items2 = []; |
||||
for (var i = 0; i < md5ed.length; i++) { |
||||
if (i % 2 === 0) { |
||||
items1.push(md5ed.charAt(i)); |
||||
} else { |
||||
items2.push(md5ed.charAt(i)); |
||||
} |
||||
} |
||||
var result = ":" + items1.join("") + items2.join(""); |
||||
return result; |
||||
}; |
||||
|
||||
MD5.prototype.b64_md5 = function (s) { |
||||
return this.binl2b64(this.core_md5(this.str2binl(s), s.length * this.chrsz)); |
||||
}; |
||||
|
||||
MD5.prototype.hex_hmac_md5 = function (key, data) { |
||||
return this.binl2hex(this.core_hmac_md5(key, data)); |
||||
}; |
||||
|
||||
MD5.prototype.b64_hmac_md5 = function (key, data) { |
||||
return this.binl2b64(this.core_hmac_md5(key, data)); |
||||
}; |
||||
|
||||
/* Backwards compatibility - same as hex_md5() */ |
||||
MD5.prototype.calcMD5 = function (s) { |
||||
return this.binl2hex(this.core_md5(this.str2binl(s), s.length * this.chrsz)); |
||||
}; |
||||
|
||||
MD5.prototype.core_md5 = function (x, len) { |
||||
/* append padding */ |
||||
x[len >> 5] |= 0x80 << ((len) % 32); |
||||
x[(((len + 64) >>> 9) << 4) + 14] = len; |
||||
|
||||
var a = 1732584193; |
||||
var b = -271733879; |
||||
var c = -1732584194; |
||||
var d = 271733878; |
||||
|
||||
for (var i = 0; i < x.length; i += 16) { |
||||
var olda = a; |
||||
var oldb = b; |
||||
var oldc = c; |
||||
var oldd = d; |
||||
|
||||
a = this.md5_ff(a, b, c, d, x[i + 0], 7, -680876936); |
||||
d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586); |
||||
c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819); |
||||
b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); |
||||
a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897); |
||||
d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); |
||||
c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); |
||||
b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983); |
||||
a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); |
||||
d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); |
||||
c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063); |
||||
b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); |
||||
a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); |
||||
d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101); |
||||
c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); |
||||
b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); |
||||
|
||||
a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510); |
||||
d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); |
||||
c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713); |
||||
b = this.md5_gg(b, c, d, a, x[i + 0], 20, -373897302); |
||||
a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691); |
||||
d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083); |
||||
c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335); |
||||
b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848); |
||||
a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438); |
||||
d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); |
||||
c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961); |
||||
b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); |
||||
a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); |
||||
d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784); |
||||
c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); |
||||
b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); |
||||
|
||||
a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558); |
||||
d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); |
||||
c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); |
||||
b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556); |
||||
a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); |
||||
d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); |
||||
c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632); |
||||
b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); |
||||
a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174); |
||||
d = this.md5_hh(d, a, b, c, x[i + 0], 11, -358537222); |
||||
c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979); |
||||
b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189); |
||||
a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487); |
||||
d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835); |
||||
c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520); |
||||
b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651); |
||||
|
||||
a = this.md5_ii(a, b, c, d, x[i + 0], 6, -198630844); |
||||
d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); |
||||
c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); |
||||
b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055); |
||||
a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); |
||||
d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); |
||||
c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523); |
||||
b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); |
||||
a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); |
||||
d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744); |
||||
c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); |
||||
b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); |
||||
a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070); |
||||
d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); |
||||
c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259); |
||||
b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551); |
||||
|
||||
a = this.safe_add(a, olda); |
||||
b = this.safe_add(b, oldb); |
||||
c = this.safe_add(c, oldc); |
||||
d = this.safe_add(d, oldd); |
||||
} |
||||
return Array(a, b, c, d); |
||||
|
||||
}; |
||||
|
||||
/* |
||||
* These functions implement the four basic operations the algorithm uses. |
||||
*/ |
||||
MD5.prototype.md5_cmn = function (q, a, b, x, s, t) { |
||||
return this.safe_add(this.bit_rol(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b); |
||||
}; |
||||
MD5.prototype.md5_ff = function (a, b, c, d, x, s, t) { |
||||
return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); |
||||
}; |
||||
MD5.prototype.md5_gg = function (a, b, c, d, x, s, t) { |
||||
return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); |
||||
}; |
||||
MD5.prototype.md5_hh = function (a, b, c, d, x, s, t) { |
||||
return this.md5_cmn(b ^ c ^ d, a, b, x, s, t); |
||||
}; |
||||
MD5.prototype.md5_ii = function (a, b, c, d, x, s, t) { |
||||
return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t); |
||||
}; |
||||
|
||||
/* |
||||
* Calculate the HMAC-MD5, of a key and some data |
||||
*/ |
||||
MD5.prototype.core_hmac_md5 = function (key, data) { |
||||
var bkey = this.str2binl(key); |
||||
if (bkey.length > 16) {bkey = this.core_md5(bkey, key.length * this.chrsz);} |
||||
|
||||
var ipad = Array(16), opad = Array(16); |
||||
for (var i = 0; i < 16; i++) { |
||||
ipad[i] = bkey[i] ^ 0x36363636; |
||||
opad[i] = bkey[i] ^ 0x5C5C5C5C; |
||||
} |
||||
|
||||
var hash = this.core_md5(ipad.concat(this.str2binl(data)), 512 + data.length * this.chrsz); |
||||
return this.core_md5(opad.concat(hash), 512 + 128); |
||||
}; |
||||
|
||||
/* |
||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally |
||||
* to work around bugs in some JS interpreters. |
||||
*/ |
||||
MD5.prototype.safe_add = function (x, y) { |
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF); |
||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16); |
||||
return (msw << 16) | (lsw & 0xFFFF); |
||||
}; |
||||
|
||||
/* |
||||
* Bitwise rotate a 32-bit number to the left. |
||||
*/ |
||||
MD5.prototype.bit_rol = function (num, cnt) { |
||||
return (num << cnt) | (num >>> (32 - cnt)); |
||||
}; |
||||
|
||||
/* |
||||
* Convert a string to an array of little-endian words |
||||
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored. |
||||
*/ |
||||
MD5.prototype.str2binl = function (str) { |
||||
var bin = Array(); |
||||
var mask = (1 << this.chrsz) - 1; |
||||
for (var i = 0; i < str.length * this.chrsz; i += this.chrsz) {bin[i >> 5] |= (str.charCodeAt(i / this.chrsz) & mask) << (i % 32);} |
||||
return bin; |
||||
}; |
||||
|
||||
/* |
||||
* Convert an array of little-endian words to a hex string. |
||||
*/ |
||||
MD5.prototype.binl2hex = function (binarray) { |
||||
var hex_tab = this.hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; |
||||
var str = ""; |
||||
for (var i = 0; i < binarray.length * 4; i++) { |
||||
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) |
||||
+ hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF); |
||||
} |
||||
return str; |
||||
}; |
||||
|
||||
/* |
||||
* Convert an array of little-endian words to a base-64 string |
||||
*/ |
||||
MD5.prototype.binl2b64 = function (binarray) { |
||||
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
||||
var str = ""; |
||||
for (var i = 0; i < binarray.length * 4; i += 3) { |
||||
var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) |
||||
| (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) |
||||
| ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF); |
||||
for (var j = 0; j < 4; j++) { |
||||
if (i * 8 + j * 6 > binarray.length * 32) {str += this.b64pad;} else {str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);} |
||||
} |
||||
} |
||||
return str; |
||||
}; |
||||
BI.MD5 = new MD5(); |
||||
})(); |
@ -1,119 +0,0 @@
|
||||
|
||||
(function () { |
||||
var clamp = function (value, min, max) { |
||||
if (value < min) { |
||||
return min; |
||||
} |
||||
if (value > max) { |
||||
return max; |
||||
} |
||||
return value; |
||||
}; |
||||
var MIN_BUFFER_ROWS = 6; |
||||
var MAX_BUFFER_ROWS = 10; |
||||
|
||||
BI.TableRowBuffer = function (rowsCount, |
||||
defaultRowHeight, |
||||
viewportHeight, |
||||
rowHeightGetter) { |
||||
this._bufferSet = new BI.IntegerBufferSet(); |
||||
this._defaultRowHeight = defaultRowHeight; |
||||
this._viewportRowsBegin = 0; |
||||
this._viewportRowsEnd = 0; |
||||
this._maxVisibleRowCount = Math.ceil(viewportHeight / defaultRowHeight) + 1; |
||||
// this._bufferRowsCount = Math.floor(this._maxVisibleRowCount / 2);
|
||||
this._bufferRowsCount = clamp( |
||||
Math.floor(this._maxVisibleRowCount / 2), |
||||
MIN_BUFFER_ROWS, |
||||
MAX_BUFFER_ROWS |
||||
); |
||||
this._rowsCount = rowsCount; |
||||
this._rowHeightGetter = rowHeightGetter; |
||||
this._rows = []; |
||||
this._viewportHeight = viewportHeight; |
||||
|
||||
}; |
||||
BI.TableRowBuffer.prototype = { |
||||
constructor: BI.TableRowBuffer, |
||||
|
||||
getRowsWithUpdatedBuffer: function () { |
||||
var remainingBufferRows = 2 * this._bufferRowsCount; |
||||
var bufferRowIndex = |
||||
Math.max(this._viewportRowsBegin - this._bufferRowsCount, 0); |
||||
while (bufferRowIndex < this._viewportRowsBegin) { |
||||
this._addRowToBuffer( |
||||
bufferRowIndex, |
||||
this._viewportRowsBegin, |
||||
this._viewportRowsEnd - 1 |
||||
); |
||||
bufferRowIndex++; |
||||
remainingBufferRows--; |
||||
} |
||||
bufferRowIndex = this._viewportRowsEnd; |
||||
while (bufferRowIndex < this._rowsCount && remainingBufferRows > 0) { |
||||
this._addRowToBuffer( |
||||
bufferRowIndex, |
||||
this._viewportRowsBegin, |
||||
this._viewportRowsEnd - 1 |
||||
); |
||||
bufferRowIndex++; |
||||
remainingBufferRows--; |
||||
} |
||||
return this._rows; |
||||
}, |
||||
|
||||
getRows: function (firstRowIndex, |
||||
firstRowOffset) { |
||||
var top = firstRowOffset; |
||||
var totalHeight = top; |
||||
var rowIndex = firstRowIndex; |
||||
var endIndex = |
||||
Math.min(firstRowIndex + this._maxVisibleRowCount, this._rowsCount); |
||||
|
||||
this._viewportRowsBegin = firstRowIndex; |
||||
while (rowIndex < endIndex || |
||||
(totalHeight < this._viewportHeight && rowIndex < this._rowsCount)) { |
||||
this._addRowToBuffer( |
||||
rowIndex, |
||||
firstRowIndex, |
||||
endIndex - 1 |
||||
); |
||||
totalHeight += this._rowHeightGetter(rowIndex); |
||||
++rowIndex; |
||||
// Store index after the last viewport row as end, to be able to
|
||||
// distinguish when there are no rows rendered in viewport
|
||||
this._viewportRowsEnd = rowIndex; |
||||
} |
||||
|
||||
return this._rows; |
||||
}, |
||||
|
||||
_addRowToBuffer: function (rowIndex, |
||||
firstViewportRowIndex, |
||||
lastViewportRowIndex) { |
||||
var rowPosition = this._bufferSet.getValuePosition(rowIndex); |
||||
var viewportRowsCount = lastViewportRowIndex - firstViewportRowIndex + 1; |
||||
var allowedRowsCount = viewportRowsCount + this._bufferRowsCount * 2; |
||||
if (rowPosition === null && |
||||
this._bufferSet.getSize() >= allowedRowsCount) { |
||||
rowPosition = |
||||
this._bufferSet.replaceFurthestValuePosition( |
||||
firstViewportRowIndex, |
||||
lastViewportRowIndex, |
||||
rowIndex |
||||
); |
||||
} |
||||
if (rowPosition === null) { |
||||
// We can't reuse any of existing positions for this row. We have to
|
||||
// create new position
|
||||
rowPosition = this._bufferSet.getNewPositionForValue(rowIndex); |
||||
this._rows[rowPosition] = rowIndex; |
||||
} else { |
||||
// This row already is in the table with rowPosition position or it
|
||||
// can replace row that is in that position
|
||||
this._rows[rowPosition] = rowIndex; |
||||
} |
||||
} |
||||
}; |
||||
|
||||
})(); |
@ -1,274 +0,0 @@
|
||||
.bi-collection-table-cell { |
||||
-webkit-box-sizing: border-box; |
||||
/*Safari3.2+*/ |
||||
-moz-box-sizing: border-box; |
||||
/*Firefox3.5+*/ |
||||
-ms-box-sizing: border-box; |
||||
/*IE8*/ |
||||
box-sizing: border-box; |
||||
/*W3C标准(IE9+,Safari5.1+,Chrome10.0+,Opera10.6+都符合box-sizing的w3c标准语法)*/ |
||||
} |
||||
.bi-collection-table-cell.first-row { |
||||
border-top: 1px solid #e8eaed; |
||||
} |
||||
.bi-collection-table-cell.first-col { |
||||
border-left: 1px solid #e8eaed; |
||||
} |
||||
.bi-theme-dark .bi-collection-table-cell.first-row { |
||||
border-top: 1px solid #3a3c53; |
||||
} |
||||
.bi-theme-dark .bi-collection-table-cell.first-col { |
||||
border-left: 1px solid #3a3c53; |
||||
} |
||||
|
||||
.bi-quick-collection-table > div > .bi-collection { |
||||
overflow: hidden !important; |
||||
overflow-x: hidden !important; |
||||
overflow-y: hidden !important; |
||||
} |
||||
|
||||
.bi-grid-table-cell { |
||||
-webkit-box-sizing: border-box; |
||||
/*Safari3.2+*/ |
||||
-moz-box-sizing: border-box; |
||||
/*Firefox3.5+*/ |
||||
-ms-box-sizing: border-box; |
||||
/*IE8*/ |
||||
box-sizing: border-box; |
||||
/*W3C标准(IE9+,Safari5.1+,Chrome10.0+,Opera10.6+都符合box-sizing的w3c标准语法)*/ |
||||
} |
||||
.bi-grid-table-cell.first-row { |
||||
border-top: 1px solid #e8eaed; |
||||
} |
||||
.bi-grid-table-cell.first-col { |
||||
border-left: 1px solid #e8eaed; |
||||
} |
||||
.bi-theme-dark .bi-grid-table-cell.first-row { |
||||
border-top: 1px solid #3a3c53; |
||||
} |
||||
.bi-theme-dark .bi-grid-table-cell.first-col { |
||||
border-left: 1px solid #3a3c53; |
||||
} |
||||
|
||||
.scrollbar-layout-main { |
||||
box-sizing: border-box; |
||||
outline: none; |
||||
overflow: hidden; |
||||
position: absolute; |
||||
transition-duration: 250ms; |
||||
transition-timing-function: ease; |
||||
user-select: none; |
||||
background-color: rgba(135, 141, 159, 0.05); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0d878d9f,endColorstr=#0d878d9f); |
||||
border-radius: 5px; |
||||
} |
||||
.bi-theme-dark .scrollbar-layout-main { |
||||
background-color: rgba(208, 212, 218, 0.05); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0dd0d4da,endColorstr=#0dd0d4da); |
||||
} |
||||
.scrollbar-layout-main-vertical { |
||||
bottom: 0; |
||||
right: 0; |
||||
top: 0; |
||||
transition-property: background-color; |
||||
width: 10px; |
||||
} |
||||
.scrollbar-layout-main-vertical.public-scrollbar-main-active, |
||||
.scrollbar-layout-main-vertical:hover { |
||||
width: 10px; |
||||
} |
||||
.scrollbar-layout-main-horizontal { |
||||
bottom: 0; |
||||
height: 10px; |
||||
left: 0; |
||||
transition-property: background-color; |
||||
background-color: rgba(135, 141, 159, 0.05); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0d878d9f,endColorstr=#0d878d9f); |
||||
} |
||||
.bi-theme-dark .scrollbar-layout-main-horizontal { |
||||
background-color: rgba(208, 212, 218, 0.05); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#0dd0d4da,endColorstr=#0dd0d4da); |
||||
} |
||||
/* Touching the scroll-track directly makes the scroll-track bolder */ |
||||
.scrollbar-layout-main-horizontal.public-scrollbar-main-active, |
||||
.scrollbar-layout-main-horizontal:hover { |
||||
height: 10px; |
||||
} |
||||
.scrollbar-layout-face { |
||||
left: 0; |
||||
overflow: hidden; |
||||
position: absolute; |
||||
z-index: 1; |
||||
} |
||||
/** |
||||
* This selector renders the "nub" of the scrollface. The nub must |
||||
* be rendered as pseudo-element so that it won't receive any UI events then |
||||
* we can get the correct `event.offsetX` and `event.offsetY` from the |
||||
* scrollface element while dragging it. |
||||
*/ |
||||
.scrollbar-layout-face:after { |
||||
border-radius: 6px; |
||||
content: ''; |
||||
display: block; |
||||
position: absolute; |
||||
transition: background-color 250ms ease; |
||||
} |
||||
.scrollbar-layout-face-horizontal { |
||||
bottom: 0; |
||||
left: 0; |
||||
top: 0; |
||||
} |
||||
.scrollbar-layout-face-horizontal:after { |
||||
bottom: 2px; |
||||
left: 0; |
||||
top: 2px; |
||||
width: 100%; |
||||
} |
||||
.scrollbar-layout-face-vertical { |
||||
left: 0; |
||||
right: 0; |
||||
top: 0; |
||||
} |
||||
.scrollbar-layout-face-vertical:after { |
||||
height: 100%; |
||||
left: 2px; |
||||
right: 2px; |
||||
top: 0; |
||||
} |
||||
/** |
||||
* scrollbars. |
||||
*/ |
||||
/* Touching the scroll-track directly makes the scroll-track bolder */ |
||||
.public-scrollbar-face:after { |
||||
background-color: rgba(135, 141, 159, 0.3); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4d878d9f,endColorstr=#4d878d9f); |
||||
} |
||||
.bi-theme-dark .public-scrollbar-face:after { |
||||
background-color: rgba(208, 212, 218, 0.3); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4dd0d4da,endColorstr=#4dd0d4da); |
||||
} |
||||
.public-scrollbar-main:hover .public-scrollbar-face:after, |
||||
.public-scrollbar-main-active .public-scrollbar-face:after, |
||||
.public-scrollbar-face-active:after { |
||||
background-color: rgba(135, 141, 159, 0.7); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#b3878d9f,endColorstr=#b3878d9f); |
||||
} |
||||
.bi-theme-dark .public-scrollbar-main:hover .public-scrollbar-face:after, |
||||
.bi-theme-dark .public-scrollbar-main-active .public-scrollbar-face:after, |
||||
.bi-theme-dark .public-scrollbar-face-active:after { |
||||
background-color: rgba(208, 212, 218, 0.7); |
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#b3d0d4da,endColorstr=#b3d0d4da); |
||||
} |
||||
.horizontal-scrollbar { |
||||
bottom: 0; |
||||
position: absolute; |
||||
} |
||||
|
||||
.bi-table > .first-col { |
||||
border-left: none; |
||||
} |
||||
.bi-table > .first-row { |
||||
border-top: none; |
||||
} |
||||
.bi-table > div > div > table { |
||||
border-bottom: 1px solid #e8eaed; |
||||
border-right: 1px solid #e8eaed; |
||||
} |
||||
.bi-table > div.top-left > div > div > table { |
||||
border-bottom: 1px solid #e8eaed; |
||||
border-right: 1px solid #e8eaed; |
||||
} |
||||
.bi-table > div.top-right > div > div > table { |
||||
border-bottom: 1px solid #e8eaed; |
||||
border-right: 1px solid #e8eaed; |
||||
} |
||||
.bi-table > div.bottom-left > div > div > table { |
||||
border-bottom: 1px solid #e8eaed; |
||||
border-right: 1px solid #e8eaed; |
||||
} |
||||
.bi-table > div.bottom-right > div > div > table { |
||||
border-right: 1px solid #e8eaed; |
||||
border-bottom: 1px solid #e8eaed; |
||||
} |
||||
.bi-table > div > div > table, |
||||
.bi-table > div > div > div > table { |
||||
min-width: 100%; |
||||
clear: both; |
||||
vertical-align: middle; |
||||
border-spacing: 0; |
||||
border-collapse: separate; |
||||
} |
||||
.bi-table > div > div > table, |
||||
.bi-table > div > div > div > table, |
||||
.bi-table > div > div > table > * > * > th, |
||||
.bi-table > div > div > div > table > * > * > th, |
||||
.bi-table > div > div > table > * > * > td, |
||||
.bi-table > div > div > div > table > * > * > td { |
||||
vertical-align: middle; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
.bi-table > div > div > table > tbody > tr > td, |
||||
.bi-table > div > div > div > table > tbody > tr > td, |
||||
.bi-table > div > div > table > thead > tr > td, |
||||
.bi-table > div > div > div > table > thead > tr > td { |
||||
border-top: 1px solid #e8eaed; |
||||
border-left: 1px solid #e8eaed; |
||||
} |
||||
.bi-theme-dark .bi-table > div > div > table { |
||||
border-bottom: 1px solid #3a3c53; |
||||
border-right: 1px solid #3a3c53; |
||||
} |
||||
.bi-theme-dark .bi-table > div.top-left > div > div > table { |
||||
border-bottom: 1px solid #3a3c53; |
||||
border-right: 1px solid #3a3c53; |
||||
} |
||||
.bi-theme-dark .bi-table > div.top-right > div > div > table { |
||||
border-bottom: 1px solid #3a3c53; |
||||
border-right: 1px solid #3a3c53; |
||||
} |
||||
.bi-theme-dark .bi-table > div.bottom-left > div > div > table { |
||||
border-bottom: 1px solid #3a3c53; |
||||
border-right: 1px solid #3a3c53; |
||||
} |
||||
.bi-theme-dark .bi-table > div.bottom-right > div > div > table { |
||||
border-right: 1px solid #3a3c53; |
||||
border-bottom: 1px solid #3a3c53; |
||||
} |
||||
.bi-theme-dark .bi-table > div > div > table > tbody > tr > td, |
||||
.bi-theme-dark .bi-table > div > div > div > table > tbody > tr > td, |
||||
.bi-theme-dark .bi-table > div > div > table > thead > tr > td, |
||||
.bi-theme-dark .bi-table > div > div > div > table > thead > tr > td { |
||||
border-top: 1px solid #3a3c53; |
||||
border-left: 1px solid #3a3c53; |
||||
} |
||||
|
||||
.bi-resizable-table-cell .resizable-table-cell-resizer-container { |
||||
cursor: ew-resize; |
||||
z-index: 1; |
||||
} |
||||
.bi-resizable-table-cell .resizable-table-cell-resizer-container:hover .resizable-table-cell-resizer-knob, |
||||
.bi-resizable-table-cell .resizable-table-cell-resizer-container.dragging .resizable-table-cell-resizer-knob { |
||||
background-color: #3685f2; |
||||
} |
||||
.bi-resizable-table-cell .resizable-table-cell-resizer-container.suitable .resizable-table-cell-resizer-knob { |
||||
background-color: #13cd66; |
||||
} |
||||
|
||||
.bi-resizable-table .resizable-table-resizer { |
||||
cursor: ew-resize; |
||||
z-index: 1; |
||||
background-color: #3685f2; |
||||
} |
||||
.bi-resizable-table .resizable-table-resizer.suitable { |
||||
background-color: #13cd66; |
||||
} |
||||
.bi-resizable-table .resizable-table-region-resizer { |
||||
cursor: ew-resize; |
||||
z-index: 1; |
||||
} |
||||
.bi-resizable-table .resizable-table-region-resizer:hover .resizable-table-region-resizer-knob, |
||||
.bi-resizable-table .resizable-table-region-resizer.dragging .resizable-table-region-resizer-knob { |
||||
background-color: #3685f2; |
||||
} |
||||
|
@ -1,11 +0,0 @@
|
||||
|
||||
.bi-excel-table-header-cell { |
||||
font-weight: bold; |
||||
} |
||||
|
||||
.bi-excel-table > div.bottom-right > div > div > table { |
||||
border-right: 1px solid #e8eaed; |
||||
} |
||||
.bi-theme-dark .bi-excel-table > div.bottom-right > div > div > table { |
||||
border-right: 1px solid #3a3c53; |
||||
} |
@ -1,27 +0,0 @@
|
||||
.bi-preview-table-cell { |
||||
min-height: 25px; |
||||
min-width: 80px; |
||||
} |
||||
|
||||
.bi-preview-table-header-cell { |
||||
font-weight: bold; |
||||
min-height: 25px; |
||||
min-width: 80px; |
||||
} |
||||
|
||||
.bi-preview-table { |
||||
-webkit-user-select: text; |
||||
-khtml-user-select: text; |
||||
-moz-user-select: text; |
||||
-ms-user-select: text; |
||||
-o-user-select: text; |
||||
user-select: text; |
||||
} |
||||
.bi-preview-table > div > table > thead > tr.odd, |
||||
.bi-preview-table > div > div > div > table > thead > tr.odd { |
||||
background-color: #f7f8fa; |
||||
} |
||||
.bi-theme-dark .bi-preview-table > div > table > thead > tr.odd, |
||||
.bi-theme-dark .bi-preview-table > div > div > div > table > thead > tr.odd { |
||||
background-color: #191B2B; |
||||
} |
@ -1,23 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-collection-table-cell { |
||||
.box-sizing(border-box); |
||||
&.first-row { |
||||
border-top: 1px solid @border-color-line; |
||||
} |
||||
&.first-col { |
||||
border-left: 1px solid @border-color-line; |
||||
} |
||||
} |
||||
|
||||
//特殊样式 |
||||
.bi-theme-dark { |
||||
.bi-collection-table-cell { |
||||
&.first-row { |
||||
border-top: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
&.first-col { |
||||
border-left: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
} |
||||
} |
@ -1,9 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-quick-collection-table { |
||||
& > div > .bi-collection { |
||||
overflow: hidden !important; |
||||
overflow-x: hidden !important; |
||||
overflow-y: hidden !important; |
||||
} |
||||
} |
@ -1,21 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-grid-table-cell { |
||||
.box-sizing(border-box); |
||||
&.first-row { |
||||
border-top: 1px solid @border-color-line; |
||||
} |
||||
&.first-col { |
||||
border-left: 1px solid @border-color-line; |
||||
} |
||||
} |
||||
.bi-theme-dark{ |
||||
.bi-grid-table-cell{ |
||||
&.first-row { |
||||
border-top: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
&.first-col { |
||||
border-left: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
} |
||||
} |
@ -1,146 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.scrollbar-layout-main { |
||||
box-sizing: border-box; |
||||
outline: none; |
||||
overflow: hidden; |
||||
position: absolute; |
||||
transition-duration: 250ms; |
||||
transition-timing-function: ease; |
||||
user-select: none; |
||||
.background-color(@scroll-color, 5%); |
||||
border-radius: 5px; |
||||
} |
||||
|
||||
.bi-theme-dark { |
||||
.scrollbar-layout-main { |
||||
.background-color(@scroll-color-theme-dark, 5%); |
||||
} |
||||
} |
||||
|
||||
.scrollbar-layout-main-vertical { |
||||
bottom: 0; |
||||
right: 0; |
||||
top: 0; |
||||
transition-property: background-color; |
||||
width: 10px; |
||||
} |
||||
|
||||
.scrollbar-layout-main-vertical.public-scrollbar-main-active, |
||||
.scrollbar-layout-main-vertical:hover { |
||||
width: 10px; |
||||
} |
||||
|
||||
.scrollbar-layout-main-horizontal { |
||||
bottom: 0; |
||||
height: 10px; |
||||
left: 0; |
||||
transition-property: background-color; |
||||
.background-color(@scroll-color, 5%); |
||||
} |
||||
|
||||
.bi-theme-dark { |
||||
.scrollbar-layout-main-horizontal { |
||||
.background-color(@scroll-color-theme-dark, 5%); |
||||
} |
||||
} |
||||
|
||||
/* Touching the scroll-track directly makes the scroll-track bolder */ |
||||
.scrollbar-layout-main-horizontal.public-scrollbar-main-active, |
||||
.scrollbar-layout-main-horizontal:hover { |
||||
height: 10px; |
||||
} |
||||
|
||||
.scrollbar-layout-face { |
||||
left: 0; |
||||
overflow: hidden; |
||||
position: absolute; |
||||
z-index: 1; |
||||
} |
||||
|
||||
/** |
||||
* This selector renders the "nub" of the scrollface. The nub must |
||||
* be rendered as pseudo-element so that it won't receive any UI events then |
||||
* we can get the correct `event.offsetX` and `event.offsetY` from the |
||||
* scrollface element while dragging it. |
||||
*/ |
||||
.scrollbar-layout-face:after { |
||||
border-radius: 6px; |
||||
content: ''; |
||||
display: block; |
||||
position: absolute; |
||||
transition: background-color 250ms ease; |
||||
} |
||||
|
||||
.scrollbar-layout-face-horizontal { |
||||
bottom: 0; |
||||
left: 0; |
||||
top: 0; |
||||
} |
||||
|
||||
.scrollbar-layout-face-horizontal:after { |
||||
bottom: 2px; |
||||
left: 0; |
||||
top: 2px; |
||||
width: 100%; |
||||
} |
||||
|
||||
.scrollbar-layout-face-vertical { |
||||
left: 0; |
||||
right: 0; |
||||
top: 0; |
||||
} |
||||
|
||||
.scrollbar-layout-face-vertical:after { |
||||
height: 100%; |
||||
left: 2px; |
||||
right: 2px; |
||||
top: 0; |
||||
} |
||||
|
||||
/** |
||||
* scrollbars. |
||||
*/ |
||||
|
||||
/* Touching the scroll-track directly makes the scroll-track bolder */ |
||||
.public-scrollbar-main.public-scrollbar-main-active, |
||||
.public-scrollbar-main:hover { |
||||
//background-color: rgba(255, 255, 255, 0.8); |
||||
} |
||||
|
||||
.public-scrollbar-main-opaque, |
||||
.public-scrollbar-main-opaque.public-scrollbar-main-active, |
||||
.public-scrollbar-main-opaque:hover { |
||||
//background-color: #fff; |
||||
} |
||||
|
||||
.public-scrollbar-face:after { |
||||
.background-color(@scroll-color, 30%); |
||||
} |
||||
|
||||
.bi-theme-dark { |
||||
.public-scrollbar-face:after { |
||||
.background-color(@scroll-color-theme-dark, 30%); |
||||
} |
||||
} |
||||
|
||||
.public-scrollbar-main:hover .public-scrollbar-face:after, |
||||
.public-scrollbar-main-active .public-scrollbar-face:after, |
||||
.public-scrollbar-face-active:after { |
||||
.background-color(@scroll-color, 70%); |
||||
} |
||||
|
||||
.bi-theme-dark { |
||||
.public-scrollbar-main:hover .public-scrollbar-face:after, |
||||
.public-scrollbar-main-active .public-scrollbar-face:after, |
||||
.public-scrollbar-face-active:after { |
||||
.background-color(@scroll-color-theme-dark, 70%); |
||||
} |
||||
} |
||||
|
||||
//horizontalScrollbar |
||||
.horizontal-scrollbar { |
||||
bottom: 0; |
||||
position: absolute; |
||||
} |
||||
|
@ -1,111 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-table { |
||||
> .center-element { |
||||
//border-top: 1px solid @color-bi-border-normal; |
||||
//border-left: 1px solid @color-bi-border-normal; |
||||
} |
||||
|
||||
> .first-col { |
||||
border-left: none; |
||||
} |
||||
> .first-row { |
||||
border-top: none; |
||||
} |
||||
|
||||
& > div > div > table { |
||||
border-bottom: 1px solid @border-color-line; |
||||
border-right: 1px solid @border-color-line; |
||||
} |
||||
& > div.top-left > div > div > table { |
||||
border-bottom: 1px solid @border-color-line; |
||||
border-right: 1px solid @border-color-line; |
||||
} |
||||
& > div.top-right > div > div > table { |
||||
border-bottom: 1px solid @border-color-line; |
||||
border-right: 1px solid @border-color-line; |
||||
} |
||||
& > div.bottom-left > div > div > table { |
||||
border-bottom: 1px solid @border-color-line; |
||||
border-right: 1px solid @border-color-line; |
||||
} |
||||
& > div.bottom-right > div > div > table { |
||||
border-right: 1px solid @border-color-line; |
||||
border-bottom: 1px solid @border-color-line; |
||||
} |
||||
|
||||
& > div > div > table, & > div > div > div > table { |
||||
&, & > * > * > th, & > * > * > td { |
||||
vertical-align: middle; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
min-width: 100%; |
||||
clear: both; |
||||
vertical-align: middle; |
||||
border-spacing: 0; |
||||
border-collapse: separate; |
||||
|
||||
& > tbody > tr > td, & > thead > tr > td { |
||||
border-top: 1px solid @border-color-line; |
||||
border-left: 1px solid @color-bi-border-line; |
||||
} |
||||
& > tbody > tr.odd { |
||||
//background-color: #f9f9f9; |
||||
//&:hover { |
||||
// background-color: whitesmoke; |
||||
//} |
||||
} |
||||
& > tbody > tr.even { |
||||
//background-color: white; |
||||
//&:hover { |
||||
// background-color: whitesmoke; |
||||
//} |
||||
} |
||||
|
||||
& > thead > tr.odd { |
||||
//background-color: #f9f9f9; |
||||
//&:hover { |
||||
// background-color: whitesmoke; |
||||
//} |
||||
} |
||||
& > thead > tr.even { |
||||
//background-color: white; |
||||
//&:hover { |
||||
// background-color: whitesmoke; |
||||
//} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.bi-theme-dark { |
||||
.bi-table { |
||||
& > div > div > table { |
||||
border-bottom: 1px solid @border-color-line-theme-dark; |
||||
border-right: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
& > div.top-left > div > div > table { |
||||
border-bottom: 1px solid @border-color-line-theme-dark; |
||||
border-right: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
& > div.top-right > div > div > table { |
||||
border-bottom: 1px solid @border-color-line-theme-dark; |
||||
border-right: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
& > div.bottom-left > div > div > table { |
||||
border-bottom: 1px solid @border-color-line-theme-dark; |
||||
border-right: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
& > div.bottom-right > div > div > table { |
||||
border-right: 1px solid @border-color-line-theme-dark; |
||||
border-bottom: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
|
||||
& > div > div > table, & > div > div > div > table { |
||||
& > tbody > tr > td, & > thead > tr > td { |
||||
border-top: 1px solid @border-color-line-theme-dark; |
||||
border-left: 1px solid @border-color-line-theme-dark; |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,18 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-resizable-table-cell { |
||||
& .resizable-table-cell-resizer-container { |
||||
cursor: ew-resize; |
||||
z-index: 1; |
||||
&:hover, &.dragging { |
||||
& .resizable-table-cell-resizer-knob { |
||||
background-color: @color-bi-background-highlight; |
||||
} |
||||
} |
||||
&.suitable{ |
||||
& .resizable-table-cell-resizer-knob { |
||||
background-color: @color-bi-background-success; |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,21 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-resizable-table { |
||||
& .resizable-table-resizer { |
||||
cursor: ew-resize; |
||||
z-index: 1; |
||||
background-color: @color-bi-background-highlight; |
||||
&.suitable { |
||||
background-color: @color-bi-background-success; |
||||
} |
||||
} |
||||
& .resizable-table-region-resizer { |
||||
cursor: ew-resize; |
||||
z-index: 1; |
||||
&:hover, &.dragging { |
||||
& .resizable-table-region-resizer-knob { |
||||
background-color: @color-bi-background-highlight; |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,5 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-table-tree{ |
||||
|
||||
} |
@ -1,4 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-excel-table-cell { |
||||
} |
@ -1,5 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-excel-table-header-cell { |
||||
font-weight: bold; |
||||
} |
@ -1,15 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-excel-table { |
||||
& > div.bottom-right > div > div > table { |
||||
border-right: 1px solid @color-bi-border-line; |
||||
} |
||||
} |
||||
|
||||
.bi-theme-dark { |
||||
.bi-excel-table { |
||||
& > div.bottom-right > div > div > table { |
||||
border-right: 1px solid @color-bi-border-line-theme-dark; |
||||
} |
||||
} |
||||
} |
@ -1,6 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-preview-table-cell { |
||||
min-height: 25px; |
||||
min-width: 80px; |
||||
} |
@ -1,7 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-preview-table-header-cell { |
||||
font-weight: bold; |
||||
min-height: 25px; |
||||
min-width: 80px; |
||||
} |
@ -1,20 +0,0 @@
|
||||
@import "../../index"; |
||||
|
||||
.bi-preview-table { |
||||
.user-select-enable(); |
||||
& > div > table, & > div > div > div > table { |
||||
& > thead > tr.odd { |
||||
background-color: @color-bi-background-normal; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.bi-theme-dark { |
||||
.bi-preview-table { |
||||
& > div > table, & > div > div > div > table { |
||||
& > thead > tr.odd { |
||||
background-color: @color-bi-background-normal-theme-dark; |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,35 +0,0 @@
|
||||
/** |
||||
* 预览表列 |
||||
* |
||||
* Created by GUY on 2015/12/25. |
||||
* @class BI.PreviewTableCell |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.PreviewTableCell = BI.inherit(BI.Widget, { |
||||
|
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.PreviewTableCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-preview-table-cell", |
||||
text: "" |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.PreviewTableCell.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
|
||||
BI.createWidget({ |
||||
type: "bi.label", |
||||
element: this, |
||||
textAlign: o.textAlign || "left", |
||||
whiteSpace: o.whiteSpace || "normal", |
||||
height: this.options.height, |
||||
text: this.options.text, |
||||
value: this.options.value, |
||||
lgap: o.lgap, |
||||
rgap: o.rgap, |
||||
hgap: o.hgap || 5 |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.preview_table_cell", BI.PreviewTableCell); |
@ -1,35 +0,0 @@
|
||||
/** |
||||
* 预览表 |
||||
* |
||||
* Created by GUY on 2015/12/25. |
||||
* @class BI.PreviewTableHeaderCell |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.PreviewTableHeaderCell = BI.inherit(BI.Widget, { |
||||
|
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.PreviewTableHeaderCell.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-preview-table-header-cell", |
||||
text: "" |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.PreviewTableHeaderCell.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
|
||||
BI.createWidget({ |
||||
type: "bi.label", |
||||
element: this, |
||||
textAlign: o.textAlign || "left", |
||||
whiteSpace: o.whiteSpace || "normal", |
||||
height: this.options.height, |
||||
text: this.options.text, |
||||
value: this.options.value, |
||||
lgap: o.lgap, |
||||
rgap: o.rgap, |
||||
hgap: o.hgap || 5 |
||||
}); |
||||
} |
||||
}); |
||||
BI.shortcut("bi.preview_table_header_cell", BI.PreviewTableHeaderCell); |
@ -1,223 +0,0 @@
|
||||
/** |
||||
* 预览表 |
||||
* |
||||
* Created by GUY on 2015/12/25. |
||||
* @class BI.PreviewTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.PreviewTable = BI.inherit(BI.Widget, { |
||||
|
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.PreviewTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-preview-table", |
||||
isNeedFreeze: false, |
||||
freezeCols: [], |
||||
rowSize: null, |
||||
columnSize: [], |
||||
headerRowSize: 30, |
||||
header: [], |
||||
items: [] |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.PreviewTable.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
|
||||
this.table = BI.createWidget({ |
||||
type: "bi.table_view", |
||||
element: this, |
||||
isNeedResize: false, |
||||
|
||||
isResizeAdapt: false, |
||||
|
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: o.freezeCols, |
||||
|
||||
rowSize: o.rowSize, |
||||
columnSize: o.columnSize, |
||||
headerRowSize: o.headerRowSize, |
||||
|
||||
header: BI.map(o.header, function (i, items) { |
||||
return BI.map(items, function (j, item) { |
||||
return BI.extend({ |
||||
type: "bi.preview_table_header_cell" |
||||
}, item); |
||||
}); |
||||
}), |
||||
items: BI.map(o.items, function (i, items) { |
||||
return BI.map(items, function (j, item) { |
||||
return BI.extend({ |
||||
type: "bi.preview_table_cell" |
||||
}, item); |
||||
}); |
||||
}) |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_INIT, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_INIT, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_RESIZE, function () { |
||||
self._adjustColumns(); |
||||
}); |
||||
this._adjustColumns(); |
||||
}, |
||||
|
||||
// 是否有自适应调节的列,即列宽为""
|
||||
_hasAdaptCol: function (columnSize) { |
||||
return BI.any(columnSize, function (i, size) { |
||||
return size === ""; |
||||
}); |
||||
}, |
||||
|
||||
_isPercentage: function (columnSize) { |
||||
return columnSize[0] <= 1; |
||||
}, |
||||
|
||||
_adjustColumns: function () { |
||||
var self = this, o = this.options; |
||||
if (o.isNeedFreeze === true) { |
||||
// 如果存在百分比的情况
|
||||
if (this._isPercentage(o.columnSize)) { |
||||
if (this._hasAdaptCol(o.columnSize)) { |
||||
var findCols = [], remain = 0; |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (size === "") { |
||||
findCols.push(i); |
||||
} else { |
||||
remain += size; |
||||
} |
||||
}); |
||||
remain = 1 - remain; |
||||
var average = remain / findCols.length; |
||||
BI.each(findCols, function (i, col) { |
||||
o.columnSize[col] = average; |
||||
}); |
||||
} |
||||
var isRight = BI.first(o.freezeCols) !== 0; |
||||
var freezeSize = [], notFreezeSize = []; |
||||
BI.each(o.columnSize, function (i, size) { |
||||
if (o.freezeCols.contains(i)) { |
||||
freezeSize.push(size); |
||||
} else { |
||||
notFreezeSize.push(size); |
||||
} |
||||
}); |
||||
var sumFreezeSize = BI.sum(freezeSize), sumNotFreezeSize = BI.sum(notFreezeSize); |
||||
BI.each(freezeSize, function (i, size) { |
||||
freezeSize[i] = size / sumFreezeSize; |
||||
}); |
||||
BI.each(notFreezeSize, function (i, size) { |
||||
notFreezeSize[i] = size / sumNotFreezeSize; |
||||
}); |
||||
this.table.setRegionColumnSize(isRight ? ["fill", sumFreezeSize] : [sumFreezeSize, "fill"]); |
||||
this.table.setColumnSize(isRight ? (notFreezeSize.concat(freezeSize)) : (freezeSize.concat(notFreezeSize))); |
||||
} |
||||
} else { |
||||
// 如果存在自适应宽度的列或者是百分比计算的列,需要将整个表宽设为100%
|
||||
if (this._hasAdaptCol(o.columnSize) || this._isPercentage(o.columnSize)) { |
||||
this.table.setRegionColumnSize(["100%"]); |
||||
} |
||||
} |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
return this.table.setColumnSize(columnSize); |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.table.getColumnSize(); |
||||
}, |
||||
|
||||
getCalculateColumnSize: function () { |
||||
return this.table.getCalculateColumnSize(); |
||||
}, |
||||
|
||||
setHeaderColumnSize: function (columnSize) { |
||||
return this.table.setHeaderColumnSize(columnSize); |
||||
}, |
||||
|
||||
setRegionColumnSize: function (columnSize) { |
||||
return this.table.setRegionColumnSize(columnSize); |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
getCalculateRegionColumnSize: function () { |
||||
return this.table.getCalculateRegionColumnSize(); |
||||
}, |
||||
|
||||
getCalculateRegionRowSize: function () { |
||||
return this.table.getCalculateRegionRowSize(); |
||||
}, |
||||
|
||||
getClientRegionColumnSize: function () { |
||||
return this.table.getClientRegionColumnSize(); |
||||
}, |
||||
|
||||
getScrollRegionColumnSize: function () { |
||||
return this.table.getScrollRegionColumnSize(); |
||||
}, |
||||
|
||||
getScrollRegionRowSize: function () { |
||||
return this.table.getScrollRegionRowSize(); |
||||
}, |
||||
|
||||
hasVerticalScroll: function () { |
||||
return this.table.hasVerticalScroll(); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
return this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
return this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
return this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
getColumns: function () { |
||||
return this.table.getColumns(); |
||||
}, |
||||
|
||||
populate: function (items, header) { |
||||
if (items) { |
||||
items = BI.map(items, function (i, items) { |
||||
return BI.map(items, function (j, item) { |
||||
return BI.extend({ |
||||
type: "bi.preview_table_cell" |
||||
}, item); |
||||
}); |
||||
}); |
||||
} |
||||
if (header) { |
||||
header = BI.map(header, function (i, items) { |
||||
return BI.map(items, function (j, item) { |
||||
return BI.extend({ |
||||
type: "bi.preview_table_header_cell" |
||||
}, item); |
||||
}); |
||||
}); |
||||
} |
||||
this.table.populate(items, header); |
||||
this._adjustColumns(); |
||||
} |
||||
}); |
||||
BI.PreviewTable.EVENT_CHANGE = "PreviewTable.EVENT_CHANGE"; |
||||
BI.shortcut("bi.preview_table", BI.PreviewTable); |
@ -1,366 +0,0 @@
|
||||
/** |
||||
* 自适应宽度的表格 |
||||
* |
||||
* Created by GUY on 2016/2/3. |
||||
* @class BI.ResponisveTable |
||||
* @extends BI.Widget |
||||
*/ |
||||
BI.ResponisveTable = BI.inherit(BI.Widget, { |
||||
|
||||
_const: { |
||||
perColumnSize: 100 |
||||
}, |
||||
|
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.ResponisveTable.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-responsive-table", |
||||
isNeedFreeze: false, // 是否需要冻结单元格
|
||||
freezeCols: [], // 冻结的列号,从0开始,isNeedFreeze为true时生效
|
||||
logic: { // 冻结的页面布局逻辑
|
||||
dynamic: false |
||||
}, |
||||
|
||||
isNeedMerge: false, // 是否需要合并单元格
|
||||
mergeCols: [], // 合并的单元格列号
|
||||
mergeRule: function (row1, row2) { // 合并规则, 默认相等时合并
|
||||
return BI.isEqual(row1, row2); |
||||
}, |
||||
|
||||
columnSize: [], |
||||
headerRowSize: 25, |
||||
footerRowSize: 25, |
||||
rowSize: 25, |
||||
|
||||
regionColumnSize: false, |
||||
|
||||
header: [], |
||||
footer: false, |
||||
items: [], // 二维数组
|
||||
|
||||
// 交叉表头
|
||||
crossHeader: [], |
||||
crossItems: [] |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.ResponisveTable.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
|
||||
this.table = BI.createWidget({ |
||||
type: "bi.table_view", |
||||
element: this, |
||||
logic: o.logic, |
||||
|
||||
isNeedFreeze: o.isNeedFreeze, |
||||
freezeCols: o.freezeCols, |
||||
|
||||
isNeedMerge: o.isNeedMerge, |
||||
mergeCols: o.mergeCols, |
||||
mergeRule: o.mergeRule, |
||||
|
||||
columnSize: o.columnSize, |
||||
headerRowSize: o.headerRowSize, |
||||
footerRowSize: o.footerRowSize, |
||||
rowSize: o.rowSize, |
||||
|
||||
regionColumnSize: o.regionColumnSize, |
||||
|
||||
header: o.header, |
||||
footer: o.footer, |
||||
items: o.items, |
||||
// 交叉表头
|
||||
crossHeader: o.crossHeader, |
||||
crossItems: o.crossItems |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_INIT, function () { |
||||
self._initRegionSize(); |
||||
self.table.resize(); |
||||
self._resizeHeader(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_INIT, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_RESIZE, function () { |
||||
self._resizeRegion(); |
||||
self._resizeHeader(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_BEFORE_REGION_RESIZE, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_BEFORE_REGION_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_REGION_RESIZE, function () { |
||||
// important:在冻结并自适应列宽的情况下要随时变更表头宽度
|
||||
if (o.isNeedResize === true && self._isAdaptiveColumn()) { |
||||
self._resizeHeader(); |
||||
} |
||||
self.fireEvent(BI.Table.EVENT_TABLE_REGION_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () { |
||||
self._resizeHeader(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments); |
||||
}); |
||||
|
||||
this.table.on(BI.Table.EVENT_TABLE_BEFORE_COLUMN_RESIZE, function () { |
||||
self._resizeBody(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_BEFORE_COLUMN_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_COLUMN_RESIZE, function () { |
||||
self.fireEvent(BI.Table.EVENT_TABLE_COLUMN_RESIZE, arguments); |
||||
}); |
||||
this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () { |
||||
self._resizeRegion(); |
||||
self._resizeHeader(); |
||||
self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments); |
||||
}); |
||||
}, |
||||
|
||||
_initRegionSize: function () { |
||||
var o = this.options; |
||||
if (o.isNeedFreeze === true) { |
||||
var regionColumnSize = this.table.getRegionColumnSize(); |
||||
var maxWidth = this.table.element.width(); |
||||
if (!regionColumnSize[0] || (regionColumnSize[0] === "fill") || regionColumnSize[0] > maxWidth || regionColumnSize[1] > maxWidth) { |
||||
var freezeCols = o.freezeCols; |
||||
if (freezeCols.length === 0) { |
||||
this.table.setRegionColumnSize([0, "fill"]); |
||||
} else if (freezeCols.length > 0 && freezeCols.length < o.columnSize.length) { |
||||
var size = maxWidth / 3; |
||||
if (freezeCols.length > o.columnSize.length / 2) { |
||||
size = maxWidth * 2 / 3; |
||||
} |
||||
this.table.setRegionColumnSize([size, "fill"]); |
||||
} else { |
||||
this.table.setRegionColumnSize(["fill", 0]); |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
|
||||
_getBlockSize: function () { |
||||
var o = this.options; |
||||
var columnSize = this.table.getCalculateColumnSize(); |
||||
if (o.isNeedFreeze === true) { |
||||
var columnSizeLeft = [], columnSizeRight = []; |
||||
BI.each(columnSize, function (i, size) { |
||||
if (o.freezeCols.contains(i)) { |
||||
columnSizeLeft.push(size); |
||||
} else { |
||||
columnSizeRight.push(size); |
||||
} |
||||
}); |
||||
// 因为有边框,所以加上数组长度的参数调整
|
||||
var sumLeft = BI.sum(columnSizeLeft) + columnSizeLeft.length, |
||||
sumRight = BI.sum(columnSizeRight) + columnSizeRight.length; |
||||
return { |
||||
sumLeft: sumLeft, |
||||
sumRight: sumRight, |
||||
left: columnSizeLeft, |
||||
right: columnSizeRight |
||||
}; |
||||
} |
||||
return { |
||||
size: columnSize, |
||||
sum: BI.sum(columnSize) + columnSize.length |
||||
}; |
||||
}, |
||||
|
||||
_isAdaptiveColumn: function (columnSize) { |
||||
return !(BI.last(columnSize || this.table.getColumnSize()) > 1.05); |
||||
}, |
||||
|
||||
_resizeHeader: function () { |
||||
var self = this, o = this.options; |
||||
if (o.isNeedFreeze === true) { |
||||
// 若是当前处于自适应调节阶段
|
||||
if (this._isAdaptiveColumn()) { |
||||
var columnSize = this.table.getCalculateColumnSize(); |
||||
this.table.setHeaderColumnSize(columnSize); |
||||
} else { |
||||
var regionColumnSize = this.table.getClientRegionColumnSize(); |
||||
var block = this._getBlockSize(); |
||||
var sumLeft = block.sumLeft, sumRight = block.sumRight; |
||||
var columnSizeLeft = block.left, columnSizeRight = block.right; |
||||
columnSizeLeft[columnSizeLeft.length - 1] += regionColumnSize[0] - sumLeft; |
||||
columnSizeRight[columnSizeRight.length - 1] += regionColumnSize[1] - sumRight; |
||||
|
||||
var newLeft = BI.clone(columnSizeLeft), newRight = BI.clone(columnSizeRight); |
||||
newLeft[newLeft.length - 1] = ""; |
||||
newRight[newRight.length - 1] = ""; |
||||
this.table.setColumnSize(newLeft.concat(newRight)); |
||||
|
||||
block = self._getBlockSize(); |
||||
if (columnSizeLeft[columnSizeLeft.length - 1] < block.left[block.left.length - 1]) { |
||||
columnSizeLeft[columnSizeLeft.length - 1] = block.left[block.left.length - 1]; |
||||
} |
||||
if (columnSizeRight[columnSizeRight.length - 1] < block.right[block.right.length - 1]) { |
||||
columnSizeRight[columnSizeRight.length - 1] = block.right[block.right.length - 1]; |
||||
} |
||||
|
||||
self.table.setColumnSize(columnSizeLeft.concat(columnSizeRight)); |
||||
} |
||||
} else { |
||||
if (!this._isAdaptiveColumn()) { |
||||
var regionColumnSize = this.table.getClientRegionColumnSize(); |
||||
var block = this._getBlockSize(); |
||||
var sum = block.sum; |
||||
var size = block.size; |
||||
|
||||
size[size.length - 1] += regionColumnSize[0] - sum; |
||||
|
||||
var newSize = BI.clone(size); |
||||
newSize[newSize.length - 1] = ""; |
||||
this.table.setColumnSize(newSize); |
||||
block = this._getBlockSize(); |
||||
|
||||
if (size[size.length - 1] < block.size[block.size.length - 1]) { |
||||
size[size.length - 1] = block.size[block.size.length - 1]; |
||||
} |
||||
this.table.setColumnSize(size); |
||||
} |
||||
} |
||||
}, |
||||
|
||||
_resizeBody: function () { |
||||
if (this._isAdaptiveColumn()) { |
||||
var columnSize = this.table.getCalculateColumnSize(); |
||||
this.setColumnSize(columnSize); |
||||
} |
||||
}, |
||||
|
||||
_adjustRegion: function () { |
||||
var o = this.options; |
||||
var regionColumnSize = this.table.getCalculateRegionColumnSize(); |
||||
if (o.isNeedFreeze === true && o.freezeCols.length > 0 && o.freezeCols.length < o.columnSize.length) { |
||||
var block = this._getBlockSize(); |
||||
var sumLeft = block.sumLeft, sumRight = block.sumRight; |
||||
if (sumLeft < regionColumnSize[0] || regionColumnSize[0] >= (sumLeft + sumRight)) { |
||||
this.table.setRegionColumnSize([sumLeft, "fill"]); |
||||
} |
||||
this._resizeRegion(); |
||||
} |
||||
}, |
||||
|
||||
_resizeRegion: function () { |
||||
var o = this.options; |
||||
var regionColumnSize = this.table.getCalculateRegionColumnSize(); |
||||
if (o.isNeedFreeze === true && o.freezeCols.length > 0 && o.freezeCols.length < o.columnSize.length) { |
||||
var maxWidth = this.table.element.width(); |
||||
if (regionColumnSize[0] < 15 || regionColumnSize[1] < 15) { |
||||
var freezeCols = o.freezeCols; |
||||
var size = maxWidth / 3; |
||||
if (freezeCols.length > o.columnSize.length / 2) { |
||||
size = maxWidth * 2 / 3; |
||||
} |
||||
this.table.setRegionColumnSize([size, "fill"]); |
||||
} |
||||
} |
||||
}, |
||||
|
||||
|
||||
resize: function () { |
||||
this.table.resize(); |
||||
this._resizeRegion(); |
||||
this._resizeHeader(); |
||||
}, |
||||
|
||||
setColumnSize: function (columnSize) { |
||||
this.table.setColumnSize(columnSize); |
||||
this._adjustRegion(); |
||||
this._resizeHeader(); |
||||
}, |
||||
|
||||
getColumnSize: function () { |
||||
return this.table.getColumnSize(); |
||||
}, |
||||
|
||||
getCalculateColumnSize: function () { |
||||
return this.table.getCalculateColumnSize(); |
||||
}, |
||||
|
||||
setHeaderColumnSize: function (columnSize) { |
||||
this.table.setHeaderColumnSize(columnSize); |
||||
this._adjustRegion(); |
||||
this._resizeHeader(); |
||||
}, |
||||
|
||||
setRegionColumnSize: function (columnSize) { |
||||
this.table.setRegionColumnSize(columnSize); |
||||
this._resizeHeader(); |
||||
}, |
||||
|
||||
getRegionColumnSize: function () { |
||||
return this.table.getRegionColumnSize(); |
||||
}, |
||||
|
||||
getCalculateRegionColumnSize: function () { |
||||
return this.table.getCalculateRegionColumnSize(); |
||||
}, |
||||
|
||||
getCalculateRegionRowSize: function () { |
||||
return this.table.getCalculateRegionRowSize(); |
||||
}, |
||||
|
||||
getClientRegionColumnSize: function () { |
||||
return this.table.getClientRegionColumnSize(); |
||||
}, |
||||
|
||||
getScrollRegionColumnSize: function () { |
||||
return this.table.getScrollRegionColumnSize(); |
||||
}, |
||||
|
||||
getScrollRegionRowSize: function () { |
||||
return this.table.getScrollRegionRowSize(); |
||||
}, |
||||
|
||||
hasVerticalScroll: function () { |
||||
return this.table.hasVerticalScroll(); |
||||
}, |
||||
|
||||
setVerticalScroll: function (scrollTop) { |
||||
this.table.setVerticalScroll(scrollTop); |
||||
}, |
||||
|
||||
setLeftHorizontalScroll: function (scrollLeft) { |
||||
this.table.setLeftHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
setRightHorizontalScroll: function (scrollLeft) { |
||||
this.table.setRightHorizontalScroll(scrollLeft); |
||||
}, |
||||
|
||||
getVerticalScroll: function () { |
||||
return this.table.getVerticalScroll(); |
||||
}, |
||||
|
||||
getLeftHorizontalScroll: function () { |
||||
return this.table.getLeftHorizontalScroll(); |
||||
}, |
||||
|
||||
getRightHorizontalScroll: function () { |
||||
return this.table.getRightHorizontalScroll(); |
||||
}, |
||||
|
||||
getColumns: function () { |
||||
return this.table.getColumns(); |
||||
}, |
||||
|
||||
attr: function () { |
||||
BI.ResponisveTable.superclass.attr.apply(this, arguments); |
||||
this.table.attr.apply(this.table, arguments); |
||||
}, |
||||
|
||||
populate: function (items) { |
||||
var self = this, o = this.options; |
||||
this.table.populate.apply(this.table, arguments); |
||||
if (o.isNeedFreeze === true) { |
||||
BI.nextTick(function () { |
||||
self._initRegionSize(); |
||||
self.table.resize(); |
||||
self._resizeHeader(); |
||||
}); |
||||
} |
||||
} |
||||
}); |
||||
BI.shortcut("bi.responsive_table", BI.ResponisveTable); |
Loading…
Reference in new issue