%PDF- %PDF-
| Direktori : /home/lightco1/www/lightingrepublic.com.au/media/com_files/js/ |
| Current File : /home/lightco1/www/lightingrepublic.com.au/media/com_files/js/files.pathway.js |
/**
* @version $Id$
* @package Nooku_Components
* @subpackage Files
* @copyright Copyright (C) 2011 - 2012 Timble CVBA and Contributors. (http://www.timble.net).
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html>
* @link http://www.nooku.org
*/
(function(){
//This is a private function, we don't need it to be a method to Files.Pathway, or globally available in general
var updatePathway = function(list, pathway, buffer, width, offset){
var index = width - offset, sizes = buffer[index] || buffer.max, last = list.getChildren().length - 1;
list.getChildren().each(function(folder, index){
if(index > 0 && index < last) {
folder.setStyle('width', sizes[index].value);
if(sizes[index].value <= 48) {
folder.removeClass('overflow-ellipsis');
} else {
folder.addClass('overflow-ellipsis');
}
}
});
};
if (!this.Files) this.Files = {};
Files.Pathway = new Class({
Implements: [Options],
element: false,
options: {
element: 'files-pathway',
offset: 8
},
initialize: function(options) {
this.setOptions(options);
},
setPath: function(app){
if (!this.element) {
this.element = document.id(this.options.element);
}
this.element.getParent().setStyle('position', 'relative');
var pathway = this.element;
pathway.setStyles({
'overflow': 'visible',
'text-overflow': 'ellipsis',
'white-space': 'nowrap',
bottom: 0,
top: 0,
left: (pathway.getPrevious() ? pathway.getPrevious().getSize().x : 0) + this.options.offset,
right: pathway.getNext().getSize().x + this.options.offset,
'position': 'absolute'
});
pathway.empty();
var list = new Element('ul', {'class': 'breadcrumb breadcrumb-resizable'}), wrap = function(app, title, path, icon){
var result = new Element('li', {
title: title,
events: {
click: function(){
app.navigate(path);
}
}
}),
link = new Element('span', {text: title});
result.grab(link);
if(icon) {
link.grab(new Element('span', {'class': 'divider'}), 'top');
}
return result;
};
var root = wrap(app, ' '+app.container.title, '', false).getElement('span').grab(new Element('i', {'class': 'icon-database icon-hdd'}), 'top').getParent();
list.adopt(root);
var folders = app.getPath().split('/'), path = '';
folders.each(function(title){
if(title.trim()) {
path += path ? '/'+title : title;
list.adopt(wrap(app, title, path, true));
}
});
list.getLast().addClass('active');
pathway.setStyle('visibility', 'hidden');
pathway.adopt(list);
//Whenever the path changes, the buffer used in the resize handler is outdated, so have to be reattached
if(this.pathway) {
window.removeEvent('resize', this.pathway);
this.pathway = false;
}
if(list.getChildren().length > 2) {
var widths = {}, ceil = 0, offset = list.getFirst().getSize().x + list.getLast().getSize().x;
list.getChildren().each(function(item, i){
if(item.match(':first-child') || item.match(':last-child')) return;
var x = item.getSize().x;
widths[i] = {key: i, value: x};
ceil += x;
});
//Create resize buffer
var buffer = {}, queue = ceil;
buffer[ceil] = buffer.max = widths;
while(queue > 0) {
--queue;
var max = {key: null, value: 0}, sizelist = {};
for (var key in widths){
if (widths.hasOwnProperty(key)) {
var item = widths[key];
if(item.value > max.value) max = item;
sizelist[key] = {key: item.key, value: item.value};
}
}
--sizelist[max.key].value;
buffer[queue] = sizelist;
widths = sizelist;
}
updatePathway(list, pathway, buffer, pathway.getSize().x, offset);
pathway.setStyle('visibility', 'visible');
this.pathway = function(){
updatePathway(list, pathway, buffer, pathway.getSize().x, offset)
};
window.addEvent('resize', this.pathway);
} else {
pathway.setStyle('visibility', 'visible');
}
}
});
})();