<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ifigenia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AJSconfig.js</id>
	<title>MediaWiki:JSconfig.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ifigenia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AJSconfig.js"/>
	<link rel="alternate" type="text/html" href="https://ifigenia.org/index.php?title=MediaWiki:JSconfig.js&amp;action=history"/>
	<updated>2026-04-18T11:42:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://ifigenia.org/index.php?title=MediaWiki:JSconfig.js&amp;diff=20&amp;oldid=prev</id>
		<title>Ifigenia Administrator: New page: /** Attach (or remove) an Event to a specific object **********  * Cross-browser event attachment (John Resig)  * http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html  * ...</title>
		<link rel="alternate" type="text/html" href="https://ifigenia.org/index.php?title=MediaWiki:JSconfig.js&amp;diff=20&amp;oldid=prev"/>
		<updated>2008-10-07T23:12:28Z</updated>

		<summary type="html">&lt;p&gt;New page: /** Attach (or remove) an Event to a specific object **********  * Cross-browser event attachment (John Resig)  * http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html  * ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/** Attach (or remove) an Event to a specific object **********&lt;br /&gt;
 * Cross-browser event attachment (John Resig)&lt;br /&gt;
 * http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html&lt;br /&gt;
 *&lt;br /&gt;
 * obj  : DOM tree object to attach the event to&lt;br /&gt;
 * type : String, event type (&amp;quot;click&amp;quot;, &amp;quot;mouseover&amp;quot;, &amp;quot;submit&amp;quot;, etc.)&lt;br /&gt;
 * fn   : Function to be called when the event is triggered (the &amp;#039;&amp;#039;this&amp;#039;&amp;#039;&lt;br /&gt;
 *        keyword points to &amp;#039;&amp;#039;obj&amp;#039;&amp;#039; inside &amp;#039;&amp;#039;fn&amp;#039;&amp;#039; when the event is triggered)&lt;br /&gt;
 *&lt;br /&gt;
 * Local Maintainer: [[meta:User:Dschwen]]&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
function addEvent( obj, type, fn )&lt;br /&gt;
{&lt;br /&gt;
 if (obj.addEventListener)&lt;br /&gt;
  obj.addEventListener( type, fn, false );&lt;br /&gt;
 else if (obj.attachEvent)&lt;br /&gt;
 {&lt;br /&gt;
  obj[&amp;quot;e&amp;quot;+type+fn] = fn;&lt;br /&gt;
  obj[type+fn] = function() { obj[&amp;quot;e&amp;quot;+type+fn]( window.event ); }&lt;br /&gt;
  obj.attachEvent( &amp;quot;on&amp;quot;+type, obj[type+fn] );&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function removeEvent( obj, type, fn )&lt;br /&gt;
{&lt;br /&gt;
 if (obj.removeEventListener)&lt;br /&gt;
  obj.removeEventListener( type, fn, false );&lt;br /&gt;
 else if (obj.detachEvent)&lt;br /&gt;
 {&lt;br /&gt;
  obj.detachEvent( &amp;quot;on&amp;quot;+type, obj[type+fn] );&lt;br /&gt;
  obj[type+fn] = null;&lt;br /&gt;
  obj[&amp;quot;e&amp;quot;+type+fn] = null;&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** JSconfig ************&lt;br /&gt;
 * (copied from [[meta:MediaWiki:Common.js]])&lt;br /&gt;
 *&lt;br /&gt;
 * Global configuration options to enable/disable and configure&lt;br /&gt;
 * specific script features from [[MediaWiki:Common.js]] and&lt;br /&gt;
 * [[MediaWiki:Monobook.js]]&lt;br /&gt;
 * This framework adds config options (saved as cookies) to [[Special:Preferences]]&lt;br /&gt;
 * For a more permanent change you can override the default settings in your &lt;br /&gt;
 * [[Special:Mypage/monobook.js]]&lt;br /&gt;
 * for Example: JSconfig.keys[loadAutoInformationTemplate] = false;&lt;br /&gt;
 *&lt;br /&gt;
 *  Maintainer: [[meta:User:Dschwen]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var JSconfig =&lt;br /&gt;
{&lt;br /&gt;
 prefix : &amp;#039;jsconfig_&amp;#039;,&lt;br /&gt;
 keys : {},&lt;br /&gt;
 meta : {},&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 // Register a new configuration item&lt;br /&gt;
 //  * name          : String, internal name&lt;br /&gt;
 //  * default_value : String or Boolean (type determines configuration widget)&lt;br /&gt;
 //  * description   : String, text appearing next to the widget in the preferences&lt;br /&gt;
 //  * prefpage      : Integer (optional), section in the preferences to insert the widget:&lt;br /&gt;
 //                     0 : User profile&lt;br /&gt;
 //                     1 : Skin&lt;br /&gt;
 //                     2 : Math&lt;br /&gt;
 //                     3 : Files&lt;br /&gt;
 //                     4 : Date and time&lt;br /&gt;
 //                     5 : Editing&lt;br /&gt;
 //                     6 : Recent changes&lt;br /&gt;
 //                     7 : Watchlist&lt;br /&gt;
 //                     8 : Search&lt;br /&gt;
 //                     9 : Misc&lt;br /&gt;
 //&lt;br /&gt;
 // Access keys through JSconfig.keys[name]&lt;br /&gt;
 //&lt;br /&gt;
 registerKey : function( name, default_value, description, prefpage )&lt;br /&gt;
 {&lt;br /&gt;
  if( typeof(JSconfig.keys[name]) == &amp;#039;undefined&amp;#039; ) &lt;br /&gt;
   JSconfig.keys[name] = default_value;&lt;br /&gt;
  else {&lt;br /&gt;
 &lt;br /&gt;
   // all cookies are read as strings, &lt;br /&gt;
   // convert to the type of the default value&lt;br /&gt;
   switch( typeof(default_value) )&lt;br /&gt;
   {&lt;br /&gt;
    case &amp;#039;boolean&amp;#039; : JSconfig.keys[name] = ( JSconfig.keys[name] == &amp;#039;true&amp;#039; ); break;&lt;br /&gt;
    case &amp;#039;number&amp;#039;  : JSconfig.keys[name] = JSconfig.keys[name]/1; break;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  JSconfig.meta[name] = { &amp;#039;description&amp;#039; : description, &amp;#039;page&amp;#039; : prefpage || 0, &amp;#039;default_value&amp;#039; : default_value };&lt;br /&gt;
 },&lt;br /&gt;
 &lt;br /&gt;
 readCookies : function()&lt;br /&gt;
 {&lt;br /&gt;
  var cookies = document.cookie.split(&amp;quot;; &amp;quot;);&lt;br /&gt;
  var p =JSconfig.prefix.length;&lt;br /&gt;
  var i;&lt;br /&gt;
 &lt;br /&gt;
  for( var key in cookies )&lt;br /&gt;
  {&lt;br /&gt;
   if( cookies[key].substring(0,p) == JSconfig.prefix )&lt;br /&gt;
   {&lt;br /&gt;
    i = cookies[key].indexOf(&amp;#039;=&amp;#039;);&lt;br /&gt;
    //alert( cookies[key] + &amp;#039;,&amp;#039; + key + &amp;#039;,&amp;#039; + cookies[key].substring(p,i) );&lt;br /&gt;
    JSconfig.keys[cookies[key].substring(p,i)] = cookies[key].substring(i+1);&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
 },&lt;br /&gt;
 &lt;br /&gt;
 writeCookies : function()&lt;br /&gt;
 {&lt;br /&gt;
  for( var key in JSconfig.keys )&lt;br /&gt;
   document.cookie = JSconfig.prefix + key + &amp;#039;=&amp;#039; + JSconfig.keys[key] + &amp;#039;; path=/; expires=Thu, 2 Aug 2009 10:10:10 UTC&amp;#039;;&lt;br /&gt;
 },&lt;br /&gt;
 &lt;br /&gt;
 evaluateForm : function()&lt;br /&gt;
 {&lt;br /&gt;
  var w_ctrl,wt;&lt;br /&gt;
  //alert(&amp;#039;about to save JSconfig&amp;#039;);&lt;br /&gt;
  for( var key in JSconfig.meta ) {&lt;br /&gt;
   w_ctrl = document.getElementById( JSconfig.prefix + key )&lt;br /&gt;
   if( w_ctrl ) &lt;br /&gt;
   {&lt;br /&gt;
    wt = typeof( JSconfig.meta[key].default_value );&lt;br /&gt;
    switch( wt ) {&lt;br /&gt;
     case &amp;#039;boolean&amp;#039; : JSconfig.keys[key] = w_ctrl.checked; break;&lt;br /&gt;
     case &amp;#039;string&amp;#039; : JSconfig.keys[key] = w_ctrl.value; break;&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  JSconfig.writeCookies();&lt;br /&gt;
  return true;&lt;br /&gt;
 },&lt;br /&gt;
 &lt;br /&gt;
 setUpForm : function()&lt;br /&gt;
 { &lt;br /&gt;
  var prefChild = document.getElementById(&amp;#039;preferences&amp;#039;);&lt;br /&gt;
  if( !prefChild ) return;&lt;br /&gt;
  prefChild = prefChild.childNodes;&lt;br /&gt;
 &lt;br /&gt;
  //&lt;br /&gt;
  // make a list of all preferences sections&lt;br /&gt;
  //&lt;br /&gt;
  var tabs = new Array;&lt;br /&gt;
  var len = prefChild.length;&lt;br /&gt;
  for( var key = 0; key &amp;lt; len; key++ ) {&lt;br /&gt;
   if( prefChild[key].tagName &amp;amp;&amp;amp;&lt;br /&gt;
       prefChild[key].tagName.toLowerCase() == &amp;#039;fieldset&amp;#039; ) &lt;br /&gt;
    tabs.push(prefChild[key]);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  //&lt;br /&gt;
  // Create Widgets for all registered config keys&lt;br /&gt;
  //&lt;br /&gt;
  var w_div, w_label, w_ctrl, wt;&lt;br /&gt;
  for( var key in JSconfig.meta ) {&lt;br /&gt;
   w_div = document.createElement( &amp;#039;DIV&amp;#039; );&lt;br /&gt;
 &lt;br /&gt;
   w_label = document.createElement( &amp;#039;LABEL&amp;#039; );&lt;br /&gt;
   w_label.appendChild( document.createTextNode( JSconfig.meta[key].description ) )&lt;br /&gt;
   w_label.htmlFor = JSconfig.prefix + key;&lt;br /&gt;
 &lt;br /&gt;
   wt = typeof( JSconfig.meta[key].default_value );&lt;br /&gt;
 &lt;br /&gt;
   w_ctrl = document.createElement( &amp;#039;INPUT&amp;#039; );&lt;br /&gt;
   w_ctrl.id = JSconfig.prefix + key;&lt;br /&gt;
 &lt;br /&gt;
   // before insertion into the DOM tree&lt;br /&gt;
   switch( wt ) {&lt;br /&gt;
    case &amp;#039;boolean&amp;#039; : w_ctrl.type = &amp;#039;checkbox&amp;#039;; break;&lt;br /&gt;
    case &amp;#039;string&amp;#039;  : w_ctrl.type = &amp;#039;text&amp;#039;; break;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   w_div.appendChild( w_label );&lt;br /&gt;
   w_div.appendChild( w_ctrl );&lt;br /&gt;
   tabs[JSconfig.meta[key].page].appendChild( w_div );&lt;br /&gt;
 &lt;br /&gt;
   // after insertion into the DOM tree&lt;br /&gt;
   switch( wt ) {&lt;br /&gt;
    case &amp;#039;boolean&amp;#039; : w_ctrl.defaultChecked = w_ctrl.checked = JSconfig.keys[key]; break;&lt;br /&gt;
    case &amp;#039;string&amp;#039; : w_ctrl.defaultValue = w_ctrl.value = JSconfig.keys[key]; break;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
  }&lt;br /&gt;
  addEvent(document.getElementById(&amp;#039;preferences&amp;#039;).parentNode, &amp;#039;submit&amp;#039;, JSconfig.evaluateForm );&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
JSconfig.readCookies();&lt;br /&gt;
addOnloadHook(JSconfig.setUpForm);&lt;/div&gt;</summary>
		<author><name>Ifigenia Administrator</name></author>
	</entry>
</feed>