微件:Card:修订间差异
跳转到导航
跳转到搜索
功能测试 |
功能测试 |
||
| 第8行: | 第8行: | ||
.card-deck-trans { | .card-deck-trans { | ||
cursor: pointer; | cursor: pointer; | ||
transition: transform | transition: transform 0.2s ease; | ||
} | } | ||
| 第49行: | 第49行: | ||
z-index: 10001; | z-index: 10001; | ||
line-height: 1; | line-height: 1; | ||
} | } | ||
| 第126行: | 第125行: | ||
z-index: 10002; | z-index: 10002; | ||
line-height: 1; | line-height: 1; | ||
} | } | ||
| 第143行: | 第141行: | ||
.spark-modal-content .card-deck-trans { | .spark-modal-content .card-deck-trans { | ||
cursor: default; | cursor: default; | ||
pointer-events: none; | |||
} | } | ||
| 第149行: | 第148行: | ||
} | } | ||
.spark-modal-title { | .spark-modal-title { | ||
width: 100%; | width: 100%; | ||
| 第158行: | 第156行: | ||
} | } | ||
.spark-loading { | .spark-loading { | ||
color: #fff; | color: #fff; | ||
| 第167行: | 第164行: | ||
<div id="card-modal-overlay" class="card-modal-overlay"> | <div id="card-modal-overlay" class="card-modal-overlay"> | ||
<span class="card-modal-close" id="card-modal-close">×</span> | <span class="card-modal-close" id="card-modal-close">×</span> | ||
<div class="card-modal-content" id="card-modal-content"> | <div class="card-modal-content" id="card-modal-content"></div> | ||
</div> | </div> | ||
<div id="spark-modal-overlay" class="spark-modal-overlay"> | <div id="spark-modal-overlay" class="spark-modal-overlay"> | ||
<span class="spark-modal-close" id="spark-modal-close">×</span> | <span class="spark-modal-close" id="spark-modal-close">×</span> | ||
<div class="spark-modal-content" id="spark-modal-content"> | <div class="spark-modal-content" id="spark-modal-content"></div> | ||
</div> | </div> | ||
| 第181行: | 第176行: | ||
'use strict'; | 'use strict'; | ||
function init() { | function init() { | ||
var cardModal = document.getElementById('card-modal-overlay'); | var cardModal = document.getElementById('card-modal-overlay'); | ||
| 第190行: | 第184行: | ||
var sparkModalClose = document.getElementById('spark-modal-close'); | var sparkModalClose = document.getElementById('spark-modal-close'); | ||
function bindCardEvents() { | function bindCardEvents() { | ||
var cards = document.querySelectorAll('.card-deck-trans'); | var cards = document.querySelectorAll('.card-deck-trans'); | ||
cards.forEach(function(card) { | cards.forEach(function(card) { | ||
if (card.dataset.bound || card.closest('.spark-modal-content') || card.closest('.card-modal-content')) { | |||
if (card.dataset.bound || card.closest('.spark-modal-content')) { | |||
return; | return; | ||
} | } | ||
| 第206行: | 第198行: | ||
e.stopPropagation(); | e.stopPropagation(); | ||
var cardDeck = this.querySelector('.card-deck'); | var cardDeck = this.querySelector('.card-deck'); | ||
if (!cardDeck) return; | if (!cardDeck) return; | ||
var clonedCard = document.createElement('div'); | |||
var clonedCard = | clonedCard.className = 'card-modal-card'; | ||
clonedCard. | clonedCard.innerHTML = '<div class="card-deck">' + cardDeck.innerHTML + '</div>'; | ||
clonedCard. | |||
cardModalContent.innerHTML = ''; | cardModalContent.innerHTML = ''; | ||
cardModalContent.appendChild(clonedCard); | |||
var sparkEnable = this.dataset.sparkEnable; | var sparkEnable = this.dataset.sparkEnable; | ||
var sort = this.dataset.sort; | var sort = this.dataset.sort; | ||
var cardId = this.dataset.cardId; | var cardId = this.dataset.cardId; | ||
if (sparkEnable === '1' && sort !== '中立卡牌' && sort !== '怪物卡牌' && cardId) { | |||
if (sparkEnable === '1' && sort !== '中立卡牌' && sort !== '怪物卡牌') { | |||
var sparkButton = document.createElement('button'); | var sparkButton = document.createElement('button'); | ||
sparkButton.className = 'card-spark-button'; | sparkButton.className = 'card-spark-button'; | ||
| 第248行: | 第223行: | ||
} | } | ||
cardModal.classList.add('active'); | cardModal.classList.add('active'); | ||
document.body.style.overflow = 'hidden'; | document.body.style.overflow = 'hidden'; | ||
| 第255行: | 第229行: | ||
} | } | ||
function openSparkModal(cardId) { | function openSparkModal(cardId) { | ||
sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div class="spark-loading">加载中...</div>'; | sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div class="spark-loading">加载中...</div>'; | ||
sparkModal.classList.add('active'); | sparkModal.classList.add('active'); | ||
var apiUrl = mw.config.get('wgScriptPath') + '/api.php'; | var apiUrl = mw.config.get('wgScriptPath') + '/api.php'; | ||
var params = { | var params = new URLSearchParams({ | ||
action: 'parse', | action: 'parse', | ||
text: '{{Card/display/spark|' + cardId + '}}', | text: '{{Card/display/spark|' + cardId + '}}', | ||
| 第268行: | 第240行: | ||
format: 'json', | format: 'json', | ||
contentmodel: 'wikitext' | contentmodel: 'wikitext' | ||
}; | }); | ||
fetch(apiUrl + '?' + params.toString()) | |||
.then(function(response) { | .then(function(response) { | ||
return response.json(); | return response.json(); | ||
| 第281行: | 第249行: | ||
if (data.parse && data.parse.text) { | if (data.parse && data.parse.text) { | ||
var html = data.parse.text['*']; | var html = data.parse.text['*']; | ||
sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div> | if (html.trim() === '' || html.indexOf('card-deck-trans') === -1) { | ||
sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div style="color: #fff;">暂无闪光卡牌</div>'; | |||
} else { | |||
sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div>' + html; | |||
} | |||
} | |||
} else { | } else { | ||
sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div style="color: #fff;">暂无闪光卡牌</div>'; | sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div style="color: #fff;">暂无闪光卡牌</div>'; | ||
| 第302行: | 第264行: | ||
} | } | ||
cardModalClose.addEventListener('click', function() { | cardModalClose.addEventListener('click', function() { | ||
cardModal.classList.remove('active'); | cardModal.classList.remove('active'); | ||
| 第309行: | 第270行: | ||
}); | }); | ||
sparkModalClose.addEventListener('click', function() { | sparkModalClose.addEventListener('click', function() { | ||
sparkModal.classList.remove('active'); | sparkModal.classList.remove('active'); | ||
}); | }); | ||
cardModal.addEventListener('click', function(e) { | cardModal.addEventListener('click', function(e) { | ||
if (e.target === cardModal) { | if (e.target === cardModal) { | ||
| 第329行: | 第288行: | ||
}); | }); | ||
document.addEventListener('keydown', function(e) { | document.addEventListener('keydown', function(e) { | ||
if (e.key === 'Escape') { | if (e.key === 'Escape') { | ||
| 第341行: | 第299行: | ||
}); | }); | ||
bindCardEvents(); | bindCardEvents(); | ||
var observer = new MutationObserver(function() { | |||
var observer = new MutationObserver(function( | |||
bindCardEvents(); | bindCardEvents(); | ||
}); | }); | ||
| 第355行: | 第311行: | ||
} | } | ||
if (document.readyState === 'loading') { | if (document.readyState === 'loading') { | ||
document.addEventListener('DOMContentLoaded', init); | document.addEventListener('DOMContentLoaded', init); | ||
2026年1月17日 (六) 17:01的最新版本
此Widget用于为卡牌添加交互功能。 使用方法:在页面底部添加