Last active
August 29, 2015 14:02
-
-
Save shtrih/6a6d91e3cce9e51433e3 to your computer and use it in GitHub Desktop.
Сортирует «Предложения дня» по скидкам от большей к меньшей. Сортирует в блоке «Лидеры продаж и др.» по убыванию/возрастанию скидок (добавляет настройку сортировки «%▾»). ~~~ Для главной страницы летней распродажи 2014 http://store.steampowered.com/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Steam sort by discount | |
// @namespace http://use.i.E.your.homepage/ | |
// @version 0.1 | |
// @description Steam summer sale discount sorting 19/06/14 - 30/06/14 | |
// @match http://store.steampowered.com/ | |
// @copyright 2014+, shtrih | |
// ==/UserScript== | |
function scriptBody($) { | |
/** | |
* @param a Element div.summersale_dailydeal_ctn | |
* @param b -//- | |
*/ | |
function sortSummerPctDesc(a, b) { | |
a = extractPercent(a); | |
b = extractPercent(b); | |
return (a > b ? -1 : (a < b ? 1 : 0)); | |
} | |
/** | |
* @param a Element div.summersale_dailydeal_ctn | |
* @param b -//- | |
*/ | |
function sortSummerPctAsc(a, b) { | |
a = extractPercent(a); | |
b = extractPercent(b); | |
return (a > b ? 1 : (a < b ? -1 : 0)); | |
} | |
function extractPercent(summersale_dailydeal_ctn) { | |
var match = $(summersale_dailydeal_ctn).find('.discount_pct').text().match(/-(\d+)%/); | |
return match ? match[1] : 0; | |
} | |
/** | |
* Summersale Tabs Sorting | |
*/ | |
var $summer_tabs_block = $('.summersale_tabs'), | |
$tabs_links = $('.summersale_tab:not(.pct-sort)', $summer_tabs_block), | |
$tabs_content = $summer_tabs_block.next(), | |
get_active_tab_pages = function () { | |
return $tabs_content.children().filter(':visible').first().find('.summersale_tabpage'); | |
}, | |
TAB_PAGE_LIMIT = 20, | |
$summer_sort_pct_tab = $('<div class="summersale_tab pct-sort" title="Sort by discount">%</div>'), | |
summer_separator = '<div class="summersale_tab_separator">|</div>', | |
$sort_direction = $('<span></span>'), | |
SORT_DIRECTION_ASC = '▴', | |
SORT_DIRECTION_DESC = '▾', | |
current_sort = SORT_DIRECTION_DESC, | |
sort_tabs_items = function ($elements, sort_direction) { | |
$sort_direction.text(sort_direction); | |
return $elements.detach().sort(sort_direction === SORT_DIRECTION_ASC ? sortSummerPctAsc : sortSummerPctDesc); | |
}, | |
fill_tab_pages = function ($tab_pages, $elements, limit) { | |
$tab_pages.each(function() { | |
$(this).html($elements.splice(0, limit)); | |
}); | |
}, | |
sort_refresh = function () { | |
var $active_tab_pages = get_active_tab_pages(), | |
$active_tab_items = $active_tab_pages.children('.summersale_dailydeal_ctn'), | |
$sorted_items = sort_tabs_items($active_tab_items, current_sort) | |
; | |
fill_tab_pages($active_tab_pages, $sorted_items, TAB_PAGE_LIMIT); | |
}, | |
sort_toggle = function () { | |
var $active_tab_pages = get_active_tab_pages(), | |
$active_tab_items = $active_tab_pages.children('.summersale_dailydeal_ctn'), | |
$sorted_items | |
; | |
current_sort = (current_sort === SORT_DIRECTION_DESC) | |
? SORT_DIRECTION_ASC | |
: SORT_DIRECTION_DESC | |
; | |
$sorted_items = sort_tabs_items($active_tab_items, current_sort); | |
fill_tab_pages($active_tab_pages, $sorted_items, TAB_PAGE_LIMIT); | |
} | |
; | |
$summer_sort_pct_tab.append($sort_direction); | |
$summer_tabs_block.children().last() | |
.before( | |
summer_separator | |
) | |
.before( | |
$summer_sort_pct_tab | |
) | |
; | |
$summer_sort_pct_tab.on('click', function () { | |
sort_toggle(); | |
}); | |
$tabs_links.on('click', function () { | |
setTimeout(sort_refresh, 150); | |
}); | |
$tabs_links.filter('.active').trigger('click'); | |
/** | |
* Daily Deals Sorting | |
*/ | |
var $daily_block = $('.summersale_dailydeals'), | |
$daily_items = $('.summersale_dailydeal_ctn', $daily_block) | |
; | |
$daily_block.html( | |
sort_tabs_items($daily_items, SORT_DIRECTION_DESC) | |
) | |
.append('<div style="clear: both;"></div>'); | |
$daily_items.removeClass('last') | |
.filter(':nth-child(3n)').addClass('last') | |
; | |
} | |
var script = document.createElement('script'); | |
script.textContent = '(' + scriptBody.toString() + ')($J)'; | |
(document.head || document.documentElement).appendChild(script); | |
script.parentNode.removeChild(script); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment