מדיה ויקי:PdfPresentation.js: הבדלים בין גרסאות

מתוך ויקיתרופות
קפיצה אל: ניווט, חיפוש
Banner.jpg
(back to ver1)
שורה 1: שורה 1:
 
$(function(){
 
$(function(){
if ($('.presentationsGallery').length == 0) return;
+
if ($('.pdfPresentationShow').length == 0) return;
  
// create PdfPresentation handler
+
// create PdfPresentation handler
+
(function($){
mw.loader.load(['jquery.bxSlider', 'jquery.spinner']);
+
  $.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');
 +
});
 +
}
  
$('.presentationsGallery .thumb a').click(function(e){
+
function getPrev() {
e.preventDefault();
+
$controllers.append( $spinner );
var galleryFile = $(this).prop('href').split(':',3)[2];
+
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 $spinner = $.createSpinner( {
+
var $self = $(this);
size: 'large',
+
var size = prop.size;
type: 'block'
+
var currentPage = 1;
} );
+
var imgThumb = $('<img src="'+prop.thumbURL+'">').click( getNext );
$('.presentationDisplay').append( $spinner );
+
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);
 
 
var api = new mw.Api();
+
mw.loader.using(['jquery.ui.button', 'jquery.spinner'], function(){
api.get({
+
var default_size = 'auto';
action: 'query',
+
var presentations = $('.pdfPresentationShow').map(function() {
titles: 'File:'+galleryFile,
+
var presentationParams = {
prop: 'imageinfo',
+
'pdf': $(this).find('a:first').prop('title'),
iiprop: 'metadata',
+
'size': $(this).find('.pdfPresentationSize').text(),
}).done(function( data ){
+
'ele': $(this)
var pages = data && data.query && data.query.pages;
+
};
if (!pages || pages.hasOwnProperty('-1')) return;
+
if (presentationParams.size.length<4 || isNaN(presentationParams.size.substr(0, presentationParams.size.length-2))) {
var imgPage;
+
var prevDisplay = $('h1:first').css('display');
for ( var p in pages ) imgPage = pages[p];
+
$(this).css({ position: "absolute", visibility: "hidden", display: "block" });
var thumbURL = imgPage.imageinfo[0].thumburl;
+
presentationParams['size'] = Math.floor($(this).parent().width()*0.9)+'px';
var metadata = imgPage.imageinfo[0].metadata;
+
$(this).css({ position: "", visibility: "", display: prevDisplay });
//extract number of pages
+
var numberOfPages = 1;
+
for(var metadata_i=0; metadata_i<metadata.length;metadata_i++) {
+
if ( metadata[metadata_i].name === 'Pages' ) {
+
numberOfPages = metadata[metadata_i].value;
+
 
}
 
}
}
+
  return presentationParams;
 +
}).each(function( i, 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 gallyWikitext='';
+
var $multipageimage = presentationParams.ele;
var gallerySize = '1000px';
+
$multipageimage.css({'text-align': 'center', 'display': 'block' }).children().remove();
for(var i=1;i<numberOfPages+1;i++){
+
$multipageimage.PdfPresentation({ pages: pages, thumbURL: thumbURL, size: presentationParams.size, imgFile: presentationParams.pdf })
gallyWikitext+='\n* [[File:'+galleryFile+'|page='+i+'|'+gallerySize+'|link=]]';
+
}
+
gallyWikitext+='\n';
+
var api=new mw.Api();
+
api.post({
+
action:'parse',
+
text: gallyWikitext,
+
prop:'text'
+
}).done(function(data){
+
$('.presentationDisplay').html(data.parse.text['*'])
+
 
+
$('.presentationDisplay ul').bxSlider({
+
auto: false,
+
controls: true,
+
slideWidth: gallerySize,
+
mode:'vertical'
+
 
});
 
});
 
 
});
 
});
  
});
 
});
 
  
 +
});
 
});
 
});

גרסה מתאריך 21:18, 6 בנובמבר 2014

$(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() {
				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);
	
	mw.loader.using(['jquery.ui.button', 'jquery.spinner'], function(){
		var default_size = 'auto';
		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 ){
			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 })
			});
		});


	});
});