MediaWiki talk:Charset.js
From Wikipedia, the free encyclopedia
This is the improved code User:Locke Cole and I created at User:Locke Cole/edittoolstest.html. It removes the need to put languages in the javascript code and will save the language in a cookie so someone who always uses the same one doesn't have to reselect it. The current page can be replaced with the below version in its entirety. I have tested it in my monobook.js and it seems to be working fine. Copy what's between "<!----><pre>" and "<!----></pre>" in the wikisource.
/********************/
/* Cookie functions */
/********************/
/* returns a cookie value for the specified cookie name, or blank ('') */
function fnGetCookie(name) {
var cookiestring = '' + document.cookie;
var idx1 = cookiestring.indexOf(name);
if ((idx1 == -1) || (name == ''))
return '';
var idx2 = cookiestring.indexOf(';', idx1);
if (idx2 == -1)
idx2 = cookiestring.length;
return unescape(cookiestring.substring(idx1 + name.length + 1, idx2));
}
/* sets a cookie with a one year expiration */
function fnSetCookie(name, value) {
var y = 365 * 24 * 60 * 60 * 1000;
fnSetCookie(name, value, y);
}
/* sets a cookie with a with a duration given in milliseconds */
function fnSetCookie(name, value, duration) {
var d = new Date();
d.setTime(d.getTime() + duration);
var c = name + '=' + escape(value) + ';expires=' + d.toUTCString();
document.cookie = c;
}
/******************************/
/* Charset specific functions */
/******************************/
/* select subsection of special characters */
function fnCharsetChooseSubset(s) {
var l = document.getElementById('specialchars').getElementsByTagName('p');
for (var i = 0; i < l.length ; i++) {
l[i].style.display = i == s ? 'inline' : 'none';
l[i].style.visibility = i == s ? 'visible' : 'hidden';
}
}
/* create charset dropdown box */
function fnCharsetLoad() {
var l = document.getElementById('specialchars');
if (l) {
l.innerHTML = '<select id="charsetBox" style="display: inline" onkeyup="fnCharsetChooseSubset(selectedIndex)" onchange="fnCharsetChooseSubset(selectedIndex)">' + l.innerHTML;
}
var b = document.getElementById('charsetBox');
var e = document.getElementById('editform');
if (l)
l = l.getElementsByTagName('p');
var c = fnGetCookie('charsetDefault');
if ((b) && (l)) {
b.innerHTML = '';
if (!((c) && (c != '')))
c = l[0].id;
for (var i = 0; i < l.length; i++) {
var o = document.createElement('option');
if (c == l[i].id)
o.selected = true;
var n = unescape(decodeURI(l[i].id.replace(/\.([a-fA-F0-9][a-fA-F0-9])/g, '%$1')));
n = n.replace(/_/g, ' ');
o.appendChild(document.createTextNode(n));
b.appendChild(o);
}
if(window.addEventListener){
e.addEventListener('submit',fnCharsetSaveSelection,false);
} else if(window.attachEvent){
e.attachEvent('onsubmit',fnCharsetSaveSelection);
}
fnCharsetChooseSubset(b.selectedIndex);
}
}
/* Determines which option is selected and saves a cookie containing the relevant paragraph's id */
function fnCharsetSaveSelection() {
var b = document.getElementById('charsetBox');
var l = document.getElementById('specialchars').getElementsByTagName('p');
var s = b.selectedIndex;
if (s <= l.length) {
fnSetCookie('charsetDefault', l[s].id);
}
}
addLoadEvent(fnCharsetLoad);
<!---->

