コード掲載をするアメーバブログは少ないが 

「JavaScript」「CSS」「HTML」等のコードをブログ記事上に掲載するには、「preタグ」が一般的に使われます。 これはアメーバの「禁止タグ」には含まれず、私自身も昔から使って来ました。

 

その掲載コードが短い場合は、通常のテキストと同様の方法でコピーが出来ます。 しかし、コードが長くなるに従って操作は困難になり、コード全体の正確な取得が怪しくなります。

 

ウェブページ上でコードを掲載するサイトでは、コード掲載用のプラグインを使って掲載しているのを良く見かけます。 プラグインを使う目的のひとつは、「コードをコピーするボタン」が、着いて来るからでしょう。

 

しかし、アメーバブログではそういったプラグインは使えません。 そこで以下の機能をサイドバーに用意して、コードのコピーを出来る様にしています。

 

〔コピー方法〕 右サイドバーの   マークのボタンを1度押してください。
コード枠内の右クリック ➔ コード全体の選択 ➔ コピー操作 が可能になります。

 

これは、本文中に「JavaScript」を記述出来ない(禁止タグ)ので、フリースペースを使って、なんとかその代用としたものです。 しかし本当は、掲載コードの枠側近に「コピーボタン」を置きたいのです。

 

 

 

 「Tampermonkey」を使ったユーザーだけに可能

どんなユーザーにも、掲載コードの簡単なコピー手段を提供したいので、先の様な工夫をしていますが、「Tampermonkey」で、掲載コードのコピー専用ツールを常駐させれば、「コピーボタン」を生成する事は簡単です。

 

これは、比較的多い頻度で「掲載コードのコピー」をするユーザー用のツールで、一般的ではありません。 私自身も、長く作らずに済ませて来たツールです。^^;

 

でも、先月末の大量のコード修正時に、やはりあれば便利かと思ったので、今回初めて作ってみました。 誰かの何かの参考になるかも知れないので、紹介します。

 

 

 

 「PreBox Button」の操作と仕様について

編集画面で動作する「PreBox Tools ⭐」は、「pre枠」を編集画面で扱うのに必要不可欠のツールです。 ブログページで動作するこのツールも「PreBox」に関連させて、プログラム名を「PreBox Button」としました。

 

このツールは常駐型ですが、プログラムコードを扱わない人には不要なツールです。 デフォルトはアメーバのブログページ画面でのみ動作する設定ですが、「@match」パラメータの追加で、他のウエブページでも機能するかも知れません。

 

 

● ブログページ上の「pre枠」に「コピーボタン」を表示します。

 

 

 

●「Copy code  」ボタン「左Click」すると、pre枠内のコードがクリップボードにコピーされます。

 

▪ コピーされた事を示すために、一瞬だけボタンの表示が「Copied」になります。

 

▪ このボタンは、それが着いた枠のコードのみをコピー指定するものです。

 

 

 

「PreBox Button」を利用するには

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

 

❶「Tampermonkey」を導入します

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

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

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

 

 

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

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

 

 

 

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

 

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

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

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

 

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

 

 

〔 PreBox Button 〕 ver. 0.1

 

// ==UserScript==
// @name         PreBox Button
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  ブログ記事掲載のコードをコピーする
// @author       Ameblo User
// @match        https://ameblo.jp/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=ameblo.jp
// @grant        none
// ==/UserScript==



main();

let target=document.querySelector('head');
let monitor=new MutationObserver(main);
monitor.observe(target, { childList: true });



function main(){
    let pre_box=document.querySelectorAll('pre');
    for(let k=0; k<pre_box.length; k++){
        get_copy(pre_box[k]); }}



function get_copy(pbx){
    let box=pbx.parentNode;
    box.style.position='relative';

    if(box.clientHeight>200){ // 高さ200px以上の PreBoxにのみ適用

        let SVG_cp=
            '<svg class="svg_cp" viewBox="0 0 16 16">'+
            '<path d="M0 6.8C0 5.8 .8 5 1.8 5h1.5a0.8 .8 0 0 1 0 1.5h-1.5a0.3 .3 0 0 '+
            '0-0.3 .3v7.5c0 .138.112.25.25.25h7.5a0.3 .3 0 0 0 0.3-0.3v-1.5a0.8 .8 0 '+
            '0 1 1.5 0v1.5A1.8 1.8 0 0 1 9.3 16h-7.5A1.8 1.8 0 0 1 0 14.3Z"></path>'+
            '<path d="M5 1.8C5 0.8 5.8 0 6.8 0h7.5C15.2 0 16 0.8 16 1.8v7.5A1.8 1.8 0'+
            ' 0 1 14.3 11h-7.5A1.8 1.8 0 0 1 5 9.3Zm1.8-0.3a0.3 .3 0 0 0-0.3 .3v7.5c0'+
            ' .138.112.25.25.25h7.5a0.3 .3 0 0 0 0.3-0.3v-7.5a0.3 .3 0 0 0-0.3-0.3Z">'+
            '</path></svg>';

        let sw=
            '<div class="pbop_sw">Copy code '+ SVG_cp +'</div>'+
            '<style>'+
            '.pbop_sw { font: normal 16px Meiryo; position: absolute; top: 4px; right: 6px; '+
            'padding: 3px 8px 1px; width: 108px; color: #333; border: 1px solid #aaa; '+
            'cursor: pointer; } '+
            '.pbop_sw:hover { background: #eee; } '+
            '.svg_cp { width: 20px; height: 16px; vertical-align: -2px; fill="#666"; }'+
            '</style>';

        if(!box.querySelector('.pbop_sw')){
            box.insertAdjacentHTML('beforeend', sw); }

        let prebox_sw=box.querySelector('.pbop_sw')
        if(prebox_sw){
            prebox_sw.onclick=function(){
                if (navigator.clipboard){
                    navigator.clipboard.writeText(pbx.textContent)
                        .then( function(){
                        prebox_sw.textContent='Copied';
                        setTimeout(()=>{
                            prebox_sw.innerHTML='Copy code '+ SVG_cp;
                        }, 800 ); })}}}
    }

} // get_copy()





 

 

 

「PreBox Button」最新版について 

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

 

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