NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Fallen London Improver
// @namespace fallen_london_improver.ssieth.co.uk
// @description Add Functionality for Fallen London
// @require http://sprefs.ssieth.co.uk/mutation-summary/src/mutation-summary.js
// @include http://fallenlondon.storynexus.com/*
// @version 1.0.1
// @grant none
// ==/UserScript==
// Create an observer
var observerProgress = new MutationSummary({
callback: handleProgressUpdate,
queries: [{ element: 'img[alt="Rank"]', elementAttributes: 'width' }]
});
/*
This fires when the style element of the li.shop-item elements changes (including when those elements are added to the page
It is used to maintain totals/subtotals of owned items in the bazaar.
*/
var observerShopItems = new MutationSummary({
callback: handleItemUpdate,
queries: [{ element: 'li.shop-item', elementAttributes: 'style' }]
});
/*
Show the percentage progress on stats and
*/
function addPercProgress() {
$("p.progress span.rank img").each(function() {
var $this = $(this);
var intWidth;
var intParentWidth;
var fltPerc;
var strID;
strID = $this.attr("id");
intWidth = $this.width();
intParentWidth = $this.parent().width();
fltPerc = (intWidth/intParentWidth) * 100;
if ($('#perc-' + strID).length) {
$('#perc-' + strID).text(fltPerc.toFixed(2) + "%");
} else {
$(this).parent().parent().append("<span id='perc-" + strID + "' style='color: green;' >" + fltPerc.toFixed(2) + "% </span>");
}
});
}
function handleProgressUpdate(summaries) {
var elementSummary = summaries[0];
var $e;
addPercProgress();
}
function totalItems(){
console.log("Fire totalItems");
var $main = $('div#mainContentViaAjax');
var strName = "";
var strQty = "";
var strVal = "";
var strTotal = "";
var $this;
var fltTotal = 0.0;
var fltGrandTotal = 0.0;
var fltPageTotal = 0.0;
$main.find("section.shop-items li.shop-item").each(function() {
$this = $(this);
strName = $this.find("h6").text().trim();
if ($this.find("div.item-quantity").length) {
strQty = $this.find("div.item-quantity").text().trim();
} else {
strQty = "0";
}
strVal = $this.find("span.price").text().trim();
if ($this.text().contains("x Cryptic Clue")) {
strVal = "0.5";
}
fltTotal = (parseFloat(strVal) * parseInt(strQty));
strTotal = fltTotal.toFixed(2);
fltGrandTotal += fltTotal;
if ($this.css('display') != 'none') {
fltPageTotal += fltTotal;
}
if ($this.find('span.total').length <= 0) {
$this.append("<span style='font-weight:normal;' class='total price currency-echo'><span>");
}
$this.find('span.total').html(strTotal + " total");
});
/* Do page / grand totals */
if ($main.find("div#grandTotal").length <= 0) {
$main.find("section.shop-items").append("<div id='grandTotal'></div>");
}
$main.find("div#grandTotal").html("Page Total: <span class='pageTotal price currency-echo'>" + fltPageTotal.toFixed(2) + "</span>, Grand Total: <span class='grandTotal price currency-echo'>" + fltGrandTotal.toFixed(2) + "</span>");
}
function handleItemUpdate(summaries) {
console.log("Fired item");
var elementSummary = summaries[0];
var $e;
totalItems();
}