টীকা: সংরক্ষণ করার পর, পরিবর্তনসমূহ তৎক্ষণাৎ নাও দেখাতে পারে। আপনার ব্রাউজারের ক্যাশ কিভাবে এড়াবেন তা জানতে এখানে ক্লিক করুন।
  • ফায়ারফক্স / সাফারি: Shift ধরে রাখা অবস্থায়পুনঃলোড করুন-এ ক্লিক করুন, অথবা Ctrl-F5 বা Ctrl-R (ম্যাক-এ ⌘-R) চাপুন
  • গুগল ক্রোম: Ctrl-Shift-R (ম্যাক-এ ⌘-Shift-R) চাপুন
  • ইন্টারনেট এক্সপ্লোরার: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 চাপুন
  • অপেরা: মেনু → ব্যবস্থাপনাসমূহ-এ যান (ম্যাকে অপেরা → পছন্দসমূহ) এবং এরপর গোপনীয়তা ও সুরক্ষা → ব্রাউজিং-এর তথ্য পরিষ্কার করুন → ক্যাশে করা ছবি ও ফাইলগুলি

অন্যান্য ব্রাউজার সম্পর্কে বিশদ নির্দেশাবলীর জন্য, উইকিপিডিয়া:আপনার ক্যাশে বাইপাস করুন দেখুন।

Viewer = {
	baseName: "",
	baseNumber: "",
	pageList: [],
	start: function(){
		this.build();

		var pageName="";
		switch( mw.config.get("wgCanonicalNamespace") ) {
			case "Page": pageName = mw.config.get("wgPageName");
						break;
			case "Index": pageName = "Page:" + mw.config.get("wgPageName").split(":")[1] + "/";
							try {
								pageName += /\/page(\d+)-/.exec( $( "img[alt=\""+ mw.config.get('wgPageName').replace( /_/g, ' ').split(":")[1] +"\"]" ).attr("src"))[1];
							} catch (e) {
								console.log("No cover thumb image found");
							}
						break;
			case "": pageName = decodeURIComponent( $(".ws-pagenum").eq(0).attr("title") );
		}
		if ( pageName === undefined ) return;
		pageName = pageName.replace(/ /g,"_");

		this.baseName = pageName.substring( 0, pageName.lastIndexOf("/")+1);
		this.baseNumber = this.convertNum( pageName.substring( pageName.lastIndexOf("/")+1 ) ) * 1;

		api = new mw.Api();
		api.get({
			format: 'json',
			action: 'parse', 
			prop:"text", 
			page: this.baseName.substring(0,this.baseName.length-1).replace("Page:","Index:")
   		}).done(function(data) {
   			var anchors = $( ".index-pagelist", $((data.parse.text["*"])) ).find( "a" );
   			anchors.each( function() {
				$(this).children().filter("span").remove();
				var href= decodeURIComponent( $(this).attr("href") );
				Viewer.pageList[Viewer.convertNum( href.substring(href.lastIndexOf('/') + 1) )]=$.trim($(this).text());
   			});
   			console.log( Viewer.pageList );
   			Viewer.show( Viewer.baseName + Viewer.baseNumber, "r");
   			Viewer.show( Viewer.baseName + (Viewer.baseNumber+1), "f");
   		});
	},
	build: function(){
		var logo=$('<img  src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Wikisource-logo.png/80px-Wikisource-logo.png" class="logo" >');
	
		$("body").append( $("<div>").attr("class","viewer") );
		$(".viewer").append(logo);
		
		arrow = $("<div class='arrow'>");
		
		arrow.clone().css( {"left": "50px", "cursor": "pointer"} ).attr("id","prevArrow").attr('title', 'Previous page')
		.append('<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Arrleft.svg/36px-Arrleft.svg.png">')
		.click( function() {
			Viewer.previous();
		}).appendTo( $(".viewer") );
		
		arrow.clone().css( {"right": "50px", "cursor": "pointer"} ).attr("id","nextArrow").attr('title', 'Next page')
		.append('<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Arrright.svg/36px-Arrright.svg.png">')
		.click( function() {
			Viewer.next();
		}).appendTo( $(".viewer") );
		
		arrow.clone().css({"right": "30px", "top": "0px", "color": "red", "cursor": "pointer"}).attr("id","closeIcon").attr('title', 'Exit')
		.append('<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Dialog-error-round.svg/36px-Dialog-error-round.svg.png"/>')
		.click( function() { 
			$(".viewer").remove();
			$("body").css("overflow","scroll");
		}).appendTo( $(".viewer") );
		
		var fontSize = 100;
		var d = $( "<div>" ).attr( "class", "noprint" ).css( { "position": "fixed", "right": "30px", "top": "70px" } ).append(
				'<img id="btnZoomIn" style="cursor: pointer" src="//upload.wikimedia.org/wikipedia/commons/3/30/Farm-Fresh_magnifier_zoom_in.png" title="Zoom in" alt="Zoom in" />',
				'<img id="btnZoomOut" style="cursor: pointer" src="//upload.wikimedia.org/wikipedia/commons/e/ea/Farm-Fresh_magnifier_zoom_out.png" title="Zoom out" alt="Zoom out" />'
			);
		var table = $("<table>").attr( "class", "book").attr( "align", "center").append(
				'<tr><td id="header_r">header retro</td><td id="header_f">header fronte</td></tr>',
				'<tr><td id="body_r"></td><td id="body_f"></td></tr>',
				'<tr><td id="footer_r">footer retro</td><td id="footer_f">footer fronte</td></tr>'
			);
		$(".viewer").append( d );
		$(".viewer").append( table );
		$("#header_r,#header_f,footer_r,footer_f").addClass("pagetext");
		
		$('#btnZoomIn').click(function() {
			if (fontSize < 200) {
				fontSize += 5;
			}
			$(".book").css("font-size", fontSize + "%");
		});
	
		
		$('#btnZoomOut').click(function() {
			if (fontSize > 50) {
				fontSize -= 5;
			}
			$(".book").css("font-size", fontSize + "%");
		});
	},
	show: function( title, pos){
		if( pos === "") return;

		api = new mw.Api();
		api.get( {
    		format: 'json',
    		action: 'parse', 
			prop:"text|wikitext", 
			page: title,
			contentmodel: "proofread-page"
   		} ).done( function(res){
   			wikitext=res.parse.wikitext["*"];
		  	html = $(res.parse.text["*"])[0].outerHTML;

		  	html = html.replace(/(cite_note-\d+)/g,"$1"+ pos).replace(/(cite_ref-\d+)/g,"$1"+ pos);
  			html = $(html).css("font-size","100%");
  			$(".prp-page-qualityheader",html).css("display","none");

	  		$("#body_"+ pos +",#header_"+ pos +",#footer_"+ pos +"").html("").css("visibility","initial");
	  		$("#body_"+ pos +"").append( html );
	  		
            $( "#header_" + pos ).append($("#body_" + pos + " table[title='RigaIntestazione']").eq(0));
            $( "#footer_" + pos ).append($("#body_" + pos + " table[title='PieDiPagina']").eq(0));

   		}).fail( function(e){
   			if(e === "missingtitle"){
				var pageNumber=/(\d+)$/.exec(title)[1]*1;
				if( pageNumber <1 || pageNumber > (Viewer.pageList.length-1) ){
					$("#body_"+ pos +",#header_"+ pos +",#footer_"+ pos +"").html("").css("visibility","hidden");
				} else {
					$("#body_"+ pos +",#header_"+ pos +",#footer_"+ pos +"").html("").css("visibility","initial");
					$("#header_"+ pos ).append( $('<table width="100%"><td align="center" style="color:#dddddd">'+ Viewer.pageList[pageNumber] +'</td></table>') );
					$.get( mw.config.get("wgServer") + "/w/index.php?title=" + title + "&action=edit&redlink=1", function( resp ) {
						ocr = $( "#wpTextbox1", $(resp) ).val();
						console.log(ocr === "");
						ocr = ocr.split("\n");
						for( i=0; i < ocr.length; i+=1 ) {
							ocr[i]=$.trim(ocr[i])+"<br/>";
						}
						ocr = '<span style="color:red;">Viewing OCR</span><br/></br>' + ocr.join("\n");
						$("#body_"+pos).html(ocr);
					});
				}
   			}
   		});
	},
	convertNum: function( number ) {
		var lang = mw.config.get("wgContentLanguage");
		if( lang === "en" ){
			return number;
		}

		// Contact User:Jayprakash12345 to add your lang numerals
		var mapData = {
			bn: {
				"০": "0",
				"১": "1",
				"২": "2",
				"৩": "3",
				"৪": "4",
				"৫": "5",
				"৬": "6",
				"৭": "7",
				"৮": "8",
				"৯": "9"
			} 
		};

		var output = '';
		String(number).split('').forEach( function(i){
			output += mapData[lang][i];
		} );
		return output;
	},
	next: function() {
		if( this.baseNumber < (this.pageList.length-2) ) {
			this.baseNumber = this.baseNumber*1+2;
			this.show( this.baseName+this.baseNumber, "r" );
			this.show( this.baseName+(this.baseNumber*1+1), "f" );
			//this.updateForm();
		}
	},
	previous: function() {
		if( this.baseNumber>0 ) { 
			this.baseNumber = this.baseNumber * 1 - 2;
			this.show( this.baseName+this.baseNumber, "r" );
			this.show( this.baseName+(this.baseNumber*1+1), "f" );
			//this.updateForm();
		}
	},
	updateForm: function() {
		$(".vis input[name='numeroDjvu-retro']").val( this.baseNumber*1 );
		$(".vis input[name='numeroLibro-retro']").val( this.pageList[this.baseNumber*1] );
		$(".vis input[name='numeroDjvu-fronte']").val( this.baseNumber*1+1 );
		$(".vis input[name='numeroLibro-fronte']").val( this.pageList[this.baseNumber*1+1] );
	}
};

pageNamespace = mw.config.get("wgCanonicalNamespace");
if( ( pageNamespace === "Index" || pageNamespace === "Page" || pageNamespace === "" ) && mw.config.get("wgAction")==="view" ) {
	mw.loader.using( [ 'mediawiki.util', 'mediawiki.api', 'jquery.ui' ], function () {
		var link = mw.util.addPortletLink(
			'p-tb',
			"#",
			'Viewer'
		);
		
		// Event handler for Portlet Link
		$( link ).on( 'click', function(e) {
			e.preventDefault();
			Viewer.start();
		});
		
		// Find if there is argument pass in URL
		if( window.location.href.toLowerCase().indexOf("viewer=true") !==-1 ){
			Viewer.start();
		}
	});
}