File: /home/iestorre/moodleAW/moodle310/lib/yui/src/dock/js/tabheightmanager.js
/* global TABHEIGHTMANAGER, LOGNS */
/**
* Dock JS.
*
* This file contains the tab height manager.
* The tab height manager is responsible for ensure all tabs are visible all the time.
*
* @module moodle-core-dock
*/
/**
* Tab height manager.
*
* @namespace M.core.dock
* @class TabHeightManager
* @constructor
* @extends Base
*/
TABHEIGHTMANAGER = function() {
TABHEIGHTMANAGER.superclass.constructor.apply(this, arguments);
};
TABHEIGHTMANAGER.prototype = {
/**
* Initialises the dock sizer which then attaches itself to the required
* events in order to monitor the dock
* @method initializer
*/
initializer: function() {
var dock = this.get('dock');
dock.on('dock:itemschanged', this.checkSizing, this);
Y.on('windowresize', this.checkSizing, this);
},
/**
* Check if the size dock items needs to be adjusted
* @method checkSizing
*/
checkSizing: function() {
var dock = this.get('dock'),
node = dock.get('dockNode'),
items = dock.dockeditems,
containermargin = parseInt(node.one('.dockeditem_container').getStyle('marginTop').replace('/[^0-9]+$/', ''), 10),
dockheight = node.get('offsetHeight') - containermargin,
controlheight = node.one('.controls').get('offsetHeight'),
buffer = (dock.get('bufferPanel') * 3),
possibleheight = dockheight - controlheight - buffer - (items.length * 2),
totalheight = 0,
id, dockedtitle;
if (items.length > 0) {
for (id in items) {
if (Y.Lang.isNumber(id) || Y.Lang.isString(id)) {
dockedtitle = Y.one(items[id].get('title')).ancestor('.' + CSS.dockedtitle);
if (dockedtitle) {
if (this.get('enabled')) {
dockedtitle.setStyle('height', 'auto');
}
totalheight += dockedtitle.get('offsetHeight') || 0;
}
}
}
if (totalheight > possibleheight) {
this.enable(possibleheight);
}
}
},
/**
* Enables the dock sizer and resizes where required.
* @method enable
* @param {Number} possibleheight
*/
enable: function(possibleheight) {
var dock = this.get('dock'),
items = dock.dockeditems,
count = dock.count,
runningcount = 0,
usedheight = 0,
id, itemtitle, itemheight, offsetheight;
Y.log('Enabling the dock tab sizer.', 'debug', LOGNS);
this.set('enabled', true);
for (id in items) {
if (Y.Lang.isNumber(id) || Y.Lang.isString(id)) {
itemtitle = Y.one(items[id].get('title')).ancestor('.' + CSS.dockedtitle);
if (!itemtitle) {
continue;
}
itemheight = Math.floor((possibleheight - usedheight) / (count - runningcount));
offsetheight = itemtitle.get('offsetHeight');
itemtitle.setStyle('overflow', 'hidden');
if (offsetheight > itemheight) {
itemtitle.setStyle('height', itemheight + 'px');
usedheight += itemheight;
} else {
usedheight += offsetheight;
}
runningcount++;
}
}
}
};
Y.extend(TABHEIGHTMANAGER, Y.Base, TABHEIGHTMANAGER.prototype, {
NAME: 'moodle-core-tabheightmanager',
ATTRS: {
/**
* The dock.
* @attribute dock
* @type DOCK
* @writeOnce
*/
dock: {
writeOnce: 'initOnly'
},
/**
* True if the item_sizer is being used, false otherwise.
* @attribute enabled
* @type Bool
*/
enabled: {
value: false
}
}
});