מדיה ויקי:PdfPresentation.js: הבדלים בין גרסאות
מתוך ויקיתרופות
ערן רוזנטל (שיחה | תרומות) |
ערן רוזנטל (שיחה | תרומות) |
||
| (3 גרסאות ביניים של משתמש אחד אינן מוצגות) | |||
| שורה 1: | שורה 1: | ||
$(function(){ | $(function(){ | ||
| − | if ($('. | + | if ($('.pdfPresentationShow, .presentationGallery').length == 0) return; |
| − | // create PdfPresentation handler | + | // 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> </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' | ||
| + | } ); | ||
| + | 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] ); | ||
} | } | ||
| − | + | } ); | |
| − | var api=new mw.Api(); | + | })(jQuery); |
| + | |||
| + | function loadPresentation( presentationParams ) { | ||
| + | var api = new mw.Api(); | ||
api.get({ | api.get({ | ||
| − | + | action: 'query', | |
| − | + | titles: presentationParams.pdf, | |
| − | + | prop: 'imageinfo', | |
| − | }).done(function(data){ | + | 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'); | ||
| + | var fileNS = mw.util.wikiUrlencode('קובץ'); | ||
| + | var firstHref= $(this).find('a.image:first').prop('href'); | ||
| + | if(firstHref) { | ||
| + | loadPresentation({ | ||
| + | 'pdf': 'File:'+firstHref.substr(firstHref.indexOf(fileNS)+fileNS.length+1), | ||
| + | 'size': presentationSize, | ||
| + | 'ele': ele | ||
| + | }); | ||
| + | } | ||
| + | $(this).find('a.image').click(function(e){ | ||
| + | e.preventDefault(); | ||
| + | var href= $(this).prop('href'); | ||
| + | |||
| + | var pdfLink = 'File:'+href.substr(href.indexOf(fileNS)+fileNS.length+1); | ||
| + | |||
| + | var presentationParams = { | ||
| + | 'pdf': pdfLink, | ||
| + | 'size': presentationSize, | ||
| + | 'ele': ele | ||
| + | }; | ||
| + | loadPresentation(presentationParams); | ||
| + | }); | ||
| + | }); | ||
}); | }); | ||
| − | |||
}); | }); | ||
גרסה אחרונה מתאריך 14:42, 8 בנובמבר 2014
$(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> </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'
} );
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');
var fileNS = mw.util.wikiUrlencode('קובץ');
var firstHref= $(this).find('a.image:first').prop('href');
if(firstHref) {
loadPresentation({
'pdf': 'File:'+firstHref.substr(firstHref.indexOf(fileNS)+fileNS.length+1),
'size': presentationSize,
'ele': ele
});
}
$(this).find('a.image').click(function(e){
e.preventDefault();
var href= $(this).prop('href');
var pdfLink = 'File:'+href.substr(href.indexOf(fileNS)+fileNS.length+1);
var presentationParams = {
'pdf': pdfLink,
'size': presentationSize,
'ele': ele
};
loadPresentation(presentationParams);
});
});
});
});