MediaWiki:Common.js — различия между версиями
Материал из ЭНЭ
м (удаление устаревшего кода) |
Evgen (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
+ | //<source lang="javascript"> | ||
/* <pre> */ | /* <pre> */ | ||
var mpTitle = "Заглавная страница"; | var mpTitle = "Заглавная страница"; | ||
var isMainPage = (document.title.substr(0, document.title.lastIndexOf(" — ")) == mpTitle); | var isMainPage = (document.title.substr(0, document.title.lastIndexOf(" — ")) == mpTitle); | ||
var isDiff = (document.location.search && (document.location.search.indexOf("diff=") != -1 || document.location.search.indexOf("oldid=") != -1)); | var isDiff = (document.location.search && (document.location.search.indexOf("diff=") != -1 || document.location.search.indexOf("oldid=") != -1)); | ||
+ | |||
+ | /** JSconfig (old version, to be replaced soon) ************ | ||
+ | * Global configuration options to enable and disable specific | ||
+ | * script features from [[MediaWiki:Common.js]] | ||
+ | * Override these default settings in your [[Special:Mypage/monobook.js]] | ||
+ | * for Example: JSconfig.loadAutoInformationTemplate = false; | ||
+ | * | ||
+ | * Maintainer: [[User:Dschwen]] | ||
+ | */ | ||
+ | |||
+ | var JSconfig_old = | ||
+ | { | ||
+ | loadAutoInformationTemplate : true, | ||
+ | specialSearchEnhanced : true, | ||
+ | subPagesLink : true, | ||
+ | attributeSelf : true, | ||
+ | userUploadsLink : true | ||
+ | } | ||
+ | |||
+ | |||
+ | /** JSconfig ************ | ||
+ | * Global configuration options to enable/disable and configure | ||
+ | * specific script features from [[MediaWiki:Common.js]] and | ||
+ | * [[MediaWiki:Monobook.js]] | ||
+ | * This framework adds config options (saved as cookies) to [[Special:Preferences]] | ||
+ | * For a more permanent change you can override the default settings in your | ||
+ | * [[Special:Mypage/monobook.js]] | ||
+ | * for Example: JSconfig.keys[loadAutoInformationTemplate] = false; | ||
+ | * | ||
+ | * Maintainer: [[User:Dschwen]] | ||
+ | */ | ||
+ | |||
+ | var JSconfig = | ||
+ | { | ||
+ | prefix : 'jsconfig_', | ||
+ | keys : {}, | ||
+ | meta : {}, | ||
+ | |||
+ | // | ||
+ | // Register a new configuration item | ||
+ | // * name : String, internal name | ||
+ | // * default_value : String or Boolean (type determines configuration widget) | ||
+ | // * description : String, text appearing next to the widget in the preferences | ||
+ | // * prefpage : Integer (optional), section in the preferences to insert the widget: | ||
+ | // 0 : User profile | ||
+ | // 1 : Skin | ||
+ | // 2 : Math | ||
+ | // 3 : Files | ||
+ | // 4 : Date and time | ||
+ | // 5 : Editing | ||
+ | // 6 : Recent changes | ||
+ | // 7 : Watchlist | ||
+ | // 8 : Search | ||
+ | // 9 : Misc | ||
+ | // | ||
+ | // Access keys through JSconfig.keys[name] | ||
+ | // | ||
+ | registerKey : function( name, default_value, description, prefpage ) | ||
+ | { | ||
+ | if( typeof(JSconfig.keys[name]) == 'undefined' ) | ||
+ | JSconfig.keys[name] = default_value; | ||
+ | else { | ||
+ | |||
+ | // all cookies are read as strings, | ||
+ | // convert to the type of the default value | ||
+ | switch( typeof(default_value) ) | ||
+ | { | ||
+ | case 'boolean' : JSconfig.keys[name] = ( JSconfig.keys[name] == 'true' ); break; | ||
+ | case 'number' : JSconfig.keys[name] = JSconfig.keys[name]/1; break; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | JSconfig.meta[name] = { 'description' : description, 'page' : prefpage || 0, 'default_value' : default_value }; | ||
+ | }, | ||
+ | |||
+ | readCookies : function() | ||
+ | { | ||
+ | var cookies = document.cookie.split("; "); | ||
+ | var p =JSconfig.prefix.length; | ||
+ | var i; | ||
+ | |||
+ | for( var key in cookies ) | ||
+ | { | ||
+ | if( cookies[key].substring(0,p) == JSconfig.prefix ) | ||
+ | { | ||
+ | i = cookies[key].indexOf('='); | ||
+ | //alert( cookies[key] + ',' + key + ',' + cookies[key].substring(p,i) ); | ||
+ | JSconfig.keys[cookies[key].substring(p,i)] = cookies[key].substring(i+1); | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | |||
+ | writeCookies : function() | ||
+ | { | ||
+ | for( var key in JSconfig.keys ) | ||
+ | document.cookie = JSconfig.prefix + key + '=' + JSconfig.keys[key] + '; path=/; expires=Thu, 2 Aug 2009 10:10:10 UTC'; | ||
+ | }, | ||
+ | |||
+ | evaluateForm : function() | ||
+ | { | ||
+ | var w_ctrl,wt; | ||
+ | //alert('about to save JSconfig'); | ||
+ | for( var key in JSconfig.meta ) { | ||
+ | w_ctrl = document.getElementById( JSconfig.prefix + key ) | ||
+ | if( w_ctrl ) | ||
+ | { | ||
+ | wt = typeof( JSconfig.meta[key].default_value ); | ||
+ | switch( wt ) { | ||
+ | case 'boolean' : JSconfig.keys[key] = w_ctrl.checked; break; | ||
+ | case 'string' : JSconfig.keys[key] = w_ctrl.value; break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | JSconfig.writeCookies(); | ||
+ | return true; | ||
+ | }, | ||
+ | |||
+ | setUpForm : function() | ||
+ | { | ||
+ | var prefChild = document.getElementById('preferences'); | ||
+ | if( !prefChild ) return; | ||
+ | prefChild = prefChild.childNodes; | ||
+ | |||
+ | // | ||
+ | // make a list of all preferences sections | ||
+ | // | ||
+ | var tabs = new Array; | ||
+ | var len = prefChild.length; | ||
+ | for( var key = 0; key < len; key++ ) { | ||
+ | if( prefChild[key].tagName && | ||
+ | prefChild[key].tagName.toLowerCase() == 'fieldset' ) | ||
+ | tabs.push(prefChild[key]); | ||
+ | } | ||
+ | |||
+ | // | ||
+ | // Create Widgets for all registered config keys | ||
+ | // | ||
+ | var w_div, w_label, w_ctrl, wt; | ||
+ | for( var key in JSconfig.meta ) { | ||
+ | w_div = document.createElement( 'DIV' ); | ||
+ | |||
+ | w_label = document.createElement( 'LABEL' ); | ||
+ | w_label.appendChild( document.createTextNode( JSconfig.meta[key].description ) ) | ||
+ | w_label.htmlFor = JSconfig.prefix + key; | ||
+ | |||
+ | wt = typeof( JSconfig.meta[key].default_value ); | ||
+ | |||
+ | w_ctrl = document.createElement( 'INPUT' ); | ||
+ | w_ctrl.id = JSconfig.prefix + key; | ||
+ | |||
+ | // before insertion into the DOM tree | ||
+ | switch( wt ) { | ||
+ | case 'boolean' : w_ctrl.type = 'checkbox'; break; | ||
+ | case 'string' : w_ctrl.type = 'text'; break; | ||
+ | } | ||
+ | |||
+ | w_div.appendChild( w_label ); | ||
+ | w_div.appendChild( w_ctrl ); | ||
+ | tabs[JSconfig.meta[key].page].appendChild( w_div ); | ||
+ | |||
+ | // after insertion into the DOM tree | ||
+ | switch( wt ) { | ||
+ | case 'boolean' : w_ctrl.defaultChecked = w_ctrl.checked = JSconfig.keys[key]; break; | ||
+ | case 'string' : w_ctrl.defaultValue = w_ctrl.value = JSconfig.keys[key]; break; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | addEvent(document.getElementById('preferences').parentNode, 'submit', JSconfig.evaluateForm ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | JSconfig.readCookies(); | ||
+ | addOnloadHook(JSconfig.setUpForm); | ||
if (isMainPage && !isDiff) | if (isMainPage && !isDiff) | ||
Строка 18: | Строка 194: | ||
} | } | ||
} | } | ||
+ | |||
function addLoadEvent(func) | function addLoadEvent(func) | ||
Строка 37: | Строка 214: | ||
/* </pre> */ | /* </pre> */ | ||
+ | //</source> |
Версия 20:28, 3 августа 2008
//<source lang="javascript"> /* <pre> */ var mpTitle = "Заглавная страница"; var isMainPage = (document.title.substr(0, document.title.lastIndexOf(" — ")) == mpTitle); var isDiff = (document.location.search && (document.location.search.indexOf("diff=") != -1 || document.location.search.indexOf("oldid=") != -1)); /** JSconfig (old version, to be replaced soon) ************ * Global configuration options to enable and disable specific * script features from [[MediaWiki:Common.js]] * Override these default settings in your [[Special:Mypage/monobook.js]] * for Example: JSconfig.loadAutoInformationTemplate = false; * * Maintainer: [[User:Dschwen]] */ var JSconfig_old = { loadAutoInformationTemplate : true, specialSearchEnhanced : true, subPagesLink : true, attributeSelf : true, userUploadsLink : true } /** JSconfig ************ * Global configuration options to enable/disable and configure * specific script features from [[MediaWiki:Common.js]] and * [[MediaWiki:Monobook.js]] * This framework adds config options (saved as cookies) to [[Special:Preferences]] * For a more permanent change you can override the default settings in your * [[Special:Mypage/monobook.js]] * for Example: JSconfig.keys[loadAutoInformationTemplate] = false; * * Maintainer: [[User:Dschwen]] */ var JSconfig = { prefix : 'jsconfig_', keys : {}, meta : {}, // // Register a new configuration item // * name : String, internal name // * default_value : String or Boolean (type determines configuration widget) // * description : String, text appearing next to the widget in the preferences // * prefpage : Integer (optional), section in the preferences to insert the widget: // 0 : User profile // 1 : Skin // 2 : Math // 3 : Files // 4 : Date and time // 5 : Editing // 6 : Recent changes // 7 : Watchlist // 8 : Search // 9 : Misc // // Access keys through JSconfig.keys[name] // registerKey : function( name, default_value, description, prefpage ) { if( typeof(JSconfig.keys[name]) == 'undefined' ) JSconfig.keys[name] = default_value; else { // all cookies are read as strings, // convert to the type of the default value switch( typeof(default_value) ) { case 'boolean' : JSconfig.keys[name] = ( JSconfig.keys[name] == 'true' ); break; case 'number' : JSconfig.keys[name] = JSconfig.keys[name]/1; break; } } JSconfig.meta[name] = { 'description' : description, 'page' : prefpage || 0, 'default_value' : default_value }; }, readCookies : function() { var cookies = document.cookie.split("; "); var p =JSconfig.prefix.length; var i; for( var key in cookies ) { if( cookies[key].substring(0,p) == JSconfig.prefix ) { i = cookies[key].indexOf('='); //alert( cookies[key] + ',' + key + ',' + cookies[key].substring(p,i) ); JSconfig.keys[cookies[key].substring(p,i)] = cookies[key].substring(i+1); } } }, writeCookies : function() { for( var key in JSconfig.keys ) document.cookie = JSconfig.prefix + key + '=' + JSconfig.keys[key] + '; path=/; expires=Thu, 2 Aug 2009 10:10:10 UTC'; }, evaluateForm : function() { var w_ctrl,wt; //alert('about to save JSconfig'); for( var key in JSconfig.meta ) { w_ctrl = document.getElementById( JSconfig.prefix + key ) if( w_ctrl ) { wt = typeof( JSconfig.meta[key].default_value ); switch( wt ) { case 'boolean' : JSconfig.keys[key] = w_ctrl.checked; break; case 'string' : JSconfig.keys[key] = w_ctrl.value; break; } } } JSconfig.writeCookies(); return true; }, setUpForm : function() { var prefChild = document.getElementById('preferences'); if( !prefChild ) return; prefChild = prefChild.childNodes; // // make a list of all preferences sections // var tabs = new Array; var len = prefChild.length; for( var key = 0; key < len; key++ ) { if( prefChild[key].tagName && prefChild[key].tagName.toLowerCase() == 'fieldset' ) tabs.push(prefChild[key]); } // // Create Widgets for all registered config keys // var w_div, w_label, w_ctrl, wt; for( var key in JSconfig.meta ) { w_div = document.createElement( 'DIV' ); w_label = document.createElement( 'LABEL' ); w_label.appendChild( document.createTextNode( JSconfig.meta[key].description ) ) w_label.htmlFor = JSconfig.prefix + key; wt = typeof( JSconfig.meta[key].default_value ); w_ctrl = document.createElement( 'INPUT' ); w_ctrl.id = JSconfig.prefix + key; // before insertion into the DOM tree switch( wt ) { case 'boolean' : w_ctrl.type = 'checkbox'; break; case 'string' : w_ctrl.type = 'text'; break; } w_div.appendChild( w_label ); w_div.appendChild( w_ctrl ); tabs[JSconfig.meta[key].page].appendChild( w_div ); // after insertion into the DOM tree switch( wt ) { case 'boolean' : w_ctrl.defaultChecked = w_ctrl.checked = JSconfig.keys[key]; break; case 'string' : w_ctrl.defaultValue = w_ctrl.value = JSconfig.keys[key]; break; } } addEvent(document.getElementById('preferences').parentNode, 'submit', JSconfig.evaluateForm ); } } JSconfig.readCookies(); addOnloadHook(JSconfig.setUpForm); if (isMainPage && !isDiff) { document.write('<style type="text/css">/*<![CDATA[*/ #siteSub, #contentSub, h1.firstHeading { display: none !important; } /*]]>*/</style>'); } /* подгрузка файла со скриптами для редактирования ***************************************** */ if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0) { if (wgCanonicalNamespace != "Special") { document.write('<script type="text/javascript" src="/index.php?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>'); } } function addLoadEvent(func) { if (window.addEventListener) window.addEventListener("load", func, false); else if (window.attachEvent) window.attachEvent("onload", func); } // русификация кнопок на панели инструментов if (wgAction == 'edit' || wgAction == 'submit') addOnloadHook(function(){ if (mwEditButtons.length < 3) return; mwEditButtons[0].imageFile = 'http://wiki.laser.ru/images/9/9a/Button_boldru.png'; mwEditButtons[1].imageFile = 'http://wiki.laser.ru/images/8/88/Button_italicru.png'; mwEditButtons[2].imageFile = 'http://wiki.laser.ru/images/0/03/Button_internal_link_ukr.png' }) /* </pre> */ //</source>