mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
(function(ionic) {
|
|
'use strict';
|
|
|
|
ionic.views.HeaderBar = ionic.views.View.inherit({
|
|
initialize: function(opts) {
|
|
this.el = opts.el;
|
|
|
|
ionic.extend(this, {
|
|
alignTitle: 'center'
|
|
}, opts);
|
|
|
|
this.align();
|
|
},
|
|
|
|
/**
|
|
* Align the title text given the buttons in the header
|
|
* so that the header text size is maximized and aligned
|
|
* correctly as long as possible.
|
|
*/
|
|
align: function() {
|
|
var _this = this;
|
|
|
|
window.rAF(ionic.proxy(function() {
|
|
var i, c, childSize;
|
|
var childNodes = this.el.childNodes;
|
|
|
|
// Find the title element
|
|
var title = this.el.querySelector('.title');
|
|
if(!title) {
|
|
return;
|
|
}
|
|
|
|
var leftWidth = 0;
|
|
var rightWidth = 0;
|
|
var titlePos = Array.prototype.indexOf.call(childNodes, title);
|
|
|
|
// Compute how wide the left children are
|
|
for(i = 0; i < titlePos; i++) {
|
|
childSize = null;
|
|
c = childNodes[i];
|
|
if(c.nodeType == 3) {
|
|
childSize = ionic.DomUtil.getTextBounds(c);
|
|
} else if(c.nodeType == 1) {
|
|
childSize = c.getBoundingClientRect();
|
|
}
|
|
if(childSize) {
|
|
leftWidth += childSize.width;
|
|
}
|
|
}
|
|
|
|
// Compute how wide the right children are
|
|
for(i = titlePos + 1; i < childNodes.length; i++) {
|
|
childSize = null;
|
|
c = childNodes[i];
|
|
if(c.nodeType == 3) {
|
|
childSize = ionic.DomUtil.getTextBounds(c);
|
|
} else if(c.nodeType == 1) {
|
|
childSize = c.getBoundingClientRect();
|
|
}
|
|
if(childSize) {
|
|
rightWidth += childSize.width;
|
|
}
|
|
}
|
|
|
|
var margin = Math.max(leftWidth, rightWidth) + 10;
|
|
|
|
// Size and align the header title based on the sizes of the left and
|
|
// right children, and the desired alignment mode
|
|
if(this.alignTitle == 'center') {
|
|
if(margin > 10) {
|
|
title.style.left = margin + 'px';
|
|
title.style.right = margin + 'px';
|
|
}
|
|
if(title.offsetWidth < title.scrollWidth) {
|
|
if(rightWidth > 0) {
|
|
title.style.right = (rightWidth + 5) + 'px';
|
|
}
|
|
}
|
|
} else if(this.alignTitle == 'left') {
|
|
title.classList.add('title-left');
|
|
if(leftWidth > 0) {
|
|
title.style.left = (leftWidth + 15) + 'px';
|
|
}
|
|
} else if(this.alignTitle == 'right') {
|
|
title.classList.add('title-right');
|
|
if(rightWidth > 0) {
|
|
title.style.right = (rightWidth + 15) + 'px';
|
|
}
|
|
}
|
|
}, this));
|
|
}
|
|
});
|
|
|
|
})(ionic);
|