|
|
1번째 줄: |
1번째 줄: |
| $( function () {
| |
| 'use strict';
| |
| var articleNamespaces, talkNamespaces, isArticleTab, limit;
| |
|
| |
|
| articleNamespaces = $( '.live-recent' ).attr( 'data-article-ns' );
| |
| talkNamespaces = $( '.live-recent' ).attr( 'data-talk-ns' );
| |
| isArticleTab = true;
| |
| limit = $( '#live-recent-list' )[ 0 ].childElementCount;
| |
|
| |
| function formatTimeAgo(time) {
| |
| var now = new Date();
| |
| var diff = now.getTime() - time.getTime();
| |
| var seconds = Math.floor(diff / 1000);
| |
| var minutes = Math.floor(seconds / 60);
| |
| var hours = Math.floor(minutes / 60);
| |
| var days = Math.floor(hours / 24);
| |
| var weeks = Math.floor(days / 7);
| |
| var months = Math.floor(days / 30);
| |
| var years = Math.floor(days / 365);
| |
|
| |
| if (years > 0) {
| |
| return years + "년 전";
| |
| } else if (months > 0) {
| |
| return months + "개월 전";
| |
| } else if (weeks > 0) {
| |
| return weeks + "주 전";
| |
| } else if (days > 0) {
| |
| return days + "일 전";
| |
| } else if (hours > 0) {
| |
| return hours + "시간 전";
| |
| } else if (minutes > 0) {
| |
| return minutes + "분 전";
| |
| } else {
| |
| return seconds + "초 전";
| |
| }
| |
| }
| |
|
| |
| function refreshLiveRecent() {
| |
| var getParameter;
| |
|
| |
| if ( !$( '#live-recent-list' ).length || $( '#live-recent-list' ).is( ':hidden' ) ) {
| |
| return;
| |
| }
| |
|
| |
| getParameter = {
| |
| action: 'query',
| |
| list: 'recentchanges',
| |
| rcprop: 'title|timestamp',
| |
| rcshow: '!bot|!redirect',
| |
| rctype: 'edit|new',
| |
| rclimit: limit,
| |
| format: 'json',
| |
| rcnamespace: isArticleTab ? articleNamespaces : talkNamespaces,
| |
| rctoponly: true
| |
| };
| |
|
| |
| mw.loader.using( 'mediawiki.api' ).then( function () {
| |
| var api = new mw.Api();
| |
| api.get( getParameter ).then( function ( data ) {
| |
| var recentChanges, html, time, line, text;
| |
| recentChanges = data.query.recentchanges;
| |
| html = recentChanges.map( function ( item ) {
| |
| time = new Date( item.timestamp );
| |
| line = '<li class="flex justify-between"><a class="recent-item w-full flex items-center" href="' + mw.util.getUrl( item.title ) + '" title="' + item.title + '"><span class="flex-1 text-ellipsis text-nowrap overflow-hidden">';
| |
| text = '';
| |
| if ( item.type === 'new' ) {
| |
| line = line.replace('<span class="flex-1 text-ellipsis text-nowrap overflow-hidden">','<div class="flex justify-center items-center mr-1 w-3 h-3 bg-red-500 rounded-2xl text-[0.5rem] text-white font-black">N</div><span class="flex-1 text-ellipsis text-nowrap overflow-hidden">');
| |
| }
| |
| text += item.title;
| |
| if ( text.length > 9999 ) {
| |
| text = text.substr( 0, 9999 );
| |
| text += '...';
| |
| }
| |
| line += text;
| |
| line += '</span><time class="ml-4 recent-item-timestamp">' + formatTimeAgo(time) + '</time></a></li>';
| |
| return line;
| |
| } ).join( '\n' );
| |
| $( '#live-recent-list' ).html( html );
| |
| } )
| |
| .catch( function () {} );
| |
| });
| |
| }
| |
|
| |
| $( '#liberty-recent-tab1' ).click( function () {
| |
| $( this ).addClass( 'active' );
| |
| $( '#liberty-recent-tab2' ).removeClass( 'active' );
| |
| isArticleTab = true;
| |
| refreshLiveRecent();
| |
| } );
| |
|
| |
| $( '#liberty-recent-tab2' ).click( function () {
| |
| $( this ).addClass( 'active' );
| |
| $( '#liberty-recent-tab1' ).removeClass( 'active' );
| |
| isArticleTab = false;
| |
| refreshLiveRecent();
| |
| } );
| |
|
| |
| setInterval( refreshLiveRecent, 5 * 60 * 1000 );
| |
| refreshLiveRecent();
| |
| } );
| |