// ==UserScript== // @name ヤフオクで非表示とメモ // @description q:非表示 w:アンドゥ b:NGワード Shift+Q:NG編集 12:メモを追加 34:自由メモ 56:定型文をメモ Shift+!:メモを編集 Shift+":自動メモのみ全削除 Shift+#:メモを一時非表示 Shift+56:定型文を設定 .:上限価格 t:半透明モード // @match *://auctions.yahoo.co.jp/search/* // @match *://page.auctions.yahoo.co.jp/jp/auction/* // @match *://auctions.yahoo.co.jp/seller/* // @match *://auctions.yahoo.co.jp/category/list/* // @match *://cpu.userbenchmark.com/* // @match *://webcomics.jp/* // @match *://www.amazon.co.jp/* // @exclude *://www.amazon.co.jp/*/cart/* // @exclude *://www.amazon.co.jp/*/buy/* // @exclude *://www.amazon.co.jp/*/huc/* // @exclude *://www.amazon.co.jp/*/css/* // @exclude *://www.amazon.co.jp/ap/* // @exclude *://www.amazon.co.jp/gp/* // @exclude *://www.amazon.co.jp/auto-deliveries* // @match *://booklive.jp/index/no-charge* // @match *://ebookjapan.yahoo.co.jp/free* // @match *://ebookjapan.yahoo.co.jp/ranking/free/* // @match *://ebookjapan.yahoo.co.jp/ranking/details/free/* // @match *://ebookjapan.yahoo.co.jp/viewer* // @match *://sokuyomi.jp/* // @match *://csbs.shogakukan.co.jp/free* // @match *://www.rtings.com/*/tools/table* // @match *://www.rtings.com/*/reviews/* // @match *://www.nicovideo.jp/search/* // @match *://www.nicovideo.jp/tag/* // @match *://www.nicovideo.jp/user/* // @match *://www.nicovideo.jp/series/* // @match *://www.nicovideo.jp/my/* // @match *://www.nicovideo.jp/ranking/* // @match *://www.nicovideo.jp/watch/* // @match *://*.5ch.net/* // @match *://www.ebay.com/sch/* // @match *://www.ebay.com/itm/* // @match *://jmty.jp/* // @match *://greasyfork.org/*/scripts* // @match *://*.aliexpress.com/af/* // @match *://*.aliexpress.com/item/* // @match *://*.aliexpress.com/wholesale* // @match *://www.cmoa.jp/freecontents* // @match *://piccoma.com/* // @match *://www.mangaz.com/* // @match *://www.sukima.me/* // @match *://*.userbenchmark.com/* // @match *://www.hellowork.mhlw.go.jp/kensaku/* // @match *://kakaku.com/* // @match *://seiga.nicovideo.jp/* // @match *://seiga.nicovideo.jp // @match *://tsugimanga.jp/* // @match *://www.yodobashi.com/* // @match *://www.youtube.com/* // @match *://*.iherb.com/* // @match *://www.suruga-ya.jp/* // @match *://twitter.com/* // @match *://www.nicovideo.me/* // @match *://www.nicochart.jp/* // @match *://pubmed.ncbi.nlm.nih.gov/?term=* // @match *://pubmed.ncbi.nlm.nih.gov/?linkname=* // @match *://pubmed.ncbi.nlm.nih.gov/* // @match *://a-timesale.com/* // @match *://rrws.info/* // @match *://commons.nicovideo.jp/* // @match *://scholar.google.tld/* // @match *://hibiki-radio.jp/* // @match *://www.onsen.ag/ // @match *://www.freem.ne.jp/* // @match *://shopping.yahoo.co.jp/search* // @match *://360life.shinyusha.co.jp/* // @match *://omocoro.jp/* // @match *://minsoku.net/* // @match https://refind2ch.org/search* // @match *://chiebukuro.yahoo.co.jp/* // @match *://www.msdmanuals.com/* // @match *://ff5ch.syoboi.jp/?q=* // @match *://todo-ran.com/* // @match *://booth.pm/* // @match *://sakura-checker.jp/category/* // @match https://chrome.google.com/webstore/search/* // @match https://chrome.google.com/webstore/detail/* // @match *://twicomi.com/* // @match *://twiman.net/* // @match *://free.arinco.org/* // @match *://workman.jp/shop/* // @match *://www.uniqlo.com/* // @match *://*.shitaraba.net/bbs/read.cgi/* // @match *://*.ftbucket.info/* // @match *://kuzure.but.jp/* // @match *://*.2chan.net/* // @match *://anige.horigiri.net/* // @match *://futapo.futakuro.com // @match *://futapo.futakuro.com/* // @version 0.5.47 // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_addStyle // @grant GM.setClipboard // @run-at document-idle // @namespace https://greasyfork.org/users/181558 // @require https://code.jquery.com/jquery-3.4.1.min.js // @downloadURL none // ==/UserScript== (function() { const FUTABA_HOVER_RELOAD_BUTTON = 0; const REPLACE_LINK_IN_YOUTUBE = 1; // 1:YouTubeで投稿者のチャンネルのホームタブへのリンクをチャンネルの動画タブへのリンクに置き換える const ENABLE_EXCEPT_YAJ = 1; // 1:ヤフオク以外でも有効 0:ヤフオクでのみ動作 const ENABLE_HELP = 1; // 1:操作ガイドを表示 0:無効 const WCA_HIDE_SOME_SITES = 0; // (Web漫画アンテナで)1:使いにくい又は遅いサイト(コミックライド、マンガPark、コミックファイア、コミックヴァルキリー、まんがライフSTORIA´、がうがうモンスター、Z、スポバトマンガ研究所、WEBコミックガンマ、COMICリュウ、新都社、COMIC FUZ、COMICフルール、comicグラスト)の項目を隠す 0:無効 const ENABLE_AUTOMEMO = 7; // 0:自動メモを無効 1でオン 2~7:大きくするほど一時的に表示が崩れる代わりに確実 const fasttest = 1; // 1:高速モードを試用 const KEYCHANGE_DEBUG = "disable"; // 押す度にdebugを0~3に切り替えるキー "Shift+D","disable"等 var debug = 0; // 1~だとデバッグモード dc(text) 1:コンソールにverbose表示 2:verboseをポップアップ(速度測定して表示 sw("項目"))&非表示にした原因に枠追加 3:Q/1/2等の対象要素を目立たせる const debug2 = 0; // 1だとデバッグモード 非対応ページでその旨表示など const SITES_TO_BE_HIDDEN = ["マンガPark", "コミックファイア", "コミックヴァルキリー", "まんがライフSTORIA´", "COMICメテオ", "がうがうモンスター", "Z", "スポバトマンガ研究所", "WEBコミックガンマ", "COMICリュウ", "新都社", "COMIC FUZ", "COMICフルール", "コミックライド", "comicグラスト", "マンガ5"]; // Web漫画アンテナで使いにくい、遅い等非表示にしたいサイトを書く const ENABLE_MEASURE_TIME_SPENT = 0; // 1で速度測定して表示 sw("項目") var swb = new Date(); sw("reset") // = new Date(); String.prototype.match0 = function(re) { let tmp = this.match(re); if (!tmp) { return null } else if (tmp.length > 1) { return tmp[1] } else return tmp[0] } // gフラグ不可 $.fn.animate2 = function(properties, duration, ease) { ease = ease || 'ease'; var $this = this; var cssOrig = { transition: $this.css('transition') }; return $this.queue(next => { properties['transition'] = 'all ' + duration + 'ms ' + ease; $this.css(properties); setTimeout(function() { $this.css(cssOrig); next(); }, duration); }); }; if (window != parent) return; const WAIT = performance.now(); // ページ開始後のウエイト用 delayAutoWeightingをかける const COLOR1 = "#6080ff", COLOR2 = "#c03020", COLOR3 = "#808080", COLOR5 = "#6080ff", COLOR6 = "#c03020", COLORVIDEOTIME = "#204020", COLORCPUSCORE = "#a08000", KEYHIDE = "q", KEYUNDO = "w", KEYBW = "b", KEYEDIT = "Shift+Q", // KEYEDIT2 = "Shift+B", KEYMAXP = ".", KEYMEMO1 = "1", KEYMEMO2 = "2", KEYMEMO1S = "3", KEYMEMO2S = "4", KEYMEMO5 = "5", KEYMEMO6 = "6", KEYMEMO5EDIT = "Shift+%", KEYMEMO6EDIT = "Shift+&", KEYTOGGLEtranslucent = "t", KEYRESETMEMO = "Shift+!", KEYRESETMEMOAUTO = "Shift+\""; var MEMO5WORD = "", // 5キーの定型文初期値 ""なら現在年月日 MEMO6WORD = ""; // 6キーの定型文初期値 ""なら現在年月日 var pauseAll = 0; // 上が優先 const SITEINFO = [{ id: 'FUTACHAN_CATALOG', urlRE: /\/\/www.ftbucket.info\/scrapshot\/ftb\/index.php|\/\/www.ftbucket.info\/scrapshot\/ftb\/?$|\/\/www.ftbucket.info\/scrapshot\/ftb\/\?favo=/, listTitleXP: '//span', listTitleSearchXP: '//td/span[++title++]/..', listTitleMemoSearchXP: '//td/span[++title++]', listGen: 4, WhateverFirstAndEveryAPFunc: () => { popup3("Shift+F:FTBucket検索", 8, 1, 5000) }, // WhateverFirstAndEveryAPFunc: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN")].WhateverFirstAndEveryAPFunc() }, keyFunc: [{ key: 'Shift+F', // Shift+F::FTBucketでキーワード検索 func: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN")].keyFunc[0].func() }, }], listTitleMemoSearchXPSameGen: 1, delay: 333, func: () => { elegeta('//div/input[@type="search" and @id="searchword"]').forEach(e => e.style.width = "calc(100% - 4em)") // 検索フォームを大きく // タイトルをもう少し多く書く if (location.href.match0("https://www.ftbucket.info/scrapshot/ftb/")) { elegeta('//td/span[@title]/div').forEach(e => { e.textContent = e.parentNode.title.substr(0, 30); e.style.width = "10em"; }) } }, }, { id: 'FUTACHAN_CATALOG', urlRE: "\/\/futapo.futakuro.com", listTitleXP: '//div[@class="thread-text"]', listTitleSearchXP: '//div[@class="thread-text"][***]/../..', listTitleMemoSearchXP: '//div[@class="thread-text"][***]', listGen: 5, listTitleXPIgnoreNotExist: 1, delay: 666, observe: 666, observeClass: ["box", "yhmMyMemo"], WhateverFirstAndEveryAPFunc: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN_CATALOG")].WhateverFirstAndEveryAPFunc() }, listTitleMemoSearchXPSameGen: 1, funcOnlyFirst: () => { GM_addStyle("div.thread-text{display:inline} .thread-text{word-break:break-all;}") }, funcMemo: () => { SITE.funcFinally() }, funcFinally: () => { try { // メモが付いたものを左上に優先整列 for (let i = 0; elegeta('.yhmMyMemo:not(.relocatedByMemo)').length > 0; i++) { let e = elegeta('.yhmMyMemo:not(.relocatedByMemo)')[0] e.classList.add("relocatedByMemo") let memoEle = e.closest(".box") let firstBox = elegeta('.box').filter(e => e.style.backgroundColor !== "rgb(255, 255, 0)")[0] memoEle.style.fontWeight = "bold" firstBox.parentNode.insertBefore(memoEle, firstBox) } } catch (e) {} }, memoStyle: 'word-break:break-all;', wholeHelp: ' 7:左上優先整列ワードを登録', keyFunc: [{ key: 'Shift+F', // Shift+F::FTBucketでキーワード検索 func: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN_CATALOG")].keyFunc[0].func() }, }, { key: '7', // 7:: func: (e) => { var str = pref(SITE.id + ' : SearchMyMemo') || []; var newstr = str.map(e => e.t) var target = (prompt(`○メモを付けるキーワードを入力してください(部分一致)\nこのサイトではメモが付くものを左上に優先整列します\n\nすでに登録されているワードを入力するとそれを削除します\n\n${(newstr.join("\n"))}\n\n`) || "").trim(); if (!target) return; var str = pref(SITE.id + ' : SearchMyMemo') || []; var str2 = str.filter(e => { return e.t != target }) if (str.length != str2.length) { if (confirm(`『${target}』は既に存在します\n削除しますか?`)) { popup2(`『${target}』をメモから削除しました`) pref(SITE.id + ' : SearchMyMemo', JSON.stringify(str2)); location.reload() } } else { storeMemo(target.trim(), "○", COLOR1) SITE.funcMemo(); } }, }], }, { id: 'FUTACHAN_CATALOG', urlRE: /\/\/anige\.horigiri\.net\/?$|\/\/anige\.horigiri\.net\/\?cat=|\/\/anige\.horigiri\.net\/\?paged=/, listTitleXP: '//div/h3[@class="entry-title"]/a', listTitleSearchXP: '//div/h3[@class="entry-title"]/a[+++]/../../../..', listTitleMemoSearchXP: '//div/h3[@class="entry-title"]/a[+++]', listGen: 5, delat: 500, listTitleMemoSearchXPSameGen: 1, WhateverFirstAndEveryAPFunc: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN_CATALOG")].WhateverFirstAndEveryAPFunc() }, keyFunc: [{ key: 'Shift+F', // Shift+F::FTBucketでキーワード検索 func: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN")].keyFunc[0].func() }, }], }, { id: 'FUTACHAN', urlRE: '//.*.ftbucket.info/|//kuzure.but.jp/|//[^.]+.2chan.net\/|//anige.horigiri.net', listTitleXP: '//span[@class="cno"]', listTitleSearchXP: '//span[@class="cno"][+++]/../../../..', listTitleMemoSearchXP: '//span[@class="cno"][+++]', listGen: 5, detailURLRE: /$^/, detailTitleXP: '', detailTitleSearchXP: '', WhateverFirstAndEveryAPFunc: () => { popup3("Shift+F:FTBucket検索\nA:そうだね順/引用数順でソート", 8, 1, 5000) }, keyFunc: [{ key: 'Shift+F', // Shift+F::FTBucketでキーワード検索 func: () => { searchWithHistory("FUTACHAN", "FTBucket", 'https://www.ftbucket.info/scrapshot/ftb/index.php?mode=c&favo=0&ord=1&s=***', "|") }, }, { key: 'a', // a:: func: () => { var startTime = Date.now(); var timelimit = 2000; var soudanes = elegeta('//td[@class="rtd"]/..') soudanes.forEach(e => e.closest("table").setAttribute("q", (e.textContent.match(/\>\>\d+/gm) || []).length)) var quotes = elegeta('//td[@class="rtd"]/a[contains(text(),"そうだね")]') quotes.forEach(e => e.closest("table").setAttribute("s", e.textContent.match0(/そうだねx(\d+)/) || "0")) var imgs = elegeta('//td[@class="rtd"]') imgs.forEach(e => e.closest("table").setAttribute("i", e.textContent.match0(/\d\d\d\sB\)|youtube\.|youtu\.be|nicovideo/) ? 1 : 0)) elegeta('//td[@class="rtd"]/ancestor::table').forEach(e => { e.setAttribute("qs", Number(e.getAttribute("q") || 0) * 1000000 + Number(e.getAttribute("s") || 0) * 1000 + Number(e.getAttribute("i") || 0)) e.setAttribute("sq", Number(e.getAttribute("s") || 0) * 1000000 + Number(e.getAttribute("q") || 0) * 1000 + Number(e.getAttribute("i") || 0)) }) //alert(Date.now()-startTime) if (eleget0('#sortType2')) { // もとに戻す do { var changed = 0 elegeta('//td[@class="rtd"]/ancestor::table').forEach((c, i, a) => { if (a[i + 1] && Number(c.getAttribute("rsc")) > Number(a[i + 1].getAttribute("rsc"))) { c.parentNode.insertBefore(a[i + 1], c); changed = 1; } }) } while (changed && Date.now() - startTime < timelimit) $('#sortType2').remove(); } else if (eleget0('#sortType1')) { // 引用数順 do { var changed = 0 elegeta('//td[@class="rtd"]/ancestor::table').forEach((c, i, a) => { if (a[i + 1] && Number(c.getAttribute("qs")) < Number(a[i + 1].getAttribute("qs"))) { c.parentNode.insertBefore(a[i + 1], c); changed = 1; } }) } while (changed && Date.now() - startTime < timelimit) $('#sortType1').remove(); $(document.body).append('') } else { // そうだね順 //var soudanes = elegeta('//td[@class="rtd"]/..'); soudanes.forEach(e => e.closest("table").setAttribute("s", Number((e.textContent.match(/\>\>\d+/gm) || []).length)+Number(e.closest("table").getAttribute("s")))) // そうだねと引用数の合計順でソート do { var changed = 0 elegeta('//td[@class="rtd"]/ancestor::table').forEach((c, i, a) => { if (a[i + 1] && Number(c.getAttribute("sq")) < Number(a[i + 1].getAttribute("sq"))) { c.parentNode.insertBefore(a[i + 1], c); changed = 1; } }) } while (changed && Date.now() - startTime < timelimit) $(document.body).append('') } }, }], funcOnlyFirst: () => { if (FUTABA_HOVER_RELOAD_BUTTON) GM_addStyle(`#contres{z-index:999; position:fixed; right:9.5em; left:auto; top:0.1em; height:auto; padding:0.2em; border:2px solid #dddddd; background-color:#ffffff;`) $(eleget0('//html/body/span[@id="contres"]/a[contains(text(),"リロード")]')).on("click", (e => { setTimeout(() => { document.body.dispatchEvent(new Event('2chanReloaded')) }, 1500) })); // リロード再実行 if (location.href.match0("anige.horigiri")) GM_addStyle(`blockquote{color:#800000;line-height:1.2em;font-style:normal;`) $(elegeta('//table[@class="deleted"]|//tr/td[@class="rtd"]/blockquote[contains(text(),"del")]/../../../..')).attr("title", "クリックで復帰").animate2({ "opacity": "0.3", "transform": "scale(0.8)", "transform-origin": "right", "float": "right" }, 500).one("click", function() { $(elegeta('//table[@class="deleted"]|//tr/td[@class="rtd"]/blockquote[contains(text(),"del")]/../../../..')).attr("title", "").animate2({ "opacity": "0.7", "transform": "scale(1)", "transform-origin": "right", "float": "none" }, 500); $(this)[0].scrollIntoView({ block: "nearest", behavior: "smooth" }) }) // 隔離を薄くして右に // ニコ動埋め込み(PrivacyBadger等は要Disable) var embednv = () => { var elea = elegeta('//a[contains(@href,"nicovideo")][not(@nde)]') for (let ele of elea.filter(e => isinscreen(e))) { let url = ele.href; //innerText.replace(/^ttp/i, "http"); ele.setAttribute("nde", "nde"); let nico = url.match(/h?ttps?:\/\/www.nicovideo.jp\/watch\/(.*)/i); if (!nico) continue $(ele.parentNode).after(`

`) // 埋め込み外部プレイヤー版 break; // 一度に1つずつしかやらない } if (elea.length) setTimeout(() => embednv(), 2000 + elea.length * 10); } autoPagerized(() => { embednv() }) // youtube埋め込み var embedyt = () => { var elea = elegeta('//a[contains(@href,"youtube.com")][not(@yte)]|//a[contains(@href,"youtu.be")][not(@yte)]'); for (let ele of elea.filter(e => isinscreen(e))) { let url = ele.href //innerText; ele.setAttribute("yte", "yte"); var sm = (url.match(/h?ttps?:\/\/youtu\.be\/([^&?]+.*)\?t=(\d*).*$/i) || url.match(/h?ttps?:\/\/w?w?w?m?\.youtube\.com\/watch\?v=([^&]+.*)&t=(\d*).*$/i)) || url.match(/h?ttps?:\/\/youtu\.be\/([^&?]+)/i) || url.match(/h?ttps?:\/\/w?w?w?m?\.youtube\.com\/watch\?v=([^&]+)/i); if (!sm) continue $(ele.parentNode).after('