[wod]耗材单价

够买耗材比较生成单价,省钱利器。

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        [wod]耗材单价
// @namespace   lgg
// @description 够买耗材比较生成单价,省钱利器。
// @include     http://*.world-of-dungeons.org/wod/spiel/trade/trade.php*
// @version     0.2.1
// @grant       none
// ==/UserScript==
// console.log('start1');
//* constants
var goldStr = '<img alt="" src="/wod/css//skins/skin-4/images/icons/lang/cn/gold.gif" title="金币" border="0">';
var PRICE_ATTRI_NAME = 'lggAvPrice';
var PRICE_UNAVAILABLE = 'lggBadPrice';
var CLASS_ROW = 'row';

//* global vars
var tblBody = findTBodyElement();
var tblRowList = new Array();
var sortBtnElement;

//* main
for (var i = 0; i < tblBody.rows.length; i++)
{
	row_i = tblBody.rows[i];
	var pricePU = genAveragePriceForConsumableGoods(row_i);
	row_i.setAttribute(PRICE_ATTRI_NAME,pricePU);
	tblRowList.push(row_i);
}

addSortBtn();
// sortRowByAveragePrice(tblRowList);


//* 找到商品列表table的<tbody>标签
function findTBodyElement () {
	var tableList = document.getElementsByClassName('content_table');
	var saleTable = tableList[0];
	var tableBodyList = saleTable.children;
	var tblBody;
	for (var i = tableBodyList.length - 1; i >= 0; i--) {
		if (tableBodyList[i].tagName == 'TBODY') {
			tblBody = tableBodyList[i];
		}
	};
	return tblBody;
}

//* 给定某行物品<tr>,找到对应的耗材单价以及总价,插入平均价格,返回插入的平均价格
function genAveragePriceForConsumableGoods (trElement) {
	col_item = row_i.cells[1];
	col_price = row_i.cells[3];
	var itemCountStr = col_item.innerHTML.match(/\(\d+\/\d+\)/);
	itemCountStr = itemCountStr + '';
	if (itemCountStr != 'null') {
		var itemCounts = itemCountStr.match(/\d+/);
		var itemPrice = col_price.textContent.match(/\d+/);
		if(!itemPrice){
			return PRICE_UNAVAILABLE;
		}
		var itemPricePerUse = parseFloat(itemPrice + '') / parseFloat(itemCounts + '');
		itemPricePerUse = itemPricePerUse.toFixed(4);
		// console.log('数量:' + itemCounts + ', 单价:' + itemPricePerUse + '/u');
		col_price.innerHTML = itemPricePerUse + goldStr + '/u &nbsp&nbsp&nbsp' + col_price.innerHTML;
		return itemPricePerUse;
	} else {
		return PRICE_UNAVAILABLE;
	}
	
}

//* 排序,两个row是<tr>,并且已经插入了PRICE_ATTRI_NAME属性
function rowCompare (row1,row2) {

	var p1 = row1.getAttribute(PRICE_ATTRI_NAME);
	var p2 = row2.getAttribute(PRICE_ATTRI_NAME);
	if(p1==PRICE_UNAVAILABLE && p2==PRICE_UNAVAILABLE){
		return 0;
	} else if(p1==PRICE_UNAVAILABLE){
		return -1;
	} else if(p2==PRICE_UNAVAILABLE){
		return 1;
	}

	p1 = parseFloat(p1);
	p2 = parseFloat(p2);

	return p1 - p2;
}

function sortRowByAveragePrice () {
	//* 排序,重新输出
	tblRowList.sort(rowCompare);
	while (tblBody.hasChildNodes()) {
		tblBody.removeChild(tblBody.lastChild);
	}
	for (var i = 0; i<tblRowList.length;i++){
		var suffixStr = i & 1;
		tblRowList[i].setAttribute('class',CLASS_ROW+suffixStr);
		tblBody.appendChild(tblRowList[i]);
	};
}

function addSortBtn () {
	var tableList = document.getElementsByClassName('content_table');
	var saleTable = tableList[0];
	var tableBodyList = saleTable.children;

	var tblHead;
	for (var i = tableBodyList.length - 1; i >= 0; i--) {
		if (tableBodyList[i].tagName == 'THEAD') {
			tblHead = tableBodyList[i];
		}
	};

	var header;
	for(var i = 0;i<tblHead.children.length;i++){
		var tmp = tblHead.children[i];
		if(tmp.className=='header'){//* 这里大小写敏感
			header = tmp;
		}
	}

	var thEl = header.children[3];
	var sortBtn = document.createElement('input');
	sortBtn.setAttribute('class','button clickable');
	sortBtn.setAttribute('type','button');
	sortBtn.setAttribute('value','单价排序');
	sortBtn.addEventListener('click', function(){
		sortRowByAveragePrice();
		sortBtn.setAttribute('class','button_disabled');
		sortBtn.setAttribute('disabled','disabled');
	});
	thEl.appendChild(sortBtn);
}
// ㄟ( ▔, ▔ )ㄏ 版本有待完善