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 } }