// ==UserScript==
// @name           nicohatebu_tagpost
// @namespace      http://web.zgo.jp/
// @description    ニコニコのロックタグをはてブに投稿。
// @include        http://b.hatena.ne.jp/add?*
// @include        http://www.nicovideo.jp/watch/*
// ==/UserScript==
// thanks PHP & Javascript.<http://kevin.vanzonneveld.net/techblog/article/phpjs_licensing/>

(function(){
var descshow = true;//投稿者の説明を入れるならtrue,　いれないならfalse


if(document.URL.match(/b\.hatena\.ne\.jp/g)){
  var $ = unsafeWindow.$;
  var $A = unsafeWindow.$A;
  var selectedText = unescape($A(location.search.split('&')).detect(function (q) { return q.match(/^sel=/); }).split('=')[1]);

  if (selectedText) $('comment').value = selectedText;
}
const lockedTags = unsafeWindow.Video.lockedTags;//元ページからlockedTagsを取得
//GM_log(lockedTags);
const description = unsafeWindow.Video.description;//元ページからlockedTagsを取得
//GM_log(description);
var des = description;
//GM_log(des);

var hatebutag ="";    //初期化
//[タグ][タグ]の生成
for(var i=0;i<lockedTags.length;i++){
	var hatebutag = hatebutag + '[' + lockedTags[i] + ']';
}
//GM_log(hatebutag);

if(descshow){//本文を入れる
	des = strip_tags(des);
	hatebutag = hatebutag + trim(des);
}

//URLの生成
var post_url = 'http://b.hatena.ne.jp/add?mode=confirm&title='
			 + escape(document.title)
			 + '&url=' + escape(location.href)
			 + '&sel=' + escape(hatebutag);
//リンク挿入位置
var mylist_add_pos = document.getElementById('mylist_add_status');
	var newElement = document.createElement("div");
	newElement.setAttribute('class', 'hatebu');
	newElement.innerHTML = '<a href ="' + post_url + '">はてブ</a>';
	mylist_add_pos.insertBefore(newElement,mylist_add_pos.nextChild);

function trim(charstr) {
   charstr = charstr.replace(/\s{3,}/g," / ");
   return charstr.replace(/^\s+|\s+$/g,"");
}
function strip_tags(str, allowed_tags) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i>,<b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    
    var key = '', tag = '';
    var matches = allowed_array = [];
    var allowed_keys = {};
    
    // Build allowes tags associative array
    if (allowed_tags) {
        allowed_tags  = allowed_tags.replace(/[\<\> ]+/g, '');;
        allowed_array = allowed_tags.split(',');
        
        for (key in allowed_array) {
            tag = allowed_array[key];
            allowed_keys['<' + tag + '>']   = true;
            allowed_keys['<' + tag + ' />'] = true;
            allowed_keys['</' + tag + '>']  = true;
        }
    }
    
    // Match tags
    matches = str.match(/(<\/?[^>]+>)/gi);
    
    // Is tag not in allowed list? Remove from str! 
    for (key in matches) {
        tag = matches[key].toString();
        if (!allowed_keys[tag]) {
            reg = RegExp(tag, 'g');
            str = str.replace(reg, '');
        }
    }
    
    return str;
}

GM_addStyle(<><![CDATA[
.hatebu {
display:      block;
float:        left;
outline:      0;
padding:      0;
border:       0;
text-decoration:  none;
background:   url(http://res.nicovideo.jp/img/index/tag/a1_L_off.gif) 0 0 no-repeat;
}
.hatebu a{
display:      block;
position:     relative;
padding:      5px;
text-decoration: none; 
background:   url(http://res.nicovideo.jp/img/index/tag/a1_R_off.gif) right 0 no-repeat;
}

}

]]></>);

})();

/*はてブの書式
javascript:window.location='http://b.hatena.ne.jp/add?mode=confirm&title='+escape(document.title)+'&url='+escape(location.href)+'&sel='+escape("コメント");
*/


