blob: adf16bf919ebd2db10a23f1afd5f7af326dea3ba (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
var ColumnFill = {
"init": function(){
var cfg = SpaceFill.config
var numColumns = ColumnFill.calcColumns()
ColumnFill.columns = []
for (var i = 0; i < numColumns; i++) {
ColumnFill.columns.push({"height": 0})
}
cfg.marginWidth = cfg.marginHeight = cfg.minMargin
if (cfg.spacing == "center") {
cfg.columnSpacingAmt = (cfg.width - (numColumns * (cfg.columnWidth + cfg.marginWidth) + cfg.marginWidth)) / 2
} else if (cfg.spacing == "justify") {
cfg.marginWidth = (cfg.width - (numColumns * cfg.columnWidth)) / (numColumns + 1)
}
},
"add": function(obj){
var cfg = SpaceFill.config
var colIndex = ColumnFill.shortestColumn()
var col = ColumnFill.columns[colIndex]
if (cfg.spacing == "center") {
var colLeft = colIndex * (cfg.marginWidth + cfg.columnWidth) + cfg.columnSpacingAmt
var imgLeft = Math.floor((cfg.marginWidth / 2) + (cfg.columnWidth / 2) - (parseInt(obj.style.width) / 2)) + colLeft + "px"
} else if (cfg.spacing == "justify") {
var colLeft = (colIndex * (cfg.marginWidth + cfg.columnWidth))
var imgLeft = Math.floor((cfg.marginWidth / 2) + (cfg.columnWidth / 2) - (parseInt(obj.style.width) / 2)) + colLeft + "px"
}
obj.style.position = 'absolute'
obj.style.top = col.height + cfg.marginHeight + "px"
obj.style.left = imgLeft
col.height += cfg.marginHeight + parseInt(obj.style.height)
$(cfg.container).append(obj)
},
"calcColumns": function(){
var cfg = SpaceFill.config
var numColumns = 0
var width = cfg.width - cfg.minMargin
var columnSub = cfg.columnWidth + cfg.minMargin
while (width > columnSub) {
width -= columnSub
numColumns++
}
return numColumns
},
"shortestColumn": function(){
var min = Infinity
var mindex = 0
for(var i = 0; i< ColumnFill.columns.length; i++){
var col = ColumnFill.columns[i]
if ( min > col.height) {
min = col.height
mindex = i
}
}
return mindex
},
"isSpaceFilled": function(){
var config = SpaceFill.config
var colIndex = ColumnFill.shortestColumn()
var col = ColumnFill.columns[colIndex]
if (col.height > 4 * config.height) return true;
else return false;
}
}
var SpaceFill = {
"init": function(config){
config.type = "columns"
SpaceFill.config = config
SpaceFill.types[config.type].init()
SpaceFill.add = SpaceFill.types[config.type].add
},
"types": { "columns": ColumnFill }
}
|