匿名
未登录
中文(中国大陆)
登录
Limbo Wiki Mirror
搜索
查看“︁用户:Staf Irity/JavaScript/ProjectDivide HydraCardShow.js”︁的源代码
来自Limbo Wiki Mirror
命名空间
用户页
讨论
更多
更多
页面操作
阅读
查看源代码
历史
用户贡献
←
用户:Staf Irity/JavaScript/ProjectDivide HydraCardShow.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您没有权限编辑此JavaScript页面,因为此页面包含另一位用户的个人设置。
您可以查看和复制此页面的源代码。
/** * 原始文件改自llwiki.org/zh/User:Bhsd/widget/listen.js,以CC BY-NC-SA 4.0知识共享协议分发。 * @Function: demo * @Author: SST, [LLwiki] */ "use strict"; /* global mw, $ */ class Card { ID = "Dummy ID"; pack; isWhims; name; kb; rarity; skill; information; rawHTML; type; constructor(name) { this.name = name; } setRarity(txt){ if (txt.indexOf("S") !== -1){this.rarity = "S";} else if (txt.indexOf("A") !== -1){this.rarity = "A";} else if (txt.indexOf("B") !== -1){this.rarity = "B";} else if (txt.indexOf("C") !== -1){this.rarity = "C";} else {this.rarity = "Undefined";} } getDisplay(){return "";} } class CharacterCard extends Card { EP; BP; type = "C"; supports = []; attibutes = []; } class PlaceCard extends Card { EP; canMove; maxDamage; attibutes = []; type = "P"; } class ActionCard extends Card { type = "A"; } class counTerCard extends Card { type = "T"; } var DataCard = []; var DataSelector = { Rarity: { type: "equal", list: ["S","A","B","C"], target: "rarity" }, Pack: { type: "equal", list: [], target: "pack" }, Type: { type: "equal", hasI18n: true, list: ["C", "P", "A", "T"], listI18n: ["角色卡", "置物卡", "行动卡", "反击卡"], target: "type" }, IsWhims: { type: "equal", hasI18n: true, list: [true,false], listI18n: ["是", "否"], target: "isWhims" }, }; function initCurrentSelector(){ for (var key in DataSelector) { var value = DataSelector[key]; value.currentList = []; var SelectorButtons = document.getElementById("HydraSelector_" + key).childNodes[1].childNodes; for(var i=0;i<SelectorButtons.length;i++){ var isEnabled = SelectorButtons[i].classList.contains("enabled"); if(isEnabled){value.currentList.push(value.list[i]);} } } } function isCardSelected(card){ for (var key in DataSelector) { var value = DataSelector[key]; if(value.currentList.length <= 0){} else if(value.type == "equal"){ var compared = card[value.target]; var selected = false; for (var i = 0;i < value.currentList.length;i++){ var item = value.currentList[i]; if(compared == item){selected = true;} } if(!selected){return false;} } else{console.log("!!! wtf is the type? " + value.type);} } return true; } var cardPackName = ""; function getAttitubeListFromHTML(html) {//把文本转换为属性列表,晚点记得重写。 return [html]; } function getNodeFromTBody(tbody,x,y){ var X = 0; var trs = tbody.childNodes; for(var i = 0;i < trs.length;i++) { var node = trs[i]; if(node.nodeName == "TR"){ if(X == x){ var Y = 0; var tds = node.childNodes; for(var j = 0;j < tds.length;j++) { var node2 = tds[j]; if(node2.nodeName == "TD" || node2.nodeName == "TH"){ if(Y == y){return node2;} Y++; } } } X++; } } return tbody.childNodes[x].childNodes[y]; } function readData(tableNode){//格式和模板是一一对应的,改模板之前一定要记得改这个!!! var tbody = tableNode.childNodes[1]; if (tableNode.classList.contains("CharacterCard")){ //console.log(tbody.childNodes); var card = new CharacterCard(getNodeFromTBody(tbody,0,0).innerText); card.pack = cardPackName; card.ID = getNodeFromTBody(tbody,1,1).innerText; card.isWhims = (card.ID.indexOf("W") !== -1);//临时方案,记得改 card.kb = getNodeFromTBody(tbody,1,3).innerText; card.attibutes = getAttitubeListFromHTML(getNodeFromTBody(tbody,2,1).innerHTML); card.setRarity(getNodeFromTBody(tbody,3,1).innerText); card.EP = getNodeFromTBody(tbody,3,3).innerHTML; card.BP = getNodeFromTBody(tbody,3,5).innerHTML; card.skill = getNodeFromTBody(tbody,5,0).innerHTML; card.supports = [getNodeFromTBody(tbody,5,1).innerHTML]; card.information = getNodeFromTBody(tbody,6,0).innerHTML; card.rawHTML = tableNode.outerHTML; DataCard.push(card); //console.log(card); } else if (tableNode.classList.contains("PlaceCard")){ var card = new PlaceCard(getNodeFromTBody(tbody,0,0).innerText); card.pack = cardPackName; card.ID = getNodeFromTBody(tbody,1,1).innerText; card.isWhims = (card.ID.indexOf("W") !== -1);//临时方案,记得改 card.kb = getNodeFromTBody(tbody,1,3).innerText; card.attibutes = getAttitubeListFromHTML(getNodeFromTBody(tbody,2,1).innerHTML); card.canMove = getNodeFromTBody(tbody,2,3).innerHTML; card.setRarity(getNodeFromTBody(tbody,3,1).innerText); card.EP = getNodeFromTBody(tbody,3,3).innerHTML; card.maxDamage = getNodeFromTBody(tbody,3,5).innerHTML; card.skill = getNodeFromTBody(tbody,4,1).innerHTML; card.information = getNodeFromTBody(tbody,5,1).innerHTML; card.rawHTML = tableNode.outerHTML; DataCard.push(card); } else if (tableNode.classList.contains("ActionCard")){ var card = new ActionCard(getNodeFromTBody(tbody,0,0).innerText); card.pack = cardPackName; card.ID = getNodeFromTBody(tbody,1,1).innerText; card.isWhims = (card.ID.indexOf("W") !== -1);//临时方案,记得改 card.kb = getNodeFromTBody(tbody,1,3).innerText; card.setRarity(getNodeFromTBody(tbody,1,5).innerText); card.skill = getNodeFromTBody(tbody,2,1).innerHTML; card.information = getNodeFromTBody(tbody,3,1).innerHTML; card.rawHTML = tableNode.outerHTML; DataCard.push(card); } else if (tableNode.classList.contains("CounterCard")){ var card = new counTerCard(getNodeFromTBody(tbody,0,0).innerText); card.pack = cardPackName; card.ID = getNodeFromTBody(tbody,1,1).innerText; card.isWhims = (card.ID.indexOf("W") !== -1);//临时方案,记得改 card.kb = getNodeFromTBody(tbody,1,3).innerText; card.setRarity(getNodeFromTBody(tbody,1,5).innerText); card.skill = getNodeFromTBody(tbody,2,1).innerHTML; card.information = getNodeFromTBody(tbody,3,1).innerHTML; card.rawHTML = tableNode.outerHTML; DataCard.push(card); } } function readAllData(divNode){ for(var i = 0;i < divNode.childNodes.length;i++) { var node = divNode.childNodes[i]; //console.log(node); if(typeof node.classList === "undefined"){}//判断undefined else if(node.classList.contains("citizen-table-wrapper")){//Citizen皮肤(林百未实装) readData(node.childNodes[0]); } else if(node.classList.contains("content-table-wrapper")){//Timeless皮肤 readData(node.childNodes[3].childNodes[0]) } else if(node.nodeName == "TABLE"){//除了上述俩皮肤之外的其他皮肤 readData(node); } } } function refresh(){ var HydraShower = document.getElementById("HydraShower"); var HydraTemp = document.getElementById("HydraTemp"); var txt = "" initCurrentSelector(); for(var i = 0;i < DataCard.length;i++){ if(isCardSelected(DataCard[i])){txt += HydraTemp.childNodes[i].outerHTML;} } HydraShower.innerHTML = txt; } (RLQ=window.RLQ||[]).push(function(){ mw.widget = mw.widget || {}; if (mw.widget.HydraCardShow){return;} mw.widget.HydraCardShow = true; mw.loader.implement("lw.pagejs.pd.hcs",function (jQuery,$){ $(document).ready(function(){ console.log('HydraCardShow Loaded.'); //Step 1.装载数据 var HydraTarget = document.getElementById("HydraTarget");//首先获取原始的数据 var nodeList = HydraTarget.childNodes;//然后再获得其子元素 var current_status = false;//状态机,但是只有两种:true=已经找到了h3,在等接下来的PDBox;false=等下一个h3 for(var i = 0;i < nodeList.length;i++) { var node = nodeList[i]; //console.log(node); if(current_status) { if((typeof node.classList !== "undefined") && node.classList.contains("PDBox")){ //console.log(i); current_status = false; DataSelector.Pack.list.push(cardPackName); readAllData(node);//读数据,不用多解释吧 } } else { if(node.nodeName == "H3"){//找到了h3 //console.log(i); current_status = true; //h3的架构在每个皮肤都是一样的:如果含有非ASCII字符,那么[0]是一个固定id的span,[1]是显示的文本;否则[0]是显示的文本。 cardPackName = node.childNodes[0].innerText == "" ? node.childNodes[1].innerText : node.childNodes[0].innerText; } } } //Step 2.创建缓存 var HydraTemp = document.getElementById("HydraTemp"); for(var i = 0;i < DataCard.length;i++){ var div = document.createElement('div'); div.className = 'Card'; div.innerHTML = DataCard[i].rawHTML; HydraTemp.appendChild(div); } //Step 3.创建选择器 for (var key in DataSelector) { var value = DataSelector[key]; value.currentList = [];//初始化 var SelectorButton = document.getElementById("HydraSelector_" + key).childNodes[1]; var list = (value.hasI18n === true) ? value.listI18n : value.list; for(var i = 0;i < value.list.length;i++){ var txt = list[i]; var button = document.createElement('span'); button.className = 'pd-button disabled'; button.innerHTML = txt; SelectorButton.appendChild(button); } //if(value.type == "equal"){} } $("#HydraSelector .Buttons span.pd-button").click(function(){ $(this).toggleClass("disabled"); $(this).toggleClass("enabled"); refresh(); }); //Step 4.刷新 refresh(); }); }); });
返回
用户:Staf Irity/JavaScript/ProjectDivide HydraCardShow.js
。
导航
导航
首页
最近更改
随机页面
操作申请
帮助
入门指南
编辑指南
写作指南
随机
官方
碎数研
谜题保管所
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
日志
查看用户组
更多
链入页面
相关更改
页面信息
页面日志