মিডিয়াউইকি:Unijoy.js

ডিপথট থেকে

লক্ষ্য করুন: সংরক্ষণের পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।

  • ফায়ারফক্স / সাফারি: Shift ধরে রাখা অবস্থায়পুনঃলোড করুন-এ ক্লিক করুন, অথবা Ctrl-F5 বা Ctrl-R (ম্যাক-এ ⌘-R) চাপুন
  • গুগল ক্রোম: Ctrl-Shift-R (ম্যাক-এ ⌘-Shift-R) চাপুন
  • ইন্টারনেট এক্সপ্লোরার: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 চাপুন
  • অপেরা: মেনু → ব্যবস্থাপনাসমূহ-এ যান (ম্যাকে অপেরা → পছন্দসমূহ) এবং এরপর গোপনীয়তা ও সুরক্ষা → ব্রাউজিং-এর তথ্য পরিষ্কার করুন → ক্যাশে করা ছবি ও ফাইলগুলি
/**
 * Unicode unijoy Parser for writing in webpages
 * This script helps to write unicode bangla using unijoy keyboard mapping
 *
 * @name Unijoy Unicode Parser
 * @version 1.0 [Date 26th August, 2006]
 * @author Hasin Hayder. Visit My Homepage at http://www.hasinhyder.net
 * @license LGPL
 */

/**
 * This script is released under Lesser GNU Public License [LGPL]
 * which implies that you are free to use this script in your
 * web applications without any problem. No warranty ensured. If you like
 * this script, Please acknowledge by keeping a link to my website
 * http://hasin.wordpress.com in the page where you use this script.
 */
/*
Last Modification:01/11/2008 by Sabuj Kundu(http://manchu.wordpress.com)
Last Modification: 26 Jan 2008 by Omi Azad (http://omi.net.bd)
*/
// Set of Characters
var activeta; // active text area
var unijoy = new Array();

unijoy['0'] = '\u09e6';//'০';
unijoy['1'] = '\u09e7';//'১';
unijoy['2'] = '\u09e8';//'২';
unijoy['3'] = '\u09e9';//'৩';
unijoy['4'] = '\u09ea';//'৪';
unijoy['5'] = '\u09eb';//'৫';
unijoy['6'] = '\u09ec';//'৬';
unijoy['7'] = '\u09ed';//'৭';
unijoy['8'] = '\u09ee';//'৮';
unijoy['9'] = '\u09ef';//'৯';

// unijoy bangla equivalents
unijoy['j'] = '\u0995'; // ko

unijoy['d'] = '\u09BF'; // hrossho i kar
unijoy['gd'] = '\u0987'; // hrossho i
unijoy['D'] = '\u09C0'; // dirgho i kar
unijoy['gD'] = '\u0988'; // dirgho i
unijoy['c'] = '\u09C7'; // e kar
unijoy['gc'] = '\u098F'; // E
unijoy['gs'] = '\u0989'; // hrossho u
unijoy['s'] = '\u09C1'; // hrossho u kar
unijoy['S'] = '\u09C2'; // dirgho u kar
unijoy['gS'] = '\u098A'; // dirgho u
unijoy['v'] = '\u09B0'; // ro
unijoy['a'] = '\u098B'; // wri
unijoy['f'] = '\u09BE'; // a kar
unijoy['gf'] = '\u0986'; //shore a
unijoy['F'] = '\u0985'; // shore ao
//unijoy['ao'] = '\u0985'; // shore o
unijoy['n'] = '\u09B8'; // dontyo so
unijoy['t'] = '\u099f'; // to
unijoy['J'] = '\u0996'; // Kho

//unijoy['kh'] = '\u0996'; // kho

unijoy['b'] = '\u09A8'; // dontyo no
unijoy['B'] = '\u09A3'; // murdhonyo no
unijoy['k'] = '\u09A4'; // tto
unijoy['K'] = '\u09A5'; // ttho

unijoy['e'] = '\u09A1'; // ddo
unijoy['E'] = '\u09A2'; // ddho

unijoy['h'] = '\u09AC'; // bo
unijoy['H'] = '\u09AD'; // bho
//unijoy['v'] = '\u09AD'; // bho
//unijoy['rh'] = 'o'; // doye bindu ro
unijoy['p'] = '\u09DC'; // doye bindu ro
unijoy['P'] = '\u09DD'; // dhoye bindu ro
unijoy['o'] = '\u0997'; // go
unijoy['O'] = '\u0998'; // gho

//unijoy['gh'] = '\u0998'; // gho

unijoy['i'] = '\u09B9'; // ho
unijoy['I'] = '\u099E'; // yo
unijoy['u'] = '\u099C'; // borgio jo
unijoy['U'] = '\u099D'; // jho
//unijoy['jh'] = '\u099D'; // jho
unijoy['y'] = '\u099A'; // cho
unijoy['Y'] = '\u099B'; // cho
//unijoy['C'] = '\u099B'; // ccho
unijoy['T'] = '\u09A0'; // tho
unijoy['r'] = '\u09AA'; // po
unijoy['R'] = '\u09AB'; // fo
//unijoy['ph'] = '\u09AB'; // fo
unijoy['l'] = '\u09A6'; // do
unijoy['L'] = '\u09A7'; // dho

unijoy['w'] = '\u09AF';// ontoshyo zo
unijoy['W'] = '\u09DF';	// ontostho yo
unijoy['q'] = '\u0999';	// Uma
unijoy['Q'] = '\u0982';	// uniswor
unijoy['V'] = '\u09B2';	// lo
unijoy['m'] = '\u09AE';	// mo
unijoy['M'] = '\u09B6';	// talobyo sho
unijoy['N'] = '\u09B7'; // mordhonyo sho
unijoy['gx'] = '\u0993';//'\u09CB'; // o
unijoy['X'] = '\u09CC'; // ou kar
unijoy['gX'] = '\u0994'; // OU
//unijoy['Ou'] = '\u0994'; // OU
unijoy['gC'] ='\u0990'; // Oi
unijoy['\\'] = '\u0983'; // khandaTa
unijoy['|'] = '\u09CE'; // bisworgo
unijoy['G'] = '\u0964'; // dari
//unijoy[".."] = "."; // fullstop
unijoy['g'] = ' ';//'\u09CD' + '\u200c'; // hosonto
unijoy['&'] = '\u0981'; // chondrobindu
unijoy['Z'] = '\u09CD'+'\u09AF'; // jo fola
unijoy['gh'] = '\u09CD'+ '\u09AC'; // bo fola
unijoy['ga'] = '\u098B'; // wri kar
unijoy['a'] = '\u09C3'; // wri
//unijoy['k'] ="\u0995"  + '\u09CD'+ '\u09B8';
unijoy['vZ'] = unijoy['v'] + '\u200d' + '\u09CD' + '\u09AF';
unijoy['z'] =  '\u09CD' + unijoy['v'];
unijoy['x'] = '\u09CB';
unijoy['C'] = '\u09C8'; // Oi Kar


var carry = '';  // This variable stores each keystrokes
var old_len = 0; // This stores length parsed bangla charcter
var ctrlPressed = false;
var first_letter = false;
var lastInserted;

isIE = document.all? 1 : 0;
var switched = false;

function checkKeyDown( ev ) {
	// just track the control key
	var e = ( window.event ) ? event.keyCode : ev.which;
	if ( e == '17' ) {
		ctrlPressed = true;
	}
}

function checkKeyUp( ev ) {
	// just track the control key
	var e = ( window.event ) ? event.keyCode : ev.which;
	if ( e == '17' ) {
		ctrlPressed = false;
	}
}

function parseunijoy( evnt ) {
	// main unijoy parser
	var t = document.getElementById( activeta ); // the active text area
	var e = ( window.event ) ? event.keyCode : evnt.which; // get the keycode

	if ( e == '113' ) {
		// switch the keyboard mode
		if( ctrlPressed ) {
			switched = !switched;
			return true;
		}
	}

	if ( switched ) {
		return true;
	}

	if( ctrlPressed ) {
		// user is pressing control, so leave the parsing
		e = 0;
	}

	var char_e = String.fromCharCode( e ); // get the character equivalent to this keycode

	if( e == 8 || e == 32 ) {
		// if space is pressed we have to clear the carry.
		// Otherwise there will be some malformed conjunctions
		carry = ' ';
		old_len = 1;
		return;
	}

	lastcarry = carry;
	carry += '' + char_e; // append the current character pressed to the carry

	bangla = parseunijoyCarry( carry ); // get the combined equivalent
	tempBangla = parseunijoyCarry( char_e ); // get the single equivalent

	if ( tempBangla == '..' || bangla == '..' ) { // that means it has sibling
		return false;
	}

	if ( char_e == 'g' ) {
		if( carry == 'gg' ) {
			// check if it is a plus sign
			insertConjunction( '\u09CD' + '\u200c', old_len );
			old_len = 1;
			return false;
		}
		// otherwise this is a simple joiner
		insertAtCursor( '\u09CD' );
		old_len = 1;
		carry = 'g';
		return false;
	} else if( old_len == 0 ) { // first character
		// this is first time someone press a character
		insertConjunction( bangla, 1 );
		old_len = 1;
		return false;
	} else if( char_e == 'A' ) {
		// process old style ref
		newChar = unijoy['v'] + '\u09CD';
		insertAtCursor( newChar );
		old_len = 1;
		return false;
	} else if( ( bangla == '' && tempBangla != '' ) ) { // that means it has no joint equivalent
		// there is no joint equivalent - so show the single equivalent.
		bangla = tempBangla;
		if ( bangla == '' ) {
			// there is no available equivalent - leave as is
			carry = '';
			return;
		} else {
			// found one equivalent
			carry = char_e;
			insertAtCursor( bangla );
			old_len = bangla.length;
			return false;
		}
	} else if( bangla != '' ) { // joint equivalent found
		// we have found some joint equivalent process it
		insertConjunction( bangla, old_len );
		old_len = bangla.length;
		return false;
	}
}

function parseunijoyCarry( code ) {
	// this function just returns a bangla equivalent for a given keystroke
	// or a conjunction
	// just read the array - if found then return the bangla eq.
	// otherwise return a null value
	if ( !unijoy[code] ) { // Oh my god :-( no bangla equivalent for this keystroke
		return ''; // return a null value
	} else {
		return ( unijoy[code] ); // voilà - we've found bangla equivalent
	}
}

function insertAtCursor( myValue ) {
	/**
	 * this function inserts a character at the current cursor position in a text area
	 * many thanks to alex king and phpMyAdmin for this cool function
	 *
	 * This function is originally found in phpMyAdmin package and modified by Hasin Hayder to meet the requirement
	 */
	lastInserted = myValue;
	var myField = document.getElementById( activeta );
	if ( document.selection ) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
		sel.collapse( true );
		sel.select();
	}
	// MOZILLA/NETSCAPE support
	else if ( myField.selectionStart || myField.selectionStart == 0 ) {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var scrollTop = myField.scrollTop;
		startPos = ( startPos == -1 ? myField.value.length : startPos );
		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 {
		var scrollTop = myField.scrollTop;
		myField.value += myValue;
		myField.focus();
		myField.scrollTop = scrollTop;
	}
}

function insertConjunction( myValue, len ) {
	/**
	 * this function inserts a conjunction and removes previous single character at the current cursor position in a text area
	 *
	 * This function is derived from the original one found in phpMyAdmin package and modified by Hasin to meet our need
	 */
	lastInserted = myValue;
	var myField = document.getElementById( activeta );
	if ( document.selection ) {
		myField.focus();
		sel = document.selection.createRange();
		if ( myField.value.length >= len ) {  // here is that first conjunction bug in IE, if you use the > operator
			sel.moveStart( 'character', -1 * ( len ) );
			//sel.moveEnd( 'character', -1 * ( len - 1 ) );
		}
		sel.text = myValue;
		sel.collapse( true );
		sel.select();
	}
	// MOZILLA/NETSCAPE support
	else if ( myField.selectionStart || myField.selectionStart == 0 ) {
		myField.focus();
		var startPos = myField.selectionStart-len;
		var endPos = myField.selectionEnd;
		var scrollTop = myField.scrollTop;
		startPos = ( startPos == -1 ? myField.value.length : startPos );
		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 {
		var scrollTop = myField.scrollTop;
		myField.value += myValue;
		myField.focus();
		myField.scrollTop = scrollTop;
	}
}

function makeUnijoyEditor( textAreaId ) {
	activeTextAreaInstance = document.getElementById( textAreaId );
	activeTextAreaInstance.onkeypress = parseunijoy;
	activeTextAreaInstance.onkeydown = checkKeyDown;
	activeTextAreaInstance.onkeyup = checkKeyUp;
	activeTextAreaInstance.onfocus = function() { activeta = textAreaId; };
}

// -----------------------------------------------
// The codes below were added by Jack Phoenix (Shoutwiki administrator). I changed very little.
// Onload hook so that our JS magic is executed always and everywhere...
jQuery( document ).ready( function() {
	// Bail out if makeUnijoyEditor() is _not_ a function for some reason
	if ( typeof makeUnijoyEditor !== 'function' ) {
		return true;
	} else if ( mw.config.get( 'wgUserLanguage' ) !== mw.config.get( 'wgContentLanguage' ) ) {
		// also bail out if the user's language is something else than the
		// wiki's content language
		return true;
	}
	// Invoke the Unijoy parser on text areas (input elements with type="text")
	jQuery( 'textarea[name="wpTextbox1"], input[type="text"]' ).each( function( idx ) {
	// Get the element's ID (since makeUnijoyEditor requires an ID)
	var id = jQuery( this ).attr( 'id' );
	// If we have an ID, invoke makeUnijoyEditor. Of course this doesn't
	// work for the text inputs that do _not_ have an ID attribute...
	if ( id ) {
		makeUnijoyEditor( id );
		}
	} );
} );