Greasy Fork is available in English.

Netpincer Sorting

Adds option to sort by various informations.

  1. // ==UserScript==
  2. // @name Netpincer Sorting
  3. // @namespace http://userscripts.org/users/20715
  4. // @description Adds option to sort by various informations.
  5. // @include http://www.netpincer.hu/*hazhozszallitas*
  6. // @version 2.0
  7. // ==/UserScript==
  8.  
  9. $(function () {
  10. var
  11. doc = document,
  12. options = {
  13. 'positive': 'Ízlett',
  14. 'negative': 'Nem ízlett',
  15. 'time': 'Kiszállítási idő',
  16. 'min': 'Minimális rendelés',
  17. 'delivery': 'Szállítási költség',
  18. 'percent': 'Százalék'
  19. },
  20. orders = { '↑': false, '↓': true },
  21. $container = $('div.shop-list-content'),
  22. $caterers = $('div.shop-list-row', $container);
  23.  
  24. function parseTime(timeText) {
  25. var timeValues = timeText.split('-');
  26. return (parseInt(timeValues[0], 10) + parseInt(timeValues[1], 10)) / 2;
  27. }
  28.  
  29. function parseCurrency(currencyText) {
  30. var currencyValue = currencyText.replace(/\D/g, '');
  31. return parseFloat(currencyValue);
  32. }
  33.  
  34. /*
  35. * this method sorts the caterers in the selected order
  36. */
  37. function changeOrder(sortType, sortOrder) {
  38.  
  39. /* this is needed because the double causes errors */
  40. $('script', $caterers).remove();
  41.  
  42. var caterers = $caterers.map(function () {
  43. var
  44. node = this,
  45. name = $('h2[itemprop="name"]', node).text().toLowerCase(),
  46. value = 0;
  47.  
  48. switch(sortType) {
  49. case 'percent':
  50. value = parseInt($('a.show-reviews span.percent', node).text(), 10);
  51. break;
  52.  
  53. case 'positive':
  54. value = parseInt($('a.show-reviews img[src*="icon_liked"]', node).parent().text(), 10);
  55. break;
  56.  
  57. case 'negative':
  58. value = parseInt($('a.show-reviews img[src*="icon_not_liked"]', node).parent().text(), 10);
  59. break;
  60.  
  61. case 'time':
  62. value = parseTime($('div.shop-delivery-time', node).text());
  63. break;
  64.  
  65. case 'min':
  66. value = parseCurrency($('div.shop-minimum-order', node).text());
  67. break;
  68.  
  69. case 'delivery':
  70. value = parseCurrency($('div.shop-delivery-cost', node).text());
  71. break;
  72. }
  73.  
  74. return { node: node, name: name, value: value };
  75. });
  76.  
  77. /* sort it */
  78. var sorted = caterers.sort(function ( a, b ) {
  79. var sortValue = (sortOrder) ? (a.value - b.value) : (b.value - a.value);
  80. return (sortValue !== 0) ? sortValue : a.name.localeCompare(b.name);
  81. });
  82.  
  83. $caterers.detach();
  84.  
  85. /* add items in the sorted order */
  86. $.each(sorted, function ( i, object ) {
  87. $(object.node).appendTo($container);
  88. });
  89.  
  90. return false;
  91. }
  92.  
  93. if ($caterers.length === 0) {
  94. return;
  95. }
  96.  
  97. /*
  98. * Add options to the header
  99. */
  100. var
  101. $header = $('div.general-title'),
  102. $ul = $(doc.createElement('ul'))
  103. .css({
  104. clear: 'both',
  105. padding: '0.5em 0'
  106. }).appendTo($header);
  107.  
  108. $.each(options, function (sortType, sortDescription) {
  109. var $li = $(doc.createElement('li'))
  110. .css({
  111. display: 'inline',
  112. fontSize: '0.7em',
  113. padding: '0 0.5em'
  114. })
  115. .appendTo($ul);
  116. $(doc.createTextNode(' ')).appendTo($ul);
  117.  
  118. $.each(orders, function (sortSign, sortOrder) {
  119. var sortText = sortDescription.concat(' ', sortSign, ' ');
  120.  
  121. $(doc.createElement('a')).css('cursor', 'pointer').text(sortText).bind('click', function ( e ) {
  122. e.stopPropagation();
  123. return changeOrder.apply(this, [ sortType, sortOrder ]);
  124. }).appendTo($li);
  125.  
  126. });
  127. });
  128. });
  129.  
  130. // vim: ai ts=2 sw=2 et: