মিডিয়াউইকি: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 );
}
} );
} );