forked from fanruan/fineui
85 lines
2.3 KiB
85 lines
2.3 KiB
import { map, isWidget } from "../2.base"; |
|
import { Direction } from "../constant"; |
|
import { Logic } from "./logic"; |
|
import { VerticalLayoutLogic, HorizontalLayoutLogic, TableLayoutLogic, HorizontalFillLayoutLogic } from "./logic.layout"; |
|
|
|
export const LogicFactory = { |
|
Type: { |
|
Vertical: "vertical", |
|
Horizontal: "horizontal", |
|
Table: "table", |
|
HorizontalFill: "horizontal_fill", |
|
}, |
|
createLogic (key, options) { |
|
let LogicCls; |
|
switch (key) { |
|
case LogicFactory.Type.Vertical: |
|
LogicCls = VerticalLayoutLogic; |
|
break; |
|
case LogicFactory.Type.Horizontal: |
|
LogicCls = HorizontalLayoutLogic; |
|
break; |
|
case LogicFactory.Type.Table: |
|
LogicCls = TableLayoutLogic; |
|
break; |
|
case LogicFactory.Type.HorizontalFill: |
|
LogicCls = HorizontalFillLayoutLogic; |
|
break; |
|
default: |
|
LogicCls = Logic; |
|
break; |
|
} |
|
|
|
return new LogicCls(options).createLogic(); |
|
}, |
|
|
|
createLogicTypeByDirection (direction) { |
|
switch (direction) { |
|
case Direction.Top: |
|
case Direction.Bottom: |
|
case Direction.Custom: |
|
return LogicFactory.Type.Vertical; |
|
case Direction.Left: |
|
case Direction.Right: |
|
return LogicFactory.Type.Horizontal; |
|
default: |
|
} |
|
}, |
|
|
|
createLogicItemsByDirection (direction) { |
|
let items = Array.prototype.slice.call(arguments, 1); |
|
items = map(items, (i, item) => { |
|
if (isWidget(item)) { |
|
return { |
|
el: item, |
|
width: item.options.width, |
|
height: item.options.height, |
|
}; |
|
} |
|
|
|
return item; |
|
}); |
|
switch (direction) { |
|
case Direction.Bottom: |
|
items.reverse(); |
|
break; |
|
case Direction.Right: |
|
items.reverse(); |
|
break; |
|
case Direction.Custom: |
|
items = items.slice(1); |
|
break; |
|
default: |
|
} |
|
|
|
return items; |
|
}, |
|
}; |
|
|
|
export { |
|
Logic, |
|
VerticalLayoutLogic, |
|
HorizontalLayoutLogic, |
|
TableLayoutLogic, |
|
HorizontalFillLayoutLogic |
|
};
|
|
|