LLWiki正在建设中,欢迎加入我们

User:Bhsd/widget/lyrics.js

来自LLWiki
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:前往菜单 → 设置(Mac为Opera → Preferences),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件
//<nowiki>
// 用于[[Widget:Lyrics]],可以使用ES6语法
/**
 * @Function: 1. 提供一个全局方法mw.resizeLyrics,用于计算渲染后的歌词实际宽度并调整CSS
 *            2. 点击角色色块执行筛选效果
 *            3. 鼠标移至歌词上方时提示演唱者
 *            4. Windows系统下的Chrome浏览器增大字号至15px
 * @Dependencies: mediawiki.util, oojs-ui-core, ext.gadget.site-lib
 * @Author: [[User:Bhsd]]
 */
"use strict";
/* global mw, $ */
(() => {
    let style, members = [];
    const resize = () => {
        const $boxes = $('.Lyrics_box:visible');
        $boxes.filter(function() { return $(this).width() < 720; }).addClass( 'Lyrics_narrow' );
        $boxes.filter(function() { return $(this).width() >= 720; }).removeClass( 'Lyrics_narrow' );
    },
        addCSS = ($content) => {
        // 考虑到快速编辑小工具的页内预览,members有增无减
        members = [...new Set([...members, ...$content.find( '.memberblock' ).map(function() {
            return [...this.classList].filter(e => e.endsWith( '-block' )).toString().slice(0, -6);
        })])];
        style.textContent = members.map(ele => ['gradient', 'single'].map(type =>
            `.${ele}-block.mw-collapsed ~ .Lyrics_box .Lyrics_${type}:not(.${ele}-lyrics)`).join()
        ).join() + '{ -webkit-text-fill-color: #ddd; text-fill-color: #ddd; }';
    },
        main = () => {
        mw.widget = mw.widget || {};
        if (mw.widget.lyrics) { return; }
        const $body = $('#bodyContent');
        $(resize);
        mw.loader.using( 'mediawiki.util' ).then(() => {
            const windowResize = mw.util.debounce(200, resize);
            $(window).resize( windowResize );
            $body.on('click', '.tabs-label', windowResize); // 必须等待tabs的js先执行完毕
        });
        style = mw.loader.addStyleTag('');
        mw.hook( 'wikipage.content' ).add($content => {
            console.log('Hook: wikipage.content, 开始更新演唱者筛选样式表');
            addCSS($content);
            const $box = $content.find( '.Lyrics_has_ruby' );
            if ($box.length === 0 || getComputedStyle( $box.find( 'rt' )[0] )['font-size'] != '12px') { return; }
            console.log('Hook: wikipage.content, Windows Chrome增大歌词字号');
            $box.css('font-size', '15px');
        });
        mw.hook( 'wikipage.collapsibleContent' ).add($content => {
            console.log('Hook: wikipage.collapsibleContent, 移除演唱者标注的tabindex');
            $content.filter( '.memberblock' ).removeAttr( 'tabindex' );
        });
        mw.resizeLyrics = resize;
        mw.loader.using(['oojs-ui-core', 'ext.gadget.site-lib']).then(() => {
            mw.tipsy($body, '.Lyrics_single, .Lyrics_gradient', {classes: ['Lyrics_tipsy']});
        });
        mw.widget.lyrics = true;
    };
    if (window.jQuery) { main(); }
    else { window.addEventListener('jquery', main); }
}) ();
//</nowiki>
// [[category:jQuery小部件]] {{DEFAULTSORT:Lyrics}}