میڈیاویکی:Gadget-Urdu Keymapper.js
Appearance
یاددہانی: محفوظ کرنے کے بعد، تبدیلیاں دیکھنے کے لیے آپ کو اپنے متصفح (browser) کے ابطن (cache) کو خالی کرنا ہوگا۔
- فائرفاکس/ سفاری: جب Reload طق کریں تو Shift دباکر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R-⌘)
- گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
- انٹرنیٹ ایکسپلورر: جب Refresh طق کریں تو Ctrl یا Ctrl-F5 دبائیں
- اوپیرا: Tools → Preferences میں ابطن (cache) صاف کریں
//======================================================================
// Urdu Keymapper Version 0.3 beta
// Author : Saqib Saud
// Maintainer : محمد شعیب
// License: GPL
//======================================================================
// Global variables
var ua = navigator.userAgent.toLowerCase();
var isIE = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1));
var isGecko = (ua.indexOf("gecko") != -1);
var isOpera= window.opera;
function _s(c){return String.fromCharCode(c)}
var codes= new Array();
codes['a']=0x0627;
codes['b']=0x0628;
codes['c']=0x0686;
codes['d']=0x062F;
codes['e']=0x0639;
codes['f']=0x0641;
codes['g']=0x06AF;
codes['h']=0x06BE;
codes['i']=0x06CC;
codes['j']=0x062C;
codes['k']=0x06A9;
codes['l']=0x0644;
codes['m']=0x0645;
codes['n']=0x0646;
codes['o']=0x06C1;
codes['p']=0x067E;
codes['q']=0x0642;
codes['r']=0x0631;
codes['s']=0x0633;
codes['t']=0x062A;
codes['u']=0x0626; // hamza yeh
codes['v']=0x0637;
codes['w']=0x0648;
codes['x']=0x0634;
codes['y']=0x06D2;
codes['z']=0x0632;
codes['A']=0x0622;
codes['B']=0x0628;
codes['C']=0x062B;
codes['D']=0x0688;
codes['E']=0x0651;
codes['F']=0x064D;
codes['G']=0x063A;
codes['H']=0x062D;
codes['I']=0x0670;
codes['J']=0x0636;
codes['K']=0x062E;
codes['L']=0x0628;
codes['M']=0x064B;
codes['N']=0x06BA;
codes['O']=0x06C3;
codes['P']=0x064F;
codes['Q']=0x0628;
codes['R']=0x0691;
codes['S']=0x0635;
codes['T']=0x0679;
codes['U']=0x0621;
codes['V']=0x0638;
codes['W']=0x0624;
codes['X']=0x0698;
codes['Z']=0x0630;
codes['>']=0x0650;
codes['<']=0x064E;
codes[_s(32)]=32;
codes[_s(13)]=13;
codes[':']=0x061B;
codes[';']=0x061B;
codes[_s(39)]=0x2018;
codes[_s(34)]=0x201C;
codes[_s(46)]=0x06D4;
codes[_s(44)]=0x060C;
codes['!']= 0x0021;
codes['?']=0x061F;
codes[':']=58;
/* codes['[']=0x0654; // hamza above
codes[']']=0x0655; // hamza below
codes['~']=0x0653; // mad above
codes['^']=0x0652; // sukun
codes['/']=0x002F; // slash
codes['L']=0x064C; // do paish
codes['|']=0x0200C; // ZWNJ
codes['+']=0x002B;
codes['-']=0x002D;
codes['*']=0x00D7;
codes[_s(47)]=0x00F7;
codes[_s(37)]=0x066A;
codes['(']=0x0028;
codes[')']=0x0029;
codes['=']=0x003D;*/
codes['0']=0x30;
codes['1']=0x31;
codes['2']=0x32;
codes['3']=0x33;
codes['4']=0x34;
codes['5']=0x35;
codes['6']=0x36;
codes['7']=0x37;
codes['8']=0x38;
codes['9']=0x39;
function addTextEvent() {
var editForm =document.getElementById('editform');
if(editForm != null) {
var textBox=document.getElementById('wpTextbox1');
var textSummary = document.getElementById('wpSummary');
attachEvent(editForm,textBox);
addCheckbox(editForm,textBox );
if(textSummary) { attachEvent(editForm,textSummary); }
}
// add transliteration feature to search form
var searchForm = document.getElementById('searchform');
if( searchForm != null ) {
var searchBox = document.getElementById('searchInput');
if(searchBox) { attachEvent(searchForm,searchBox); }
}
// add transliteration feature to power search
var powerSearchForm = document.getElementById('search');
if( powerSearchForm != null) {
var powerSearchBox = document.getElementById('lsearchbox');
if( powerSearchBox ) { attachEvent(powerSearchForm, powerSearchBox );}
}
// add transliteration feature to move page
var movePageForm = document.getElementById('movepage');
if( movePageForm != null ) {
var newTitleBox = document.getElementById('wpNewTitleMain');
var reasonBox = document.getElementById('wpReason');
if( newTitleBox ) {attachEvent(movePageForm, newTitleBox);}
if( reasonBox ) {attachEvent(movePageForm, reasonBox ); }
}
// add transliteration feature to upload feature page
var upForm=document.getElementById('upload');
if(upForm)
{
var upName=document.getElementById('wpDestFile');
var upComment=document.getElementById('wpUploadDescription');
if(upName) attachEvent(upForm,upName);
if(upComment) attachEvent(upForm,upComment);
}
// add transliteration feature to create inputbox
var crForm=document.getElementById('createbox');
if(crForm)
{
var crName=crForm.title;
if(crName) attachEvent(crForm,crName);
}
//todo:using for loop .. all event handler to all input type="text"
}
function attachEvent(editForm,textBox){
checkrt(editForm); //what does this thing do?
if (textBox.addEventListener)
textBox.addEventListener("keypress", processKeys, false);
else if (textBox.attachEvent)
textBox.attachEvent("onkeypress", processKeys);
}
function addCheckbox(editform,textBox ){
var element = document.createElement("input");
element.setAttribute("type","checkbox");
element.setAttribute("id","realtime");
if (element.addEventListener)
element.addEventListener("click", rtClick, false);
else if (element.attachEvent)
element.attachEvent("onclick", rtClick);
var labelcheckBox = document.createTextNode('اردو کلیدی تختہ انتخاب بالعکس');
editform.insertBefore(element,textBox);
document.getElementById("realtime").checked = realTime;
editform.insertBefore(labelcheckBox,textBox);
}
var realTime = true;
function rtClick(event) {
realTime = !realTime;
}
var rtsupported = false;
var error;
function checkrt(editform){
try {
/*
var nav = navigator.userAgent.toUpperCase();
rtsupported = (nav.indexOf("GECKO") >= 0 || nav.indexOf("OPERA") >= 0 || nav.indexOf("SAFARI") >= 0);
*/
rtsupported = (document.selection != undefined)
if (!rtsupported) {
var element = document.createElement("TEXTAREA");
editform.appendChild(element);
if (element.selectionStart != undefined)
rtsupported = true;
editform.removeChild(element);
}
}
catch (error) {
}
}
function processKeys(event, objId) {
//document.getElementById("wpTextbox1").value = "cvbvc";
//alert(event.target.id);
//var as=event.target;
//as.value = "hjkhj";
//alert(as);
var charCode = (event.charCode) ? event.charCode : event.keyCode;
if (rtsupported){
if (charCode == 32 && event.ctrlKey) {
//ctrl +space to toggle
realTime = !realTime;
if(isIE){
event.returnValue=false;
event.cancelBubble=true;
}
else if(isGecko){
event.preventDefault();
event.stopPropagation();
}//to disable defualt behaviours
var check=document.getElementById("realtime")
if(check)
check.checked = realTime;
}
else if (realTime) mapKey(event);
}
}
function mapKey(event){
//var ua = navigator.userAgent.toLowerCase();
if ( (pressedKey(event) > 20) && !event.ctrlKey && !event.altKey && !event.metaKey) {
var c = _s(pressedKey(event));
if (codes[c] != undefined ){ //if value for key is not defined in array
if(isIE){
event.returnValue=false;
event.cancelBubble=true;
edInsertContent(event.srcElement, _s(codes[c]));
}
else if(isGecko){
event.preventDefault();
event.stopPropagation();
edInsertContent(event.target, _s(codes[c]));
}//to disable defualt behaviours
}
//alert( c);
}
}
// function : edInsertContent
// Aurthor: Alex King
// Js Quick Tags (Available under GPL)
// Site: http://alexking.org/blog/2004/06/03/js-quicktags-under-lgpl/
function edInsertContent(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
myField.focus();
}
//MOZILLA/NETSCAPE support
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
var scrollTop = myField.scrollTop;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
myField.focus();
myField.selectionStart = startPos + myValue.length;
myField.selectionEnd = startPos + myValue.length;
myField.scrollTop = scrollTop;
}
else {
myField.value += myValue;
myField.focus();
}
}
function pressedKey(event) {
if (isIE)
return event.keyCode;
else
return event.which;
}
//Get Hooked !
$(addTextEvent);
function addMenu()
{
var portlet = document.getElementById('p-tb');
if (portlet != null)
{
HIMHTML = '<div class="portlet">کلیدی تختہ<div class="pBody">';
HIMHTML += '<input id="ukm_ckspell" name="ukm_method" type="checkbox" onclick="rtClick();" /> <label class="radio" for="him_ckspell">کلیدی تختہ انتخاب بالعکس (آزمائشی)</label> <small>[ctrl + space]</small></div></div>';
portlet.innerHTML = HIMHTML + portlet.innerHTML;
}
}
$(addMenu);