mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-05-19 03:55:27 +02:00
181 lines
4.7 KiB
JavaScript
181 lines
4.7 KiB
JavaScript
var LSinfosBox = new Class({
|
|
initialize: function(options){
|
|
// Default options
|
|
this._options = {
|
|
closeBtn: 0,
|
|
name: '',
|
|
fxDuration: 500,
|
|
opacity: 0.8,
|
|
autoClose: 3000,
|
|
pre: false,
|
|
};
|
|
|
|
// Load options from argument
|
|
if ($type(options)=='object') {
|
|
Object.each(options, function(val, name) {
|
|
if ($type(this._options[name])) {
|
|
this._options[name]=val;
|
|
}
|
|
},this);
|
|
}
|
|
|
|
this.build();
|
|
|
|
this.opened = false;
|
|
this.autoClose_timeout = false;
|
|
},
|
|
|
|
build: function() {
|
|
var classes;
|
|
if (this._options.name!='') {
|
|
classes='LSinfosBox '+this._options.name;
|
|
}
|
|
else {
|
|
classes='LSinfosBox'
|
|
}
|
|
|
|
this.core = new Element('div');
|
|
this.core.addClass(classes);
|
|
this.core.addEvent('dblclick',this.close.bind(this));
|
|
|
|
if(this._options.closeBtn) {
|
|
this.closeBtn = new Element('span');
|
|
this.closeBtn.addClass(classes);
|
|
this.closeBtn.set('html','X');
|
|
this.closeBtn.addEvent('click',this.close.bind(this));
|
|
this.closeBtn.injectInside(this.core);
|
|
}
|
|
|
|
this.content = new Element('p');
|
|
this.content.addEvent(classes);
|
|
this.content.injectInside(this.core);
|
|
|
|
this.fx = new Fx.Tween(
|
|
this.core,
|
|
{
|
|
property: 'opacity',
|
|
duration: this._options.fxDuration,
|
|
fps: 30
|
|
}
|
|
);
|
|
|
|
this.core.inject(document.body,'top');
|
|
this.ul = false;
|
|
},
|
|
|
|
isOpened: function() {
|
|
return this.opened;
|
|
},
|
|
|
|
open: function() {
|
|
this.core.setStyle('top',getScrollTop()+10);
|
|
|
|
if (this._options.autoClose) {
|
|
this.closeTime = (new Date()).getTime();
|
|
if (this.autoClose_timeout) {
|
|
clearTimeout(this.autoClose_timeout);
|
|
}
|
|
this.autoClose_timeout = this.close.delay(this._options.autoClose, this);
|
|
}
|
|
|
|
if (this.opened) {
|
|
console.log('LSinfoBox('+this._options.name+'): already opened');
|
|
return;
|
|
}
|
|
console.log('LSinfoBox('+this._options.name+'): open');
|
|
this.opened = true;
|
|
this.fx.start(0, this._options.opacity);
|
|
},
|
|
|
|
close: function(withoutEffect) {
|
|
if (this.opened) {
|
|
console.log('LSinfoBox('+this._options.name+'): close');
|
|
this.opened = false;
|
|
if (withoutEffect==1) {
|
|
this.fx.set(0);
|
|
}
|
|
else {
|
|
this.fx.start(this._options.opacity, 0);
|
|
}
|
|
}
|
|
else {
|
|
console.log('LSinfoBox('+this._options.name+'): already closed');
|
|
}
|
|
},
|
|
|
|
addInfo: function(info, clear) {
|
|
if (!info || ($type(info) == 'array' && !info.length)) return;
|
|
if (clear) this.clear();
|
|
if (this.content.innerHTML) {
|
|
// If content is not already in ul, put it in
|
|
if (!this.ul) {
|
|
this.ul = new Element('ul');
|
|
if (this.content.innerHTML) {
|
|
var c_li = new Element('li');
|
|
c_li.set('html', this.content.innerHTML);
|
|
c_li.injectInside(this.ul);
|
|
}
|
|
this.content.empty();
|
|
this.ul.injectInside(this.content);
|
|
}
|
|
|
|
// Add li.separator to separate old/new content
|
|
var b_li = new Element('li');
|
|
b_li.addClass('separator');
|
|
b_li.injectInside(this.ul);
|
|
}
|
|
|
|
if ($type(info) == "string") {
|
|
if (this.ul) {
|
|
var li = new Element('li');
|
|
if (this._options.pre) {
|
|
var pre = new Element('pre');
|
|
pre.set('html', info);
|
|
pre.injectInside(li);
|
|
}
|
|
else {
|
|
li.set('html', info);
|
|
}
|
|
li.injectInside(this.ul);
|
|
}
|
|
else {
|
|
this.content.set('html', info);
|
|
}
|
|
}
|
|
else if ($type(info) == 'array') {
|
|
if (!this.ul) {
|
|
this.ul = new Element('ul');
|
|
this.ul.injectInside(this.content);
|
|
}
|
|
Array.each(info, function(msg) {
|
|
var li = new Element('li');
|
|
if (this._options.pre) {
|
|
var pre = new Element('pre');
|
|
pre.set('html', msg);
|
|
pre.injectInside(li);
|
|
}
|
|
else {
|
|
li.set('html', msg);
|
|
}
|
|
li.injectInside(this.ul);
|
|
}, this);
|
|
}
|
|
this.open();
|
|
},
|
|
|
|
display: function(info) {
|
|
this.addInfo(info, true);
|
|
},
|
|
|
|
displayOrAdd: function(info) {
|
|
console.log('LSinfoBox('+this._options.name+').displayOrAdd(): open='+this.opened);
|
|
this.addInfo(info, !this.opened);
|
|
},
|
|
|
|
clear: function() {
|
|
console.log('LSinfoBox('+this._options.name+'): clear');
|
|
this.content.empty();
|
|
this.ul = false;
|
|
}
|
|
});
|