MediaWiki:Common.js:修订间差异

来自失传媒体中文维基
跳转到导航 跳转到搜索
IDOMOY
IDOMOY留言 | 贡献
IDOMOY
IDOMOY留言 | 贡献 (已还原IDOMOY讨论)的编辑至最后由HW修订的版本)
 
第211行: 第211行:
     });
     });
})();
})();
// 起草中空间顶部提示
mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function () {
  var ns = mw.config.get('wgCanonicalNamespace');
  // 这里改成你要显示的命名空间规范名
  var allowedNamespaces = ['Draft'];
  if (allowedNamespaces.indexOf(ns) === -1) return;
  var api = new mw.Api();
  api.get({
    action: 'parse',
    page: 'Template:起草中提示',
    prop: 'text',
    formatversion: 2
  }).done(function (data) {
    if (!data.parse || !data.parse.text) return;
    var $box = $('<div>')
      .addClass('ns-notice-wrapper')
      .html(data.parse.text);
    $('#content').prepend($box);
  });
});

2026年5月16日 (六) 15:51的最新版本

//用户名前显示头像
mw.loader.using( 'mediawiki.util', function () {
    $( document ).ready( function () {
        function addAvatarsToElements( $elements ) {
            $elements.each( function () {
                var $link = $( this );
                if ( $link.prev( '.sp-avatar-wrapper' ).length || $link.data('avatar-added') ) {
        			return;
    			}
    			$link.data('avatar-added', true);
				
				const excludeContainers = [
					'#p-views', 
					'#p-cactions', 
					'#p-tb', 
					'#right-navigation', 
					'#p-personal', 
					'.mw-portlet-personal'
				];
					// 检查是否匹配任意一个排除容器
				const isExcluded = excludeContainers.some(selector => $link.closest(selector).length);
				if (isExcluded) {
					return;
				}

                var href = $link.attr( 'href' );
                if ( !href ) return;
                var userPart = decodeURIComponent( href.split( '/wiki/' )[1] );
                if ( !userPart ) return;
                if ( userPart.indexOf( '/' ) !== -1 ) {
                    return;
                }
                var userName = userPart.replace( /^User:|^用户:/, '' ).replace(/_/g, ' ');
                var linkText = $link.text().trim().replace(/^User:|^用户:/, '');
                if ( linkText !== userName ) {
                    var $target = $link.find( 'span, bdi' ).first();
                    var targetText = $target.length ? $target.text().trim().replace(/^User:|^用户:/, '') : '';
                    if ( !$target.length || targetText !== userName ) {
                        return;
                    }
                }
                new mw.Api().get( {
                    action: 'parse',
                    text: '{{#avatar:' + userName + '|l}}',
                    contentmodel: 'wikitext',
                    disablelimitreport: true,
                    disableeditsection: true
                } ).done( function ( data ) {
                    if ( data.parse && data.parse.text ) {
                        var avatarHtml = data.parse.text[ '*' ];
                        var $avatarWrapper = $( '<span class="sp-avatar-wrapper" style="vertical-align: middle; margin-right: 4px; display: inline-block;"></span>' ).html( avatarHtml );
                        $avatarWrapper.find( 'img' ).css( {
						    width: '1.5em',
						    height: '1.5em',
						    objectFit: 'cover',
						    display: 'inline-block',
						    verticalAlign: 'middle',
						    border: 'var(--background-color-neutral, #eaecf0) 2px solid',
						    boxSizing: 'border-box'
						} );
                        $link.before( $avatarWrapper );

                        if ( mw.user.isAnon() ) {
                            return;
                        }
                        var currentUserName = mw.user.getName();
                        if ( userName !== currentUserName ) {
                            return;
                        }

                        var avatarImg = $avatarWrapper.find( 'img' );
                        var avatarUrl = avatarImg.attr( 'src' );
                        if ( avatarUrl && avatarUrl !== '/images/avatars/default_l.gif' ) {
                            var $styleTag = $( '#dynamic-avatar-style' );
                            if ( !$styleTag.length ) {
                                $styleTag = $( '<style id="dynamic-avatar-style"></style>' ).appendTo( 'head' );
                            }
                            var css = '.mw-header .citizen-dropdown-summary[title="打开/关闭个人菜单"] .citizen-ui-icon.mw-ui-icon-wikimedia-userAvatar { background-image: url("' + avatarUrl + '"); background-repeat: no-repeat; background-size: contain; width: 30px; height: 30px; }   .mw-header .citizen-dropdown-summary[title="打开/关闭个人菜单"] .citizen-ui-icon.mw-ui-icon-wikimedia-userAvatar::before{mask-image: unset;background-color: transparent;}';
                            $styleTag.text( css );
                        }
                    }
                } );
            } );
        }
        addAvatarsToElements( $( 'a[href*="/wiki/User:"], a[href*="/wiki/%E7%94%A8%E6%88%B7:"], a[href*="/wiki/用户:"]' ) );
        var observer = new MutationObserver( function ( mutations ) {
            mutations.forEach( function ( mutation ) {
                $( mutation.addedNodes ).find( 'a[href*="/wiki/User:"], a[href*="/wiki/%E7%94%A8%E6%88%B7:"], a[href*="/wiki/用户:"]' ).each( function() {
                    addAvatarsToElements( $( this ) );
                } );
            } );
        } );
        observer.observe( document.body, { childList: true, subtree: true } );
    } );
} );


//DPL4翻页跳转
(function() {
    var container = document.getElementById('dpl-jump-area');
    if (container) {
        var count = parseInt(container.getAttribute('data-count'));
        var total = parseInt(container.getAttribute('data-total'));
        var offset = parseInt(container.getAttribute('data-offset'));
        var pageName = container.getAttribute('data-pagename');
        var maxPage = Math.ceil(total / count);
        var currentPage = Math.floor(offset / count) + 1;

        var input = document.createElement('input');
        input.type = 'number';
        input.value = currentPage;
        input.min = 1;
        input.max = maxPage;
        input.style.width = '45px';
        input.style.margin = '0 5px';

        var button = document.createElement('button');
        button.innerText = '确认';
        button.onclick = function() {
            var pageNum = parseInt(input.value);
            if (pageNum >= 1 && pageNum <= maxPage) {
                var targetOffset = (pageNum - 1) * count;
                window.location.href = mw.util.getUrl(pageName) + '?DPL_offset=' + targetOffset;
            } else {
                alert('请输入 1 到 ' + maxPage + ' 之间的页码');
            }
        };

        container.innerHTML = ' 跳至第 ';
        container.appendChild(input);
        container.appendChild(document.createTextNode(' 页 '));
        container.appendChild(button);
    }
})();


// Wikidot 迁站提示
(function () {
    'use strict';

    if (mw.config.get('wgAction') !== 'edit') return;

    const pageTitle = mw.config.get('wgTitle');

    // json
    fetch(mw.util.wikiScript('index') + '?title=MediaWiki:Wikidot-map.json&action=raw')
        .then(response => {
            if (!response.ok) throw new Error('JSON加载失败');
            return response.json();
        })
        .then(data => {
            const match = data.find(item => item.title === pageTitle);

            if (match && match.url) {
                const html = `
                    <div class="styled-quote">
                        <p>迁站前该页面原Wikidot页面:
                            <a href="https://lostmedia.wikidot.com/${match.url}" target="_blank" rel="noopener">
                                ${match.title}
                            </a>
                        </p>
                        <p>站内工具:<a href="https://lostmediawiki.cn/wiki/%E7%89%B9%E6%AE%8A:%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6" target="_blank" rel="noopener">上传文件</a> ; <a href="https://lostmediawiki.cn/wiki/特殊:BatchUpload" target="_blank" rel="noopener">批量上传</a> ; <a href="https://lostmediawiki.cn/index.php?title=%E7%89%B9%E6%AE%8A:%E6%90%9C%E7%B4%A2&search=%E6%96%87%E4%BB%B6%3A${match.title}" target="_blank" rel="noopener">搜索文件${match.title}</a> ; 
                        </p>
<iframe src="https://code.hw233.vip/tool/Mediawiki/copy.html"></iframe>
                    </div>`;

                const content = document.getElementById('mw-content-text');
                if (content) {
                    content.insertAdjacentHTML('afterbegin', html);
                }
            }
        })
        .catch(error => {
            console.warn('Wikidot迁站提示加载失败:', error);
        });
})();




//外部链接新窗口打开
(function() {
    const siteDomain = 'lostmediawiki.cn';

    function fixLink(link) {
        if (!link.href) return;
        const href = link.href.toLowerCase();
        if (href.startsWith('mailto:') || href.startsWith('tel:') || href.startsWith('javascript:')) return;
        
        try {
            const url = new URL(link.href);
            if (!url.hostname.includes(siteDomain)) {
                link.target = '_blank';
                link.rel = 'noopener noreferrer';
            }
        } catch (e) {}
    }
    window.addEventListener('load', function() {
        document.querySelectorAll('a[href]').forEach(fixLink);
        const observer = new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                mutation.addedNodes.forEach(function(node) {
                    if (node.nodeType === 1) {
                        if (node.tagName === 'A') fixLink(node);
                        node.querySelectorAll('a[href]').forEach(fixLink);
                    }
                });
            });
        });
        observer.observe(document.body, { childList: true, subtree: true });
    });
})();