Path: blob/master/webroot/rsrc/js/phuix/PHUIXFormationView.js
12241 views
/**1* @provides phuix-formation-view2* @requires javelin-install3* javelin-dom4* phuix-formation-column-view5* phuix-formation-flank-view6*/78JX.install('PHUIXFormationView', {910construct: function(node) {11this._node = node;12this._columns = [];1314var config = JX.Stratcom.getData(this._node);1516var items = config.items;17var count = items.length;18for (var ii = 0; ii < count; ii++) {19var item = items[ii];20var item_node = JX.$(item.itemID);2122var column = new JX.PHUIXFormationColumnView(item_node)23.setIsRightAligned(item.isRightAligned)24.setWidth(item.width)25.setIsVisible(item.isVisible);2627if (item.expanderID) {28column.setExpanderNode(JX.$(item.expanderID));29}3031if (item.resizer) {32column33.setWidthSettingKey(item.resizer.widthKey)34.setVisibleSettingKey(item.resizer.visibleKey)35.setMinimumWidth(item.resizer.minimumWidth)36.setMaximumWidth(item.resizer.maximumWidth)37.setResizerItem(JX.$(item.resizer.itemID))38.setResizerControl(JX.$(item.resizer.controlID));39}4041var spec = item.column;42if (spec) {43if (spec.type === 'flank') {44var flank_node = JX.$(spec.nodeID);4546var head = JX.$(spec.headID);47var body = JX.$(spec.bodyID);48var tail = JX.$(spec.tailID);4950var flank = new JX.PHUIXFormationFlankView(51flank_node,52head,53body,54tail);5556flank.setIsFixed(spec.isFixed);5758column.setFlank(flank);59}60}6162this.addColumn(column);63}64},6566members: {67_node: null,68_columns: null,6970addColumn: function(column) {71this._columns.push(column);72},7374getColumn: function(idx) {75return this._columns[idx];76},7778start: function() {79JX.enableDispatch(document.body, 'mousemove');8081for (var ii = 0; ii < this._columns.length; ii++) {82this._columns[ii].start();83}8485var repaint = JX.bind(this, this.repaint);86JX.Stratcom.listen(['scroll', 'resize'], null, repaint);8788this.repaint();89},9091repaint: function(e) {92// Unless we've scrolled past it, the page has a 44px main menu banner.93var menu_height = (44 - JX.Vector.getScroll().y);9495// When the buoyant header is visible, move the menu down below it. This96// is a bit of a hack.97var banner_height = 0;98try {99var banner = JX.$('diff-banner');100banner_height = JX.Vector.getDim(banner).y;101} catch (error) {102// Ignore if there's no banner on the page.103}104105var header_height = Math.max(0, menu_height, banner_height);106107var column;108var flank;109for (var ii = 0; ii < this._columns.length; ii++) {110column = this._columns[ii];111112flank = column.getFlank();113if (!flank) {114continue;115}116117flank118.setBannerHeight(header_height)119.setWidth(column.getWidth())120.repaint();121}122}123124}125126});127128129