ميدياويكي:Gadget-Check-Fonts.js

ملاحظة: بعد النشر، أنت قد تحتاج إلى إفراغ الكاش الخاص بمتصفحك لرؤية التغييرات.

  • فايرفوكس / سافاري: أمسك Shift أثناء ضغط Reload، أو اضغط على إما Ctrl-F5 أو Ctrl-R (⌘-R على ماك)
  • جوجل كروم: اضغط Ctrl-Shift-R (⌘-Shift-R على ماك)
  • إنترنت إكسبلورر/إيدج: أمسك Ctrl أثناء ضغط Refresh، أو اضغط Ctrl-F5
  • أوبرا: اضغط Ctrl-F5.
/* هذه الإضافة معممة لأنها تضيف الخطوط التي ليست عند المستخدم تلقائيًّا
كتبها: حبيشان
*/

(function($,mw) {
	const Qfonts = {
		//خط قراءة حفص من المجمع
		Hafs: {name:"KFGQPC HAFS Uthmanic Script", query: '.quran-KFGQPC', dur: 177},
		Warsh: {name:"KFGQPC Warsh Uthmanic Script", query: '.quran-Warsh', dur: 177},
		Qaloun: {name:"KFGQPC Qaloun Uthmanic Script", query: '.quran-Qaloun', dur: 177},
		Shuba: {name:"KFGQPC Shuba Uthmanic Script", query: '.quran-Shuba', dur: 177},
		Douri: {name:"KFGQPC Douri Uthmanic Script", query: '.quran-Douri', dur: 177},
		Sousi: {name:"KFGQPC Sousi Uthmanic Script", query: '.quran-Sousi', dur: 177},
		Bazzi: {name:"KFGQPC Bazzi Uthmanic Script", query: '.quran-Bazzi', dur: 177},
		Qunbul: {name:"KFGQPC Qunbul Uthmanic Script", query: '.quran-Qunbul', dur: 177},
		DKhatt: {name:"DigitalKhatt", query: '.quran-DKhatt', dur: 1},
	};
	var FontDetector = function() {
	    var baseFonts = ['monospace', 'sans-serif', 'serif'];
	    var testString = "فأسقيناكموه";
	    var testSize = '72px';
	    var h = document.getElementsByTagName("body")[0];
	    var s = document.createElement("span");
	    s.style.fontSize = testSize;
	    s.innerHTML = testString;
	    var defaultWidth = {};
	    var defaultHeight = {};
	    for (var index in baseFonts) {
	        s.style.fontFamily = baseFonts[index];
	        h.appendChild(s);
	        defaultWidth[baseFonts[index]] = s.offsetWidth; //width for the default font
	        defaultHeight[baseFonts[index]] = s.offsetHeight; //height for the defualt font
	        h.removeChild(s);
	    }
	
	    function detect(font) {
	        var detected = false;
	        for (var index in baseFonts) {
	            s.style.fontFamily = '"' + font + '"' + ',' + baseFonts[index]; // name of the font along with the base font for fallback.
	            h.appendChild(s);
	            var matched = (s.offsetWidth != defaultWidth[baseFonts[index]] || s.offsetHeight != defaultHeight[baseFonts[index]]);
	            h.removeChild(s);
	            detected = detected || matched;
	        }
	        return detected;
	    }
	
	    this.detect = detect;
	};

	function addfont(font_name, font_data){
		const thefont = new FontFace(font_name, 'url(data:application/font-woff2;base64,' + font_data + ')');
		document.fonts.add(thefont);
		thefont.load();
	}
	//var mwstore = require( 'mediawiki.storage' ).local;
	var f = new FontDetector();
	$.each( Qfonts, function( k, v ) {
		if ($(v.query).length > 0 && !f.detect(v.name)) {
			var fontdata = mw.storage.get('mw-font-' + k);
			if (fontdata) {
				addfont(v.name,fontdata);
			} else {
				$.getJSON('/w/index.php?title=MediaWiki:Font-' + k + '.json&action=raw&ctype=application/json', 
				function (jdata) {
				addfont(v.name,jdata.data );
				mw.storage.set('mw-font-' + k, jdata.data, (v.dur * 86400))
				}); 
			}
		}
	});
})(jQuery, mediaWiki);