// ==UserScript==
// @name Amazonマーケットプレース(ケータイサイト)の出品情報を整形する
// @namespace https://nanoappli.com/
// @include http://www.amazon.co.jp/gp/aw/d/*
// @version 1
// ==/UserScript==
// jqueeryをロードする
(function( d, onLoadProc ) {
console.log( "start GreaseMonkey user.js" );
var isLoadedJQuery = function() {
// ロードが完了したかチェック
if (typeof unsafeWindow.jQuery == 'undefined') {
return false;
}
// ロード後に指定されたプログラムを実行
onLoadProc( unsafeWindow.jQuery );
console.log( "end GreaseMonkey user.js" );
return true;
}
// 既にロード済みならおしまい
if ( isLoadedJQuery() ) {
return;
}
// jQueryをロードする
var scriptTag;
scriptTag = d.createElement('script');
scriptTag.type = 'text/javascript';
scriptTag.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js';
d.getElementsByTagName( 'head' )[0].appendChild( scriptTag );
// ロードが終わるまで待つ
(function() {
if (isLoadedJQuery()) {
return;
}
setTimeout(arguments.callee, 100);
})();
})(document, function($) {
var items = new Array(); // 商品情報の一覧
var itemContents = new Array(); // 商品情報の明細一覧(テキストノードを含む)
//------------------------------------
// "カートに入れるボタン"を線に変える
// (ここがアイテムの変わり目)
//------------------------------------
console.log( "replace center tag" );
$( "center" ).after( '
' );
$( 'hr.item-end' ).css( 'height', '1px' )
.css( 'border', 'none' )
.css( 'margin', '1px 0px' )
.css( 'border-top', '1px #fcc solid' );
// centerタグを外す
$('center').each( function() {
$(this).replaceWith( $(this).html() );
});
$('input.cartButton').parent().css( 'display', 'inline' );
//-------------------------------------
// 出品情報を含むノードの一覧を取得
//-------------------------------------
console.log( "collect body children tag" );
$("body").contents().each( function() {
itemContents.push( $(this) );
// 商品の変わり目に到達したかチェック
if ( $(this).is( 'hr.item-end') ) {
console.log( ' contents len:' + itemContents.length );
console.log( itemContents );
items.push( itemContents );
itemContents = new Array();
}
});
//-------------------------------------
// 商品情報をマークアップする
//-------------------------------------
console.log( "markup item info len=" + items.length );
for ( loop = 0; loop < items.length; loop++ ) {
console.log( " item[" + loop + "]" );
var curContents = items[ loop ];
// 先頭は書籍タイトルなので無視
if ( loop == 0 ) {
continue;
}
// (たぶん)1明細目 -> 先頭に有るページ表示を切り詰める
while( curContents.length > 21 ) {
//console.log( "omit contents↓" );
//console.log( curContents[0] );
curContents.shift();
}
console.log( " itemContents len=" + curContents.length );
// 改行
curContents[ 1 ].addClass( 'br1' );
// white space
curContents[ 2 ].addClass( 'ws1' );
// 改行
curContents[ 3 ].addClass( 'br2' );
// 価格
curContents[ 5 ].addClass( 'price' );
// コンディション+屋号
curContents[ 6 ].wrap( '' );
// 改行
curContents[ 7 ].addClass( 'br3' );
// コンディション説明
curContents[ 8 ].wrap( '' );
// 改行
curContents[ 9 ].addClass( 'br4' );
// 11:配送料リンク
curContents[ 11 ].addClass( 'shipInfoLink' );
// 12:評価
curContents[ 12 ].wrap( '' );
curContents[ 13 ].hide(); // 区切りのハイフン
// 詳細リンク
curContents[ 15 ].addClass( 'detailInfoLink' );
}
//--------------------------------------------------
// マークアップされたコンテンツのスタイルを改変する
//--------------------------------------------------
console.log( "change style" );
$( '.br1' ).hide();
$( '.br2' ).hide();
$( '.br3' ).hide();
$( '.br4' ).hide();
$( '.price' ).css( 'color', '#990000' ).css( 'font-size', '14pt' );
$( 'span.cond_marchant' ).css( 'color', '#999999' );
$( 'span.rating' ).css( 'color', '#999999' );
$( '.conditionDesc' ).hide();
// $( '.conditionDesc' ).css( 'color', '#999' ).css( 'font-size', '9pt' );
$( '.shipInfoLink' ).hide();
$( '.detailInfoLink' ).hide();
//-------------------------------------------------------
// コンディションと屋号が同じタグに混ざっているのを分離
//-------------------------------------------------------
console.log( "split condition information" );
$( 'span.cond_marchant' ).each( function(){
var marchantText = $( this ).text();
marchantText = String( $.trim( marchantText ) );
// コンディションと屋号を切り分ける
var splitPos = marchantText.indexOf( '\xa0' );
var cond = marchantText.substring( 0, splitPos );
var title = marchantText.substring( splitPos+1 );
if ( title.length > 15 ) {
title = title.substring( 0, 15 ) + "...";
}
// 別々のタグに分ける
$( this ).replaceWith( '' + cond + '
' +
'' + title + '
' );
});
// 分離した各タグにスタイルを適用
console.log( "change style2" );
$( 'p.cond' ).css( 'margin', '0px' )
.css( 'display', 'inline-block' )
.css( 'width', '90px' );
$( 'p.marchant' ).css( 'margin', '0px' )
.css( 'display', 'inline-block' )
.css( 'width', '200px' )
.css( 'font-size', '9pt' )
.css( 'color', '#999999' );
//---------------------------
// ヘッダ部を見やすくする
//---------------------------
console.log( "change header style" );
$( 'a[name="Used"]' ).after( "
" );
$( 'font:contains("-----------")' ).remove();
});