מדיה ויקי:PdfPresentation.js

מתוך ויקיתרופות
קפיצה אל: ניווט, חיפוש
Banner.jpg

הערה: לאחר השמירה, עליכם לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: לחצו על Shift בעת לחיצתכם על העלה מחדש (Reload), או הקישו על Ctrl-F5 או על Ctrl-R (או על ⌘-R במחשב מק)
  • גוגל כרום: לחצו על Ctrl-Shift-R (או על ⌘-Shift-R במק)
  • אינטרנט אקספלורר: לחצו על Ctrl בעת לחיצתכם על רענן (Refresh), או הקישו על Ctrl-F5
  • אופרה: נקו את המטמון ב־Tools‏ ← Preferences
$(function(){
	if ($('.pdfPresentationShow, .presentationGallery').length == 0) return;

	// create PdfPresentation handler
	(function($){
	  $.fn.extend( {
		PdfPresentation: function( prop ) {
			function extractURL(data) {
				var pages = data && data.query && data.query.pages;
				if (!pages) return;
				var imgPage;
				for ( var p in pages ) imgPage = pages[p];
				return imgPage.imageinfo[0].thumburl;
			}
			function getNext() {
				if(currentPage>=prop.pages) return;
				$controllers.append( $spinner );
				var api = new mw.Api();
				api.get({
					action: 'query',
					titles: prop.imgFile,
					prop: 'imageinfo',
					iiprop: 'url',
					iiurlwidth: size,
					iiurlparam: 'page'+(currentPage+1)+'-'+size
				}).done(function( data ){
					$spinner.remove();
					imgThumb.prop('src', extractURL(data));
					currentPage++;
					$pageSelector.text(currentPage+'/'+prop.pages);
					$prevButton.css('display', (currentPage == 1)? 'hide' : 'inline-block');
					$nextButton.css('display', (currentPage == prop.pages)? 'hide' : 'inline-block');
				});
			}

			function getPrev() {
				$controllers.append( $spinner );
				var api = new mw.Api();
				api.get({
					action: 'query',
					titles: prop.imgFile,
					prop: 'imageinfo',
					iiprop: 'url',
					iiurlwidth: size,
					iiurlparam: 'page'+(currentPage+1)+'-'+size
				}).done(function( data ){
					$spinner.remove();
					imgThumb.prop('src', extractURL(data));
					currentPage--;
					$pageSelector.text(currentPage+'/'+prop.pages);
					$prevButton.css('display', (currentPage == 1)? 'hide' : 'inline-block');
					$nextButton.css('display', (currentPage == prop.pages)? 'hide' : 'inline-block');
				});
			}

			var $self = $(this);
			var size = prop.size;
			var currentPage = 1;
			var imgThumb = $('<img src="'+prop.thumbURL+'">').click( getNext );
			var $nextButton = $('<div>&nbsp;</div>').button({ icons: { primary: "ui-icon-seek-prev" } }).click( getNext ),
				$prevButton = $('<div>&nbsp;</div>').button({ icons: { primary: "ui-icon-seek-next" } }).click( getPrev ),
				$spinner = $.createSpinner( {
					size: 'large',
					type: 'block'
				} );
			var $controllers = $('<div>');
			var $pageSelector = $('<span>').css('padding', '2px 10px 2px 5px').text('1/'+prop.pages);
			$prevButton.hide();

			$controllers.append( [$prevButton, $pageSelector, $nextButton] );
			return $self.append( [ imgThumb, $controllers] );
		}
	  } );
	})(jQuery);
	
	function loadPresentation( presentationParams ) {
		var api = new mw.Api();
		api.get({
			action: 'query',
			titles: presentationParams.pdf,
			prop: 'imageinfo',
			iiprop: 'metadata|url',
			iiurlwidth: presentationParams.size
		}).done(function( data ){
			var pages = data && data.query && data.query.pages;
			if (!pages || pages.hasOwnProperty('-1')) return;
			var imgPage;
			for ( var p in pages ) imgPage = pages[p];
			var thumbURL = imgPage.imageinfo[0].thumburl;
			var metadata = imgPage.imageinfo[0].metadata;
			//extract number of pages
			var pages = 1;
			var size = 0;
			for(var metadata_i=0; metadata_i<metadata.length;metadata_i++) {
				if ( metadata[metadata_i].name === 'Pages' ) {
					pages = metadata[metadata_i].value;
				}
				else if ( metadata[metadata_i].name === 'pages' ){
					 var firstPage = metadata[metadata_i].value[0].value[0];
					 if ( firstPage.name == 'Page size' && !size ) {
						size = /([0-9]+)[^0-9]/.exec(firstPage.value)[1]+'px';
					}
				}
			}

			var $multipageimage = presentationParams.ele;
			$multipageimage.css({'text-align': 'center', 'display': 'block' }).children().remove();
			$multipageimage.PdfPresentation({ pages: pages, thumbURL: thumbURL, size: presentationParams.size, imgFile: presentationParams.pdf })
		});
	}

	mw.loader.using(['jquery.ui.button', 'jquery.spinner'], function(){
		//load individual presntations
		var presentations = $('.pdfPresentationShow').map(function() {
			var presentationParams = { 
				'pdf': $(this).find('a:first').prop('title'),
				'size': $(this).find('.pdfPresentationSize').text(),
				'ele': $(this)
			};
			if (presentationParams.size.length<4 || isNaN(presentationParams.size.substr(0, presentationParams.size.length-2))) {
				var prevDisplay = $('h1:first').css('display');
				$(this).css({ position: "absolute", visibility: "hidden", display: "block" });
				presentationParams['size'] = Math.floor($(this).parent().width()*0.9)+'px';
				$(this).css({ position: "", visibility: "", display: prevDisplay });
			}
		  return presentationParams;
		}).each(function( i, presentationParams ){
			loadPresentation(presentationParams);
		});

		//load galleries
		$('.presentationGallery').each(function(){
			var presentationSize = $(this).find('.pdfPresentationSize').text();
			var ele = $(this).find('.presentationContainer');
			$(this).find('a.image').click(function(e){
				e.preventDefault();
				var href=  $(this).prop('href');
				var fileNS = mw.util.wikiUrlencode('קובץ');
				var pdfLink = 'File:'+href.substr(href.indexOf(fileNS)+fileNS.length+1);

				var presentationParams = { 
					'pdf': pdfLink,
					'size': presentationSize,
					'ele': ele
				};
				loadPresentation(presentationParams);
			});
		});
	});

});