میڈیاویکی:Gadget-Urdu Keymapper.js

ویکی اقتباس سے

یاددہانی: محفوظ کرنے کے بعد، تبدیلیاں دیکھنے کے لیے آپ کو اپنے متصفح (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();" />&nbsp;<label class="radio" for="him_ckspell">کلیدی تختہ انتخاب بالعکس (آزمائشی)</label> <small>[ctrl + space]</small></div></div>';
    portlet.innerHTML = HIMHTML + portlet.innerHTML;
   }
   

}

$(addMenu);