管理画面の「いいね!ダイアログ」の起動仕様 

「いいね!ダイアログ」のタイトル部は「記事へのリンク」があります。 このリンクを無効化して、タイトル部全体を「編集モード」のスイッチにしたい所ですが、このリンクは便利な機能なので無効にするのは無謀です。

 

そこで、リンク以外の部分を全てスイッチにして、短いタイトルなら余白部分もスイッチとして使える様にしていました。 しかしこれが仇となり、リンクを押そうとして僅かにそれて「編集モード」になる事があり、これは操作上で好ましくないと感じました。 このツールの最も良く使う起動スイッチですから、操作性は拘ります。

 

 

変更点 

マイナーな更新ですが、「編集モード」を ONに出来る範囲を変更し、完全にツールの「マーク」(ツールのアイコン)のみに変更しました。

 

 

一方、「編集モード」は、ダイアログ上のリンクを全て無効化するので、タイトル全体を OFFにするスイッチとして使います。(これは従来通りです)

 

 

結局、このツールのアイコンをスイッチにすれば確実な操作になります。

 

 

 

操作マニュアル 

「Bad Iine Mute」「Bad Iine Mute BlogPage」の詳しい操作方法を知りたい場合は

以下のマニュアルを参照ください。

 

 

 

 

「Bad Iine Mute」を導入するには

「Bad Iine Mute」は Chrome / Edge / Firefox の拡張機能「Tampermonkey」上で動作するスクリプトツールです。

 

「Bad Iine Mute」「Bad Iine Mute BlogPage」は、それぞれ「ブログ管理画面」と「ブログページ」のブロック機能を受け持ちます。 ページの文字数制限の関係で、「Bad Iine Mute BlogPage」の更新版コードは、前ページに置いています。

 

❶「Tampermonkey」を導入します

◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。

既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。 

拡張機能の導入については、以下のページに簡単な説明があるので参照ください。

 

 

❷「Tampermonkey」にスクリプトを登録します

◎「Tampermonkey」の「」マークの「新規スクリプト」タブを開きます。

 

 

 

◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。

 

〔コピー方法〕 軽量シンプルなツール「PreBox Button   」を使うと

  コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」

  の操作で、掲載コードのコピーが可能になります。

 

◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。

 

 

〔 Bad Iine Mute 〕 ver. 2.4

 

// ==UserScript==
// @name         Bad Iine Mute
// @namespace    http://tampermonkey.net/
// @version      2.4
// @description  「管理画面」から不良な「いいね!」を非表示にする
// @author       Ameba Blog User
// @match        https://blog.ameba.jp/ucs/top*
// @match        https://blog.ameba.jp/ucs/iine/list.html*
// @grant        none
// ==/UserScript==


let iine_block_data={}; // 総合ブロックデータ
let iine_block_id=[];
let iine_block_img=[];
let block_filter_id;
let block_regex_id;
let block_filter_img;
let block_regex_img;
let edit_mode=0;
let find_img_src='';

let ua=0;
let agent=window.navigator.userAgent.toLowerCase();
if(agent.indexOf('firefox') > -1){ ua=1; } // Firefoxの場合のフラッグ


let read_json=localStorage.getItem('iine_id_back'); // ローカルストレージ 保存名
iine_block_data=JSON.parse(read_json);
if(iine_block_data==null){
    iine_block_data=[['tmp1', 'img1'], ['tmp2', 'img2']]; }

reg_set();

function reg_set(){
    iine_block_id=[];
    iine_block_img=[];
    for(let k=0; k<iine_block_data.length; k++){
        iine_block_id[k]=iine_block_data[k][0];
        iine_block_img[k]=iine_block_data[k][1]; }
    block_filter_id=iine_block_id.join('|');
    block_regex_id=RegExp(block_filter_id);
    block_filter_img=iine_block_img.join('|');
    block_regex_img=RegExp(block_filter_img); }



let svg_path=
    '<path d="M35 1C19 3 6 15 1 31C-2 46 0 64 0 79L0 170C0 '+
    '188 -3 208 8 223C21 241 40 240 60 240L156 240C172 240 189 242 205 '+
    '240C221 236 234 225 239 209C243 195 240 177 240 162L240 68C240 51 '+
    '243 31 232 16C218 -2 198 0 178 0L83 0C67 0 50 -2 35 0z"/>'+
    '<path style="fill:#fff" d="M39 6C24 9 11 18 8 33C4 48 6 65 6 80L6 169C6 '+
    '186 3 206 14 220C26 236 46 234 64 234L156 234C172 234 189 236 205 '+
    '233C221 230 231 217 234 202C236 188 234 172 234 158L234 71C234 54 '+
    '237 33 226 19C213 4 193 6 175 6L85 6C70 6 54 4 39 6z"/>'+
    '<path d="M44 214C83 214 123 212 161 202C181 197 '+
    '201 189 213 171C222 157 223 134 213 119C201 101 173 92 153 102C153 '+
    '81 147 59 132 43C106 17 58 11 36 45C27 58 25 75 24 90C21 122 28 156 '+
    '36 187C38 196 42 205 44 214z"/>'+
    '<path style="fill:#fff" d="M67 84C58 86 53 97 59 105C63 110 70 112 76 '+
    '110C95 105 85 79 67 84M101 86L101 196C107 196 114 194 120 194L120 '+
    '181C124 185 128 188 133 190C137 191 140 191 144 191C173 189 181 153 '+
    '175 130C170 113 156 103 139 109C133 111 128 115 124 119L124 83C116 '+
    '83 109 86 101 86M60 124L60 203C67 203 74 201 81 200L81 121C74 122 '+
    '67 124 60 124z"/>'+
    '<path d="M136 125C121 129 120 152 124 164C126 171 '+
    '134 178 142 175C157 171 159 150 155 137C153 128 145 122 136 125z"/>';

let svg_mark_t=
    '<svg class="svgm_t" width="24" height="24" viewBox="0 0 240 240" '+
    'style="margin: -7px 6px; cursor: pointer;">'+ svg_path +'</svg>';

let svg_mark_d=
    '<svg class="svgm_d" width="24" height="24" viewBox="0 0 240 240" '+
    'style="position: absolute; top: 7px; cursor: pointer;">'+ svg_path +'</svg>';

let svg_mark_h=
    '<svg fill="#2196f3" width="18" height="18" viewBox="0 0 240 240" '+
    'style="margin: -4px 0px">'+ svg_path +'</svg>';



let target0=document.querySelector('#contents'); // 監視 target
let monitor0=new MutationObserver(mode_select);
monitor0.observe(target0, {childList: true, subtree: true}); // 監視開始

mode_select();

function mode_select(){
    if(document.querySelector('#iineEntry')){ // 管理トップ

        monitor0.disconnect();
        let div_iine=document.querySelector('#iine');
        let iine_title=document.querySelector('#iineEntry .ttl');
        let iine_th=document.querySelectorAll('#iineEntry th');
        iine_th[0].innerHTML=svg_mark_t+' いいね!された記事';
        iine_th[0].style.fontWeight='bold';
        title_disp(iine_th[0], iine_th[1]);
        monitor0.observe(target0, {childList: true, subtree: true});

        iine_title.onclick=function(event){
            event.preventDefault();
            if(event.altKey==true){ //「Altキー + 左クリック」
                if(edit_mode==0){
                    edit_mode=1;
                    file_backup(); } // ファイル保存 管理トップ
                else{
                    edit_mode=0;
                    file_backup_end(); }}
            else{
                if(edit_mode==0){
                    edit_mode=1; }
                else if(edit_mode==1){
                    edit_mode=0;
                    file_backup_end(); }}
            blocker();
            title_disp(iine_th[0], iine_th[1]); }}



    if(document.querySelector('#iineHistoryEntryFrame')){ // 履歴 タブ1

        monitor0.disconnect();
        let iine_title=document.querySelector('#iineHistoryEntryFrame .ttl');
        let iine_th=document.querySelectorAll('#iineHistoryEntryFrame th');
        disp_help();
        open_more(0);
        end_more();
        iine_th[0].innerHTML=svg_mark_t +' いいね!された記事';
        title_disp(iine_th[0], iine_th[1]);
        monitor0.observe(target0, {childList: true, subtree: true});

        iine_title.onclick=function(event){
            event.preventDefault();
            if(event.altKey==true){ //「Altキー + 左クリック」
                if(edit_mode==0){
                    edit_mode=1;
                    file_backup(); } // ファイル保存 履歴タブ1
                else{
                    edit_mode=0;
                    file_backup_end();
                    find_user_end(); }}
            else if(event.ctrlKey==true){ //「Ctrlキー + 左クリック」
                if(edit_mode==0){
                    edit_mode=2;
                    find_user(); } // ユーザー履歴検索 履歴タブ1
                else{
                    edit_mode=0;
                    file_backup_end();
                    find_user_end(); }}
            else{
                if(edit_mode==0){
                    edit_mode=1; }
                else if(edit_mode==1){
                    edit_mode=0;
                    file_backup_end(); }
                else if(edit_mode==2){
                    edit_mode=0;
                    find_user_end(); }}
            title_disp(iine_th[0], iine_th[1]);
            blocker(); }}



    if(document.querySelector('#iineHistoryUserFrame')){ // 履歴 タブ2

        monitor0.disconnect();
        let iine_title=document.querySelector('#iineHistoryContent tr:first-child');
        let iine_th=document.querySelectorAll('#iineHistoryUserFrame th');
        disp_help();
        open_more(1);
        end_more();
        iine_th[0].innerHTML=
            '          '+ svg_mark_t +
            ' ユーザー名 / ブログ名      Sift+Click : ソート';
        iine_th[0].style.textIndent='-20em';
        iine_th[0].style.overflow='hidden';
        title_disp(iine_th[0], iine_th[1]);
        monitor0.observe(target0, {childList: true, subtree: true});

        iine_title.onclick=function(event){
            event.preventDefault();
            if(event.ctrlKey==true){ //「Ctrlキー + 左クリック」
                if(edit_mode==0 || edit_mode==1){
                    edit_mode=2;
                    find_user(); }
                else{
                    edit_mode=0
                    find_user_end(); }}
            else if(event.shiftKey==true){ //「Shiftキー + 左クリック」
                edit_mode=0;
                find_user_end();
                sort(); }
            else{
                if(edit_mode==0){
                    edit_mode=1; }
                else{
                    edit_mode=0;
                    find_user_end(); }}
            title_disp(iine_th[0], iine_th[1]);
            blocker(); }}
} // mode_select()



function title_disp(th0, th1){
    let svgm_t=document.querySelector('.svgm_t');
    if(svgm_t){
        if(edit_mode==0){
            th0.style.boxShadow='none';
            th1.style.boxShadow='none';
            th0.style.color='#666';
            th1.style.color='#666';
            svgm_t.style.fill='#2196f3'; }
        else if(edit_mode==1){
            th0.style.boxShadow='inset 0 0 0 20px red';
            th1.style.boxShadow='inset 0 0 0 20px red';
            th0.style.color='#fff';
            th1.style.color='#fff';
            svgm_t.style.fill='red'; }
        else if(edit_mode==2){
            th0.style.boxShadow='inset 0 0 0 20px #2196f3';
            th1.style.boxShadow='inset 0 0 0 20px #2196f3';
            th0.style.color='#fff';
            th1.style.color='#fff';
            svgm_t.style.fill='#2196f3'; }}}



function open_more(n){
    let more=document.querySelector('.moreLinkBottom');
    let item;
    if(n==0){
        item=document.querySelectorAll('#iineHistoryEntryFrame tr'); }
    if(n==1){
        item=document.querySelectorAll('#iineHistoryUserFrame tr'); }
    if(more && item.length<18){ // リストを18行まで自動で開く 🔴
        more.click(); }}



function end_more(){
    let senser=0;
    let next=0;
    let interval;
    let list_frame=document.querySelector('#iineHistoryContent');
    if(list_frame){
        let css=
            '#iineHistoryContent table { position: relative; } '+
            '#iineHistoryContent tbody { overflow-y: scroll; margin-top: 34px; '+
            'height: calc( 100vh - 220px); border-bottom: 1px solid #ccc; display: block; } '+
            '.tableList th { width: inherit; font-size: 14px; padding: 8px 4px 6px; '+
            'text-align: center !important; background: #f4f4f4; } '+
            '#iineHistoryContent tr:first-child { position: absolute; z-index: 1; width: 786px; '+
            'top: 1px; left: -1px; border-left: 1px solid #ccc; border-right: 1px solid #ccc; } '+
            '#ucsMain #moreLoading { margin: -3px auto; } '+
            '#ucsMain .moreLinkBottom span { '+
            'background-position: 0 4px; font-size: 14px; } '+
            '#iineHistoryEntryFrame:after, #iineHistoryUserFrame:after { '+
            'content: "Space: 連続スクロール / 停止"; '+
            'position: absolute; right: 10px; margin: 2px 0 0; border: 1px solid #aaa; '+
            'padding: 3px 6px 0; font: bold 14px Meiryo; color: #888; background: #fff; } ' +
            '#footerAd, #globalFooter { display: none; }';

        let style_tag=document.createElement("style"); // css設定styleタグ
        style_tag.setAttribute('id', 'bim');
        style_tag.textContent=css;
        if(!list_frame.querySelector('#bim')){
            list_frame.appendChild(style_tag); }}

    document.addEventListener('keydown', function(event){
        event.stopImmediatePropagation();
        if(event.keyCode==32){
            if(next==0){
                next=1;
                interval=setInterval(
                    function(){
                        go();
                        stop();
                        senser+=1;
                    }, 500); }
            else{
                next=0;
                clearInterval(interval); }
            setTimeout(()=>{
                view_end(); }, 600); } // リスト末尾を表示

        function go(){
            let more=document.querySelector('.moreLinkBottom'); // Moreボタン
            if(more && next==1){
                more.click();
                view_end();
                senser=0; }}

        function stop(){
            if(senser>8){
                next=0;
                senser=0;
                clearInterval(interval);
                view_end(); }}});

    function view_end(){
        let list_body;
        let last_item;
        if(document.querySelector('#iineHistoryEntryFrame tbody')){
            list_body=document.querySelector('#iineHistoryEntryFrame tbody'); }
        if(document.querySelector('#iineHistoryUserFrame tbody')){
            list_body=document.querySelector('#iineHistoryUserFrame tbody'); }
        last_item=list_body.lastChild;
        last_item.scrollIntoView(false); }

} //end_more()



function sort(){
    window.getSelection().removeAllRanges();

    let iine_arr=[];

    let iine_tr=document.querySelectorAll('#iineHistoryUserFrame tr');
    for(let k=1; k<iine_tr.length; k++){
        let user_href;
        let user_name;
        let user_count;
        let user_src=iine_tr[k].querySelector('.list_img img').getAttribute('src');
        if(iine_tr[k].querySelector('.heading a')){
            user_href=iine_tr[k].querySelector('.heading a').getAttribute('href');
            user_name=iine_tr[k].querySelector('.heading a span').textContent;
            user_count=parseInt(
                iine_tr[k].querySelector('.iineCnt').textContent.replace(/[^0-9]/g, ''), 10); }
        else{ // 退会ユーザー
            user_href='---';
            user_name='---';
            user_count=0; }

        iine_arr.push([user_src, user_href, user_name, user_count]); } // データの配列化


    iine_arr.sort((a, b)=>{
        return b[b.length-1] - a[a.length-1] }) // user_count の降順にソート


    let iine_table=document.querySelector('#iineHistoryUserFrame tbody');
    let iine_r_tr=iine_table.querySelectorAll('tr');
    for(let k=1; k<iine_r_tr.length; k++){
        iine_r_tr[k].remove(); }

    for(let k=0; k<iine_arr.length; k++){
        let iine_tr=document.createElement('tr');
        iine_tr.innerHTML=
            '<td><b class="list_img"><img src=""></b>'+
            '<div class="list_main"><div class="heading"><a href=""><span></span></a>'+
            '</div></div></td><td class="iineCnt"></td>';
        iine_tr.querySelector('img').setAttribute('src', iine_arr[k][0]);
        iine_tr.querySelector('a').setAttribute('href', iine_arr[k][1]);
        iine_tr.querySelector('span').textContent=iine_arr[k][2];
        iine_tr.querySelector('.iineCnt').textContent=iine_arr[k][3];

        if(iine_table.childElementCount<iine_r_tr.length){
            iine_table.appendChild(iine_tr); }} // 配列のtableへの再配置

} // sort()



function disp_help(){
    let page_title=document.querySelector('#ucsMainLeft h1');
    if(page_title){
        let css='font: bold 14px Meiryo; float: right; padding: 2px 6px 0; '+
            'border: 1px solid #aaa; color: #888;';
        let help=document.createElement('span');
        help.setAttribute('id', 'bim_help');
        help.innerHTML=
            'Click '+ svg_mark_h +' : ブロック設定  '+
            'Alt+Click '+ svg_mark_h +' : データ保存  '+
            'Ctrl+Click '+svg_mark_h +' : ユーザー検索';
        help.setAttribute('style', css);

        let bim_help=document.querySelector('#bim_help');
        if(!bim_help){
            page_title.appendChild(help); }}}



let target1=document.querySelector('#contents'); // 監視 target
let monitor1=new MutationObserver(blocker);
monitor1.observe(target1, {childList: true, subtree: true}); // 監視開始

function blocker(){
    let k;
    let user_href=[];
    let iineImg=[];
    let iine_span=[];
    let iine_tr=[];
    let Img_src=[];

    if(document.querySelector('#iineEntry')){ // 管理トップ
        let iine_img=document.querySelectorAll('#iineEntry .img');
        iineImg=document.querySelectorAll('#iineEntry img');
        for(k=0; k<iineImg.length; k++){ // ユーザーアイコンのマスク
            Img_src[k]=iineImg[k].getAttribute('src');
            if(block_regex_img.test(Img_src[k])==true){
                if(edit_mode==0){
                    iineImg[k].style.display='none'; }
                else{
                    iineImg[k].style.display='block';
                    iineImg[k].style.outline='auto red';
                    if(ua==1){
                        iineImg[k].style.outline='2px solid red';
                        iineImg[k].style.outlineOffset='-2px';}}}
            else{
                iineImg[k].style.display='block';
                iineImg[k].style.outline='none'; }}}

    if(document.querySelector('#iineHistoryEntryFrame')){ // 履歴 タブ1
        iine_span=document.querySelectorAll('.userImg span');
        iineImg=document.querySelectorAll('.userImg img');
        for(k=0; k<iineImg.length; k++){ // ユーザーアイコンのマスク
            Img_src[k]=iineImg[k].getAttribute('src');
            if(block_regex_img.test(Img_src[k])==true){
                if(edit_mode==0 || edit_mode==2){
                    iine_span[k].style.display='none'; }
                else{
                    iine_span[k].style.display='inline-block';
                    iine_span[k].style.outline='auto red';
                    if(ua==1){
                        iine_span[k].style.outline='2px solid red';
                        iine_span[k].style.outlineOffset='-2px';}}}
            else{
                iine_span[k].style.display='inline-block';
                iine_span[k].style.outline='none'; }}

        get_src();
        find_user();
        blue_user(); }

    if(document.querySelector('#iineHistoryUserFrame')){ // 履歴 タブ2
        iine_tr=document.querySelectorAll('#iineHistoryUserFrame tr');
        for(k=1; k<iine_tr.length; k++){ // ユーザーアイコンのマスク
            if(iine_tr[k].querySelector('.heading a')){
                user_href[k]=iine_tr[k].querySelector('.heading a').getAttribute('href');

                if(block_regex_id.test(user_href[k])==true){ // IDがリスト上にある場合
                    if(edit_mode==0 || edit_mode==2){
                        iine_tr[k].style.display='none'; }
                    else{
                        iine_tr[k].style.display='table-row';
                        iine_tr[k].style.boxShadow='inset 0 0 0 1px #fff,inset 0 0 0 3px red'; }

                    let user_src=iine_tr[k].querySelector('.list_img img').getAttribute('src');
                    if(user_src){
                        user_src=user_src.replace('https://stat.profile.ameba.jp/profile_images/', '');
                        user_src=user_src.replace(/\?cpc=100/g, ''); }
                    else{
                        user_src=''; } // imgが無い場合
                    for(let s=0; s<iine_block_data.length; s++){
                        if(user_href[k].indexOf(iine_block_data[s][0])!=-1){
                            iine_block_data[s][1]=user_src; }} // ID該当した場合にimgを再登録
                    let write_json=JSON.stringify(iine_block_data);
                    localStorage.setItem('iine_id_back', write_json); } // imgの再登録

                else{
                    iine_tr[k].style.display='table-row';
                    iine_tr[k].style.boxShadow='none';
                    let list_img=iine_tr[k].querySelector('.list_img');
                    let list_img_url=list_img.getAttribute('href');
                    if(list_img && list_img_url){
                        prevent(list_img, list_img_url); }
                    let user_link=iine_tr[k].querySelector('.heading a');
                    prevent(user_link, user_href[k]); }

                function prevent(link, url){
                    link.onclick=function(event){
                        event.preventDefault();
                        window.open(url, '_blank'); }}
            }}

        get_src();
        find_user();
        blue_user(); }
} // blocker()



let target2=document.querySelector('body'); // 監視 target
let monitor2=new MutationObserver(blocker_dia);
monitor2.observe(target2, {childList: true, subtree: true}); // 監視開始

function blocker_dia(){
    let k;
    let user_li=[];
    let user_href=[];

    if(document.querySelector('#iineEntry')){ // 管理トップ
        smart(0);
        let svgm_d=document.querySelector('.svgm_d');
        let header=document.querySelector('#iineEntryFrame .header');
        let header_link=document.querySelector('#iineEntryFrame .header a');
        if(header_link){
            header_link.setAttribute('target', '_blank');
            header_link.onclick=function(event){
                event.stopImmediatePropagation(); }}
        let header_count=document.querySelector('#iineEntryFrame .header p span');
        if(svgm_d && header && edit_mode==0){
            svgm_d.style.fill='#2196f3';
            header.style.background='#f7f7f7';
            header_link.style.color='#06c';
            header_link.style.pointerEvents='auto';
            header_count.style.color="red"; }
        if(svgm_d && header && edit_mode==1){
            svgm_d.style.fill='red';
            header.style.background='red';
            header_link.style.color='#fff';
            header_link.style.pointerEvents='none';
            header_count.style.color="#fff"; }

        if(header){
            header.onclick=function(event){
                if(edit_mode==1){
                    edit_mode=0; }
                blocker_dia();
                blocker();
                let iine_th=document.querySelectorAll('#iineEntry th');
                title_disp(iine_th[0], iine_th[1]); }}

        if(svgm_d){
            svgm_d.onclick=function(event){
                event.stopImmediatePropagation();
                if(edit_mode==0){
                    edit_mode=1; }
                else{
                    edit_mode=0; }
                blocker_dia();
                blocker();
                let iine_th=document.querySelectorAll('#iineEntry th');
                title_disp(iine_th[0], iine_th[1]); }}

        user_li=document.querySelectorAll('#iineEntoryContents li');
        if(user_li.length !=0){
            for(k=0; k<user_li.length; k++){ // ダイアログのリストのマスク
                if(user_li[k].querySelector('a')){
                    user_href[k]=user_li[k].querySelector('a').getAttribute('href');
                    if(block_regex_id.test(user_href[k])==true){ // IDがリスト上にある場合
                        if(edit_mode==0){
                            user_li[k].style.display='none';
                            user_li[k].style.outline='none'; }
                        else{
                            user_li[k].style.display='block';
                            user_li[k].style.outline='2px solid red';
                            user_li[k].style.outlineOffset='-3px'; }

                        let user_src=user_li[k].querySelector('.img img').getAttribute('src');
                        if(user_src){
                            user_src=user_src.replace('https://stat.profile.ameba.jp/profile_images/', '');
                            user_src=user_src.replace(/\?cpc=100/g, ''); }
                        else{
                            user_src=''; } // imgが無い場合
                        for(let s=0; s<iine_block_data.length; s++){
                            if(user_href[k].indexOf(iine_block_data[s][0])!=-1){
                                iine_block_data[s][1]=user_src; }} // ID該当した場合にimgを再登録
                        let write_json=JSON.stringify(iine_block_data);
                        localStorage.setItem('iine_id_back', write_json); } // imgの再登録

                    else{
                        user_li[k].style.outline='none';
                        prevent(user_li[k], user_href[k]); }

                    function prevent(link, url){
                        link.onclick=function(event){
                            event.preventDefault();
                            window.open(url, '_blank'); }}
                }}}}


    if(document.querySelector('#iineHistoryEntryFrame')){ // 履歴 タブ1
        smart(1);
        let svgm_d=document.querySelector('.svgm_d');
        let header=document.querySelector('#iineEntryHeader');
        let header_link=document.querySelector('#iineEntryHeader a');
        if(header_link){
            header_link.setAttribute('target', '_blank');
            header_link.onclick=function(event){
                event.stopImmediatePropagation(); }}
        let header_count=document.querySelector('#iineEntryHeader .tx_orageA');
        if(svgm_d && header && header_link && edit_mode==0){
            svgm_d.style.fill='#2196f3';
            header.style.background='#f7f7f7';
            header_link.style.color='#06c';
            header_link.style.pointerEvents='auto';
            header_count.style.color='red'; }
        else if(svgm_d && header && header_link && edit_mode==2){
            svgm_d.style.fill='#2196f3';
            header.style.background='#2196f3';
            header_link.style.color='#fff';
            header_link.style.pointerEvents='auto';
            header_count.style.color='#fff'; }
        else if(svgm_d && header && header_link && edit_mode==1){
            svgm_d.style.fill='red';
            header.style.background='red';
            header_link.style.color='#fff';
            header_link.style.pointerEvents='none';
            header_count.style.color='#fff'; }

        if(header){
            header.onclick=function(event){
                if(edit_mode==1){
                    edit_mode=0; }
                blocker_dia();
                blocker();
                let iine_th=document.querySelectorAll('#iineHistoryEntryFrame th');
                title_disp(iine_th[0], iine_th[1]); }}

        if(svgm_d){
            svgm_d.onclick=function(event){
                event.stopImmediatePropagation();
                if(edit_mode==0){
                    edit_mode=1; }
                else{
                    edit_mode=0; }
                blocker_dia();
                blocker();
                let iine_th=document.querySelectorAll('#iineHistoryEntryFrame th');
                title_disp(iine_th[0], iine_th[1]); }}

        user_li=document.querySelectorAll('#iineEntryContents li');
        if(user_li.length !=0){
            for(k=0; k<user_li.length; k++){ // ダイアログのリストのマスク
                if(user_li[k].querySelector('a')){
                    user_href[k]=user_li[k].querySelector('a').getAttribute('href');

                    if(block_regex_id.test(user_href[k])==true){ // IDがリスト上にある場合
                        if(edit_mode==0 || edit_mode==2){
                            user_li[k].style.display='none';
                            user_li[k].style.boxShadow='none'; }
                        else{
                            user_li[k].style.display='block';
                            user_li[k].style.boxShadow='#fff 0 0 0 1px inset, red 0 0 0 3px inset'; }

                        let user_src=user_li[k].querySelector('.iineProfImg img').getAttribute('src');
                        if(user_src){
                            user_src=user_src.replace('https://stat.profile.ameba.jp/profile_images/', '');
                            user_src=user_src.replace(/\?cpc=100/g, ''); }
                        else{
                            user_src=''; } // imgが無い場合
                        for(let s=0; s<iine_block_data.length; s++){
                            if(user_href[k].indexOf(iine_block_data[s][0])!=-1){
                                iine_block_data[s][1]=user_src; }} // ID該当した場合にimgを再登録
                        let write_json=JSON.stringify(iine_block_data);
                        localStorage.setItem('iine_id_back', write_json); } // imgの再登録

                    else{
                        user_li[k].style.boxShadow='none';
                        prevent(user_li[k], user_href[k]); }

                    function prevent(link, url){
                        link.onclick=function(event){
                            event.preventDefault();
                            window.open(url, '_blank'); }}
                }}}

        get_src();
        blue_user_dia(); }
} // blocker_dia()



function smart(n){
    monitor2.disconnect();

    if(n==0){
        let headerT=document.querySelector('#iineEntryFrame .header p');
        if(headerT){
            headerT.style.background='none';
            headerT.style.fontSize='0';
            headerT.style.padding='10px 30px 8px 28px';
            let title=headerT.querySelector('#iineEntryFrame .header p a');
            if(title){
                title.style.fontSize='14px';
                title.style.padding='0 1em 0 .5em'; }
            let count=headerT.querySelector('#iineEntryFrame .header p span');
            if(count){
                count.style.fontSize='14px';
                count.style.fontWeight='bold'; }
            if(!document.querySelector('#iineEntryFrame svg')){
                headerT.insertAdjacentHTML('beforebegin', svg_mark_d); }}}

    if(n==1){
        let headerT=document.querySelector('#iineEntryHeader p');
        if(headerT){
            headerT.style.background='none';
            headerT.style.fontSize='0';
            headerT.style.padding='10px 30px 8px 28px';
            let title=headerT.querySelector('#iineEntryHeader .tx_bold');
            if(title){
                title.style.fontSize='14px';
                title.style.padding='0 1em 0 .5em'; }
            let count=headerT.querySelector('#iineEntryHeader .tx_orageA');
            if(count){
                count.style.fontSize='14px';
                count.style.fontWeight='bold'; }
            if(!document.querySelector('#iineEntryHeader svg')){
                headerT.insertAdjacentHTML('beforebegin', svg_mark_d); }}}

    monitor2.observe(target2, {childList: true, subtree: true}); }



let target3=document.querySelector('body'); // 監視 target
let monitor3=new MutationObserver(checker);
monitor3.observe(target3, {childList: true, subtree: true, attributes: true}); // 監視開始

function checker(){
    let k;
    let user_li=[];
    let iine_tr=[];
    let user_href=[];
    let user_id=[];
    let user_src=[];

    if(document.querySelector('#iineEntry')){ // 管理トップ
        user_li=document.querySelectorAll('#iineEntoryContents li');
        if(user_li.length !=0 && edit_mode==1){
            for(k=0; k<user_li.length; k++){
                let n=k;
                if(user_li[n].querySelector('a')){
                    user_href[n]=user_li[n].querySelector('a').getAttribute('href');
                    user_src[n]=user_li[n].querySelector('img').getAttribute('src');
                    user_li[n].onclick=function(event){ // リストのクリックで設定
                        event.preventDefault(); // クリックしてもリンク先に飛ばない
                        local_backup(n); }}}

            function local_backup(n){
                if(block_regex_id.test(user_href[n])!=true){ // 登録無い場合は登録
                    user_id[n]=user_href[n].replace('https://ameblo.jp/', '');
                    user_src[n]=
                        user_src[n].replace('https://stat.profile.ameba.jp/profile_images/', '');
                    iine_block_data.push([user_id[n], user_src[n]]);
                    let write_json=JSON.stringify(iine_block_data);
                    localStorage.setItem('iine_id_back', write_json); }

                else if(block_regex_id.test(user_href[n])==true){ // 登録あれば登録削除
                    user_id[n]=user_href[n].replace('https://ameblo.jp/', '');
                    iine_block_data.splice(iine_block_id.indexOf(user_id[n]), 1);
                    let write_json=JSON.stringify(iine_block_data);
                    localStorage.setItem('iine_id_back', write_json); }

                reg_set();
                blocker_dia();
                blocker(); }}}

    if(document.querySelector('#iineHistoryEntryFrame')){ // 履歴 タブ1
        user_li=document.querySelectorAll('#iineEntryContents li');
        if(user_li.length !=0 && edit_mode==1){
            for(k=0; k<user_li.length; k++){
                let n=k;
                if(user_li[n].querySelector('a')){
                    user_href[n]=user_li[n].querySelector('a').getAttribute('href');
                    user_src[n]=user_li[n].querySelector('img').getAttribute('src');
                    user_li[n].onclick=function(event){ // リストのクリックで設定
                        event.preventDefault(); // クリックしてもリンク先に飛ばない
                        local_backup(n); }}}

            function local_backup(n){
                if(block_regex_id.test(user_href[n])!=true){ // 登録無い場合は登録
                    user_id[n]=user_href[n].replace('https://ameblo.jp/', '');
                    user_id[n]=user_id[n].replace(/\//g, '');
                    user_src[n]=
                        user_src[n].replace('https://stat.profile.ameba.jp/profile_images/', '');
                    user_src[n]=user_src[n].replace(/\?cpc=100/g, '');
                    iine_block_data.push([user_id[n], user_src[n]]);
                    let write_json=JSON.stringify(iine_block_data);
                    localStorage.setItem('iine_id_back', write_json); }

                else if(block_regex_id.test(user_href[n])==true){ // 登録あれば登録削除
                    user_id[n]=user_href[n].replace('https://ameblo.jp/', '');
                    user_id[n]=user_id[n].replace(/\//g, '');
                    iine_block_data.splice(iine_block_id.indexOf(user_id[n]), 1);
                    let write_json=JSON.stringify(iine_block_data);
                    localStorage.setItem('iine_id_back', write_json); }

                reg_set();
                blocker_dia();
                blocker(); }}}

    if(document.querySelector('#iineHistoryUserFrame')){ // 履歴 タブ2
        iine_tr=document.querySelectorAll('#iineHistoryUserFrame tr');
        for(k=1; k<iine_tr.length; k++){
            let n=k;

            let user_icon_link=iine_tr[n].querySelector('.list_img');
            let user_link=iine_tr[n].querySelector('.heading a');
            if(user_link && edit_mode==0){
                user_icon_link.style.pointerEvents='auto';
                user_link.style.pointerEvents='auto'; }
            if(user_link && edit_mode==1){
                user_icon_link.style.pointerEvents='none';
                user_link.style.pointerEvents='none'; }

            iine_tr[n].onclick=function(){
                local_backup(n); }}

        function local_backup(n){
            let user_link=iine_tr[n].querySelector('.heading a');
            if(user_link && edit_mode==1){
                user_href[n]=user_link.getAttribute('href');
                user_src[n]=iine_tr[n].querySelector('.list_img img').getAttribute('src');
                if(block_regex_id.test(user_href[n])!=true){ // 登録がなければ登録
                    user_id[n]=user_href[n].replace('https://ameblo.jp/', '');
                    user_id[n]=user_id[n].replace(/\//g, '');
                    user_src[n]=
                        user_src[n].replace('https://stat.profile.ameba.jp/profile_images/', '');
                    user_src[n]=user_src[n].replace(/\?cpc=100/g, '');
                    iine_block_data.push([user_id[n], user_src[n]]);
                    let write_json=JSON.stringify(iine_block_data);
                    localStorage.setItem('iine_id_back', write_json); }

                else if(block_regex_id.test(user_href[n])==true){ // 登録があれば登録削除
                    user_id[n]=user_href[n].replace('https://ameblo.jp/', '');
                    user_id[n]=user_id[n].replace(/\//g, '');
                    iine_block_data.splice(iine_block_id.indexOf(user_id[n]), 1);
                    let write_json=JSON.stringify(iine_block_data);
                    localStorage.setItem('iine_id_back', write_json); }

                reg_set();
                blocker(); }}}
} // checker()



function file_backup(){
    let css=
        '#imute_dia { position: absolute; top: -35px; height: 36px; width: 100%; '+
        'box-sizing: border-box; border: 1px solid #e2e2e2; background: #e2eef0; } '+
        '#button1 { padding: 2px 8px 0; margin: 4px 30px; } '+
        '#button_add { margin: 0 5px 0 40px; } '+
        '#button_add_label { vertical-align: -1px; } '+
        '#button2 { margin: 4px 0 0 10px; vertical-align: 1px; width: 320px; } '+
        '#button3 { padding: 2px 6px 0; margin: 4px 0 0 50px; } ';

    if(ua==1){
        css+=
            '#button1 { padding: 0 8px; margin: 4px 30px; } '+
            '#button2 { margin: 4px 0 0 10px; width: 320px; } '+
            '#button3 { padding: 0 6px; margin: 4px 0 0 50px; } '; }

    if(document.querySelector('#iineEntry')){ ; } // 管理トップ
    if(document.querySelector('#iineHistoryEntryFrame')){ // 履歴 タブ1
        css+='#imute_dia { top: -78px; left: 0; } '; }

    let inert_inn=
        '<input id="button1" type="submit" value="排除リストを保存する">'+
        '<input id="button_add" type="checkbox">'+
        '<span id="button_add_label">差分追加</span>'+
        '<input id="button2" type="file" value="排除リストを保存する">'+
        '<input id="button3" type="submit" value="✖ 閉じる">'+
        '<style id="iine_style"></style>';

    let insert_dialog;
    insert_dialog=document.createElement('div');
    insert_dialog.setAttribute('id', 'imute_dia');
    insert_dialog.innerHTML=inert_inn;

    if(document.querySelector('#iineEntry')){ // 管理トップ
        let imute=document.querySelector('#imute_dia');
        if(!imute){
            document.querySelector('#iine').appendChild(insert_dialog);
            document.querySelector('#iine_style').innerHTML=css; }}

    if(document.querySelector('#iineHistoryEntryFrame')){ // 履歴 タブ1
        let imute=document.querySelector('#imute_dia');
        if(!imute){
            document.querySelector('#iineHistoryEntryFrame').appendChild(insert_dialog);
            document.querySelector('#iine_style').innerHTML=css; }}


    let button1=document.querySelector('#button1');
    button1.onclick=function(){
        let write_json=JSON.stringify(iine_block_data);
        let blob=new Blob([write_json], {type: 'application/json'});
        let a_elem=document.createElement('a');
        a_elem.href=URL.createObjectURL(blob);
        a_elem.download='iine_mute.json'; // 保存ファイル名
        if(ua==1){
            a_elem.target='_blank';
            document.body.appendChild(a_elem); }
        a_elem.click();
        if(ua==1){
            document.body.removeChild(a_elem); }
        URL.revokeObjectURL(a_elem.href); }

    let button_add=document.querySelector('#button_add');
    button_add.checked=true;

    let button2=document.querySelector('#button2');
    button2.addEventListener("change" , function(){
        if(!(button2.value)) return; // ファイルが選択されない場合
        let file_list=button2.files;
        if(!file_list) return; // ファイルリストが選択されない場合
        let file=file_list[0];
        if(!file) return; // ファイルが無い場合

        let file_reader=new FileReader();
        file_reader.readAsText(file);
        file_reader.onload=function(){
            if(file_reader.result.slice(0, 15)=='[["tmp1","img1"'){ // iine_mute.jsonの確認
                let data_in=JSON.parse(file_reader.result);

                if(button_add.checked==true){ // 差分追加処理
                    for(let k=0; k<data_in.length; k++){
                        if(block_regex_id.test(data_in[k][0])!=true){ // ID未出なら追加
                            iine_block_data.push([data_in[k][0], data_in[k][1]]); }
                        else if(block_regex_id.test(data_in[k][0])==true){ // ID既出の場合
                            for(let s=0; s<iine_block_data.length; s++){
                                if(iine_block_data[s][0]==data_in[k][0]){
                                    if(iine_block_data[s][1]!=data_in[k][1]){ // imgのSRCが異なる
                                        if(Number(iine_block_data[s][1].slice(0, 8))
                                           <Number(data_in[k][1].slice(0, 8))){
                                            iine_block_data[s][1]=data_in[k][1]; }}}}}}}
                else{
                    iine_block_data=data_in; } // 読込み上書き処理
                let write_json=JSON.stringify(iine_block_data);
                localStorage.setItem('iine_id_back', write_json); // ローカルストレージ 保存名
                reg_set();
                blocker(); }}; });

    let button3=document.querySelector('#button3');
    button3.onclick=function(){
        insert_dialog.remove(); }
} // file_backup()



function file_backup_end(){
    let imute=document.querySelector('#imute_dia');
    if(imute){
        imute.remove(); }}



function find_user(){
    let k;
    let iine_span=[];
    let iineImg=[];
    let Img_src=[];

    let list_frame=document.querySelector('#iineHistoryContent');
    if(list_frame && edit_mode==2){
        let f_panel=document.createElement('div');
        f_panel.setAttribute('id', 'f_panel');

        f_panel.innerHTML=
            '<input id="set_user" type="text" placeholder="検索するアイコン画像のSRCを入力">'+
            '<input id="clear" type="submit" value="✖">'+
            '<input id="find_img" type="submit" value="ユーザー検索">';

        if(!list_frame.querySelector('#f_panel')){
            list_frame.appendChild(f_panel); }

        let css=
            '#f_panel { position: absolute; top: -80px; left: 0; width: 100%; display: flex; '+
            'padding: 4px 0; background: #fff; } '+
            '#set_user { width: 100%; padding: 3px 30px 1px 10px; background: #e4f7fa; '+
            'font: 16px Meiryo; border: 1px solid #666; border-radius: 3px; } '+
            '#set_user::placeholder { font-size: 15px; color: #666; } '+
            '#clear { width: 32px; margin: 1px 12px 1px -28px; padding: 2px 0 0; '+
            'border: none; background: none; font: 16px Meiryo; } '+
            '#clear:hover { text-shadow: 0 0 1px #fff; filter: invert(2); } '+
            '#find_img { width: auto; padding: 3px 8px 1px; font: bold 14px Meiryo; } '+
            '.userImg img, .iineProfImg img, .list_img img { outline-offset: -3px; } '+
            '.iineProfImg img  { height: 38px; width: 38px; object-fit: cover; } '+
            '.list_img img { height: 40px; width: 40px; object-fit: cover; } '+
            '.iineSetting { margin-bottom: 15px; }';
        let style_tag=document.createElement("style"); // css設定styleタグ
        style_tag.setAttribute('id', 'bim2');
        style_tag.textContent=css;
        if(!list_frame.querySelector('#bim2')){
            list_frame.appendChild(style_tag); }

        let set_user=document.querySelector('#set_user');
        let clear=document.querySelector('#clear');
        let find_img=document.querySelector('#find_img');

        set_user.value=find_img_src;

        clear.onclick=function(){
            set_user.value='';
            find_img_src='';
            blue_user(); }

        find_img.onclick=function(){
            if(set_user.value!=''){
                let src=set_user.value;
                src=src.replace(/https:\/\/stat\.profile\.ameba\.jp\/profile_images\//, '');
                src=src.replace(/\?.*$/, '');
                set_user.value=src;
                find_img_src=src;
                blue_user(); }}
    }
} // find_user()



function blue_user(){
    let k;
    let iineImg=[];
    let Img_src=[];

    iineImg=document.querySelectorAll('img');
    for(k=0; k<iineImg.length; k++){ // ユーザーアイコンのマスク
        Img_src[k]=iineImg[k].getAttribute('src');
        if(find_img_src!=''){
            if(Img_src[k].indexOf(find_img_src)!=-1){
                if(edit_mode==2){
                    iineImg[k].style.outline='3px solid #fff';
                    iineImg[k].style.boxShadow='0 0 0 4px #2196f3'; }
                else{
                    iineImg[k].style.outline='none';
                    iineImg[k].style.boxShadow='none'; }}
            else{
                iineImg[k].style.outline='none';
                iineImg[k].style.boxShadow='none'; }}
        if(find_img_src==''){
            iineImg[k].style.outline='none';
            iineImg[k].style.boxShadow='none'; }}}



function blue_user_dia(){
    let k;
    let iineImg=[];
    let Img_src=[];

    if(find_img_src!=''){
        iineImg=document.querySelectorAll('.iineProfImg img');
        for(k=0; k<iineImg.length; k++){ // ダイアログのアイコンのマーク
            Img_src[k]=iineImg[k].getAttribute('src');
            if(Img_src[k].indexOf(find_img_src)!=-1){
                if(edit_mode==2){
                    iineImg[k].style.outline='3px solid #fff';
                    iineImg[k].style.boxShadow='0 0 0 4px #2196f3'; }
                else{
                    iineImg[k].style.outline='none';
                    iineImg[k].style.boxShadow='none'; }}
            else{
                iineImg[k].style.outline='none';
                iineImg[k].style.boxShadow='none'; }}}}



function find_user_end(){
    let f_panel=document.querySelector('#f_panel');
    if(f_panel){
        f_panel.remove(); }}



function get_src(){
    let css=
        'position: absolute; z-index: 10000; font: normal 16px Meiryo; '+
        'text-shadow: #fff 1px 1px 0, #fff 1px -1px 0, #fff -1px 1px 0, #fff -1px -1px 0; '+
        'cursor: default; display: none;';
    let menu=document.createElement('div');
    menu.setAttribute('id', 'img_menu');
    menu.setAttribute('style', css);
    if(!document.getElementById('img_menu')){
        document.querySelector('body').appendChild(menu); }

    let icon_img=[];
    icon_img=document.querySelectorAll('img');
    for(let k=0; k<icon_img.length; k++){
        icon_img[k].addEventListener('click', function(event){
            img_mark(k); }); }

    function img_mark(k){
        if(edit_mode==2){
            event.preventDefault();
            event.stopImmediatePropagation();

            let menu=document.querySelector('#img_menu');
            let icon_src=icon_img[k].getAttribute('src');

            if(icon_src.indexOf('profile_images')!=-1){
                if(navigator.clipboard){
                    navigator.clipboard.writeText(icon_src); }

                let set_user=document.querySelector('#set_user');
                if(set_user){
                    set_user.value=icon_src; }

                menu.textContent='⭕';
                menu.style.display="block";
                menu.style.left=(event.pageX-12) +"px";
                menu.style.top=(event.pageY-30) +"px";
                menu.style.filter='hue-rotate(-150deg) brightness(2)';
                setTimeout(()=>{
                    menu.style.display="none";
                }, 2000); }
            else{
                menu.textContent='❌';
                menu.style.display="block";
                menu.style.left=(event.pageX-12) +"px";
                menu.style.top=(event.pageY-30) +"px";
                menu.style.filter='hue-rotate(-150deg) brightness(2)';
                setTimeout(()=>{
                    menu.style.display="none";
                }, 2000); }
        }}



    document.body.addEventListener('click', function(event){
        let menu=document.querySelector('#img_menu');
        if(menu){
            menu.style.display="none"; }}); // 画像以外の場所のクリックでマークを消す

} // get_src()


 

 

 

「Bad Iine Mute」最新版について 

旧いバージョンの「Bad Iine Mute」「Bad Iine Mute BlogPage」は、アメーバのページ構成の変更で動作しない場合があります。 また新しいバージョンほど改善を重ねているので、もし導入されるなら最新のバージョンをお勧めします。 最新バージョンへのリンクは、以下のページのリンクリストから探せます。