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

מתוך ויקיתרופות
קפיצה אל: ניווט, חיפוש
Banner.jpg
(new version with bxslider)
שורה 1: שורה 1:
 
$(function(){
 
$(function(){
if ($('.pdfPresentationShow').length == 0) return;
+
if ($('.presentationsGallery').length == 0) return;
  
// create PdfPresentation handler
+
// create PdfPresentation handler
(function($){
+
  $.fn.extend( {
+
mw.loader.load('jquery.bxSlider')
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() {
+
$('.presentationsGallery .thumb a').click(function(e){
$controllers.append( $spinner );
+
e.preventDefault();
var api = new mw.Api();
+
var galleryFile = $(this).prop('href').split(':',3)[2];
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 $spinner = $.createSpinner( {
var size = prop.size;
+
size: 'large',
var currentPage = 1;
+
type: 'block'
var imgThumb = $('<img src="'+prop.thumbURL+'">').click( getNext );
+
} );
var $nextButton = $('<div>&nbsp;</div>').button({ icons: { primary: "ui-icon-seek-prev" } }).click( getNext ),
+
$('.presentationDisplay').append( $spinner );
$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 api = new mw.Api();
var default_size = 'auto';
+
api.get({
var presentations = $('.pdfPresentationShow').map(function() {
+
action: 'query',
var presentationParams = {
+
titles: 'File:'+galleryFile,
'pdf': $(this).find('a:first').prop('title'),
+
prop: 'imageinfo',
'size': $(this).find('.pdfPresentationSize').text(),
+
iiprop: 'metadata',
'ele': $(this)
+
}).done(function( data ){
};
+
var pages = data && data.query && data.query.pages;
if (presentationParams.size.length<4 || isNaN(presentationParams.size.substr(0, presentationParams.size.length-2))) {
+
if (!pages || pages.hasOwnProperty('-1')) return;
var prevDisplay = $('h1:first').css('display');
+
var imgPage;
$(this).css({ position: "absolute", visibility: "hidden", display: "block" });
+
for ( var p in pages ) imgPage = pages[p];
presentationParams['size'] = Math.floor($(this).parent().width()*0.9)+'px';
+
var thumbURL = imgPage.imageinfo[0].thumburl;
$(this).css({ position: "", visibility: "", display: prevDisplay });
+
var metadata = imgPage.imageinfo[0].metadata;
 +
//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 $multipageimage = presentationParams.ele;
+
var gallyWikitext='';
$multipageimage.css({'text-align': 'center', 'display': 'block' }).children().remove();
+
var gallerySize = '1000px';
$multipageimage.PdfPresentation({ pages: pages, thumbURL: thumbURL, size: presentationParams.size, imgFile: presentationParams.pdf })
+
for(var i=1;i<numberOfPages+1;i++){
 +
gallyWikitext+='\n* [[File:'+galleryFile+'|page='+i+'|'+gallerySize+'|link=]]';
 +
}
 +
gallyWikitext+='\n';
 +
var api=new mw.Api();
 +
api.get({
 +
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:09, 6 בנובמבר 2014

$(function(){
if ($('.presentationsGallery').length == 0) return;

// create PdfPresentation handler
	
mw.loader.load('jquery.bxSlider')

$('.presentationsGallery .thumb a').click(function(e){
	e.preventDefault();
	var galleryFile = $(this).prop('href').split(':',3)[2];

	var $spinner = $.createSpinner( {
						size: 'large',
						type: 'block'
					} );
	$('.presentationDisplay').append( $spinner );
	
	var api = new mw.Api();
	api.get({
		action: 'query',
		titles: 'File:'+galleryFile,
		prop: 'imageinfo',
		iiprop: 'metadata',
	}).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 numberOfPages = 1;
		for(var metadata_i=0; metadata_i<metadata.length;metadata_i++) {
			if ( metadata[metadata_i].name === 'Pages' ) {
				numberOfPages = metadata[metadata_i].value;
			}
		}

		var gallyWikitext='';
		var gallerySize = '1000px';
		for(var i=1;i<numberOfPages+1;i++){
			gallyWikitext+='\n* [[File:'+galleryFile+'|page='+i+'|'+gallerySize+'|link=]]';
		}
		gallyWikitext+='\n';
		var api=new mw.Api();
		api.get({
		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'
			});
	
		});

	});
});

});