<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://source.islamical.org/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AOCR.js</id>
	<title>مدیاویکی:OCR.js - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://source.islamical.org/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AOCR.js"/>
	<link rel="alternate" type="text/html" href="https://source.islamical.org/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:OCR.js&amp;action=history"/>
	<updated>2026-11-10T00:22:01Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://source.islamical.org/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:OCR.js&amp;diff=40&amp;oldid=prev</id>
		<title>Mojtabakd: ایجاد اسکریپت</title>
		<link rel="alternate" type="text/html" href="https://source.islamical.org/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:OCR.js&amp;diff=40&amp;oldid=prev"/>
		<updated>2026-11-03T07:44:29Z</updated>

		<summary type="html">&lt;p&gt;ایجاد اسکریپت&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*jshint boss:true*/&lt;br /&gt;
/*global $, mw*/&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Query an ocr for a given Page:, first try to get the hocr text layer as it&amp;#039;s available&lt;br /&gt;
 * for most book, fast and of a better quality. If it fails, try the older and slower&lt;br /&gt;
 * ocr method. hocr fail around 1/5000 books. ocr should never fails as it use the image&lt;br /&gt;
 * visible on the Page:.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
var lang = mw.config.get( &amp;#039;wgContentLanguage&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
function disable_input(set)&lt;br /&gt;
{&lt;br /&gt;
	if (set) {&lt;br /&gt;
		$(document).keyup(function(e) {&lt;br /&gt;
			if (e.which == 27) { disable_input(false); }&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	set ? $(&amp;#039;#wsOcr1&amp;#039;).off(&amp;#039;click&amp;#039;) : $(&amp;#039;#wsOcr1&amp;#039;).on(&amp;#039;click&amp;#039;, do_hocr);&lt;br /&gt;
	set ? $(&amp;#039;#wsOcr2&amp;#039;).off(&amp;#039;click&amp;#039;) : $(&amp;#039;#wsOcr1&amp;#039;).on(&amp;#039;click&amp;#039;, fraktur_ocr);&lt;br /&gt;
&lt;br /&gt;
	$(&amp;#039;#wpTextbox1&amp;#039;).prop(&amp;#039;disabled&amp;#039;, set);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ocr_callback(data) {&lt;br /&gt;
	if (data.error) {&lt;br /&gt;
		alert(data.text);&lt;br /&gt;
	} else {&lt;br /&gt;
		// Checking if tb is disabled is required with chrome as ESC doesn&amp;#039;t kill&lt;br /&gt;
		// the query.&lt;br /&gt;
		var tb = document.getElementById(&amp;quot;wpTextbox1&amp;quot;);&lt;br /&gt;
		if (tb.disabled)&lt;br /&gt;
			tb.value = data.text;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	disable_input(false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function hocr_callback(data) {&lt;br /&gt;
	if (data.error) {&lt;br /&gt;
		// Fallback to the slow way.&lt;br /&gt;
		disable_input(false);&lt;br /&gt;
		do_ocr();&lt;br /&gt;
		return;&lt;br /&gt;
	} else {&lt;br /&gt;
		// Checking if tb is disabled is required with chrome as ESC doesn&amp;#039;t kill&lt;br /&gt;
		// the query.&lt;br /&gt;
		var tb = document.getElementById(&amp;quot;wpTextbox1&amp;quot;);&lt;br /&gt;
		if (tb.disabled) {&lt;br /&gt;
                        localStorage.ws_hOCR = data.text;&lt;br /&gt;
&lt;br /&gt;
			var text = $(data.text).text();&lt;br /&gt;
			// Ugly as hell.&lt;br /&gt;
			text = text.replace(/[ ]*\n[ ]*/g, &amp;#039;\n&amp;#039;)&lt;br /&gt;
				.replace(/\n\n\n\n/g, &amp;#039;@_@_@_@_@_@&amp;#039;)&lt;br /&gt;
				.replace(/\n\n/g, &amp;#039;\n&amp;#039;)&lt;br /&gt;
				.replace(/@_@_@_@_@_@/g, &amp;#039;\n\n&amp;#039;)&lt;br /&gt;
				.replace(/\n\n\n/g, &amp;#039;\n\n&amp;#039;);&lt;br /&gt;
			tb.value = $.trim(text);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	disable_input(false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function do_hocr() {&lt;br /&gt;
	disable_input(true);&lt;br /&gt;
&lt;br /&gt;
	var request_url = &amp;#039;//tools.wmflabs.org/phetools/hocr_cgi.py?cmd=hocr&amp;amp;book=&amp;#039;&lt;br /&gt;
		+ encodeURIComponent(mw.config.get(&amp;#039;wgTitle&amp;#039;)) + &amp;#039;&amp;amp;lang=&amp;#039; + lang + &amp;#039;&amp;amp;user=&amp;#039; + mw.config.get(&amp;#039;wgUserName&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$.getJSON(request_url).done(hocr_callback);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function do_ocr() {&lt;br /&gt;
	if ($( &amp;#039;.prp-page-image img&amp;#039; ).length) {&lt;br /&gt;
		disable_input(true);&lt;br /&gt;
&lt;br /&gt;
		// server side can&amp;#039;t use protocol relative url, request it as https:&lt;br /&gt;
		var url_image = &amp;#039;https:&amp;#039; + $( &amp;#039;.prp-page-image img&amp;#039; ).attr(&amp;#039;src&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		var request_url = &amp;quot;//tools.wmflabs.org/phetools/ocr.php?cmd=ocr&amp;amp;url=&amp;quot;+url_image+&amp;quot;&amp;amp;lang=&amp;quot;+lang+&amp;quot;&amp;amp;user=&amp;quot;+mw.config.get(&amp;#039;wgUserName&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		$.getJSON( request_url ).done( ocr_callback );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fraktur_ocr()&lt;br /&gt;
{&lt;br /&gt;
	lang = &amp;#039;de-f&amp;#039;;&lt;br /&gt;
	// For fraktur we need to use the slow way, all hocr for &amp;#039;de&amp;#039;&lt;br /&gt;
	// are done with non-fraktur.&lt;br /&gt;
	do_ocr();&lt;br /&gt;
	lang = mw.config.get( &amp;#039;wgContentLanguage&amp;#039; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addButtonToWikiEditorToolbar( b ){&lt;br /&gt;
	var tools = {};&lt;br /&gt;
	tools[ b.imageId ] = {&lt;br /&gt;
		label: b.speedTip,&lt;br /&gt;
		filters: [ &amp;#039;body.ns-104&amp;#039; ],&lt;br /&gt;
		type: &amp;#039;button&amp;#039;,&lt;br /&gt;
		icon: b.imageFile,&lt;br /&gt;
		action: {&lt;br /&gt;
			type: &amp;#039;callback&amp;#039;,&lt;br /&gt;
			execute: b.onClick&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	$( &amp;#039;#wpTextbox1&amp;#039; ).wikiEditor( &amp;#039;addToToolbar&amp;#039;, {&lt;br /&gt;
//		section: &amp;#039;proofreadpage-tools&amp;#039;,&lt;br /&gt;
//		group: &amp;#039;other&amp;#039;,&lt;br /&gt;
		section: &amp;#039;main&amp;#039;,&lt;br /&gt;
		group: &amp;#039;insert&amp;#039;,&lt;br /&gt;
		tools: tools&lt;br /&gt;
	} );&lt;br /&gt;
	$( &amp;#039;[rel=&amp;quot;&amp;#039; + b.imageId + &amp;#039;&amp;quot;]&amp;#039; ).width( 42 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addButtonToClassicToolbar( b ){&lt;br /&gt;
	mw.toolbar.addButton( {&lt;br /&gt;
		imageFile: b.imageFile,&lt;br /&gt;
		speedTip: b.speedTip,&lt;br /&gt;
		imageId: b.imageId&lt;br /&gt;
	} );&lt;br /&gt;
	$( &amp;#039;#&amp;#039; + b.imageId ).off( &amp;#039;click&amp;#039; ).click( function () {&lt;br /&gt;
		b.onClick();&lt;br /&gt;
		return false;&lt;br /&gt;
	} ).width( 46 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function customizeToolbar()&lt;br /&gt;
{&lt;br /&gt;
	var modules, add, img;&lt;br /&gt;
	// This can be the string &amp;quot;0&amp;quot; if the user disabled the preference ([[bugzilla:52542#c3]])&lt;br /&gt;
	if( mw.user.options.get( &amp;#039;usebetatoolbar&amp;#039; ) == 1 ){&lt;br /&gt;
		modules = [&amp;#039;ext.wikiEditor&amp;#039;, &amp;#039;schema.Edit&amp;#039;];&lt;br /&gt;
		img = &amp;#039;//upload.wikimedia.org/wikipedia/commons/c/c9/Toolbaricon_OCR.png&amp;#039;;&lt;br /&gt;
		add = addButtonToWikiEditorToolbar;&lt;br /&gt;
	} else if ( mw.user.options.get( &amp;#039;showtoolbar&amp;#039; ) == 1 ){&lt;br /&gt;
		modules = [&amp;#039;mediawiki.toolbar&amp;#039;];&lt;br /&gt;
		img = &amp;#039;//upload.wikimedia.org/wikipedia/commons/e/e0/Button_ocr.png&amp;#039;;&lt;br /&gt;
		add = addButtonToClassicToolbar;&lt;br /&gt;
	} else {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	$.when(&lt;br /&gt;
		mw.loader.using( modules ),&lt;br /&gt;
		$.ready&lt;br /&gt;
	).then( function(){&lt;br /&gt;
		if( mw.config.get( &amp;#039;wgContentLanguage&amp;#039; ) === &amp;#039;de&amp;#039; ){&lt;br /&gt;
			add( {&lt;br /&gt;
				imageFile: img,&lt;br /&gt;
				speedTip: &amp;#039;او سی آر عادی&amp;#039;,&lt;br /&gt;
				imageId: &amp;#039;wsOcr1&amp;#039;,&lt;br /&gt;
				onClick: do_hocr&lt;br /&gt;
			} );&lt;br /&gt;
			add( {&lt;br /&gt;
				imageFile: &amp;#039;//upload.wikimedia.org/wikipedia/commons/a/af/Button_Fractur_OCR.png&amp;#039;,&lt;br /&gt;
				speedTip: &amp;#039;او سی آر فرکتور&amp;#039;,&lt;br /&gt;
				imageId: &amp;#039;wsOcr2&amp;#039;,&lt;br /&gt;
				onClick: fraktur_ocr&lt;br /&gt;
			} );&lt;br /&gt;
		} else {&lt;br /&gt;
			add( {&lt;br /&gt;
				imageFile: img,&lt;br /&gt;
				speedTip: &amp;#039;استخراج متن توسط او سی آر&amp;#039;,&lt;br /&gt;
				imageId: &amp;#039;wsOcr1&amp;#039;,&lt;br /&gt;
				onClick: do_hocr&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ( mw.config.get( &amp;#039;wgPageContentModel&amp;#039; ) === &amp;#039;proofread-page&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
	$.inArray( mw.config.get( &amp;#039;wgAction&amp;#039; ), [ &amp;#039;edit&amp;#039;, &amp;#039;submit&amp;#039; ] ) !== -1 &amp;amp;&amp;amp;&lt;br /&gt;
	!self.proofreadpage_disable_ocr&lt;br /&gt;
) {&lt;br /&gt;
	mw.loader.using( &amp;#039;ext.proofreadpage.page.edit&amp;#039; ).done( customizeToolbar );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mojtabakd</name></author>
	</entry>
</feed>