MediaWiki:Gadget-imagebox.js

Материал из Абсурдопедии
Перейти к навигацииПерейти к поиску

Замечание. Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Перейдите в Menu → Настройки (Opera → Настройки на Mac), а затем Безопасность → Очистить историю посещений → Кэшированные изображения и файлы
/*
   Absurdopedia ImageBox -- 24 октября 2021.
   Автор: [[Участник:Edward Chernenko]].

   При клике по уменьшенному (thumb) изображению (левой кнопкой мыши)
   оно будет развёрнуто до более крупного размера на той же странице.
*/

var boxPaddingW = 30, boxPaddingH = 60, minWidth = 300, minHeight = 200;

var adjust = function() {
	$('#imgbox-loading').hide();

	var $box = $('#imgbox'),
		$canvas = $('#imgbox-canvas');

	if(!$canvas.length) {
		return;
	}

	// Available width/height in #imgbox area.
	var availableWidth = $box.width() - boxPaddingW;
	var availableHeight = $box.height() - boxPaddingH;

	var $img = $canvas.find('img');

	var fullImageWidth = $img.width();
	var fullImageHeight = $img.height();

	if ( !fullImageWidth || !fullImageHeight || availableHeight <= 0 ) {
		return;
	}

	var imageAspect = fullImageWidth / fullImageHeight;
	var spaceAspect = availableWidth / availableHeight;

	var thumbWidth, thumbHeight;

	if ( imageAspect < spaceAspect ) {
		thumbHeight = Math.max( minHeight, Math.min( availableHeight, fullImageHeight ) );
		thumbWidth = thumbHeight * imageAspect;
	} else {
		thumbWidth =  Math.max( minWidth, Math.min( availableWidth, fullImageWidth ) );
		thumbHeight = thumbWidth / imageAspect;
	}

	$img.width( thumbWidth );
	$img.height( thumbHeight );

	$box.width( thumbWidth + boxPaddingW );
	$box.height( thumbHeight + boxPaddingH );
};

var imagebox_remove = function() {
	$("#imgbox").remove();
};

var imagebox_show = function( event ) {
	event.preventDefault();
	imagebox_remove();

	var thumbUrl = $(this).find('img.thumbimage').attr('src');
	if ( !thumbUrl ) {
		return;
	}

	var fullImageUrl = thumbUrl.replace(/^(.*)\/thumb\/([^\/]*?)\/([^\/]*?)\/([^\/]*?)\/.*$/, '$1/$2/$3/$4');

	var filename = 'Файл:' + decodeURIComponent( fullImageUrl.split('/').pop() );
	var descriptionUrl = mw.config.get( 'wgArticlePath' ).replace('$1', encodeURIComponent(filename));

	var header = $('<div/>')
		.attr('style', 'clear: both;')
		.append($('<a/>').attr('href', descriptionUrl).append(filename))
		.append($('<div />').attr('style','float: right;font-size:120%;').append($('<a/>').click(imagebox_remove).attr('style', 'font-weight: bold;').append('закрыть')))
		;

	var $ibox = $('<div id="imgbox-canvas"/>')
		.append('<div id="imgbox-loading">Загружаем…</div>')
		.append($('<img/>').attr('src', fullImageUrl).attr('style', 'z-index: 1000;').load(adjust))
		.click(imagebox_remove)
		;

	var box = $('<div id="imgbox" />')
		.attr('style', 'padding: 5px; background-color: white; border: 5px ridge black; position: fixed; top: 50px; bottom: 10px; left: 175px; right: 20px; overflow: auto; z-index: 999;')
		.append(header)
		.append($ibox)
		.append(header.clone())
		;
	$('#bodyContent').append(box);
};

$(function() {
	var t = $('div.thumbinner');
	for(var i = 0; i < t.length; i ++) {
		var l = $(t[i]).find('a.image');
		var h = l.attr('href');
		if(h && h.match(/\.ogg$/i)) continue;
		l.attr('id', 'imglink' + i).click('onclick', imagebox_show);
	}
});