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

מתוך ויקיתרופות
גרסה מתאריך 14:00, 2 באוגוסט 2014 מאת ערן רוזנטל (שיחה | תרומות)

(הבדל) → הגרסה הקודמת | הגרסה האחרונה (הבדל) | הגרסה הבאה ← (הבדל)
קפיצה אל: ניווט, חיפוש
Banner.jpg

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

  • פיירפוקס / ספארי: לחצו על Shift בעת לחיצתכם על העלה מחדש (Reload), או הקישו על Ctrl-F5 או על Ctrl-R (או על ⌘-R במחשב מק)
  • גוגל כרום: לחצו על Ctrl-Shift-R (או על ⌘-Shift-R במק)
  • אינטרנט אקספלורר: לחצו על Ctrl בעת לחיצתכם על רענן (Refresh), או הקישו על Ctrl-F5
  • אופרה: נקו את המטמון ב־Tools‏ ← Preferences
$(function(){
	if ($('.pdfPresentationShow').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() {
				imgThumb.before( $spinner );
				console.log('page'+(currentPage+1)+'-'+size);
				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++;
					$prevButton.css('display', (currentPage == 1)? 'hide' : 'inline-block');
					$nextButton.css('display', (currentPage == prop.pages)? 'hide' : 'inline-block');
				});
			}

			function getPrev() {
				imgThumb.before( $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--;
					$prevButton.css('display', (currentPage == 1)? 'hide' : 'inline-block');
					$nextButton.css('display', (currentPage == prop.pages)? 'hide' : 'inline-block');
				});
			}
			var size = prop.size;
			var currentPage = 1;
			var imgThumb = $('<img src="'+prop.thumbURL+'">');
			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'
				} );
		
			$prevButton.hide();
			return $( this ).append( [$prevButton, imgThumb, $nextButton] );
		}
	  } );
	})(jQuery);

	
	mw.loader.using(['jquery.ui.button', 'jquery.spinner'], function(){
		var size = '200px';
		var imgFile = $('.pdfPresentationShow a:first').prop( 'title' );
		var api = new mw.Api();
		api.get({
			action: 'query',
			titles: imgFile,
			prop: 'imageinfo',
			iiprop: 'metadata|url',
			iiurlwidth: size
		}).done(function( data ){
			var pages = data && data.query && data.query.pages;
			if (!pages) 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 = $('.pdfPresentationShow');
			$multipageimage.PdfPresentation({pages: pages, thumbURL: thumbURL, size: size, imgFile: imgFile })
		});
	});
});