summaryrefslogtreecommitdiff
path: root/static/js/src/spacefill.js
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 }
}