Skip to content

Instantly share code, notes, and snippets.

@shtrih
Last active August 29, 2015 14:02
Show Gist options
  • Save shtrih/6a6d91e3cce9e51433e3 to your computer and use it in GitHub Desktop.
Save shtrih/6a6d91e3cce9e51433e3 to your computer and use it in GitHub Desktop.
Сортирует «Предложения дня» по скидкам от большей к меньшей. Сортирует в блоке «Лидеры продаж и др.» по убыванию/возрастанию скидок (добавляет настройку сортировки «%▾»). ~~~ Для главной страницы летней распродажи 2014 http://store.steampowered.com/
// ==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