<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel rdf:about="https://let.hatelabo.jp/sofian1024/rss">
    <link>https://let.hatelabo.jp/sofian1024/rss</link>
    <description></description>
    <title>Bookmarklets from sofian1024</title>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://let.hatelabo.jp/sofian1024/let/gYC-xpH6oJHQXA"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://let.hatelabo.jp/sofian1024/let/gYC-xpH6oJHQXA">
    <link>https://let.hatelabo.jp/sofian1024/let/gYC-xpH6oJHQXA</link>
    <dc:date>2012-07-16T11:54:47Z</dc:date>
    <description>過去の記事一覧画面をカテゴリーで絞った状態でブックマークレットとして使うと起動します。(2011/06/24 動作確認)</description>
    <dc:creator>sofian1024</dc:creator>
    <title>[Let] はてなダイアリーのカテゴリー一括変更レット</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fsofian1024%2Flet%2FgYC-xpH6oJHQXA.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;はてなダイアリーのカテゴリー一括変更レット&lt;/a&gt;&lt;pre&gt;/*
 * @title はてなダイアリーのカテゴリー一括変更レット
 * @description 過去の記事一覧画面をカテゴリーで絞った状態でブックマークレットとして使うと起動します。(2011/06/24 動作確認)
 * @include http://d.hatena.ne.jp/*
 * @license MIT License
 * @require jQuery
 */

if (location.href.indexOf('archive?mode=edit&amp;amp;word=') == -1) {
    alert('はてなダイアリーの過去の記事画面で実行してください。');
    return;
}

if ($('select[name=word]').val() == '') {
    alert('カテゴリーを指定してください。');
    return;
}

var readme = '\
-===　注意事項 ===-\n\
必ずデータのバックアップを事前に取った上で実行してください。\n\
動作確認は行っていますが万一データの破損・消去が行われた場合の責任は負いかねます。\n\
以上をご了承頂いた上でご利用ください。\n\
';

if (!confirm(readme)) return;

var oldCat = $('div#main-inner select[name=word] option:selected').text();
var newCat = prompt('新しいカテゴリー名を入力してください。', oldCat);

var isValid = false;
(function () {
    if (newCat == null) return alert('空文字は指定できません。');
    if (newCat == oldCat) return alert('同じ値は指定できません。');
    if (newCat.match(/[\[\]]/)) return alert('[]を含めないでください。');
    if (!confirm(oldCat + ' -&amp;gt; ' + newCat + '　にカテゴリーを更新します。\よろしいですか？')) return;
    isValid = true;
})();
if (!isValid) { alert('終了します。再度実行してください。'); return; }

alert('処理を開始します。完了メッセージが出るまでお待ちください。');

var editLinks = $('table.table-list td.line-right a:contains(&amp;quot;編集&amp;quot;)'); // 記事編集リンクの取得

// iframe の準備
var ifr = document.createElement('iframe');
//ifr.style.display = 'none'; // 非表示だとfirefoxがsubmitしてくれない・・・
ifr.width = ifr.height = 0; // ｺｿｰﾘ
document.body.appendChild(ifr);

// busyフラグ
var isBusy = false;

// 更新処理
var updateCat = function(link) {
    ifr.src = link.href;
    ifr.onload = function () {
        var iDoc = ifr.contentDocument;
        var entryBody = $('textarea[name=body]', iDoc);
        var b = entryBody.val();
        var b = b.replace(/^\*.*?\*(\[.+?\])+/mg, function (p) {
            return p.replace(/\[(.+?)\]/g, function(cat, catName) {
                if (catName == oldCat) cat = '[' + newCat + ']';
	        return cat;
            });
        });
        entryBody.val(b);
        $('div#main-inner form[name=edit] input[name=trivial]', iDoc)
            .attr('checked', true); // ちょっとした更新
　　　　　$($('div#main-inner form[name=edit] input[type=submit][name=edit]',
            iDoc).get(0)).trigger('click'); 
        ifr.onload = function () { isBusy = false; };
    };
};

// 終了時
var finished = function() {
    alert('カテゴリーの更新が完了しました。ページを更新して確認してください。\n\
複数ページにわたっている場合は再度実行してください。\n\
また設定&amp;gt;編集設定のカテゴリー情報は更新しませんので、必要に応じて手動で編集してください。\n');
};

// ループ処理
var i = 0;
var timer = setInterval(function() {
    if (!isBusy) {
        isBusy = true;

        // 終了チェック
        if (i == editLinks.length) { clearInterval(timer); finished(); return; }
        updateCat(editLinks[i++]);
    }
}, 500);&lt;/pre&gt;</content:encoded>
  </item>
</rdf:RDF>
