MediaWiki:Common.js: различия между версиями
Перейти к навигации
Перейти к поиску
Admin (обсуждение | вклад) Веб-проигрыватель .cl-audio (без автозапуска) |
Admin (обсуждение | вклад) preload=metadata — показывать длительность (воспроизведение по-прежнему только по кнопке) |
||
| Строка 8: | Строка 8: | ||
* а если JavaScript отключён — посетитель просто увидит рабочую ссылку. | * а если JavaScript отключён — посетитель просто увидит рабочую ссылку. | ||
* Трек НИКОГДА не запускается сам: без autoplay и с preload="none", | * Трек НИКОГДА не запускается сам: без autoplay и с preload="none", | ||
* | * а preload="metadata" тянет только заголовок файла (длительность), а не сам трек. | ||
*/ | */ | ||
$( function () { | $( function () { | ||
| Строка 27: | Строка 27: | ||
audio.controls = true; | audio.controls = true; | ||
audio.autoplay = false; | audio.autoplay = false; | ||
audio.preload = ' | audio.preload = 'metadata'; | ||
audio.src = src; | audio.src = src; | ||
audio.className = 'cl-audio-el'; | audio.className = 'cl-audio-el'; | ||
Текущая версия от 19:36, 20 июля 2026
/* Веб-проигрыватель для аудио на страницах вики.
*
* Использование в викитексте:
* <div class="cl-audio" data-title="Название" data-artist="Исполнитель">
* [[Media:Файл.mp3|Слушать трек]]</div>
*
* Ссылка [[Media:...]] нужна обязательно: скрипт берёт из неё адрес файла,
* а если JavaScript отключён — посетитель просто увидит рабочую ссылку.
* Трек НИКОГДА не запускается сам: без autoplay и с preload="none",
* а preload="metadata" тянет только заголовок файла (длительность), а не сам трек.
*/
$( function () {
$( '.cl-audio' ).each( function () {
var $box = $( this );
if ( $box.hasClass( 'cl-audio-ready' ) ) {
return;
}
var $link = $box.find( 'a' ).first();
var src = $box.attr( 'data-src' ) || ( $link.length ? $link.attr( 'href' ) : '' );
if ( !src ) {
return;
}
var title = $box.attr( 'data-title' ) || ( $link.length ? $link.text() : 'Аудиозапись' );
var artist = $box.attr( 'data-artist' ) || '';
var audio = document.createElement( 'audio' );
audio.controls = true;
audio.autoplay = false;
audio.preload = 'metadata';
audio.src = src;
audio.className = 'cl-audio-el';
var $head = $( '<div>' ).addClass( 'cl-audio-head' )
.append( $( '<span>' ).addClass( 'cl-audio-title' ).text( title ) );
if ( artist ) {
$head.append( $( '<span>' ).addClass( 'cl-audio-artist' ).text( artist ) );
}
$box.empty()
.addClass( 'cl-audio-ready' )
.append( $( '<span>' ).addClass( 'cl-audio-ico' ).text( '♪' ) )
.append(
$( '<div>' ).addClass( 'cl-audio-meta' )
.append( $head )
.append( audio )
);
} );
} );