Greasy Fork is available in English.

Yahoo!Japan Auction「タイトルと商品説明」検索復元script

Yahoo!Japanの検索オプション「タイトルと商品説明」を復活させる

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @id             Yahoo!Japan_AuctionSearch
// @name           Yahoo!Japan Auction「タイトルと商品説明」検索復元script
// @version        1.13
// @copyright      Noi & Noisys & NoiSystem & NoiProject
// @license        https://creativecommons.org/licenses/by-nc-sa/3.0/
// @author         noi
// @description    Yahoo!Japanの検索オプション「タイトルと商品説明」を復活させる
// @include        http://auctions.search.yahoo.co.jp/search*
// @include        http://auctions.yahoo.co.jp/search*
// @include        https://auctions.yahoo.co.jp/search*
// @include        http://category.auctions.yahoo.co.jp/list/*
// @include        https://auctions.yahoo.co.jp/category/list/*
// @namespace      https://greasyfork.org/scripts/2204
// @homepageURL    https://greasyfork.org/scripts/2204
// @run-at         document-end
// ==/UserScript==
/*=====================================================================================================================
**************************************************************
*************** Caution!  [Yahoo!Japan] Only.*****************
**************************************************************


このスクリプトはヤフオクがかつて表示していた「タイトルと商品説明」を復活させるためのスクリプトです。
オークションの検索ページの左側にあるオプションにチェックボックスが復活します。

このスクリプトに関して、すべてにおいて自己責任にてご使用下さい。

※なお、万が一Yahoo!Japanより公開停止要請があった場合、即公開中止いたしますのでご了承下さい。 
その場合、ご利用を中止してください。

※2014年09月の変更により、「タイトルと商品説明」と「あいまい検索」は排他になりました。
両方有効にしても表示上は「タイトルと商品説明」となります。(両方効いているのか、表示通りなのかは不明)

=====================================================================================================================*/

/********************************************************************************************************************
更新履歴

2017/11/30 - v1.13 fix:仕様変更対応
2016/09/11 - v1.12 fix:include URL
2016/03/04 - v1.11 add:「コンビニ受け取り」追加
2014/09/07 - v1.10 fix:yahooの仕様変更に対応(選択制の旧スタイルに戻す)
2014/06/13 - v1.9 del:@updateURL
2014/06/12 - v1.8 add:@homepageURL
2014/06/07 - v1.7 change: namespace & updateURL
2014/05/05 - v1.6 add:include URL (http://category.auctions.yahoo.co.jp)
2013/02/12 - v1.5 fix:yahooのレイアウトの変更に対応。多少の変更に左右されないように修正
2013/01/29 - v1.4 add:check update
2013/01/18 - v1.3 add:aimai search and fix(「あいまい検索」追加とチェックボタン連動機能追加)
2013/01/07 - v1.2 change:simplified source code(プログラムソースの簡素化)
2012/12/02 - v1.1 fix:(ページによって追記場所がずれるため修正)
2012/11/29 - v1.0 release 

********************************************************************************************************************

備忘録
・「タイトルと商品説明」で検索すると、URLの引数に「?f=0x4」付く
  ただし、だからといって単純に「?f=0x4」だけ追記しても表示が変わらないので他にもファクターがあると思われる?
  「タイトル」検索に戻す場合は「?f=0x2」もしくは(ヤフオク仕様変更により)削除でも可
  「あいまい検索」は「?ngram=1」
  「新着」は「new=1」
  「送料無料」は「pstagefree=1」
  「値下げ交渉」は「offer=1」
  http://auctions.search.yahoo.co.jp/search?ei=UTF-8&p=「検索文字列」&auccat=「カテゴリーID」
  http://category.auctions.yahoo.co.jp/list/「カテゴリーID」/

タイトルと商品説明	'<li><input type="checkbox" name="f" id="ni03" class="cb" value="0x4"><label for="ni03">タイトルと商品説明</label></li>';
あいまい検索		'<li><input type="checkbox" name="ngram" id="ni04" class="cb" value="1"><label for="ni04">あいまい検索</label></li>';
コンビニ受け取り	&shipping=111


・以下廃止
  https://www.userscripts.org/scripts/show/153206
  https://userscripts.org/scripts/source/153206.user.js
・@updateURLを削除(インストールしたときのサイトURLをアドオンが保持しているので更新可能な模様)

********************************************************************************************************************/

(function(){

	//変数・定数---------------------------------------------------------------------------------
	//共通
	var href = window.location.search;			//現在のURL
	var objId = document.getElementById('S_Items');		//オプション欄
	var objTarget = objId.getElementsByTagName('ul')[0];	//追加する場所
	var hiddenElm = "";					//検索オプションをつけるとhiddenで追加される要素

	var objUL = document.createElement('ul');		//大本の入れ物
	objUL.id = "YJAS_DATA";

//alert(objId.innerHTML);	//テスト用
//alert(objTarget.innerHTML);	//テスト用

	//関数----------------------------------------------------------------------------------------
	//yahooの使いづらい部分削除
	objTarget.innerHTML = "";

	//「新着」
	addHtml("ni00","new=1","新着");

	//「送料無料」
	addHtml("ni01","pstagefree=1","送料無料");

	//「値下げ交渉」
	addHtml("ni02","offer=1","値下げ交渉");

	//「コンビニ受け取り」
	addHtml("ni03","shipping=111","コンビニ受け取り");

	//「タイトルと商品説明」
	addHtml("ni04","f=0x4","タイトルと商品説明");

	//「あいまい検索」
	addHtml("ni05","ngram=1","あいまい検索");



	//「絞り込む」ボタン
	objUL.insertAdjacentHTML("beforeend", '<input type="button" class="b" value="絞り込む" />');

	//「絞り込む」ボタンのクリックイベントを監視
	objUL.getElementsByClassName("b")[0].addEventListener('click', function(){change()}, true);

	//オブジェクト追加
	objTarget.appendChild(objUL);

	//解除ボタン
	var reset = objTarget.parentNode.parentNode.getElementsByClassName("dvCancel")[0];
	var urlTmp = href.replace(/&(new=1|pstagefree=1|offer=1|f=0x4|ngram=1)/g,"");
	if(!reset && href != urlTmp){
		var objTmp = objTarget.parentNode.parentNode.getElementsByClassName("t cf")[0];	//解除ボタンのタイトルバーの見た目変更
		objTmp.setAttribute("class","t cf exChecked");					//クラス変更でCSSが適応される
		objTmp.insertAdjacentHTML("beforeend", '<div class="dvCancel"><></div>');
		reset = objTarget.parentNode.parentNode.getElementsByClassName("dvCancel")[0];
	}
	if(reset) reset.innerHTML = '<a href="' + urlTmp + '">解除</a>'

	//HTMLタグ生成
	function addHtml(id,param,txt){
		var strChecked = "";
		var regCheck = new RegExp('(\\?|&)' + param);

		var objLI = document.createElement('li');		//チェックボックスボックスの入れ物
		var objBox = document.createElement('input');		//チェックボックス

		//オプションが有効だったらチェックボックスにチェックを入れる
		if(window.location.search.match(regCheck)) strChecked = " checked";


		var html = '<li><input type="checkbox" id="' + id + '"'
			+ strChecked
			+ ' class="cb" value="&' + param + '">'
			+ '<label for="' + id + '">' + txt
			+ '</label></li>'
		;//ここまで

			objUL.insertAdjacentHTML("beforeend", html);

	}


	//検索オプション変更
	function change(){
		var data = document.getElementById("YJAS_DATA");
		var newUrl = href;

		var objInputs = data.getElementsByTagName("input");
		for(var i=0; i < objInputs.length;i++){
			if(objInputs[i].type != "checkbox") continue;
			if(objInputs[i].checked){ if(!href.match(objInputs[i].value)) newUrl += objInputs[i].value;
			}else{ newUrl = newUrl.replace(objInputs[i].value,"");}
		}

		if(href != newUrl) location.href = newUrl;
	}



})();
//=====================================================================================================================