Difference between revisions of "MediaWiki:Common.js"

From Conceptual Reconstructionism Project
Line 2: Line 2:




$(document).ready( function() {
class TimeSegment {
    constructor(track, segmentStart, segmentEnd, htmlElement) {
        this.track = track;
        this.segmentStart = segmentStart;
        this.segmentEnd = segmentEnd;
        this.htmlElement = htmlElement;
    }
}


class PlaybackData {
    constructor() {
        this.stopTime = null;
        this.timeSegments = [];
        this.tracks = [];
        this.playingSegments = [];
        this.playingTrack = null;
    }
}


// Create an audio player with tracks declared in the page.
let playbackData = new PlaybackData();


$('*[data-track]').each(function() {


$('<figure></figure>').append($('<figcaption></figcaption>').text($(this).attr('data-track-title'))).appendTo($(this)).append(
$(document).ready(function() {


$('<audio></audio>').prop('controls', true).attr('preload', 'auto').attr('src', $(this).attr('data-track'))


);
    // Create one audio player per declared track.


});
    $('*[data-track]').each(function() {


        $('<figure></figure>').append($('<figcaption></figcaption>').text($(this).attr('data-track-title'))).appendTo($(this)).append(


// Create hyperlinks out of reconstruction markup.
            $('<audio></audio>').prop('controls', true).attr('preload', 'auto').attr('src', $(this).attr('data-track'))


$('*[data-def]').click( function(){
        );
    var url = location.href;
 
    location.href = "#" + $(this).attr('data-def');
    });
    history.replaceState(null, null, url);
 
});
 
    // Create hyperlinks out of reconstruction markup.
 
    $('*[data-def]').click(function() {
        var url = location.href;
        location.href = "#" + $(this).attr('data-def');
        history.replaceState(null, null, url);
    });
 
 
    // Update timing data.
 
    $('*[data-segment]').each(function() {
 
        let m = /(?<track>\d+\/)?((?<minuteStart>\d+):)?(?<secondStart>\d+(.\d*)?)-((?<minuteEnd>\d+):)?(?<secondEnd>\d+(.\d*)?)/.exec($(this).attr('data-segment'));
    });
 
    if (m) {
        playbackData.timeSegments.append(new TimeSegment(parseInt(m.groups.track), parseInt(m.groups.minuteStart) * 60 + parseFloat(m.groups.secondStart),
            parseInt(m.groups.minuteEnd) * 60 + parseFloat(m.groups.secondEnd),
            $(this)
        ));
    } else {
        $(this).append('Wrong time segment');
    }


});
});

Revision as of 22:48, 18 December 2021

/* Any JavaScript here will be loaded for all users on every page load. */


class TimeSegment {
    constructor(track, segmentStart, segmentEnd, htmlElement) {
        this.track = track;
        this.segmentStart = segmentStart;
        this.segmentEnd = segmentEnd;
        this.htmlElement = htmlElement;
    }
}

class PlaybackData {
    constructor() {
        this.stopTime = null;
        this.timeSegments = [];
        this.tracks = [];
        this.playingSegments = [];
        this.playingTrack = null;
    }
}

let playbackData = new PlaybackData();


$(document).ready(function() {


    // Create one audio player per declared track.

    $('*[data-track]').each(function() {

        $('<figure></figure>').append($('<figcaption></figcaption>').text($(this).attr('data-track-title'))).appendTo($(this)).append(

            $('<audio></audio>').prop('controls', true).attr('preload', 'auto').attr('src', $(this).attr('data-track'))

        );

    });


    // Create hyperlinks out of reconstruction markup.

    $('*[data-def]').click(function() {
        var url = location.href;
        location.href = "#" + $(this).attr('data-def');
        history.replaceState(null, null, url);
    });


    // Update timing data.

    $('*[data-segment]').each(function() {

        let m = /(?<track>\d+\/)?((?<minuteStart>\d+):)?(?<secondStart>\d+(.\d*)?)-((?<minuteEnd>\d+):)?(?<secondEnd>\d+(.\d*)?)/.exec($(this).attr('data-segment'));
    });

    if (m) {
        playbackData.timeSegments.append(new TimeSegment(parseInt(m.groups.track), parseInt(m.groups.minuteStart) * 60 + parseFloat(m.groups.secondStart),
            parseInt(m.groups.minuteEnd) * 60 + parseFloat(m.groups.secondEnd),
            $(this)
        ));
    } else {
        $(this).append('Wrong time segment');
    }

});