MediaWiki:Common.js
来自Age Of History 2 Chinese Wiki
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/* 轮播图功能 */ mw.hook('wikipage.content').add(function($content) { // 查找页面中所有轮播图 $content.find('.mw-carousel').each(function() { const $carousel = $(this); const $items = $carousel.find('.carousel-item'); const $indicators = $carousel.find('.carousel-indicators'); const $prevBtn = $carousel.find('.carousel-prev'); const $nextBtn = $carousel.find('.carousel-next'); let currentIndex = 0; const slideCount = $items.length; if (slideCount === 0) return; // 创建指示器 for (let i = 0; i < slideCount; i++) { const $indicator = $('<div class="indicator"></div>'); if (i === 0) $indicator.addClass('active'); $indicator.on('click', function() { goToSlide(i); }); $indicators.append($indicator); } // 初始化第一张幻灯片 $items.eq(0).addClass('active'); // 给每个幻灯片添加点击事件 $items.each(function() { const $item = $(this); const link = $item.data('link'); if (link && link.length > 0) { $item.css('cursor', 'pointer').on('click', function() { window.location.href = link; }); } }); // 切换到指定幻灯片 function goToSlide(index) { $items.removeClass('active'); $indicators.find('.indicator').removeClass('active'); $items.eq(index).addClass('active'); $indicators.find('.indicator').eq(index).addClass('active'); currentIndex = index; } // 上一张 function prevSlide() { const newIndex = (currentIndex - 1 + slideCount) % slideCount; goToSlide(newIndex); } // 下一张 function nextSlide() { const newIndex = (currentIndex + 1) % slideCount; goToSlide(newIndex); } // 绑定按钮事件 $prevBtn.on('click', function(e) { e.preventDefault(); e.stopPropagation(); prevSlide(); }); $nextBtn.on('click', function(e) { e.preventDefault(); e.stopPropagation(); nextSlide(); }); // 自动播放 let autoplayInterval = setInterval(nextSlide, 5000); $carousel.on('mouseenter', function() { clearInterval(autoplayInterval); }).on('mouseleave', function() { autoplayInterval = setInterval(nextSlide, 5000); }); // 触摸滑动支持 let touchStartX = 0; let touchEndX = 0; $carousel.on('touchstart', function(e) { touchStartX = e.originalEvent.touches[0].clientX; }); $carousel.on('touchend', function(e) { touchEndX = e.originalEvent.changedTouches[0].clientX; // 判断滑动方向 if (touchEndX < touchStartX - 50) { nextSlide(); // 左滑,下一张 } else if (touchEndX > touchStartX + 50) { prevSlide(); // 右滑,上一张 } }); }); }); // Collapsible blocks functionality $(document).ready(function() { // Initialize collapsible blocks $('.collapsible-header').click(function() { $(this).next('.collapsible-content').slideToggle(); $(this).toggleClass('active'); }); // Initially hide collapsible content $('.collapsible-content').hide(); }); /* Common.js - Database New主题JavaScript增强 */ $(function() { // 创建CRT效果容器 function createCRTEffects() { if ($('.crt-effects').length === 0) { var crtContainer = $('<div>', { 'class': 'crt-effects', html: [ $('<div>', {'class': 'scan-line-effect'}), $('<div>', {'class': 'scan-animation'}).append( $('<div>', {'class': 'fast-scan'}) ), $('<div>', {'class': 'radial-glow'}) ] }); $('body').append(crtContainer); } } // 初始化CRT效果 createCRTEffects(); // 橙幕切换功能 if (typeof window.orangemu_toggle_init === 'undefined') { window.orangemu_toggle_init = true; // 为橙幕添加点击切换功能 $(document).on('click', '.orangemu', function(e) { e.stopPropagation(); $(this).toggleClass('orangemu_toggle_on'); }); } // 修复动画问题 function fixAnimations() { // 延迟应用动画,防止页面加载时的闪烁 setTimeout(function() { $('#mw-content-text > *').each(function(index) { $(this).css({ 'animation': 'fadeIn 0.5s ease-out forwards', 'animation-delay': (index * 0.1) + 's', 'opacity': '0' }); }); }, 100); } // 应用动画修复 $(document).ready(function() { fixAnimations(); }); // 监听新内容加载(如AJAX) mw.hook('wikipage.content').add(function($content) { if ($content.attr('id') === 'mw-content-text') { fixAnimations(); } }); // 添加复古终端效果的打字动画 function typeWriter(element, text, speed) { var i = 0; element.empty(); function type() { if (i < text.length) { element.append(text.charAt(i)); i++; setTimeout(type, speed); } } type(); } // 为特定元素应用打字效果 $('.terminal-text').each(function() { var text = $(this).text(); typeWriter($(this), text, 50); }); // 添加闪烁光标效果 function createBlinkingCursor() { var cursor = $('<span>', { 'class': 'terminal-cursor', text: '▋' }); setInterval(function() { cursor.toggle(); }, 500); return cursor; } // 为终端元素添加光标 $('.terminal').each(function() { $(this).append(createBlinkingCursor()); }); // 模拟CRT屏幕抖动效果 function screenGlitch() { var container = $('#content'); container.css('transform', 'translate(' + (Math.random() * 2 - 1) + 'px, ' + (Math.random() * 2 - 1) + 'px)'); setTimeout(function() { container.css('transform', 'translate(0, 0)'); }, 50); } // 随机触发屏幕抖动 setInterval(function() { if (Math.random() < 0.005) { // 0.5%的概率 screenGlitch(); } }, 1000); // 为页面添加启动动画 function bootSequence() { $('body').addClass('booting'); setTimeout(function() { $('body').removeClass('booting').addClass('booted'); }, 500); } // 页面加载时执行启动序列 bootSequence(); }); // 辅助CSS类 $(function() { // 动态添加一些必要的CSS var customStyles = ` .terminal-cursor { animation: blink 1s infinite; } @keyframes blink { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } } .booting #content { opacity: 0; transform: scale(0.95); transition: all 0.5s ease-out; } .booted #content { opacity: 1; transform: scale(1); } .terminal { font-family: var(--mono-font); background-color: rgb(var(--black-monochrome)); color: rgb(var(--bright-accent)); padding: 1rem; border: 2px solid rgb(var(--bright-accent)); box-shadow: 0 0 10px rgba(var(--bright-accent), 0.3); } /* 修复动画闪烁问题 */ #mw-content-text > * { visibility: visible; } .mw-parser-output > *.animated { animation: none !important; } `; $('<style>').text(customStyles).appendTo('head'); }); // 修复变色龙皮肤的Bootstrap组件 $(function() { function fixBootstrapComponents() { // 修复导航栏 $('.navbar').css({ 'background-color': 'rgb(10, 10, 10)', 'border-bottom': '1px solid rgb(229, 140, 36)' }); // 修复下拉菜单 $('.dropdown-menu').css({ 'background-color': 'rgb(10, 10, 10)', 'border': '1px solid rgb(229, 140, 36)' }); // 修复按钮 $('.btn').css({ 'background-color': 'rgb(72, 69, 60)', 'border': '1px solid rgb(229, 140, 36)', 'color': 'rgb(229, 140, 36)' }); // 修复表单控件 $('.form-control').css({ 'background-color': 'rgb(10, 10, 10)', 'border': '1px solid rgb(229, 140, 36)', 'color': 'rgb(229, 140, 36)' }); } // 应用样式修复 fixBootstrapComponents(); // 监听DOM变化 var observer = new MutationObserver(function(mutations) { fixBootstrapComponents(); }); observer.observe(document.body, { childList: true, subtree: true }); }); // 顶栏头像显示 // 增强的头像显示 $(document).ready(function() { var username = mw.config.get('wgUserName'); if (username) { // 获取用户ID,是生成头像URL的关键 $.get(mw.util.wikiScript('api'), { action: 'query', list: 'users', ususers: username, format: 'json' }).done(function(data) { if (data && data.query && data.query.users && data.query.users[0]) { var userId = data.query.users[0].userid; // 尝试几种可能的头像路径格式 var possiblePaths = [ '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.jpg', '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.png', '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.gif', '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.jpg', '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.png', '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.gif' ]; // 检查哪个路径可用 function checkPath(index) { if (index >= possiblePaths.length) { // 所有路径都不可用,使用默认头像 applyAvatarCSS('/extensions/SocialProfile/images/default_s.gif'); return; } var img = new Image(); img.onload = function() { // 找到可用的路径 applyAvatarCSS(possiblePaths[index]); }; img.onerror = function() { // 尝试下一个路径 checkPath(index + 1); }; img.src = mw.config.get('wgScriptPath') + possiblePaths[index]; } checkPath(0); } }); } function applyAvatarCSS(avatarUrl) { // 应用CSS规则 $('<style>').text( '.navbar-userloggedin::before, ' + '#personal-inner::before, ' + '#p-personal .vector-menu-content-list > li:first-child > a::before, ' + '.navbar-personaltools > li:first-child > a::before {' + ' background-image: url("' + avatarUrl + '") !important;' + '}' ).appendTo('head'); } }); /* Windows XP 风格的开始菜单和时钟功能 */ // 创建完整的任务栏 function createTaskbar() { // 移除之前的任务栏 $('.taskbar, .start-button, .taskbar-clock').remove(); // 创建任务栏容器 var $taskbar = $('<div class="taskbar"></div>'); // 创建开始按钮 var $startButton = $('<div class="start-button">开始</div>'); $taskbar.append($startButton); // 创建任务栏内容区域 var $taskbarContent = $('<div class="taskbar-content"></div>'); // 创建快速启动栏 var $quickLaunch = $('<div class="quick-launch"></div>'); // 添加一些快速启动图标 var quickLaunchItems = [ { icon: '🌐', title: '浏览器', action: function() { window.location.href = '/wiki/首页'; } }, { icon: '📁', title: '文件夹', action: function() { window.location.href = '/wiki/Special:AllPages'; } }, { icon: '📧', title: '邮件', action: function() { window.location.href = '/wiki/Special:EmailUser'; } } ]; quickLaunchItems.forEach(function(item) { var $icon = $('<div class="quick-launch-icon" title="' + item.title + '">' + item.icon + '</div>'); $icon.click(item.action); $quickLaunch.append($icon); }); $taskbarContent.append($quickLaunch); $taskbar.append($taskbarContent); // 创建系统托盘 var $systemTray = $('<div class="system-tray"></div>'); // 添加系统图标 var $volumeIcon = $('<div class="tray-icon" title="音量">🔊</div>'); var $networkIcon = $('<div class="tray-icon" title="网络">📶</div>'); $systemTray.append($volumeIcon); $systemTray.append($networkIcon); // 添加时钟 var $clock = $('<div class="taskbar-clock"></div>'); $systemTray.append($clock); $taskbar.append($systemTray); // 添加到页面 $('body').append($taskbar); // 启动时钟 updateClock($clock); } // 更新时钟 function updateClock($clock) { function update() { var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); // 格式化时间 hours = (hours < 10 ? '0' : '') + hours; minutes = (minutes < 10 ? '0' : '') + minutes; $clock.text(hours + ':' + minutes); } update(); setInterval(update, 1000); } // 设置开始菜单 function setupStartMenu() { // 移除任何现有的开始菜单 $('#xp-start-menu').remove(); // 创建开始菜单元素 var $startMenu = $('<div id="xp-start-menu"></div>').css({ 'position': 'fixed', 'left': '0', 'bottom': '60px', 'width': '250px', 'background-color': 'white', 'border': '2px solid #0054e3', 'box-shadow': '2px -2px 5px rgba(0, 0, 0, 0.3)', 'z-index': '10000', 'display': 'none' }); // 添加菜单顶部 var username = mw.config.get('wgUserName') || 'Guest'; var $menuTop = $('<div class="start-menu-top"></div>').css({ 'height': '60px', 'background': 'linear-gradient(to bottom, #235ddc, #225ada 50%, #214fbb)', 'color': 'white', 'padding': '10px', 'font-weight': 'bold', 'display': 'flex', 'align-items': 'center' }); $menuTop.html('<span style="font-size: 16px;">' + username + '</span>'); $startMenu.append($menuTop); // 添加菜单项 var $menuItems = $('<div class="start-menu-items"></div>').css({ 'background-color': 'white', 'padding': '5px 0' }); // 定义菜单项 var menuItemsData = [ { icon: '📄', text: '我的文档', link: '/wiki/Special:MyPage' }, { icon: '🖼️', text: '我的图片', link: '/wiki/Special:MediaStatistics' }, { icon: '🎵', text: '我的音乐', link: '#' }, { icon: '⚙️', text: '控制面板', link: '/wiki/Special:Preferences' }, { icon: '🔍', text: '搜索', link: '/wiki/Special:Search' }, { icon: '❓', text: '帮助和支持', link: '/wiki/Help:目录' }, { icon: '🚪', text: '注销', link: '/wiki/Special:UserLogout' } ]; // 添加菜单项 $.each(menuItemsData, function(index, item) { var $menuItem = $('<div class="start-menu-item"></div>').css({ 'padding': '5px 10px', 'display': 'flex', 'align-items': 'center', 'cursor': 'pointer' }); $menuItem.html('<span style="margin-right: 10px; font-size: 16px;">' + item.icon + '</span>' + '<span>' + item.text + '</span>'); // 添加悬停效果 $menuItem.hover( function() { $(this).css('background-color', '#e0ecff'); }, function() { $(this).css('background-color', 'transparent'); } ); // 添加链接功能 $menuItem.click(function() { if (item.link && item.link !== '#') { window.location.href = mw.config.get('wgScriptPath') + item.link; } }); $menuItems.append($menuItem); }); $startMenu.append($menuItems); // 添加开始菜单到body $('body').append($startMenu); // 为开始按钮添加点击事件 $(document).on('click', '.start-button', function(e) { e.stopPropagation(); $startMenu.toggle(); }); // 点击其他区域关闭开始菜单 $(document).click(function(e) { if (!$(e.target).is('.start-button') && !$(e.target).closest('#xp-start-menu').length) { $startMenu.hide(); } }); } // Windows XP 风格的任务栏和开始菜单样式 function addTaskbarStyles() { var taskbarStyles = ` /* 任务栏样式 */ .taskbar { position: fixed; bottom: 0; left: 0; right: 0; height: 40px; background-color: #0054e3; background: linear-gradient(to bottom, #2e96ef, #2387e7 50%, #0272d4 50%, #0866c6); border-top: 1px solid #2483ce; display: flex; align-items: center; z-index: 9999; padding: 0 5px; } /* 开始按钮样式 */ .start-button { height: 34px; padding: 0 10px; display: flex; align-items: center; background: linear-gradient(to bottom, #3c8ddd, #2987d6 50%, #1a6fc9 50%, #155db9); border: 1px solid #10559a; border-radius: 3px; color: white; font-weight: bold; margin-right: 10px; cursor: pointer; text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); } .start-button:hover { background: linear-gradient(to bottom, #5ca6e5, #4a9add 50%, #3b88d5 50%, #2a76c4); } /* 任务栏内容区域 */ .taskbar-content { flex-grow: 1; display: flex; height: 100%; align-items: center; } /* 快速启动栏 */ .quick-launch { display: flex; align-items: center; height: 100%; } .quick-launch-icon { width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; margin-right: 5px; cursor: pointer; font-size: 18px; background-color: rgba(255, 255, 255, 0.2); border-radius: 3px; } .quick-launch-icon:hover { background-color: rgba(255, 255, 255, 0.3); } /* 系统托盘 */ .system-tray { display: flex; align-items: center; height: 100%; padding: 0 5px; } .tray-icon { margin-left: 8px; font-size: 16px; cursor: pointer; } /* 时钟样式 */ .taskbar-clock { background-color: rgba(0, 0, 0, 0.2); color: white; padding: 3px 8px; margin-left: 8px; border-radius: 3px; font-size: 12px; } /* 开始菜单样式已在setupStartMenu函数中通过JS设置 */ `; // 添加样式到head $('style[data-taskbar-styles]').remove(); $('<style data-taskbar-styles>').text(taskbarStyles).appendTo('head'); } // 初始化函数 function initWindowsXPElements() { // 添加样式 addTaskbarStyles(); // 创建任务栏 createTaskbar(); // 设置开始菜单 setupStartMenu(); } // 页面加载完成后初始化 $(document).ready(function() { initWindowsXPElements(); });
Loading comments...