// ==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 *://*.shitaraba.net/bbs/read_archive.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.49 // @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 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 REPLACE_LINK_IN_YOUTUBE = 1; // 1:YouTubeで投稿者のチャンネルのホームタブへのリンクをチャンネルの動画タブへのリンクに置き換える const FUTABA_FLOAT_RELOAD_BUTTON = 0; // 0:ふたばでリロードボタンを浮遊させる const FUTABA_REPLACE_POPUP_FUNCTION = 1; // 0:ふたばで本文の引用ポップアップを置き換える let futabapopupscale; 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 futabapicksize = 50; 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フラグ不可 let inYOUTUBE = location.hostname.match0(/^www\.youtube\.com|^youtu\.be/); $.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; let kaisuuU = 0; var GF = {} // 上が優先 const SITEINFO = [{ urlRE: /\/\/www.ftbucket.info\/scrapshot\/ftb\/index.php|\/\/www.ftbucket.info\/scrapshot\/ftb\/?$|\/\/www.ftbucket.info\/scrapshot\/ftb\/\?favo=/, id: 'FUTACHAN_CATALOG', 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: () => { searchWithHistory("FUTACHAN", "FTBucket", 'https://www.ftbucket.info/scrapshot/ftb/index.php?mode=c&favo=0&ord=1&s=***', "|") }, // 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("//www.ftbucket.info/scrapshot/ftb/")) { setSlider(eleget0('//html/body/div[2]/a/img/..'), 4, 255, 16, "タイトル表示:***文字", "FTBTitleLength", (val) => elegeta('//td/span[@title]/div').forEach(e => e.textContent = e.parentNode.title.substr(0, val))) setSlider(eleget0('//html/body/div[2]/a/img/..'), 4, 30, 8, "セル幅:***em", "FTBcallWidth", (val) => elegeta('//td/span[@title]/div/../..').forEach(e => e.style.width = `${val}em`)) } }, }, { urlRE: "\/\/futapo.futakuro.com", // futapo:: id: 'FUTACHAN_CATALOG', 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() }, WhateverFirstAndEveryAPFunc: () => { popup3("Shift+F:FTBucket検索\nU:左上優先配置タイトルを設定\nE:更新 ↻", 8, 1, 5000) $(eleget0('//a[@id="reload"]')).attr("title", "e:更新 ↻") }, listTitleMemoSearchXPSameGen: 1, funcOnlyFirst: () => { GM_addStyle("div.thread-text{display:inline;} .thread-text{word-break:break-all;}") // html{line-height:1.2;} setTimeout(() => { setSlider(eleget0('//div[@id="boxArea"]'), 54, 300, 54, "box高さ:***", "boxheight", (val) => { $('div.thread-contents').css({ "height": val - 2 + "px" }) $('a.box').css({ "height": 15 + val + "px" }) }, 2000, 'style="width:7em;height:0.5em;"') setSlider(eleget0('//div[@id="boxArea"]'), 0, 10, 5, "タイトル行間:***", "lineheight", (val) => { GM_addStyle(`html{line-height:${1+val/10}}`) }, 0, 'style="width:7em;height:0.5em;"') }, 999) }, funcMemo: () => { SITE.funcFinally() }, funcFinally: () => { //GM_addStyle('.thread-text{line-height:1;}') 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: 'e', // e::リロード func: () => { let r = eleget0('//a[@id="reload"]'); if (r) { if (!r.dataset.latestclickdate || new Date().getTime() - r.dataset.latestclickdate > 4000) { r.click(); r.dataset.latestclickdate = new Date().getTime(); } // 要4秒インターバル } }, }, { 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=***', "|") }, // func: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN_CATALOG")].keyFunc[0].func() }, }, { key: 'u', // u:: func: (e) => { var str = pref(SITE.id + ' : SearchMyMemo') || []; var newstr = str.map(e => e.t) // var target = (window.getSelection() && window.getSelection().toString().trim()) || (prompt(`○メモを付けるキーワードを入力してください(部分一致)\nこのサイトではメモが付くものを左上に優先整列します\n\nすでに登録されている文字列を入力するとそれを削除します\n\n${(newstr.join("\n"))}\n\n`) || "").trim(); var target = (window.getSelection() && window.getSelection().toString().trim()) || (prompt(`○メモを付けるキーワードを入力してください(部分一致)\nこのサイトではメモが付くものを左上に優先整列します\n\nすでに登録されている文字列を入力するとそれを削除します\n\n${(newstr.join(" "))}\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削除しますか?`)) { dc(`『${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: () => { searchWithHistory("FUTACHAN", "FTBucket", 'https://www.ftbucket.info/scrapshot/ftb/index.php?mode=c&favo=0&ord=1&s=***', "|") }, // func: () => { SITEINFO[SITEINFO.findIndex(c => c.id == "FUTACHAN")].keyFunc[0].func() }, }], }, { id: 'FUTACHAN', urlRE: '//kuzure.but.jp/f/$', WhateverFirstAndEveryAPFunc: () => { popup3(`Shift+F:FTBucket検索`, 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=***', "|") }, }], }, { id: 'FUTACHAN', urlRE: '//.*.ftbucket.info/|//kuzure.but.jp/f/b/|//[^.]+.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:そうだね順/引用数順でソート${location.href.match0(/^https?:\/\/[^.]+\.2chan\.net\//)?"\nE:リロード(Shift+E:+新着までスクロール)":""}`, 8, 1, 5000) }, keyFunc: [{ key: 'e', // e::リロード func: () => { let r = eleget0('//html/body/span[@id="contres"]/a[contains(text(),"リロード")]|//button[@id="fvw_loading" and @class="ex_button"]'); if (r) { if (!r.dataset.latestclickdate || new Date().getTime() - r.dataset.latestclickdate > 4000) { r.click(); r.dataset.latestclickdate = new Date().getTime(); } // 要4秒インターバル } } }, { key: 'Shift+E', // Shift+E::リロード+スクロール func: () => { let r = eleget0('//html/body/span[@id="contres"]/a[contains(text(),"リロード")]|//button[@id="fvw_loading" and @class="ex_button"]'); if (r) { if (!r.dataset.latestclickdate || new Date().getTime() - r.dataset.latestclickdate > 4000) { r.click(); let latestEle = eleget0('//*[@class="thre"]/table[last()]'); if (latestEle) setTimeout(() => { latestEle.scrollIntoView({ block: "center", behavior: "smooth" }) }, 200); r.dataset.latestclickdate = new Date().getTime(); } // 要4秒インターバル } }, }, { 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('//*[@class="thre"]/descendant::table/tbody/tr/td[@class="rtd"]/..') soudanes.forEach(e => e.closest("table").setAttribute("q", (e.textContent.match(/\>\>\d+/gm) || []).length)) var quotes = elegeta('//*[@class="thre"]/descendant::table/tbody/tr/td[@class="rtd"]/a[contains(text(),"そうだね")]') quotes.forEach(e => e.closest("table").setAttribute("s", e.textContent.match0(/そうだねx(\d+)/) || "0")) var imgs = elegeta('//*[@class="thre"]/descendant::table/tbody/tr/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('//*[@class="thre"]/descendant::table/tbody/tr/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('//*[@class="thre"]/descendant::table/tbody/tr/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('//*[@class="thre"]/descendant::table/tbody/tr/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('//*[@class="thre"]/descendant::table/tbody/tr/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: () => { let is2chan = /^https?:\/\/[^.]+\.2chan\.net\//.test(location.href); let isftb = /^https?:\/\/www\.ftbucket\.info\//.test(location.href); if (is2chan && !location.href.match0(/\.2chan\..+\/res\//)) return; let isftchan = /^https?:\/\/kuzure\.but\.jp\/f\/b\//.test(location.href); let isanigeaki = /\/\/anige\.horigiri\.net\/\?p/.test(location.href); if (isanigeaki) GM_addStyle('table, th, td{border:0;}'); // if(isftchan){document.body.style.width="80%";document.body.innerHTML=document.body.innerHTML.replace(/(