egroupware/api/js/dhtmlxMenu/sources/ext/dhtmlxmenu_effects.js

146 lines
4.7 KiB
JavaScript

//v.3.6 build 131108
/*
Copyright DHTMLX LTD. http://www.dhtmlx.com
You allowed to use this component or parts of it under GPL terms
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
*/
/* effects: opacity, slide */
dhtmlXMenuObject.prototype.enableEffect = function(name, maxOpacity, effectSpeed) {
this._menuEffect = (name=="opacity"||name=="slide"||name=="slide+"?name:false);
for (var a in this.idPull) {
if (a.search(/polygon/) === 0) {
this._pOpacityApply(a,(_isIE?100:1));
this.idPull[a].style.height = "";
}
}
// opacity max value
this._pOpMax = (typeof(maxOpacity)=="undefined"?100:maxOpacity)/(_isIE?1:100);
// opacity css styles
this._pOpStyleName = (_isIE?"filter":"opacity");
this._pOpStyleValue = (_isIE?"progid:DXImageTransform.Microsoft.Alpha(Opacity=#)":"#");
// count of steps to open full polygon
this._pSlSteps = (_isIE?10:20);
// timeout to open polygon
this._pSlTMTimeMax = effectSpeed||50;
}
// extended show
dhtmlXMenuObject.prototype._showPolygonEffect = function(pId) {
this._pShowHide(pId, true);
};
// extended hide
dhtmlXMenuObject.prototype._hidePolygonEffect = function(pId) {
this._pShowHide(pId, false);
};
// apply opacity css
dhtmlXMenuObject.prototype._pOpacityApply = function(pId, val) {
this.idPull[pId].style[this._pOpStyleName] = String(this._pOpStyleValue).replace("#", val||this.idPull[pId]._op);
};
dhtmlXMenuObject.prototype._pShowHide = function(pId, mode) {
if (!this.idPull) return;
// check if mode in progress
if (this.idPull[pId]._tmShow != null) {
if ((this.idPull[pId]._step_h > 0 && mode == true) || (this.idPull[pId]._step_h < 0 && mode == false)) return;
window.clearTimeout(this.idPull[pId]._tmShow);
this.idPull[pId]._tmShow = null;
this.idPull[pId]._max_h = null;
}
if (mode == false && (this.idPull[pId].style.visibility == "hidden" || this.idPull[pId].style.display == "none")) return;
if (mode == true && this.idPull[pId].style.display == "none") {
this.idPull[pId].style.visibility = "hidden";
this.idPull[pId].style.display = "";
}
// init values or show-hide revert
if (this.idPull[pId]._max_h == null) {
this.idPull[pId]._max_h = parseInt(this.idPull[pId].offsetHeight);
this.idPull[pId]._h = (mode==true?0:this.idPull[pId]._max_h);
this.idPull[pId]._step_h = Math.round(this.idPull[pId]._max_h/this._pSlSteps)*(mode==true?1:-1);
if (this.idPull[pId]._step_h == 0) return;
this.idPull[pId]._step_tm = Math.round(this._pSlTMTimeMax/this._pSlSteps);
if (this._menuEffect == "slide+" || this._menuEffect == "opacity") {
this.idPull[pId].op_tm = this.idPull[pId]._step_tm;
this.idPull[pId].op_step = (this._pOpMax/this._pSlSteps)*(mode==true?1:-1);
if (_isIE) this.idPull[pId].op_step = Math.round(this.idPull[pId].op_step);
this.idPull[pId]._op = (mode==true?0:this._pOpMax);
this._pOpacityApply(pId);
} else {
this.idPull[pId]._op = (_isIE?100:1);
this._pOpacityApply(pId);
}
// show first time
if (this._menuEffect.search(/slide/) === 0) this.idPull[pId].style.height = "0px";
this.idPull[pId].style.visibility = "visible";
}
// run cycle
this._pEffectSet(pId, this.idPull[pId]._h+this.idPull[pId]._step_h);
}
dhtmlXMenuObject.prototype._pEffectSet = function(pId, t) {
if (!this.idPull) return;
if (this.idPull[pId]._tmShow) window.clearTimeout(this.idPull[pId]._tmShow);
// check and apply next step
this.idPull[pId]._h = Math.max(0,Math.min(t,this.idPull[pId]._max_h));
if (this._menuEffect.search(/slide/) === 0) this.idPull[pId].style.height = this.idPull[pId]._h+"px";
t += this.idPull[pId]._step_h;
if (this._menuEffect == "slide+" || this._menuEffect == "opacity") {
this.idPull[pId]._op = Math.max(0,Math.min(this._pOpMax,this.idPull[pId]._op+this.idPull[pId].op_step));
this._pOpacityApply(pId);
}
if ((this.idPull[pId]._step_h > 0 && t <= this.idPull[pId]._max_h) || (this.idPull[pId]._step_h < 0 && t >= 0)) {
// continue
var k = this;
this.idPull[pId]._tmShow = window.setTimeout(function(){k._pEffectSet(pId,t);}, this.idPull[pId]._step_tm);
} else {
// clear height
if (this._menuEffect.search(/slide/) === 0) this.idPull[pId].style.height = "";
// hide completed
if (this.idPull[pId]._step_h < 0) this.idPull[pId].style.visibility = "hidden";
if (this._menuEffect == "slide+" || this._menuEffect == "opacity") {
this.idPull[pId]._op = (this.idPull[pId]._step_h<0?(_isIE?100:1):this._pOpMax);
this._pOpacityApply(pId);
}
// clear values
this.idPull[pId]._tmShow = null;
this.idPull[pId]._h = null;
this.idPull[pId]._max_h = null;
///this.idPull[pId]._step_h = null;
this.idPull[pId]._step_tm = null;
}
};