00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00084 class tslib_gmenu_layers extends tslib_gmenu {
00085
00086
00087
00088 var $GMENU_fixKey='layers';
00089 var $divLayers=Array();
00090
00091 var $WMx=0;
00092 var $WMy=0;
00093 var $WMxyArray=array();
00094 var $WMextraScript='';
00095 var $WMlastKey='';
00096 var $WMrestoreScript='';
00097 var $WMresetSubMenus='';
00098 var $WMactiveHasSubMenu='';
00099 var $WMactiveKey='';
00100 var $WMtheSubMenu;
00101 var $WMisSub;
00102 var $WMhideCode;
00103 var $WMonlyOnLoad=0;
00104 var $WMbordersWithin=array();
00105 var $WMsubIds=array();
00106 var $WMtempStore=array();
00107 var $WMlockPosition_addAccumulated=array();
00108 var $VMmouseoverActions=array();
00109 var $VMmouseoutActions=array();
00110
00116 function extProc_init() {
00117 $this->WMid = trim($this->mconf['layer_menu_id'])?trim($this->mconf['layer_menu_id']).'x':substr(md5(microtime()),0,6);
00118
00119 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid'][]=$this->WMid;
00120 $this->WMtempStore = $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid'];
00121 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid']=array();
00122
00123
00124 $this->WMonlyOnLoad = ($this->mconf['displayActiveOnLoad'] && !$this->mconf['displayActiveOnLoad.']['onlyOnLoad']);
00125 $this->WMbordersWithin = t3lib_div::intExplode(',',$this->mconf['bordersWithin'].',0,0,0,0,0');
00126 }
00127
00134 function extProc_RO($key) {
00135 if ($this->mconf['freezeMouseover']) {
00136 $this->VMmouseoverActions[$this->WMid.$key]='case "Menu'.$this->WMid.$key.'":'.$this->I['linkHREF']['onMouseover'].'; break;';
00137 $this->VMmouseoutActions[$this->WMid.$key]='case "Menu'.$this->WMid.$key.'":'.$this->I['linkHREF']['onMouseout'].'; break;';
00138 $this->I['linkHREF']['onMouseover']='GL'.$this->WMid.'_over(\'Menu'.$this->WMid.$key.'\');';
00139 $this->I['linkHREF']['onMouseout']='';
00140 }
00141 }
00142
00150 function extProc_beforeLinking($key) {
00151 if ($this->I['uid']) {
00152
00153 array_push($GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMparentId'],$this->WMid);
00154 $this->WMtheSubMenu = $this->subMenu($this->I['uid']);
00155 array_pop($GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMparentId']);
00156 $this->WMisSub = trim($this->WMtheSubMenu) ? 1 : 0;
00157
00158 if ($this->mconf['lockPosition_addSelf']) {
00159 $this->WMy+=(strcmp($this->mconf['setFixedHeight'],'')?$this->mconf['setFixedHeight']:$this->I['val']['output_h'])+intval($this->mconf['lockPosition_adjust']);
00160 $this->WMx+=(strcmp($this->mconf['setFixedWidth'],'')?$this->mconf['setFixedWidth']:$this->I['val']['output_w'])+intval($this->mconf['lockPosition_adjust']);
00161 }
00162
00163 if ($this->isActive($this->I['uid'], $this->getMPvar($key)) && $this->mconf['displayActiveOnLoad']) {
00164 $this->WMactiveHasSubMenu = $this->WMisSub;
00165 $this->WMactiveKey = 'Menu'.$this->WMid.$key;
00166
00167
00168 $this->WMrestoreVars=trim('
00169 GLV_restoreMenu["'.$this->WMid.'"] = "'.$this->WMactiveKey.'";
00170 ');
00171 $this->WMrestoreScript=' GL_doTop("'.$this->WMid.'",GLV_restoreMenu["'.$this->WMid.'"]);'.($this->mconf['freezeMouseover']?'
00172 GL'.$this->WMid.'_over(GLV_restoreMenu["'.$this->WMid.'"]);
00173 ':'');
00174 }
00175
00176 if ($this->WMisSub) {
00177 $event="GL_stopMove('".$this->WMid."');";
00178 $this->I['linkHREF']['onMouseover']='GL_doTop(\''.$this->WMid.'\', \'Menu'.$this->WMid.$key.'\');'.$this->I['linkHREF']['onMouseover'];
00179
00180
00181 if (t3lib_div::intInRange($this->mconf['hideMenuWhenNotOver'],0,600) && $this->mconf['hideMenuTimer']) {
00182 $event.='GL_resetAll("'.$this->WMid.'");';
00183 }
00184 $this->I['linkHREF']['onMouseout'].=$event;
00185 } else {
00186 $this->I['linkHREF']['onMouseover']='GL_hideAll("'.$this->WMid.'");'.$this->I['linkHREF']['onMouseover'];
00187 $event='GL_resetAll("'.$this->WMid.'");';
00188 $this->I['linkHREF']['onMouseout'].=$event;
00189 }
00190
00191 $this->WMxyArray[] = 'GLV_menuXY["'.$this->WMid.'"]["Menu'.$this->WMid.$key.'"] = new Array('.$this->WMx.','.$this->WMy.',"itemID'.t3lib_div::shortmd5($this->I['uid'].'-'.$this->WMid).'","anchorID'.t3lib_div::shortmd5($this->I['uid'].'-'.$this->WMid).'");';
00192 }
00193 }
00194
00201 function extProc_afterLinking($key) {
00202 if ($this->I['uid']) {
00203 if (!$this->I['spacer'] && $this->WMisSub) {
00204 $exStyle=$this->mconf['layerStyle'] ? $this->mconf['layerStyle'] : 'position:absolute;visibility:hidden';
00205 if (trim($exStyle)) {
00206 $exStyle=' '.$exStyle;
00207 }
00208 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['layerCounter']++;
00209 $zIndex = 10000-$GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['layerCounter'];
00210 # $zIndex = (($key+2)*$this->menuNumber*100);
00211 $divStart = '<div id="Menu'.$this->WMid.$key.'" style="z-index:'.$zIndex.';'.$exStyle.'">';
00212 $divStop = '</div>';
00213
00214 $this->divLayers[]= $divStart.$this->WMtheSubMenu.$divStop;
00215
00216 $this->WMhideCode.='
00217 GL_getObjCss("Menu'.$this->WMid.$key.'").visibility = "hidden";';
00218 $this->WMlastKey = 'Menu'.$this->WMid.$key;
00219 }
00220
00221 if (!$this->mconf['lockPosition_addSelf']) {
00222 $this->WMy+=(strcmp($this->mconf['setFixedHeight'],'')?$this->mconf['setFixedHeight']:$this->I['val']['output_h'])+intval($this->mconf['lockPosition_adjust']);
00223 $this->WMx+=(strcmp($this->mconf['setFixedWidth'],'')?$this->mconf['setFixedWidth']:$this->I['val']['output_w'])+intval($this->mconf['lockPosition_adjust']);
00224 }
00225 }
00226 $this->WMresult.=$this->I['theItem'];
00227 }
00228
00236 function extProc_beforeAllWrap($item,$key) {
00237 if ($this->mconf['relativeToTriggerItem']) {
00238 $item = '<div id="anchorID'.t3lib_div::shortmd5($this->I['uid'].'-'.$this->WMid).'" style="position:absolute;visibility:hidden;"></div><div id="itemID'.t3lib_div::shortmd5($this->I['uid'].'-'.$this->WMid).'" style="width:100%; height:100%;">'.$item.'</div>';
00239 }
00240 return $item;
00241 }
00242
00249 function isSetIntval($in) {
00250 return $this->mconf['blankStrEqFalse'] ? strcmp($in,'') : intval($in);
00251 }
00252
00258 function extProc_finish () {
00259 $dirL = $this->mconf['directionLeft'] ? '-GL_getObj(id).width' : '';
00260 $dirU = $this->mconf['directionUp'] ? '-GL_getObj(id).height' : '';
00261
00262 $parentLayerId = end($GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMparentId']);
00263
00264 $DoTop=array();
00265 $GLV_menuOn=array();
00266 $relCode=array();
00267 $relFlag=0;
00268 if ($this->mconf['relativeToParentLayer'] && $parentLayerId) {
00269 $relCode['X'].='GLV_curLayerX["'.$parentLayerId.'"]+';
00270 $relCode['Y'].='GLV_curLayerY["'.$parentLayerId.'"]+';
00271 if ($this->mconf['relativeToParentLayer.']['addWidth']) { $relCode['X'].='GLV_curLayerWidth["'.$parentLayerId.'"]+'; }
00272 if ($this->mconf['relativeToParentLayer.']['addHeight']) { $relCode['Y'].='GLV_curLayerHeight["'.$parentLayerId.'"]+'; }
00273 }
00274 if ($this->mconf['relativeToTriggerItem']) {
00275 $DoTop[]='
00276 var parentObject = GL_getObj(GLV_menuXY[WMid][id][2]);
00277 var TI_width = parentObject.width;
00278 var TI_height = parentObject.height;
00279 var anchorObj = GL_getObj(GLV_menuXY[WMid][id][3]);
00280 var TI_x = anchorObj.x;
00281 var TI_y = anchorObj.y;
00282 ';
00283 $relCode['X'].='TI_x+';
00284 $relCode['Y'].='TI_y+';
00285
00286 if ($this->mconf['relativeToTriggerItem.']['addWidth']) { $relCode['X'].='TI_width+'; }
00287 if ($this->mconf['relativeToTriggerItem.']['addHeight']) { $relCode['Y'].='TI_height+'; }
00288 $relFlag=1;
00289 }
00290 if ($relFlag) {
00291 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].left = ('.$relCode['X'].intval($this->mconf['leftOffset']).$dirL.')+"px";';
00292 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].top = ('.$relCode['Y'].intval($this->mconf['topOffset']).$dirU.')+"px";';
00293 } else {
00294
00295 if (!strcmp($this->mconf['lockPosition'],'x')) {
00296 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].left = ('.$relCode['X'].'GLV_menuXY["'.$this->WMid.'"][id][0]-('.intval($this->mconf['xPosOffset']).')'.$dirL.')+"px";';
00297 if ($this->isSetIntval($this->mconf['topOffset'])) {
00298 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].top = ('.$relCode['Y'].intval($this->mconf['topOffset']).$dirU.')+"px";';
00299 }
00300 } elseif ($this->isSetIntval($this->mconf['xPosOffset'])) {
00301 $GLV_menuOn[]=$DoTop[]='GLV_menuOn["'.$this->WMid.'"].left = (GLV_x-('.intval($this->mconf['xPosOffset']).')'.$dirL.')+"px";';
00302 if ($this->isSetIntval($this->mconf['topOffset'])) {
00303 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].top = ('.$relCode['Y'].intval($this->mconf['topOffset']).$dirU.')+"px";';
00304 }
00305 }
00306
00307 if (!strcmp($this->mconf['lockPosition'],'y')) {
00308 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].top = ('.$relCode['Y'].'GLV_menuXY["'.$this->WMid.'"][id][1]-('.intval($this->mconf['yPosOffset']).')'.$dirU.')+"px";';
00309 if ($this->isSetIntval($this->mconf['leftOffset'])) {
00310 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].left = ('.$relCode['X'].intval($this->mconf['leftOffset']).$dirL.')+"px";';
00311 }
00312 } elseif ($this->isSetIntval($this->mconf['yPosOffset'])) {
00313 $GLV_menuOn[]=$DoTop[]='GLV_menuOn["'.$this->WMid.'"].top = (GLV_y-('.intval($this->mconf['yPosOffset']).')'.$dirU.')+"px";';
00314 if ($this->isSetIntval($this->mconf['leftOffset'])) {
00315 $DoTop[]='GLV_menuOn["'.$this->WMid.'"].left = ('.$relCode['X'].intval($this->mconf['leftOffset']).$dirL.')+"px";';
00316 }
00317 }
00318 }
00319
00320
00321 $DoTop[]=$this->extCalcBorderWithin('left',$this->WMbordersWithin[0]);
00322 $DoTop[]=$this->extCalcBorderWithin('top',$this->WMbordersWithin[1]);
00323 $DoTop[]=$this->extCalcBorderWithin('right',$this->WMbordersWithin[2]);
00324 $DoTop[]=$this->extCalcBorderWithin('bottom',$this->WMbordersWithin[3]);
00325 $DoTop[]=$this->extCalcBorderWithin('left',$this->WMbordersWithin[4]);
00326 $DoTop[]=$this->extCalcBorderWithin('top',$this->WMbordersWithin[5]);
00327
00328
00329 if ($this->mconf['freezeMouseover'] && !$this->mconf['freezeMouseover.']['alwaysKeep']) {
00330 $this->WMhideCode.='
00331 GL'.$this->WMid.'_out("");';
00332 }
00333
00334 $TEST='';
00335 if (count($GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid'])) {
00336 reset($GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid']);
00337 while(list(,$mIdStr)=each($GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid'])) {
00338 $this->WMhideCode.='
00339 GL_hideAll("'.$mIdStr.'");';
00340 $this->WMrestoreScript.='
00341 GL_restoreMenu("'.$mIdStr.'");';
00342 $this->WMresetSubMenus.='
00343 if (!GLV_doReset["'.$mIdStr.'"] && GLV_currentLayer["'.$mIdStr.'"]!=null) resetSubMenu=0;';
00344 }
00345 }
00346 $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid']=array_merge($this->WMtempStore,$GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid']);
00347 $GLOBALS['TSFE']->additionalHeaderData['gmenu_layer_shared']='<script type="text/javascript" src="'.$GLOBALS['TSFE']->absRefPrefix.'media/scripts/jsfunc.layermenu.js"></script>';
00348 $GLOBALS['TSFE']->JSCode.= '
00349
00350 GLV_curLayerWidth["'.$this->WMid.'"]=0;
00351 GLV_curLayerHeight["'.$this->WMid.'"]=0;
00352 GLV_curLayerX["'.$this->WMid.'"]=0;
00353 GLV_curLayerY["'.$this->WMid.'"]=0;
00354 GLV_menuOn["'.$this->WMid.'"] = null;
00355 GLV_gap["'.$this->WMid.'"]='.t3lib_div::intInRange($this->mconf['hideMenuWhenNotOver'],0,600).';
00356 GLV_currentLayer["'.$this->WMid.'"] = null;
00357 GLV_currentROitem["'.$this->WMid.'"] = null;
00358 GLV_hasBeenOver["'.$this->WMid.'"]=0;
00359 GLV_doReset["'.$this->WMid.'"]=false;
00360 GLV_lastKey["'.$this->WMid.'"] = "'.$this->WMlastKey.'";
00361 GLV_onlyOnLoad["'.$this->WMid.'"] = '.($this->WMonlyOnLoad?1:0).';
00362 GLV_dontHideOnMouseUp["'.$this->WMid.'"] = '.($this->mconf['dontHideOnMouseUp']?1:0).';
00363 GLV_dontFollowMouse["'.$this->WMid.'"] = '.($this->mconf['dontFollowMouse']?1:0).';
00364 GLV_date = new Date();
00365 GLV_timeout["'.$this->WMid.'"] = GLV_date.getTime();
00366 GLV_timeoutRef["'.$this->WMid.'"] = '.t3lib_div::intInRange($this->mconf['hideMenuTimer'],0,20000).';
00367 GLV_menuXY["'.$this->WMid.'"] = new Array();
00368 '.implode(chr(10),$this->WMxyArray).'
00369 '.$this->WMrestoreVars;
00370
00371 if ($this->mconf['freezeMouseover']) {
00372 $GLOBALS['TSFE']->JSCode.= '
00373
00374 function GL'.$this->WMid.'_over(mitm_id) {
00375 GL'.$this->WMid.'_out("");
00376 switch(mitm_id) {
00377 '.implode(chr(10),$this->VMmouseoverActions).'
00378 }
00379 GLV_currentROitem["'.$this->WMid.'"]=mitm_id;
00380 }
00381 function GL'.$this->WMid.'_out(mitm_id) {
00382 if (!mitm_id) mitm_id=GLV_currentROitem["'.$this->WMid.'"];
00383 switch(mitm_id) {
00384 '.implode(chr(10),$this->VMmouseoutActions).'
00385 }
00386 }
00387 ';
00388 }
00389 $GLOBALS["TSFE"]->JSCode.= '
00390 function GL'.$this->WMid.'_getMouse(e) {
00391 if (GLV_menuOn["'.$this->WMid.'"]!=null && !GLV_dontFollowMouse["'.$this->WMid.'"]){
00392 '.implode(chr(10),$GLV_menuOn).'
00393 }
00394 GL_mouseMoveEvaluate("'.$this->WMid.'");
00395 }
00396 function GL'.$this->WMid.'_hideCode() {
00397 '.$this->WMhideCode.'
00398 }
00399 function GL'.$this->WMid.'_doTop(WMid,id) {
00400 '.trim(implode(chr(10),$DoTop)).'
00401 }
00402 function GL'.$this->WMid.'_restoreMenu() {
00403 '.$this->WMrestoreScript.'
00404 }
00405 function GL'.$this->WMid.'_resetSubMenus() {
00406 var resetSubMenu=1;
00407 '.$this->WMresetSubMenus.'
00408 return resetSubMenu;
00409 }
00410
00411 GLV_timeout_pointers[GLV_timeout_count] = "'.$this->WMid.'";
00412 GLV_timeout_count++;
00413
00414 ';
00415 $GLOBALS['TSFE']->JSeventFuncCalls['onload']['GL_initLayers()']= 'GL_initLayers();';
00416 $GLOBALS['TSFE']->JSeventFuncCalls['onload'][$this->WMid]= 'GL_restoreMenu("'.$this->WMid.'");';
00417 $GLOBALS['TSFE']->JSeventFuncCalls['onmousemove']['GL_getMouse(e)']= 'GL_getMouse(e);';
00418 $GLOBALS['TSFE']->JSeventFuncCalls['onmousemove'][$this->WMid]= 'GL'.$this->WMid.'_getMouse(e);';
00419 $GLOBALS['TSFE']->JSeventFuncCalls['onmouseup'][$this->WMid]= 'GL_mouseUp(\''.$this->WMid.'\',e);';
00420
00421 $GLOBALS['TSFE']->divSection.=implode($this->divLayers,chr(10)).chr(10);
00422
00423 return parent::extProc_finish();
00424 }
00425
00434 function extCalcBorderWithin($kind,$integer) {
00435 if ($integer) {
00436 switch($kind) {
00437 case 'right':
00438 case 'bottom':
00439 $add='';
00440 if ($kind=='right') {$add='GL_getObj(id).width'; $key = 'left';}
00441 if ($kind=='bottom') {$add='GL_getObj(id).height'; $key = 'top';}
00442 $str = 'if (parseInt(GLV_menuOn["'.$this->WMid.'"].'.$key.')+'.$add.'>'.$integer.') GLV_menuOn["'.$this->WMid.'"].'.$key.'='.$integer.'-'.$add.';';
00443 break;
00444 default:
00445 $str = 'if (parseInt(GLV_menuOn["'.$this->WMid.'"].'.$kind.')<'.$integer.') GLV_menuOn["'.$this->WMid.'"].'.$kind.'='.$integer.';';
00446 break;
00447 }
00448 }
00449 return $str;
00450 }
00451 }
00452
00453
00454
00455
00456 $GLOBALS['TSFE']->tmpl->menuclasses.=',gmenu_layers';
00457
00458 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['media/scripts/gmenu_layers.php']) {
00459 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['media/scripts/gmenu_layers.php']);
00460 }
00461
00462 ?>