Version 2.3.6
This commit is contained in:
1 parent
a3bb603c96
commit
19b38c7c74
764 files changed
+143731
-118164
No files matched your search
@@ -0,0 +1,559 @@
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// IPS BASIC MENU CLASS
|
||||
// (c) 2005 Invision Power Services, Inc
|
||||
// ASSUMES "ips_global.js" has been loaded
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ipsmenu = new ips_menu();
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// INIT Handler class
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
function ips_menu()
|
||||
{
|
||||
this.menu_registered = new Array();
|
||||
this.menu_openfuncs = new Array();
|
||||
this.menu_over_css = new Array();
|
||||
this.menu_out_css = new Array();
|
||||
this.menu_open_event = new Array();
|
||||
this.dynamic_register = new Array();
|
||||
this.menu_cur_open = null;
|
||||
this.dynamic_html = null;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Register menu control ID (add to array)
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu.prototype.register = function ( cid, callback, menu_over_css, menu_out_css, event_type )
|
||||
{
|
||||
if ( event_type )
|
||||
{
|
||||
this.menu_open_event[ cid ] = ( event_type == 'onmouseover' ) ? 'onmouseover' : 'onclick';
|
||||
}
|
||||
|
||||
this.menu_registered[ cid ] = new ips_menu_class( cid );
|
||||
|
||||
if ( callback )
|
||||
{
|
||||
this.menu_openfuncs[ cid ] = callback;
|
||||
}
|
||||
|
||||
if ( menu_over_css && menu_out_css )
|
||||
{
|
||||
this.menu_over_css[ cid ] = menu_over_css;
|
||||
this.menu_out_css[ cid ] = menu_out_css;
|
||||
}
|
||||
|
||||
return this.menu_registered[ cid ];
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Register menu control ID (add to array)
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu.prototype.close = function ()
|
||||
{
|
||||
if ( this.menu_cur_open )
|
||||
{
|
||||
this.menu_registered[ this.menu_cur_open ].close();
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// ips_menu_class: Object for each menu
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
function ips_menu_class( cid )
|
||||
{
|
||||
this.cid = cid;
|
||||
this.initialized = false;
|
||||
|
||||
this.init_control_object();
|
||||
this.init_menu();
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// ips_menu_class: Initiate a single menu
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_class.prototype.init_control_object = function()
|
||||
{
|
||||
this.cid_obj = document.getElementById( this.cid );
|
||||
|
||||
//----------------------------------
|
||||
// Change cursor to show link
|
||||
//----------------------------------
|
||||
|
||||
try
|
||||
{
|
||||
this.cid_obj.style.cursor = "pointer";
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
this.cid_obj.style.cursor = "hand";
|
||||
}
|
||||
|
||||
this.cid_obj.unselectable = true;
|
||||
|
||||
if ( ipsmenu.menu_open_event[ this.cid ] == 'onmouseover' )
|
||||
{
|
||||
this.cid_obj.onmouseover = ips_menu_events.prototype.event_onclick;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cid_obj.onclick = ips_menu_events.prototype.event_onclick;
|
||||
this.cid_obj.onmouseover = ips_menu_events.prototype.event_onmouseover;
|
||||
}
|
||||
|
||||
this.cid_obj.onmouseout = ips_menu_events.prototype.event_onmouseout;
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// ips_menu_class: Initiate a single menu
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_class.prototype.init_menu = function()
|
||||
{
|
||||
this.cid_menu_obj = document.getElementById( this.cid + '_menu' );
|
||||
|
||||
if ( this.cid_menu_obj )
|
||||
{
|
||||
//----------------------------------
|
||||
// Save CPU - already init?
|
||||
//----------------------------------
|
||||
|
||||
if ( this.initialized )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Pop-up menu obj (hidden div)
|
||||
//----------------------------------
|
||||
|
||||
this.cid_menu_obj.style.display = "none";
|
||||
this.cid_menu_obj.style.position = "absolute";
|
||||
this.cid_menu_obj.style.left = "0px";
|
||||
this.cid_menu_obj.style.top = "0px";
|
||||
this.cid_menu_obj.onclick = ipsclass.cancel_bubble_low;
|
||||
this.cid_menu_obj.zIndex = 50;
|
||||
|
||||
this.initialized = true;
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// ips_menu_class: Open menu
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_class.prototype.open = function( obj )
|
||||
{
|
||||
//----------------------------------
|
||||
// Not init?
|
||||
//----------------------------------
|
||||
|
||||
if ( ! this.cid_menu_obj )
|
||||
{
|
||||
this.initialized = false;
|
||||
this.init_menu();
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Close current menu(s)
|
||||
//----------------------------------
|
||||
|
||||
if ( ipsmenu.menu_cur_open != null )
|
||||
{
|
||||
ipsmenu.menu_registered[ ipsmenu.menu_cur_open ].close();
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Save CPU - cur open clicked?
|
||||
//----------------------------------
|
||||
|
||||
if ( ipsmenu.menu_cur_open == obj.id )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Set current open menu
|
||||
//----------------------------------
|
||||
|
||||
ipsmenu.menu_cur_open = obj.id;
|
||||
|
||||
//----------------------------------
|
||||
// Get ID of menu DIV to show
|
||||
//----------------------------------
|
||||
|
||||
var left_px = ipsclass.get_obj_leftpos(obj);
|
||||
var top_px = ipsclass.get_obj_toppos(obj) + obj.offsetHeight;
|
||||
var ifid = obj.id;
|
||||
|
||||
//try
|
||||
//{
|
||||
// if ( is_safari && ! ipb_is_acp )
|
||||
// {
|
||||
// top_px += 20;
|
||||
// }
|
||||
//}
|
||||
//catch(error)
|
||||
//{
|
||||
// if ( is_safari )
|
||||
// {
|
||||
// top_px += 20;
|
||||
// }
|
||||
//}
|
||||
|
||||
//----------------------------------
|
||||
// Show menu DIV.. but keep it underneath
|
||||
//----------------------------------
|
||||
|
||||
this.cid_menu_obj.style.zIndex = -1;
|
||||
this.cid_menu_obj.style.display = "";
|
||||
|
||||
//----------------------------------
|
||||
// Try and keep it on screen
|
||||
//----------------------------------
|
||||
|
||||
var width = parseInt( this.cid_menu_obj.style.width ) ? parseInt( this.cid_menu_obj.style.width ) : this.cid_menu_obj.offsetWidth;
|
||||
|
||||
if ( (left_px + width) >= document.body.clientWidth )
|
||||
{
|
||||
left_px = left_px + obj.offsetWidth - width;
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Firefox bump
|
||||
//-----------------------------------------
|
||||
|
||||
if ( is_moz )
|
||||
{
|
||||
top_px -= 1;
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Finalize menu position
|
||||
//----------------------------------
|
||||
|
||||
this.cid_menu_obj.style.left = left_px + "px";
|
||||
this.cid_menu_obj.style.top = top_px + "px";
|
||||
this.cid_menu_obj.style.zIndex = 100;
|
||||
|
||||
//----------------------------------
|
||||
// Run a custom function?
|
||||
//----------------------------------
|
||||
|
||||
if ( ipsmenu.menu_openfuncs[ obj.id ] )
|
||||
{
|
||||
eval( ipsmenu.menu_openfuncs[ obj.id ] );
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Workaround for IE bug which shows
|
||||
// select boxes and other windows GUI
|
||||
// over divs. SHOW IFRAME
|
||||
//----------------------------------
|
||||
|
||||
if ( is_ie )
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( ! document.getElementById( 'if_' + obj.id ) )
|
||||
{
|
||||
var iframeobj = document.createElement('iframe');
|
||||
|
||||
iframeobj.src = 'javascript:;';
|
||||
iframeobj.id = 'if_' +obj.id;
|
||||
|
||||
document.getElementsByTagName('body').appendChild( iframeobj );
|
||||
}
|
||||
else
|
||||
{
|
||||
var iframeobj = document.getElementById( 'if_' +obj.id );
|
||||
}
|
||||
|
||||
iframeobj.scrolling = 'no';
|
||||
iframeobj.frameborder = 'no';
|
||||
iframeobj.className = 'iframeshim';
|
||||
iframeobj.style.position = 'absolute';
|
||||
|
||||
iframeobj.style.width = parseInt(this.cid_menu_obj.offsetWidth) + 'px';
|
||||
iframeobj.style.height = parseInt(this.cid_menu_obj.offsetHeight) + 'px';
|
||||
iframeobj.style.top = this.cid_menu_obj.style.top;
|
||||
iframeobj.style.left = this.cid_menu_obj.style.left;
|
||||
iframeobj.style.zIndex = 99;
|
||||
iframeobj.style.display = "block";
|
||||
|
||||
}
|
||||
catch(error)
|
||||
{
|
||||
//alert(error); // Oh dear, someones stolen the iframe
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Work around for safari which doesnt
|
||||
// allow a hrefs top be clickable in
|
||||
// a pop up div
|
||||
//----------------------------------
|
||||
|
||||
if ( is_safari )
|
||||
{
|
||||
try
|
||||
{
|
||||
mlinks = this.cid_menu_obj.getElementsByTagName('a');
|
||||
|
||||
for ( var i = 0 ; i <= mlinks.length ; i++ )
|
||||
{
|
||||
//----------------------------------
|
||||
// Ignore non links and links that end with #
|
||||
// As safari likes to do that with href='#' links
|
||||
//----------------------------------
|
||||
|
||||
if ( mlinks[i] != null
|
||||
&& mlinks[i].href != null
|
||||
&& mlinks[i].href
|
||||
&& ( mlinks[i].href.indexOf( '#', 0 ) != (mlinks[i].href.length - 1) )
|
||||
)
|
||||
{
|
||||
mlinks[i].onmousedown = ips_menu_events.prototype.event_safari_onclick_handler;
|
||||
mlinks[i].id = 'saf-link-' + this.cid + i;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( error )
|
||||
{
|
||||
//alert( error );
|
||||
}
|
||||
}
|
||||
|
||||
if ( this.cid_obj.editor_id )
|
||||
{
|
||||
this.cid_obj.state = true;
|
||||
IPS_editor[this.cid_obj.editor_id].set_menu_context(this.cid_obj, 'mousedown');
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// ips_menu_class: Close a menu
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_class.prototype.close = function()
|
||||
{
|
||||
if ( this.cid_menu_obj != null )
|
||||
{
|
||||
this.cid_menu_obj.style.display = "none";
|
||||
}
|
||||
else if ( ipsmenu.menu_cur_open != null )
|
||||
{
|
||||
ipsmenu.menu_registered[ ipsmenu.menu_cur_open ].cid_menu_obj.style.display = 'none';
|
||||
}
|
||||
|
||||
ipsmenu.menu_cur_open = null;
|
||||
|
||||
if ( this.cid_obj )
|
||||
{
|
||||
if ( ipsmenu.menu_out_css[ this.cid_obj.id ] )
|
||||
{
|
||||
this.cid_obj.className = ipsmenu.menu_out_css[ this.cid_obj.id ];
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Workaround for IE bug which shows
|
||||
// select boxes and other windows GUI
|
||||
// over divs. Hide IFRAME
|
||||
//----------------------------------
|
||||
|
||||
if ( is_ie )
|
||||
{
|
||||
try
|
||||
{
|
||||
document.getElementById( 'if_' + this.cid ).style.display = "none";
|
||||
}
|
||||
catch(error)
|
||||
{
|
||||
//alert(e);// Oh dear, someones stolen the iframe
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// IPS Editor stuff
|
||||
//-----------------------------------------
|
||||
|
||||
if ( this.cid_obj.editor_id )
|
||||
{
|
||||
this.cid_obj.state = false;
|
||||
IPS_editor[ this.cid_obj.editor_id ].set_menu_context( this.cid_obj, 'mouseout' );
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// ACTION: If menu open and hover over another cid, close cur open new
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_class.prototype.hover = function(e)
|
||||
{
|
||||
if ( ipsmenu.menu_cur_open != null )
|
||||
{
|
||||
if ( ipsmenu.menu_registered[ ipsmenu.menu_cur_open ].cid != this.id )
|
||||
{
|
||||
this.open(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// INIT: ips menu events
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
function ips_menu_events()
|
||||
{
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Safari: bug fix
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_events.prototype.event_safari_onclick_handler = function()
|
||||
{
|
||||
if ( this.id )
|
||||
{
|
||||
window.location = document.getElementById( this.id ).href;
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Event: On mouseover
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_events.prototype.event_onmouseover = function(e)
|
||||
{
|
||||
e = ipsclass.cancel_bubble(e, true);
|
||||
ipsmenu.menu_registered[ this.id ].hover(this);
|
||||
|
||||
if ( ipsmenu.menu_over_css[ this.id ] )
|
||||
{
|
||||
this.className = ipsmenu.menu_over_css[ this.id ];
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Event: On mouseout
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_events.prototype.event_onmouseout = function(e)
|
||||
{
|
||||
e = ipsclass.cancel_bubble(e, true);
|
||||
|
||||
if ( ipsmenu.menu_out_css[ this.id ] && ipsmenu.menu_cur_open != this.id )
|
||||
{
|
||||
this.className = ipsmenu.menu_out_css[ this.id ];
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Event: On click
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
ips_menu_events.prototype.event_onclick = function(e)
|
||||
{
|
||||
e = ipsclass.cancel_bubble(e, true);
|
||||
|
||||
if ( ipsmenu.menu_cur_open == null )
|
||||
{
|
||||
if ( ipsmenu.menu_over_css[ this.id ] )
|
||||
{
|
||||
this.className = ipsmenu.menu_over_css[ this.id ];
|
||||
}
|
||||
|
||||
ipsmenu.menu_registered[ this.id ].open(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
// For the RTE, if we click from font to size, for example
|
||||
// we want the menu to open...
|
||||
|
||||
//ipsmenu.menu_registered[ this.id ].close();
|
||||
|
||||
if ( ipsmenu.menu_cur_open == this.id )
|
||||
{
|
||||
ipsmenu.menu_registered[ this.id ].close();
|
||||
|
||||
if ( ipsmenu.menu_out_css[ this.id ] )
|
||||
{
|
||||
this.className = ipsmenu.menu_out_css[ this.id ];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ipsmenu.menu_over_css[ this.id ] )
|
||||
{
|
||||
this.className = ipsmenu.menu_over_css[ this.id ];
|
||||
}
|
||||
|
||||
ipsmenu.menu_registered[ this.id ].open(this);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Global INIT
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
function menu_do_global_init()
|
||||
{
|
||||
//----------------------------------
|
||||
// Close all menus on click
|
||||
//----------------------------------
|
||||
|
||||
document.onclick = menu_action_close;
|
||||
|
||||
//----------------------------------
|
||||
// Write HTML
|
||||
//----------------------------------
|
||||
|
||||
if ( ipsmenu.dynamic_html != null && ipsmenu.dynamic_html != '' )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// Register
|
||||
//----------------------------------
|
||||
|
||||
if ( ipsmenu.dynamic_register.length )
|
||||
{
|
||||
for( var i=0; i < ipsmenu.dynamic_register.length; i++ )
|
||||
{
|
||||
if ( ipsmenu.dynamic_register[i] )
|
||||
{
|
||||
ipsmenu.register( ipsmenu.dynamic_register[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// Global: Close menus from any app
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
function menu_action_close(e)
|
||||
{
|
||||
try {
|
||||
if( e.button == 2 || e.button == 3 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch( acold ) {};
|
||||
|
||||
ipsmenu.close(e);
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user