В двух словах:
Руководство как не купить старую закладку; Написал на js букмарклет для спрута, который улучшает UI & UX. А так же зачем и что такое id и кто такие букмарклеты.
[КТО Я]
Пару слов о себе: в даркнете ещё со времен форумного RAMP (когда ещё не было мм, а был только форум), в интернете с девяностых, кое-чего тут понимаю, ну и кое что умею, кодер-самоучка. У меня сколько-то покупок на соляре, 100+ покупок на другом мп, где диспуты идут по полтора месяца, ещё 100 наверное в сумме покупок на отдельных сайтах магазинов, и на лучшем маркетплейсе, площадке №1 в России у меня 227 покупок; ..и я правда очень люблю спрут, и с самого начала я понял, что его делали не фронтэндеры-хипстеры как покойный солярис, а суровые бэкэндеры и девопсы, и я даже почти уверен, что знаю какие у них прически))

Спрут лучше остальных маркетплейсов не только своим вниманием к пользователям в решении проблемных ситуаций, а ещё и тем, что это единственный маркетплейс, на который я всегда могу зайти: у меня ни разу не было, чтобы я не мог через хотя бы какой-то из каналов достучаться до спрута, а при том, что употребляю я системно а.к.а каждый день - это очень важный фактор. Да, среди знакомых и друзей бывает находятся индивиды, которые жалуются на доступность, но они сами за это ответственны: не сохранили ссылки не умеют через тор или умеют только через тор или просто не одупляют что происходит. В общем всё, что в компетенции площадки - на высшем уровне (кроме интерфейса, но об этом дальше)
[ВСТУПЛЕНИЕ]
Итак мы на лучшей площадке, отлично, но от шанса купить протухший клад никто не застрахован, даже выбирая одного из якобы топовых магазинов, купивших себе место на главной странице - можно нарваться чуть ли не на снежный прикоп)).
Тут главное найти “свой” магазин, и я свел свои ненаходы к 0 встретив на площадке такой магазин - это ***" - у них всегда свежие клады и всегда всё на месте, это самый стабильный розничный магазин из всех что я встречал, но бывает, что мне надо купить каких-нибудь шишек или что-нибюудь совсем экзотическое, типа грибов или 2CB; и поскольку их я каждый день не беру - я тут совсем “не в рынке” (хз у кого какой стафф, кто где и как делает и как часто выкладывает) и мне было бы сложно сориентироваться, если бы я не понимал как устроен интернет и как работает площадка, да и вообще любой сайт в интернете:
[ПРО ID] 🆔
В общем: у всего есть какой то ID, и в частности у спрута у всех сущностей (у юзеров, у магазинов, у товаров и у закладок) он инкрементальный, то есть каждый следующий больше предыдущего на 1, и соответственно чем меньше айди тем раньше была внесена в базу данных запись, для id магазинов это хорошо, например про *** я уже просто помню что это /stores/ с айдишником №*** - что кстати значит что они тут с самого начала, считайте одни из первых диллеров, сейчас на примере их витрины разберемся с id закладок:


Обратите внимание на левый столбец - id, на примере выше мы видим, что у них все id больше 10миллионов - а значит все клады свежие, при чём скриншоты сделал ещё вчера.
Не буду говорить название, но вот первый попавшийся, якобы "топовый" магазин, купивший себе место на на первой странице:


Как вы видите разница 5 000 000 - это значит что самая старая позиция (там где ещё написано надежный тайник) выложен БОЛЕЕ ПЯТИ МИЛЛИОНОВ закладок назад. Я бы сказал что это 90% ненаход, можно уж совсем угореть - купить его, ненайти(вероятно) и посмотреть как они будут чесать дежурными фразочками типа клад свежий ищите лучше, всё на месте, другие не жалуются))) но эти забавы я оставлю вам, а сам перейду к главному:
[ОТКУДА У МЕНЯ НА СКРИНШОТАХ 🆔 КЛАДОВ]
короче, я написал букмарклет который улучшает пользовательский интерфейс спрута - заменяя таблицу с закладками на более удобную, с сортировкой по району, типу клада, весу, и даже примечанию.
По умолчанию таблица отсортирована по ID клада, что это значит: в самом верху закладки которые добавлены совсем недавно, а в самом низу самые старые, или даже снежные прикопы (у особо выдающихся диллеров).
Нажимая на любой столбец происходит сортировка кладов (даже если их 600+ на одной странице - всё отлично сортируется).
Нажимая на тот же столбец ещё раз - происходит обратная сортировка! Ну это ли не разёб!?
Числовые значения сортируются по значению, строковые - по алфавиту.
[ЧТО ТАКОЕ БУКМАРКЛЕТ?]
Числовые значения сортируются по значению, строковые - по алфавиту.
Википедия нам говорит, что: “Букмарклет — небольшая JavaScript-программа, оформленная как javascript: URL и сохраняемая как браузерная закладка. Альтернативное название букмарклетов — «favelets». В русском языке иногда используется вариант «закладурки».” Википедия
Короче букмарклеты позволяют вам запускать небольшие программы, написанные на языке JavaScript. Эти программы могут изменять внешний вид страницы, удалять ненужные элементы, выполнять автоматические действия или добавлять новые функции на сайт.
Они очень удобны, когда вам нужно быстро сделать что-то на странице, не выполняя длительных действий вручную. Вы просто нажимаете на свою закладку-букмарклет, и он выполняет необходимую вам задачу на текущей странице.

🥷✅Bookmarklet✨ [ver.1.2]
Букмарклет который я написал - сортирует закладки по ID, немного меняет колонки таблицы и добавляет возможность сортировки кладов по любому столбцу. +Выводит таблицу и небольшую статистику про текущий товар: минимальную сумму в рублях, битках и граммах в консоль (вкладка "console" в инструментах разработчика: Ctrl+Shift+J )

Протестировано в тор браузере, хроме на линуксе и хроме на андроиде.
Чтобы добавить себе нажмите Ctrl+Shift+B - под адресной строкой вылезет панель закладок.
И на неё можно зажав левую кнопку мышки просто перетащить закладку отсюда: Bookmarklet.torsha.re - там нажмите на голову ниндзя и тащите на панель закладок.
Внимание!! Копируя код в одну строку (ниже) и вставляя его в адресную строку браузер удалит "javascript:" - нужно будет в самое начало адресной строки вписать "javascript:"
Вот код в одну строку, можно добавить как URL закладки:
Вот код в одну строку, который можно скопировать и добавить как URL закладки:
javascript:(function()%7B(function%20()%20%7B%0Aconst%20consoleUIstyle%20%3D%20%5B%22background-color%3A%23fff%3B%20color%3A%20%23242424%3Bfont-family%3A%20'Play'%2C%20sans-serif%3Bfont-size%3A%2024px%3B%22%2C%20%22color%3A%20%23fd9638%3Bfont-family%3A%20'Play'%2C%20sans-serif%3Bfont-size%3A%2024px%3B%22%2C%20%22color%3A%20purple%3Bfont-family%3A%20'Play'%2C%20sans-serif%3Bfont-size%3A%2036px%3B%22%5D%3B%0Afunction%20prettySprut()%20%7B%0Alet%20consoleUI%20%3D%20%5B%5D%3B%0Alet%20productStats%20%3D%20%7B%20name%3A%20%22%22%2C%20sum%3A%200%2C%20sumbtc%3A%200%2C%20sumrub%3A%200%20%7D%3B%0AproductStats.name%20%3D%20document.querySelector(%22h1%22).innerText%3B%0Adocument.querySelectorAll(%22a%22).forEach(item%20%3D%3E%20%7B%0Aif%20(item.href.startsWith(%22https%3A%2F%2F%22%20%2B%20document.location.hostname%20%2B%20%22%2Fproducts%2Fcheckout%2F%22))%20%7B%0Alet%20url%20%3D%20item.href%3B%0Alet%20cuirub%20%3D%200%3B%0Alet%20cuibtc%20%3D%200%3B%0Alet%20cuikbtc%3D0%3B%0Alet%20extractedPortion%20%3D%20url.substring(url.lastIndexOf('%2F')%20%2B%201)%3B%0Alet%20cuives%20%3D%201*item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.innerText.replace(%22%20%D0%B3%22%2C%20%22%22)%3B%0Aif(document.querySelectorAll(%22span.new-price%22).length%3E1)%20%7B%0Acuirub%20%3D%20item.previousSibling.parentNode.previousElementSibling.innerText.split(%22~%22)%5B0%5D.replace(%22%5Cn%22%2C%20%22%22).replace(%22%20%E2%82%BD%22%2C%20%22%22).split(%22%20%22)%5B0%5D*1%3B%0Acuikbtc%20%3D%20%20document.querySelector(%22.fa-btc%22).parentElement.innerText.replace(%221%20%20%3D%20%22%2C%20%22%22).replace(%22%20%E2%82%BD%22%2C%22%22)%3B%0Acuibtc%20%3D%201*parseFloat(%20cuirub%20%2F%20cuikbtc%20).toFixed(8)%3B%0A%7D%20else%20%7B%0Acuibtc%20%3D%20item.previousSibling.parentNode.previousElementSibling.innerText.split(%22~%22)%5B1%5D.replace(%22%20%22%2C%20%22%22)*1%3B%0Acuirub%20%3D%20item.previousSibling.parentNode.previousElementSibling.innerText.split(%22~%22)%5B0%5D.replace(%22%5Cn%22%2C%20%22%22).replace(%22%20%E2%82%BD%22%2C%20%22%22)*1%3B%0A%7D%0Alet%20cuicity%3D%20item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerText.split(%22%3A%20%22)%5B0%5D%3B%0AconsoleUI.push(%7B%20id%3A%201*extractedPortion%2C%20rub%3A%20cuirub%2C%20BTC%3A%20cuibtc%2C%20weight%3A%20cuives%2C%20city%3A%20cuicity%2C%20location%3A%20item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerText.split(%22%3A%20%22)%5B1%5D.replace(%22%5Cn%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5%22%2C%20%22%22)%2C%20note%3A%20item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerText.split(%22%3A%20%22)%5B2%5D%2C%20type%3A%20item.previousSibling.parentNode.previousElementSibling.previousElementSibling.innerText%2C%20url%3A%20item.href%2C%20%7D)%3B%0AproductStats.sumbtc%20%3D%201*productStats.sumbtc%20%2B%20cuibtc*1%3B%0AproductStats.sum%20%3D%20productStats.sum%20%2B%20cuives%3B%0AproductStats.sumrub%20%3D%20productStats.sumrub%20%2B%20cuirub*1%3B%0A%7D%0A%7D)%3B%0AconsoleUI.sort((a%2C%20b)%20%3D%3E%20b.id%20-%20a.id)%3B%0Aconsole.log('%25c%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%5Cn%20Black%25cSprut'%2C%20consoleUIstyle%5B0%5D%2C%20consoleUIstyle%5B1%5D)%3B%0Aconsole.log(%60%25c%5Cn%24%7BproductStats.name%7D%3A%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%BE%20%25c%24%7BconsoleUI.length%7D%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%B9%20%D0%BE%D0%B1%D1%89%D0%B8%D0%BC%20%D0%B2%D0%B5%D1%81%D0%BE%D0%BC%20%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D1%83%D0%BC%20%24%7BproductStats.sum.toFixed(2)%7D%20%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%20%D0%BD%D0%B0%20%D1%81%D1%83%D0%BC%D0%BC%D1%83%20%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D1%83%D0%BC%20%24%7BproductStats.sumrub.toFixed(2)%7D%20%D0%B8%D0%BB%D0%B8%20%24%7BproductStats%5B'sumbtc'%5D.toFixed(8)%7D%20BTC%60%2C%20consoleUIstyle%5B0%5D%2C%20consoleUIstyle%5B2%5D)%3B%0Aconsole.table(consoleUI)%3B%0Aconsole.log('%25cklad.men%20-%20%D0%9F%D0%B5%D1%80%D0%B2%D0%B0%D1%8F%20%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%B0%D1%8F%20%D1%88%D0%BA%D0%BE%D0%BB%D0%B0%20%D0%BA%D0%BB%D0%B0%D0%B4%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2.%20%D0%A3%D0%B3%D0%BB%D1%83%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%BA%D1%83%D1%80%D1%81%20%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD%20%D0%B8%20%D0%BE%D1%84%D0%BB%D0%B0%D0%B9%D0%BD%20%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8%3B%20%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D1%8E%D1%89%D0%B8%D0%B5%20%D0%BF%D1%80%D0%B5%D0%BF%D0%BE%D0%B4%D0%B0%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8%20%D1%81%208-%D0%BB%D0%B5%D1%82%D0%BD%D0%B8%D0%BC%20%D0%BE%D0%BF%D1%8B%D1%82%D0%BE%D0%BC%20%D0%B2%20%D0%BF%D1%80%D0%BE%D1%84%D0%B5%D1%81%D1%81%D0%B8%D0%B8%3B%20%D0%A2%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B0%D0%BA%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BC%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D1%8B!%5Cnhttps%3A%2F%2Fklad.men%2F'%2C%20consoleUIstyle%5B2%5D)%3B%0Areturn%20consoleUI%3B%0A%7D%0Aif%20(!document.location.pathname.startsWith(%22%2Fproducts%2F%22))%20%7Balert(%22%D0%97%D0%BD%D0%B0%D0%BD%D0%B8%D1%8F%20-%20%D1%81%D0%B8%D0%BB%D0%B0!%20%D0%91%D1%83%D0%BA%D0%BC%D0%B0%D1%80%D0%BA%D0%BB%D0%B5%D1%82%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%BD%D0%B0%20%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5%20%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%2C%20%D0%BD%D0%BE%20%D0%B5%D1%81%D0%BB%D0%B8%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83%20%D0%B8%D1%89%D0%B5%D1%88%D1%8C%20%D1%82%D1%8B%2C%20%D1%82%D0%BE%20%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B8%20%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D1%88%D0%BA%D0%BE%D0%BB%D0%B5%20klad.men%20(%D0%9E%D1%81%D1%82%D0%B0%D0%B2%D1%8C%20%D0%B7%D0%B0%D1%8F%D0%B2%D0%BA%D1%83%20%D0%BD%D0%B0%20%D1%81%D0%B0%D0%B9%D1%82%D0%B5%3A%20klad%20%D1%82%D0%BE%D1%87%D0%BA%D0%B0%20men)%20-%20%D1%82%D0%B5%D0%B1%D0%B5%20%D0%BF%D0%BE%D0%BC%D0%BE%D0%B3%D1%83%D1%82%20%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%81%D1%8F%20%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D1%8B%20%D0%BA%20%D0%BB%D1%83%D1%88%D0%B8%D0%BC%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BE%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%D0%BC%20%D0%B8%20%D0%BD%D0%B0%20%D1%81%D0%B0%D0%BC%D1%8B%D1%85%20%D0%B2%D1%8B%D0%B3%D0%BE%D0%B4%D0%BD%D1%8B%D1%85%20%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D1%8F%D1%85!%20%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8F%20%D0%B2%20%D1%8D%D1%82%D0%BE%D0%B9%20%D1%81%D1%84%D0%B5%D1%80%D0%B5%20%D0%BD%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B9%D0%B4%D1%8F%20%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%20%D0%BD%D0%B0%D1%81%D1%82%D0%B0%D0%B2%D0%BD%D0%B8%D0%BA%D0%BE%D0%BC%20%D0%B2%20%D1%88%D0%BA%D0%BE%D0%BB%D0%B5%20%D0%BA%D0%BB%D0%B0%D0%B4%20%D1%82%D0%BE%D1%87%D0%BA%D0%B0%20%D0%BC%D0%B5%D0%BD%20-%20%D1%82%D1%8B%20%D0%B1%D0%B5%D0%B7%D1%83%D0%BC%D0%BD%D0%BE%20%D1%80%D0%B8%D1%81%D0%BA%D1%83%D0%B5%D1%88%D1%8C!%22)%3B%7D%0Aconst%20data%20%3D%20prettySprut()%3B%0Aconst%20newTable%20%3D%20document.createElement('table')%3B%0AnewTable.className%20%3D%20'table'%3B%0AnewTable.innerHTML%20%3D%20%60%3Cthead%3E%3Ctr%3E%3Cth%3EID%3C%2Fth%3E%3Cth%3ERUB%3C%2Fth%3E%3Cth%3EBTC%3C%2Fth%3E%3Cth%3E%D0%92%D0%B5%D1%81%3C%2Fth%3E%3Cth%20class%3D%22usercity%22%3E%D0%93%D0%BE%D1%80%D0%BE%D0%B4%3C%2Fth%3E%3Cth%3E%D0%A0%D0%B0%D0%B9%D0%BE%D0%BD%3C%2Fth%3E%3Cth%3E%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%87%D0%B0%D0%BD%D0%B8%D0%B5%3C%2Fth%3E%3Cth%3E%D0%A2%D0%B8%D0%BF%3C%2Fth%3E%3Cth%3EURL%3C%2Fth%3E%3C%2Ftr%3E%3C%2Fthead%3E%3Ctbody%3E%0A%24%7Bdata.map(row%20%3D%3E%20%60%3Ctr%3E%3Ctd%3E%24%7Brow.id%7D%3C%2Ftd%3E%3Ctd%3E%24%7Brow.rub%7D%3C%2Ftd%3E%3Ctd%3E%24%7Brow.BTC%7D%3C%2Ftd%3E%3Ctd%3E%24%7Brow.weight%7D%3C%2Ftd%3E%3Ctd%20class%3D%22usercity%22%3E%24%7Brow.city%7D%3C%2Ftd%3E%3Ctd%3E%24%7Brow.location%7D%3C%2Ftd%3E%3Ctd%3E%24%7Brow.note%20%3D%20row.note%20%3F%3F%20%22-%22%7D%3C%2Ftd%3E%3Ctd%3E%24%7Brow.type%7D%3C%2Ftd%3E%3Ctd%3E%3Ca%20href%3D%22%24%7Brow.url%7D%22%20class%3D%22btn%20btn-info%20btn-sm%22%3E%D0%9A%D1%83%D0%BF%D0%B8%D1%82%D1%8C%3C%2Fa%3E%3C%2Ftd%3E%3C%2Ftr%3E%60).join('')%7D%3C%2Ftbody%3E%60%3B%0Aconst%20oldTable%20%3D%20document.querySelector('table.table')%3B%0AoldTable.parentNode.replaceChild(newTable%2C%20oldTable)%3B%0Aconst%20getCellValue%20%3D%20(tr%2C%20idx)%20%3D%3E%20tr.children%5Bidx%5D.innerText%20%7C%7C%20tr.children%5Bidx%5D.textContent%3B%0Aconst%20comparer%20%3D%20(idx%2C%20asc)%20%3D%3E%20(a%2C%20b)%20%3D%3E%20((v1%2C%20v2)%20%3D%3E%0Av1%20!%3D%3D%20''%20%26%26%20v2%20!%3D%3D%20''%20%26%26%20!isNaN(v1)%20%26%26%20!isNaN(v2)%20%3F%20v1%20-%20v2%20%3A%20v1.toString().localeCompare(v2)%0A)(getCellValue(asc%20%3F%20a%20%3A%20b%2C%20idx)%2C%20getCellValue(asc%20%3F%20b%20%3A%20a%2C%20idx))%3B%0AArray.from(document.querySelector('table.table%20thead').querySelectorAll('th'))%0A.forEach((th%2C%20idx)%20%3D%3E%20%7B%0Ath.addEventListener('click'%2C%20()%20%3D%3E%20%7B%0Aconst%20table%20%3D%20th.closest('table')%3B%0AArray.from(table.querySelectorAll('tbody%20tr'))%0A.sort(comparer(idx%2C%20(this.asc%20%3D%20!this.asc)))%0A.forEach(tr%20%3D%3E%20table.querySelector('tbody').appendChild(tr))%3B%0A%7D)%3B%0A%7D)%3B%0Areturn%20true%7D)()%3B%7D)()%3B
Вот полный код
(function () {
const consoleUIstyle = ["background-color:#fff; color: #242424;font-family: 'Play', sans-serif;font-size: 24px;", "color: #fd9638;font-family: 'Play', sans-serif;font-size: 24px;", "color: purple;font-family: 'Play', sans-serif;font-size: 36px;"];
function prettySprut() {
let consoleUI = [];
let productStats = { name: "", sum: 0, sumbtc: 0, sumrub: 0 };
productStats.name = document.querySelector("h1").innerText;
document.querySelectorAll("a").forEach(item => {
if (item.href.startsWith("https://" + document.location.hostname + "/products/checkout/")) {
let url = item.href;
let cuirub = 0;
let cuibtc = 0;
let cuikbtc=0;
let extractedPortion = url.substring(url.lastIndexOf('/') + 1);
let cuives = 1*item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.innerText.replace(" г", "");
if(document.querySelectorAll("span.new-price").length>1) {
cuirub = item.previousSibling.parentNode.previousElementSibling.innerText.split("~")[0].replace("\n", "").replace(" ₽", "").split(" ")[0]*1;
cuikbtc = document.querySelector(".fa-btc").parentElement.innerText.replace("1 = ", "").replace(" ₽","");
cuibtc = 1*parseFloat( cuirub / cuikbtc ).toFixed(8);
} else {
cuibtc = item.previousSibling.parentNode.previousElementSibling.innerText.split("~")[1].replace(" ", "")*1;
cuirub = item.previousSibling.parentNode.previousElementSibling.innerText.split("~")[0].replace("\n", "").replace(" ₽", "")*1;
}
let cuicity= item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerText.split(": ")[0];
consoleUI.push({ id: 1*extractedPortion, rub: cuirub, BTC: cuibtc, weight: cuives, city: cuicity, location: item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerText.split(": ")[1].replace("\nПримечание", ""), note: item.previousSibling.parentNode.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerText.split(": ")[2], type: item.previousSibling.parentNode.previousElementSibling.previousElementSibling.innerText, url: item.href, });
productStats.sumbtc = 1*productStats.sumbtc + cuibtc*1;
productStats.sum = productStats.sum + cuives;
productStats.sumrub = productStats.sumrub + cuirub*1;
}
});
consoleUI.sort((a, b) => b.id - a.id);
console.log('%c\n\n\n\n\n\n\n\n\n\n\n\n\n\n Black%cSprut', consoleUIstyle[0], consoleUIstyle[1]);
console.log(
%c\n${productStats.name}: размещено %c${consoleUI.length} позиций общим весом минимум ${productStats.sum.toFixed(2)} грамм на сумму минимум ${productStats.sumrub.toFixed(2)} или ${productStats['sumbtc'].toFixed(8)} BTC, consoleUIstyle[0], consoleUIstyle[2]);
console.table(consoleUI);
console.log('%cklad.men - Первая независимая школа кладменов. Углубленный курс онлайн и офлайн безопасности; Практикующие преподаватели с 8-летним опытом в профессии; Только актуальные материалы!\nhttps://klad.men/', consoleUIstyle[2]);
return consoleUI;
}
if (!document.location.pathname.startsWith("/products/")) {alert("Знания - сила! Букмарклет работает только на странице товара, но если работу ищешь ты, то проходи обучение в школе klad.men (Оставь заявку на сайте: klad точка men) - тебе помогут устроится в проверенные магазины к лушим работодателям и на самых выгодных условиях! Работая в этой сфере не пройдя обучение с наставником в школе клад точка мен - ты безумно рискуешь!");}
const data = prettySprut();
const newTable = document.createElement('table');
newTable.className = 'table';
newTable.innerHTML =
<thead><tr><th>ID</th><th>RUB</th><th>BTC</th><th>Вес</th><th class="usercity">Город</th><th>Район</th><th>Примечание</th><th>Тип</th><th>URL</th></tr></thead><tbody>
${data.map(row => <tr><td>${row.id}</td><td>${row.rub}</td><td>${row.BTC}</td><td>${row.weight}</td><td class="usercity">${row.city}</td><td>${row.location}</td><td>${row.note = row.note ?? "-"}</td><td>${row.type}</td><td><a href="${row.url}" class="btn btn-info btn-sm">Купить</a></td></tr>
).join('')}</tbody>;
const oldTable = document.querySelector('table.table');
oldTable.parentNode.replaceChild(newTable, oldTable);
const getCellValue = (tr, idx) => tr.children[idx].innerText || tr.children[idx].textContent;
const comparer = (idx, asc) => (a, b) => ((v1, v2) =>
v1 !== '' && v2 !== '' && !isNaN(v1) && !isNaN(v2) ? v1 - v2 : v1.toString().localeCompare(v2)
)(getCellValue(asc ? a : b, idx), getCellValue(asc ? b : a, idx));
Array.from(document.querySelector('table.table thead').querySelectorAll('th'))
.forEach((th, idx) => {
th.addEventListener('click', () => {
const table = th.closest('table');
Array.from(table.querySelectorAll('tbody tr'))
.sort(comparer(idx, (this.asc = !this.asc)))
.forEach(tr => table.querySelector('tbody').appendChild(tr));
});
});
return true})();
Особая благодарность @Klizmach_Bro за идеи и вклад в наш дарк-нарк opensource а так же всех всех кто поддержал или внес вклад в эту идею, идею улучшить как UI так и UX покупателей @BlackSprut