window.os_container_max_width = 2;
// currently active animation timer
window.os_animation_timer = null;
+// whether MWSuggest is enabled. Set to false when os_MWSuggestDisable() is called
+window.os_enabled = true;
+
/**
* <datalist> is a new HTML5 element that allows you to manually supply
* suggestion lists and have them rendered according to the right platform
/** Initialization, call upon page onload */
window.os_MWSuggestInit = function() {
- for( i = 0; i < os_autoload_inputs.length; i++ ) {
+ if ( !window.os_enabled ) {
+ return;
+ }
+
+ for( var i = 0; i < os_autoload_inputs.length; i++ ) {
var id = os_autoload_inputs[i];
var form = os_autoload_forms[i];
element = document.getElementById( id );
}
};
+/* Teardown, called when things like SimpleSearch need to disable MWSuggest */
+window.os_MWSuggestTeardown = function() {
+ for( var i = 0; i < os_autoload_inputs.length; i++ ) {
+ var id = os_autoload_inputs[i];
+ var form = os_autoload_forms[i];
+ element = document.getElementById( id );
+ if( element != null ) {
+ os_teardownHandlers( id, form, element );
+ }
+ }
+};
+
+/* Call this to disable MWSuggest. Works regardless of whether MWSuggest has been initialized already. */
+window.os_MWSuggestDisable = function() {
+ window.os_MWSuggestTeardown();
+ window.os_enabled = false;
+}
+
+
/** Init Result objects and event handlers */
window.os_initHandlers = function( name, formname, element ) {
var r = new os_Results( name, formname );
return;
}
// event handler
- os_hookEvent( element, 'keyup', function( event ) { os_eventKeyup( event ); } );
- os_hookEvent( element, 'keydown', function( event ) { os_eventKeydown( event ); } );
- os_hookEvent( element, 'keypress', function( event ) { os_eventKeypress( event ); } );
+ os_hookEvent( element, 'keyup', os_eventKeyup );
+ os_hookEvent( element, 'keydown', os_eventKeydown );
+ os_hookEvent( element, 'keypress', os_eventKeypress );
if ( !os_use_datalist ) {
// These are needed for the div hack to hide it if the user blurs.
- os_hookEvent( element, 'blur', function( event ) { os_eventBlur( event ); } );
- os_hookEvent( element, 'focus', function( event ) { os_eventFocus( event ); } );
+ os_hookEvent( element, 'blur', os_eventBlur );
+ os_hookEvent( element, 'focus', os_eventFocus );
// We don't want browser auto-suggestions interfering with our div, but
// autocomplete must be on for datalist to work (at least in Opera
// 10.10).
element.setAttribute( 'autocomplete', 'off' );
}
// stopping handler
- os_hookEvent( formElement, 'submit', function( event ) { return os_eventOnsubmit( event ); } );
+ os_hookEvent( formElement, 'submit', os_eventOnsubmit );
os_map[name] = r;
// toggle link
if( document.getElementById( r.toggle ) == null ) {
};
+window.os_teardownHandlers = function( name, formname, element ) {
+ var formElement = document.getElementById( formname );
+ if( !formElement ) {
+ // Older browsers (Opera 8) cannot get form elements
+ return;
+ }
+
+ os_unhookEvent( element, 'keyup', os_eventKeyup );
+ os_unhookEvent( element, 'keydown', os_eventKeydown );
+ os_unhookEvent( element, 'keypress', os_eventKeypress );
+ if ( !os_use_datalist ) {
+ // These are needed for the div hack to hide it if the user blurs.
+ os_unhookEvent( element, 'blur', os_eventBlur );
+ os_unhookEvent( element, 'focus', os_eventFocus );
+ // We don't want browser auto-suggestions interfering with our div, but
+ // autocomplete must be on for datalist to work (at least in Opera
+ // 10.10).
+ element.removeAttribute( 'autocomplete' );
+ }
+ // stopping handler
+ os_unhookEvent( formElement, 'submit', os_eventOnsubmit );
+};
+
+
window.os_hookEvent = function( element, hookName, hookFunct ) {
if ( element.addEventListener ) {
element.addEventListener( hookName, hookFunct, false );
}
};
+window.os_unhookEvent = function( element, hookName, hookFunct ) {
+ if ( element.removeEventListener ) {
+ element.removeEventListener( hookName, hookFunct, false );
+ } else if ( element.detachEvent ) {
+ element.detachEvent( 'on' + hookName, hookFunct );
+ }
+}
+
/********************
* Keyboard events
********************/