מדיה ויקי:PdfPresentation.js: הבדלים בין גרסאות
מתוך ויקיתרופות
ערן רוזנטל (שיחה | תרומות) |
ערן רוזנטל (שיחה | תרומות) |
||
| שורה 14: | שורה 14: | ||
} | } | ||
function getNext() { | function getNext() { | ||
| + | if(currentPage>=prop.pages) return; | ||
$self.prepend( $spinner ); | $self.prepend( $spinner ); | ||
var api = new mw.Api(); | var api = new mw.Api(); | ||
| שורה 54: | שורה 55: | ||
var size = prop.size; | var size = prop.size; | ||
var currentPage = 1; | var currentPage = 1; | ||
| − | var imgThumb = $('<img src="'+prop.thumbURL+'">'); | + | var imgThumb = $('<img src="'+prop.thumbURL+'">').click( getNext ); |
var $nextButton = $('<div> </div>').button({ icons: { primary: "ui-icon-seek-prev" } }).click( getNext ), | var $nextButton = $('<div> </div>').button({ icons: { primary: "ui-icon-seek-prev" } }).click( getNext ), | ||
$prevButton = $('<div> </div>').button({ icons: { primary: "ui-icon-seek-next" } }).click( getPrev ), | $prevButton = $('<div> </div>').button({ icons: { primary: "ui-icon-seek-next" } }).click( getPrev ), | ||
| שורה 111: | שורה 112: | ||
var $multipageimage = presentationParams.ele; | var $multipageimage = presentationParams.ele; | ||
| − | $multipageimage.css('text-align' | + | $multipageimage.css({'text-align': 'center', 'display': 'block' }).children().remove(); |
$multipageimage.PdfPresentation({ pages: pages, thumbURL: thumbURL, size: presentationParams.size, imgFile: presentationParams.pdf }) | $multipageimage.PdfPresentation({ pages: pages, thumbURL: thumbURL, size: presentationParams.size, imgFile: presentationParams.pdf }) | ||
}); | }); | ||
גרסה מתאריך 22:10, 27 באוקטובר 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;
$self.prepend( $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');
});
}
function getPrev() {
$self.prepend( $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 $self = $(this);
var size = prop.size;
var currentPage = 1;
var imgThumb = $('<img src="'+prop.thumbURL+'">').click( getNext );
var $nextButton = $('<div> </div>').button({ icons: { primary: "ui-icon-seek-prev" } }).click( getNext ),
$prevButton = $('<div> </div>').button({ icons: { primary: "ui-icon-seek-next" } }).click( getPrev ),
$spinner = $.createSpinner( {
size: 'large',
type: 'block'
} );
$prevButton.hide();
return $self.append( [$prevButton, imgThumb, $nextButton] );
}
} );
})(jQuery);
mw.loader.using(['jquery.ui.button', 'jquery.spinner'], function(){
var default_size = '400px';
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))) {
presentationParams['size'] = default_size;
}
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 })
});
});
});
});