| // ==UserScript==␊ |
| // @name localbitcoins filter␊ |
| // @namespace https://srchub.org␊ |
| // @version 0.2␊ |
| // @description Adds some filters and sorting to localbitcoins␊ |
| // @author Nathan Adams <adamsna@datanethost.net>␊ |
| // @match https://localbitcoins.com/*␊ |
| // @grant none␊ |
| // ==/UserScript==␊ |
| // License: MIT␊ |
| //␊ |
| // If you feel this script was useful please send BTC donations to this address: ␊ |
| // 1kqfr9hYPHTwGdMev9b538sSeyLa5h4FR␊ |
| //␊ |
| // Mirrors: ␊ |
| // https://github.com/nadams810/localbitcoinsfilter␊ |
| // https://srchub.org/p/localbitcoinsfilter/␊ |
| ␊ |
| /**␊ |
| * jQuery.fn.sortElements␊ |
| * --------------␊ |
| * @author James Padolsey (http://james.padolsey.com)␊ |
| * @version 0.11␊ |
| * @updated 18-MAR-2010␊ |
| * --------------␊ |
| * @param Function comparator:␊ |
| * Exactly the same behaviour as [1,2,3].sort(comparator)␊ |
| * ␊ |
| * @param Function getSortable␊ |
| * A function that should return the element that is␊ |
| * to be sorted. The comparator will run on the␊ |
| * current collection, but you may want the actual␊ |
| * resulting sort to occur on a parent or another␊ |
| * associated element.␊ |
| * ␊ |
| * E.g. $('td').sortElements(comparator, function(){␊ |
| * return this.parentNode; ␊ |
| * })␊ |
| * ␊ |
| * The <td>'s parent (<tr>) will be sorted instead␊ |
| * of the <td> itself.␊ |
| */␊ |
| jQuery.fn.sortElements = (function(){␊ |
| ␊ |
| var sort = [].sort;␊ |
| ␊ |
| return function(comparator, getSortable) {␊ |
| ␊ |
| getSortable = getSortable || function(){return this;};␊ |
| ␊ |
| var placements = this.map(function(){␊ |
| ␊ |
| var sortElement = getSortable.call(this),␊ |
| parentNode = sortElement.parentNode,␊ |
| ␊ |
| // Since the element itself will change position, we have␊ |
| // to have some way of storing it's original position in␊ |
| // the DOM. The easiest way is to have a 'flag' node:␊ |
| nextSibling = parentNode.insertBefore(␊ |
| document.createTextNode(''),␊ |
| sortElement.nextSibling␊ |
| );␊ |
| ␊ |
| return function() {␊ |
| ␊ |
| if (parentNode === this) {␊ |
| throw new Error(␊ |
| "You can't sort elements if any one is a descendant of another."␊ |
| );␊ |
| }␊ |
| ␊ |
| // Insert before flag:␊ |
| parentNode.insertBefore(this, nextSibling);␊ |
| // Remove flag:␊ |
| parentNode.removeChild(nextSibling);␊ |
| ␊ |
| };␊ |
| ␊ |
| });␊ |
| ␊ |
| return sort.call(this, comparator).each(function(i){␊ |
| placements[i].call(getSortable.call(this));␊ |
| });␊ |
| ␊ |
| };␊ |
| ␊ |
| })();␊ |
| ␊ |
| ␊ |
| $(".pagination-block").first().after('Hide Recent <input type="checkbox" id="hideRecent"> | Hide Offline <input type="checkbox" id="hideOffline">');␊ |
| ␊ |
| $("#hideRecent").click(function(e) {␊ |
| $(".online-status-recent").closest("tr").toggle(); ␊ |
| });␊ |
| ␊ |
| $("#hideOffline").click(function(e) {␊ |
| $(".online-status-offline").closest("tr").toggle(); ␊ |
| });␊ |
| ␊ |
| var table = $('.table-bitcoins').first();␊ |
| ␊ |
| $('.header-price').first()␊ |
| .wrapInner('<span title="sort this column"/>')␊ |
| .each(function(){␊ |
| ␊ |
| var th = $(this),␊ |
| thIndex = th.index(),␊ |
| inverse = false;␊ |
| ␊ |
| th.click(function(){␊ |
| ␊ |
| table.find('td').filter(function(){␊ |
| ␊ |
| return $(this).index() === thIndex;␊ |
| ␊ |
| }).sortElements(function(a, b){␊ |
| return Number(jQuery.trim($.text([a])).split(" ")[0]) > Number(jQuery.trim($.text([b])).split(" ")[0]) ?␊ |
| inverse ? -1 : 1␊ |
| : inverse ? 1 : -1;␊ |
| ␊ |
| }, function(){␊ |
| ␊ |
| // parentNode is the element we want to move␊ |
| return this.parentNode; ␊ |
| ␊ |
| });␊ |
| ␊ |
| inverse = !inverse;␊ |
| ␊ |
| });␊ |
| ␊ |
| });␊ |
| ␊ |
| $(".header-price").first().hover(function() {␊ |
| $(this).css('cursor','pointer');␊ |
| }, function() {␊ |
| $(this).css('cursor','auto');␊ |
| });␊ |
| $('.header-price').click();␊ |
| if (window.location.href.indexOf("sell") > -1) {␊ |
| $('.header-price').click();␊ |
| } |