新しい「Every Page Closer 💢」

今月に PC版の「一括下書き化」の機能がリリースされました。「記事の編集・削除」の 1ページ 20件が瞬時に「下書き」に変更できるので、ブログ全体や一定範囲の記事の仮閉鎖(クローズ処理)がとても楽になりました。

 

これまでの「Every Page Closer 💢」はもはや不要となりましたが、今回提供された「一括下書き化」機能の不備な部分があり、これを補助的に改善する形でリニュアルしました。

 

デフォルトの機能は、処理後にページ表示が更新されず、実際に「下書き」に変更されたかが判りません。 そのため、毎回リロードして確認する必要があります。 この問題を改善すると、大変使い易くなりました。 

 

他の改善点

 

◎ ページの初期表示で全件にチェックを入れた状態にする機能を追加し、大量処理時の煩わしさを軽減しました。

 

◎「アメンバー公開」の記事を「下書きにする・しない」を選択可能にしました。

 

◎ スクロールなしでリスト全体を確認できるコンパクトなデザインにアレンジ。

 

最初は必要がないかに思えたツールでしたが、ブログのクローズ処理に不可欠なツールになりました。

 

 

 

「Every Page Closer 💢」の機能と操作方法 

下は「Every Page Closer 💢」の処理画面の様子です。

 

 

下は上部に表示される簡単なコンソールです。

 

 

クローズ処理の実行ボタンです。 

 

処理は「記事の編集・削除」の 1ページごとに行います。 このボタンで、デフォルトの「一括下書き化」の処理が実行されます。 デフォルトでは、「下書き」に変更されたかどうかが判らない事が多いのですが、このツール自体で処理後のリロードを行うので、処理結果がリストの表示で確認できます。

 

ページの初期表示の「チェック入り」「チェック無し」を指定するボタン。

 

▪「✅ 全件チェック」は、記事の左端のチェックボタンにチェックが入ります。 大量に「下書き化」の処理をする場合は、チェック入りにすると手間が省けます。

 

▪「⬜ 全件チェック」は、チェックが入らない状態でページが開きます。 ページごとに手作業でチェックを入れて処理する場合は、こちらが楽な場合もあります。

 

「✅ 全件チェック」を選択した場合に、「アメンバー公開」の記事にもチェックを入れて「下書き」に変更するか、「アメンバー公開」のままにするかの選択です。

 

 

❷ ❸ で選択した設定は、次に変更するまで保持されます。

 

 

処理の最初にだけ説明を表示 

のボタンを押して最初の「下書き化」を実行する時に、下の説明を表示します。

「一括下書き化」の処理を行う前に、「Every Page Snap 💢」を使って全記事の「公開設定」を記録する様に勧める内容です。

 

 

「OK」を押すと、クローズ処理が実行されます。「Snap」を収集する場合は「キャンセル」を押します。 このページでのクローズ処理を中止できます。

 

 

 

「Every Page Closer 💢」の利用上の注意 

▪「Every Page Closer 💢」を「ON」にする際、「記事の編集・削除」で動作する他のスクリプトツールがある場合は、それらを「OFF」にしてください。 これを怠ると、ツールが正常に動作しない場合があります。 また「Every Page」シリーズのツールを同時に「ON」にすると、やはり互いに正常な動作になりません。

 

▪「Every Page Closer 💢」でクローズ処理をした記事群を、後日に元の状態に公開するためには、その記事群に関する「Snap」データが必要です。 データが無い場合は「Every Page Snap 💢」を使用してデータを収集してください。「Snap」データの収集は、通常はブログ全記事で行いますが、10分程度で済みます。

 

▪クローズ処理をした記事群を公開状態に復元するには「Every Page Opener 💢」を使用します。「Snap」データは、再公開する処理で使用されます。

 

▪クローズ処理は比較的短時間で処理が可能ですが、公開状態を復元する処理は、1記事につき10sec程度の時間が必要です。 その事を理解した上で、クローズ操作を実行してください。

 

▪このツールが起動すると「記事の編集・削除」のページデザインが変わります。 処理画面から出られなくなるので、処理を終了するには、そのウインドウを閉じます。

 

▪「Every Page Closer 💢」の処理が終了したら、「Tampermonkey」上で必ずこのツールを「OFF」にしてください。

 

 

 

「Every Page Closer 💢」を利用するには

このツールは Chrome / Edge / Firefox版の拡張機能「Tampermonkey」上で動作します。 以下に、このツールの導入手順を簡単に説明します。

 

❶「Tampermonkey」を導入します

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

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

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

 

 

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

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

 

 

 

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

 

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

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

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

 

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

 

 

〔 Every Page Closer 💢 〕 ver. 2.7

 

// ==UserScript==
// @name         Every Page Closer 💢
// @namespace  http://tampermonkey.net/
// @version       2.7
// @description  「記事の編集・削除」ページで全記事を「下書き」に変更する
// @author        Ameba Blog User
// @match        https://blog.ameba.jp/ucs/entry/srventrylist*
// @match        https://blog.ameba.jp/ucs/entry/srventryupdate*
// @run-at        document-start
// @grant         none
// ==/UserScript==


let retry=0;
let interval=setInterval(wait_target, 1);
function wait_target(){
    retry++;
    if(retry>100){ // リトライ制限 100回 0.1secまで
        clearInterval(interval); }
    let target=document.documentElement; // 監視 target
    if(target){
        clearInterval(interval);
        style_in(); }}

function style_in(){
    let style=
        '<style id="EPC">'+
        '.include-ex-linkBtn, .save-browserPush, .save-hashtag-module, .adcrossBanner{ display: none; } '+
        '#globalHeader, #ucsHeader, #ucsMainLeft h1, .l-ucs-sidemenu-area, #ucsMainRight,'+
        '#entryList dl, #footerAd, #globalFooter, .checkboxAllControl { display: none !important; } '+

        '#ucsContent { width: 840px; background: #fff; box-shadow: 0 0 0 100vh #c5d8e1; '+
        'border-radius: 0; } '+
        '#ucsContent::before { content: unset; } '+
        '#ucsMain { margin-top: 15px; background: #fff; border-radius: 0; } '+
        '#ucsMainLeft { width: 838px; padding: 0 15px; float: none; } '+

        '#entryYear { margin: 0 5px; }'+
        '#entryMonth { font-size: 14px; overflow: visible; margin-top: 3px }'+
        '#entryMonth li, #entryMonth #nowMonthLi { font-weight: bold; padding: 2px 10px 0; }'+
        '#entryMonth li a:visited { color: #3970B5; }'+
        '#nowMonth { padding: 1px 6px 0; border: none; border-radius: 1px; '+
        'color: #000; box-shadow: 0 0 0 2px #0066cc; }'+

        '#entryListEdit form { display: flex; flex-direction: column } #entrySort { order: -2 }'+
        '.pagingArea { order: -1; padding: 4px; margin-bottom: -33px; background: #ddedf3 !important }'+
        '.pagingArea a { border: 1px solid #888 } .pagingArea .active{ border: 2px solid #0066cc }'+
        '.pagingArea a, .pagingArea .active, .pagingArea .disabled { font-size: 14px; line-height: 23px }'+
        '#sorting { margin: 38px 0 4px; padding: 4px 10px; height: 40px; '+
        'font: 14px Meiryo; background: #ddedf3 }'+
        '#sorting select, #sorting ul { display: none }'+
        'input { font-family: meiryo; font-size: 14px }'+

        '#entryList li{ height: 24px; padding: 8px 5px 5px !important }'+
        '#entryList li:hover{ background-color: #e2eef0 }'+
        '#entryList li .entry-column { padding: 0; }'+

        '#entryList .leftCol, #entryList .titleCol h2{ width: 560px; line-height: 24px; }'+
        '#entryList .leftCol a { text-decoration: none !important; color: #3970b5 !important; }'+
        '#entryList .rightCol { flex-direction: row; align-items: center; width: 260px !important; '+
        'min-width: unset; margin: 0; }'+

        '#entryList .txtCol{ white-space: nowrap; font-size: 13px; margin-bottom: 2px; line-height: 16px }'+
        '#entryList .txtCol .date{ display: inline-block; padding: 2px 4px 0; font-size: 13px; color: #000; }'+

        '#entryList .deleteCol { margin: -3px 0 0 5px }'+
        '.deleteCol a:nth-child(2), .deleteCol a:nth-child(3) { display: none !important; }'+
        '.deleteCol a { padding: 2px 5px 0; width: 50px; font-size: 14px; text-decoration: none !important; '+
        'border: 1px solid #aaa; border-radius: 4px; background: linear-gradient(0deg, #eee, #fff); }'+

        '#entryList .status-text { display: inline-block; font-weight: normal; color: #000; '+
        'width: 64px; padding: 2px 4px 0; overflow: hidden; margin-bottom: -4px; }'+
        '#entryList ul input[value="1"] + input + li .txtCol span:first-child{ display: inline-block;'+
        'text-indent: 12px; color: #fff; background: #2196f3 !important }'+
        '#entryList ul input[value="2"] + input + li .txtCol span:first-child{ display: inline-block;'+
        'text-indent: 2px; color: #fff; background: #009688 !important }'+

        '.selection-bar { display: none !important; } '+
        '.entry-item .checkbox-column { display: block; } '+

        '#start_button { padding: 2px 8px 0; margin: 6px 15px; width: 200px } '+
        '#all_button {padding: 2px 8px 0; margin: 6px 0 6px 120px; width: 135px } '+
        '#am_button {padding: 2px 8px 0; margin: 6px 15px; width: 250px; float: right } '+
        '</style>';

    if(!document.querySelector('#EPO')){
        document.documentElement.insertAdjacentHTML('beforeend', style); }

} // style_in()




window.addEventListener('load', function(){
    let auto_check; // チェック自動記入のフラグ
    let amember; // アメンバー処理の有無のフラグ

    auto_check=localStorage.getItem('blogDB_mode_check'); // ローカルストレージ
    if(!auto_check){
        auto_check=0; }
    localStorage.setItem('blogDB_mode_check', auto_check); // ローカルストレージ保存

    amember=localStorage.getItem('blogDB_mode_am'); // ローカルストレージ
    if(!amember){
        amember=0; }
    localStorage.setItem('blogDB_mode_am', amember); // ローカルストレージ保存


    let mode_arr=[]; // mode_arr[0]自動リロードのフラグ、mode_arr[1]初回処理のフラグ

    let read_json=sessionStorage.getItem('blogDB_mode'); // セッションストレージ 保存
    mode_arr=JSON.parse(read_json);
    if(!mode_arr || mode_arr.length!=3){
        mode_arr=[0, 0, 0]; }


    if(mode_arr[0]==1){ // 変更処理後の自動ロード後の場合
        mode_arr[0]=0; // リセット
        let write_json=JSON.stringify(mode_arr);
        sessionStorage.setItem('blogDB_mode', write_json); //  // セッションストレージ保存
        setTimeout(()=>{
            location.reload(false); }, 200 ); }// ツールから再リロードする
    else{
        main(mode_arr, auto_check, amember); }

})




function main(mode_arr, auto_check, amember){

    check();

    function check(){
        let spui=document.querySelectorAll('.spui-Checkbox-input');
        for(let k=1; k<spui.length; k++){
            set_check(spui[k]); }

        function set_check(sp){
            if(auto_check==0){
                let publish=sp.getAttribute('data-entry-publish');
                if(publish=='0' || publish=='1'){
                    sp.checked=true; }
                else if(publish=='2'){
                    if(amember==0){
                        sp.checked=true; }
                    else{
                        sp.checked=false; }}}
            else{
                sp.checked=false; }}

    } // check()



    let panel=
        '<input id="start_button" type="submit" value="▼ クローズ処理を実行">'+
        '<input id="all_button" type="submit">'+
        '<input id="am_button" type="submit">';

    if(document.querySelector('#sorting') && !document.querySelector('#start_button')){
        document.querySelector('#sorting').insertAdjacentHTML('beforeend', panel); }



    let button1=document.querySelector('#start_button');
    button1.onclick=function(e){
        e.preventDefault();
        if(mode_arr[1]==0){ // 最初の起動直後の場合
            start_select(); }
        else{
            open_win(); }} // 作業実行



    function start_select(){
        let entry_target=document.querySelectorAll('.deleteCol');
        if(entry_target.length==0 || entry_target==null){ // 編集対象がリストに無い場合
            alert('このページに編集対象の記事がありません'); }
        if(entry_target.length >0){ // 編集対象がリストに有る場合
            let conf_str=['⛔  このページで 「下書き」への一括変更処理を実行します。\n',
                          '\n   Every Page Closer 💢 の実行前に Every Page Snap 💢',
                          '\n   を実行して、全ての記事の 「公開設定」 を記録してください。',
                          '\n   「公開設定」 のSNAP記録が無いと 「アメンバー限定公開」 と',
                          '\n   「全員に公開」 の区別がなくなり 公開処理が困難になります。\n',
                          '\n      OK を押すと 「クローズ処理」 を開始します。'].join('');
            let ok=confirm(conf_str);
            if(ok){
                open_win(); }}}



    let button2=document.querySelector('#all_button');
    if(auto_check==0){
        button2.value='✅  全件チェック'; }
    else{
        button2.value='⬜  全件チェック'; }

    button2.onclick=function(e){
        e.preventDefault();
        if(auto_check==0){
            auto_check=1;
            button2.value='⬜  全件チェック'; }
        else{
            auto_check=0;
            button2.value='✅  全件チェック'; }
        localStorage.setItem('blogDB_mode_check', auto_check); // ローカルストレージ保存

        check(); }



    let button3=document.querySelector('#am_button');
    if(amember==0){
        button3.value='🔽  アメンバー記事もクローズする'; }
    else if(amember==1){
        button3.value='⬜  アメンバー記事は処理をしない'; }

    button3.onclick=function(e){
        e.preventDefault();
        if(amember==0){
            amember=1;
            button3.value='⬜  アメンバー記事は処理をしない'; }
        else if(amember==1){
            amember=0;
            button3.value='🔽  アメンバー記事もクローズする'; }
        localStorage.setItem('blogDB_mode_am', amember); // ローカルストレージ保存

        check(); }



    function open_win(){
        let convert=document.querySelector('#js-convert-to-draft-button-convert');
        if(convert){
            mode_arr[0]=1; // 書換処理を実行
            mode_arr[1]=1; // 初回の実行以降
            let write_json=JSON.stringify(mode_arr);
            sessionStorage.setItem('blogDB_mode', write_json); // セッションストレージ 保存

            convert.click(); }}

} // main()


 

〔追記〕2023.02.28

アメーバ管理ヘッダーの変更に対応して、スタイルコードの一部を更新しました。

上記コードは Every Page Closer  ver. 2.5 ➔ ver. 2.6 としています。

 

〔追記〕 2023.06.10

Chromeにおける「overflow: overlay」の無効化に即し、上記コードの該当箇所を修正しました。 これにより、ver.2.6 ➔ ver.2.7 に更新しています。

 

 

 

「Every Page Closer 💢」最新版について 

旧いバージョンの JavaScriptツールは、アメーバのページ構成の変更で動作しない場合があり、導入する場合は最新バージョンをお勧めします。

 

●「Every Page Closer 💢」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。