200 lines
5.4 KiB
JavaScript
200 lines
5.4 KiB
JavaScript
/************************************************/
|
|
/* IPB3 Javascript */
|
|
/* -------------------------------------------- */
|
|
/* ips.global.js - Global functionality */
|
|
/* (c) IPS, Inc 2008 */
|
|
/* -------------------------------------------- */
|
|
/* Author: Rikki Tissier */
|
|
/************************************************/
|
|
|
|
ACPLiveSearch = {
|
|
searchTimer: [],
|
|
searchLastQuery: '',
|
|
hasCleared: false,
|
|
ohJustFreakingStop: false,
|
|
|
|
/*------------------------------*/
|
|
/* Constructor */
|
|
init: function()
|
|
{
|
|
Debug.write("Initializing acp.livesearch.js");
|
|
|
|
document.observe("dom:loaded", function(){
|
|
ACPLiveSearch.initEvents();
|
|
});
|
|
},
|
|
initEvents: function()
|
|
{
|
|
if( !$('acpSearchKeyword') )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
/*$$('.__user').each( function(elem){
|
|
ipb.namePops[ elem.identify() ] = [];
|
|
|
|
elem.observe("mouseover", ACPLiveSearch.timer_showUserPopup);
|
|
elem.observe("mouseout", ACPLiveSearch.timer_hideUserPopup);
|
|
});*/
|
|
|
|
$('acpSearchKeyword').observe("focus", ACPLiveSearch.timer_liveSearch );
|
|
$('acpSearchKeyword').observe("blur", ACPLiveSearch.timer_hideLiveSearch );
|
|
$('acpSearchKeyword').writeAttribute({autocomplete: "off"}); /* Turn off autocomplete */
|
|
},
|
|
|
|
/* ------------------------------ */
|
|
/**
|
|
* Timer for live searching
|
|
*
|
|
* @param {event} e The event
|
|
*/
|
|
timer_liveSearch: function(e)
|
|
{
|
|
if( !ACPLiveSearch.hasCleared )
|
|
{
|
|
$('acpSearchKeyword').value = '';
|
|
ACPLiveSearch.hasCleared = true;
|
|
}
|
|
|
|
ACPLiveSearch.searchTimer['show'] = setTimeout( ACPLiveSearch.liveSearch, 400 );
|
|
},
|
|
|
|
/* ------------------------------ */
|
|
/**
|
|
* TImer for hiding live search
|
|
*
|
|
* @param {event} e The event
|
|
*/
|
|
timer_hideLiveSearch: function(e)
|
|
{
|
|
ACPLiveSearch.searchTimer['hide'] = setTimeout( ACPLiveSearch.hideLiveSearch, 800 );
|
|
},
|
|
|
|
/* ------------------------------ */
|
|
/**
|
|
* Actually hides live search
|
|
*
|
|
* @param {event} e The event
|
|
*/
|
|
hideLiveSearch: function(e)
|
|
{
|
|
new Effect.Fade( $('live_search_popup'), { duration: 0.4, afterFinish: function(){
|
|
$('ajax_result').update('');
|
|
} } );
|
|
|
|
ACPLiveSearch.searchLastQuery = '';
|
|
clearTimeout( ACPLiveSearch.searchTimer['show'] );
|
|
clearTimeout( ACPLiveSearch.searchTimer['hide'] );
|
|
},
|
|
|
|
/* ------------------------------ */
|
|
/**
|
|
* Live search routine
|
|
*
|
|
* @param {event} e The event
|
|
*/
|
|
liveSearch: function(e)
|
|
{
|
|
// Keep loopy going
|
|
ACPLiveSearch.timer_liveSearch();
|
|
|
|
var val = $F('acpSearchKeyword').strip();
|
|
|
|
// If too few chars, dont do anything
|
|
if( val.length < 3 || ACPLiveSearch.ohJustFreakingStop === true ){ return; }
|
|
|
|
// Is the popup available?
|
|
if( !$('live_search_popup') )
|
|
{
|
|
Debug.write("Creating popup");
|
|
ACPLiveSearch.buildSearchPopup();
|
|
}
|
|
else if( !$('live_search_popup').visible() )
|
|
{
|
|
new Effect.Appear( $('live_search_popup'), {duration: 0.4} );
|
|
}
|
|
|
|
// Is the text the same as last time?
|
|
if( $F('acpSearchKeyword') == ACPLiveSearch.searchLastQuery ){ return; } /* continue looping */
|
|
|
|
//Get hits
|
|
new Ajax.Request(
|
|
ipb.vars['base_url'].replace( /&/g, '&' ) + "app=core&module=ajax§ion=livesearch&do=search&secure_key=" + ipb.vars['md5_hash'] + "&search_term=" + val ,
|
|
{
|
|
method: 'get',
|
|
onSuccess: function(t){
|
|
|
|
/* Logged out? */
|
|
if ( t.responseText.match( "__session__expired__log__out__" ) )
|
|
{
|
|
clearTimeout( ACPLiveSearch.searchTimer['show'] );
|
|
clearTimeout( ACPLiveSearch.searchTimer['hide'] );
|
|
|
|
$('acpSearchKeyword').stopObserving("focus");
|
|
$('acpSearchKeyword').stopObserving("blur");
|
|
|
|
$('live_search_popup').hide();
|
|
|
|
/* Argh!!! */
|
|
ACPLiveSearch.ohJustFreakingStop = true;
|
|
|
|
alert( "Your Admin CP session has expired, please refresh the page and log back in" );
|
|
|
|
return false;
|
|
}
|
|
|
|
if ( ! t.responseText )
|
|
{
|
|
ACPLiveSearch.searchLastQuery = val;
|
|
ACPLiveSearch.hideLiveSearch();
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
$('ajax_result').update( t.responseText );
|
|
}
|
|
},
|
|
//onException: function( f,e ){ alert( "Exception: " + e ) },
|
|
onFailure: function( t ){ alert( "Failure: " + t.responseText ) }
|
|
}
|
|
);
|
|
|
|
/* Make sure we set this value so we don't run unnecessary ajax requests */
|
|
ACPLiveSearch.searchLastQuery = $F('acpSearchKeyword');
|
|
},
|
|
|
|
/* ------------------------------ */
|
|
/**
|
|
* Builds the popup for live search
|
|
*
|
|
* @param {event} e The event
|
|
*/
|
|
buildSearchPopup: function(e)
|
|
{
|
|
pos = $('acpSearchKeyword').cumulativeOffset();
|
|
finalPos = {
|
|
top: pos.top + $('acpSearchKeyword').getHeight(),
|
|
left: ( pos.left + 45 )
|
|
};
|
|
|
|
popup = new Element('div', { id: 'live_search_popup' } ).hide().setStyle('top: ' + finalPos.top + 'px; left: ' + finalPos.left + 'px');
|
|
$('ipboard_body').insert({ bottom: popup });
|
|
|
|
|
|
//Get form
|
|
new Ajax.Request( ipb.vars['base_url'].replace( /&/g, '&' ) + "app=core&module=ajax§ion=livesearch&do=template&secure_key=" + ipb.vars['md5_hash'],
|
|
{
|
|
method: 'get',
|
|
onSuccess: function(t){
|
|
if ( ! t.responseText.match( "__session__expired__log__out__" ) )
|
|
{
|
|
popup.update( t.responseText );
|
|
}
|
|
//ACPLiveSearch.liveSearch();
|
|
}
|
|
});
|
|
|
|
new Effect.Appear( $('live_search_popup'), {duration: 0.3} );
|
|
}
|
|
}
|
|
ACPLiveSearch.init(); |