表作成のスクリプトは思ったより簡単 

人様のコードを参考にしたからですが、想像以上に苦労もなく「table要素」を構成する事が出来ました。 要素を生成するエンジン部のコードは以下です。

(実際のコードを要約したものです)

 

let rows=[]; // 表のデータ配列
let row; // 行数
let col; // 列数
let header_color; // headerのカラーコード
let cell_color; // header以外のカラーコード

let table=iframe_doc.createElement("table");
for(let i=0; i<row; i++){
    rows.push(table.insertRow(-1)); // 行の追加

    for(let j=0; j<col; j++){
        let cell=rows[i].insertCell(-1);
        cell.style.padding='.2em .6em 0'; //「td」の修飾はここで行う
        cell.appendChild(document.createTextNode("")); // 列の追加
        if(i==0){
            cell.style.backgroundColor=header_color; } // header背景色
        else{
            cell.style.backgroundColor=cell_color; }}} // 他の背景色

 

この生成エンジンをコントロールするコードを作る事が主要な作業になりましたが、作成される「table表」のブログ上での実用性を考えました。 アメブロを見渡しても、表を記事に掲載している方を滅多に見ません。 これは表をブログ記事上に作成する事の困難さにも原因があり、この敷居が無くなれば違ってくると考えています。

 

この「Blog Table ⭐」を使うと、表の枠組み作成が動画を貼り付ける様な簡単な作業になります。 また、1行1列の「table表」は囲み飾り枠に使え、枠線幅を「0」にすると区画の背景色付けとして利用する事も出来ます。

 

 

 

「Blog Table ⭐」の操作方法と仕様 

「Blog Table ⭐」は常駐させても良いですが、「Tampermonkey」に登録しておき、必要な時だけ編集を始める前に「ON」とする使い方が自然でしょう。

 

ツールが「ON」の場合、「Ctrl + F1」のショートカットで「Blog Table ⭐」が起動します。 ただし「通常表示」の編集枠内にカーソルがある事が起動の条件です。 それは、このツールがカーソル位置に「table表」を埋め込む仕様だからです。

 

「Ctrl + F1」で、記事タイトル枠上に「コントロールパネル」が表示されます。 また、もう一度「Ctrl + F1」を押すと、パネルが消えて作成設定がリセットされます。

 

以下は「コントロールパネル」の図で、各スイッチについて説明します。

 

 

基本の操作 

の各ボタンで「表の仕様」を指定し、最後に 「表作成」で表を埋込みます。 何度でも試作できるので、目的の枠組みのデザインを得る事が出来ます。

 

一旦作成した表のデザイン変更は可能ですが、簡単に変更できる範囲は少なくなります。 表中にデータを書き込んだ後からのデザイン変更は更に難しくなります。 表の枠組みの段階で、書き込むデータを予測して、無理のない表にしておくのがコツです。

 

なお、列数・列数を後から変更するのは、HTMLを書換える以外に不可能です。

 

〔追記〕2020.07

このツールの後期バージョン では、行・列の追加や、表設定の変更・コピー等に対応して、とても扱い易くなっています。

 

 

ボタンの詳細 

表の列数(横方向)を指定します。 設定可能な値は「1以上」です。

 

表の行数(縦方向)を指定します。 設定可能な値は「1以上」です。

  最上行だけは の「最上行背景色」の指定色になります。

  2行目以下は の「全体背景色」の指定色になります。

 

このボタンが ◁表▷ の表示の場合は、本文幅いっぱいに拡がる表になります。

反対に ▷表◁ の表示の場合は、表枠内の文字数に応じた幅になります。 表に実際に文字を書き込む事で、幅がそれに応じて拡張します。 このボタンは、クリックするごとに切り替わります。

 

下は、◁表▷ ボタンによる「table表」の性質の違いを説明したものです。

 

 

◁表▷ の場合は、列内の最大の文字数の比で、各列の幅がバランスします。 これに対して、▷表◁ の表は、列内の最大の文字数が各列の幅を決めます。 列ごとの文字の「左寄せ・中央寄せ・右寄せ」は、編集アイコンで指定・変更可能です。

 

 

枠線幅を「px単位」で指定し、初期値は「1」、設定可能な値は「-1以上」です。

 ▪「-1」の指定は 太さ「1px」の2重枠線になります。

 ▪「0」の指定は、枠線が表示されませんが、表の構造は残っています。

 

 

枠線色の入力枠です。「#456」「#ff00cc」等の 3文字・6文字指定のカラーコードを入力して「Enter」で決定します。 カラーコードが有効な場合は、この枠の右端の部分 に、指定した色が表示されます。

 

「文字背景色」のカラー設定を、表の ❺ ❽ ❿ の入力枠にコピー入力できます。 ツールが起動するとカラーアイコンの幅が拡がり、この機能が使い易くなります。

 

 ▪「文字背景色」アイコンの右側を押して、必要なカラーを設定します。 

 ▪ 設定したカラーがアイコン上に表示されますが、この部分をクリックします。

 ▪ カラーを設定する色設定入力枠 を「Ctrl + 左クリック」します。

 

 

 ▪「文字背景色」アイコンで設定したカラーが、❺ 入力枠に入力されます。

 ▪ 入力枠の「カラーコード」と 「色表示」の変化で、入力が確認できます。

 

この「文字背景色」アイコンの色設定機能は、「最上行背景色」「全体背景色」の入力枠でも使えます。 微妙な色設定が必要な場合は、「カスタム」カラー設定が使えます。

 

 

表全体の「文字サイズ」の指定です。 初期値は「16px」で「12px~32px」の間で選ぶことが出来ます。 これは、表全体の文字サイズを一律に指定しますが、「編集画面」の「文字サイズ」の設定機能で、表内の一部の文字サイズを変更できます。 また、「太字」「文字色」等の文字修飾や「改行」も、文中と同様に表内で可能です。

 

表の構成の設定が決まった段階で「表作成」を押します。 編集画面内のカーソル位置に「table表」が生成されます。 通常は行の左端にカーソルを置いて生成します。

 

「コントロールパネル」上の表の設定は、パネルを閉じるまでは維持されます。 パネルを閉じると、設定が初期化されるので注意してください。

 

 

table要素の中央配置 

「table要素」は編集アイコンの中央寄せを使っても、中央配置になりません。 幅が小さめの「表」を中央配置で表示したい場合は、 ▷表◁ で「table表」を作成します。 HTMLを表示すると、「tableタグ」には「width: auto;」が記入されています。

 

<table style="border-collapse: collapse; width: auto; font: 16px Meiryo;">

 

この場合は、ここに「margin: 0 auto;」を追加するだけで、中央配置になります。

 

また ◁表▷ で作成したが、結果として幅に余裕が出来た場合は、これを中央配置に変更する事が出来ます。  ◁表▷ で作成した「tableタグ」には「width: 100%;」が以下の様に書き込まれています。

 

<table style="border-collapse: collapse; width: 100%; font: 16px Meiryo;">

 

この「width: 100%;」を削除して、代わりに「width: auto; margin: 0 auto;」を記入します。

 

下は、この様なHTML編集で中央配置としたサンプルです。

 

  使用頻度 20以上 使用頻度 10以上 使用頻度 10以下
特別クラス 20 45 134
上級者 162 573 486
中級者 45 687 734
初心者 34 23 56

 

 

「Blog Table ⭐」 ver. 0.1

このツールは Chrome / 新Edge の「Tampermonkey」で動作します。(Firefoxは次回から対応) 以下のコードを「Tampermonkey」の新規スクリプトの作成画面にコピー&ペーストして保存する事で、このツールを利用する事が出来ます。

 

●「Tampermonkey」の導入手順は、以下のページを参照ください。

 

 

 

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

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

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

 

 

〔 Blog Table ⭐ 〕  ver. 0.1

 

// ==UserScript==
// @name         Blog Table ⭐
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  編集画面上にtable表を作成する
// @author       Ameba Blog User
// @match       https://blog.ameba.jp/ucs/entry/srventry*
// @grant        none
// ==/UserScript==


let retry=0;
let interval=setInterval(wait_target, 100);
function wait_target(){
    retry++;
    if(retry>10){ // リトライ制限 10回 1sec
        clearInterval(interval); }
    let target=document.getElementById('cke_1_contents'); // 監視 target
    if(target){
        clearInterval(interval);
        main(); }}


function main(){
    let table_width='100%';

    let target=document.getElementById('cke_1_contents'); // 監視 target
    let monitor=new MutationObserver( catch_key );
    monitor.observe(target, {childList: true}); // ショートカット待受け開始

    catch_key();

    function catch_key(){
        if(document.querySelector('.l-gHeaderLeft__link a')){ // 起動を「トップページ」アイコンに表示 📛
            document.querySelector('.l-gHeaderLeft__link a').style.boxShadow='inset -14px 0 0 0 #79fbf6'; }


        if(document.querySelector('.cke_wysiwyg_frame') !=null){ //「通常表示」から実行開始
            let editor_iframe=document.querySelector('.cke_wysiwyg_frame');
            let iframe_doc=editor_iframe.contentWindow.document;

            iframe_doc.addEventListener('keydown', check_key);
            function check_key(event){
                let gate=-1;
                if(event.ctrlKey==true){
                    if(event.keyCode==112){
                        event.preventDefault(); gate=1; }
                    if(gate==1){
                        event.stopImmediatePropagation();
                        do_task(); }}}

            function do_task(){
                let t_panel=document.querySelector('#t_panel');
                if(!t_panel){
                    table_panel();
                    excite_icon(1);
                    makeTable(); }
                else if(t_panel){
                    excite_icon(0);
                    t_panel.remove(); }}
        }} // catch_key()


    function table_panel(){
        let panel=document.createElement('div');
        panel.setAttribute('id', 't_panel');

        panel.innerHTML=
            '<span class="t_label">列数</span>'+
            '<input id="col" type="number" min="1" value="1">'+
            '<span class="t_label">行数</span>'+
            '<input id="row" type="number" min="1" value="1">'+
            '<input id="wide" type="submit" value="◁表幅▷">'+
            '<span class="t_label">枠線幅</span>'+
            '<input id="border_width" type="number" min="-1" value="1">'+
            '<span class="t_label">色</span>'+
            '<input id="border_color" type="text"  value="#999">'+
            '<span class="t_label">最上行背景色</span>'+
            '<input id="header_back" type="text" value="#F4F4F4">'+
            '<span class="t_label">全体背景色</span>'+
            '<input id="cell_back" type="text" value="#FFF">'+
            '<span class="t_label">文字サイズ</span>'+
            '<input id="t_font" type="number" min="12" max="32" value="16">'+
            '<input id="set" type="submit" value="表作成">';

        let css=
            '#t_panel { position: fixed; top: 15px; left: calc(50% - 490px); width: 948px; '+
            'padding: 6px 15px; font-size: 14px; border: 1px solid #ccc; '+
            'border-radius: 4px; background: #eff5f6; z-index: 10; }'+
            '#t_panel input { margin-right: 10px; padding-top: 2px; }'+
            '.t_label { margin: 0 3px 0 0; }'+
            '#col, #row, #border_width, #t_font { width: 36px; text-align: center; }'+
            '#border_color, #header_back, #cell_back { width: 66px; padding: 2px 8px 0 2px; '+
            'border: thin solid #aaa; height: 23px; }'+
            'input#border_width { margin-right: 2px; }'+
            'input#set { margin: 0 0 0 -20px; padding: 2px 4px 0; '+
            'box-shadow: inset 0 0 0 20px #fd4; float: right; }';

        let style=document.createElement('style');
        style.innerHTML=css;
        panel.appendChild(style);

        document.querySelector('.l-body').appendChild(panel); }


    function excite_icon(n){
        let color_label=document.querySelector('#cke_16_label.cke_button__markercolor_label');
        let color_button=document.querySelector('#cke_17.cke_button__markercolorgenerator');
        if(n==1){
            color_label.style.height='17px';
            color_button.style.width='20px'; }
        else{
            color_label.style.height='3px';
            color_button.style.width='11px'; }}


    function get_color(){
        let set_color;

        let icon=document.querySelector('#cke_16');
        let color_label=document.querySelector('#cke_16_label');
        icon.addEventListener('click', function(){
            set_color=color_label.getAttribute('data-color'); });

        let color_input=document.querySelectorAll('#t_panel input[type="text"]');
        for(let k=0; k<color_input.length; k++){
            copy_color(k); }

        function copy_color(k){
            color_input[k].onclick=function(event){
                if(event.ctrlKey==true){
                    event.preventDefault();
                    color_input[k].value='#'+ set_color;
                    color_input[k].style.boxShadow='inset -8px 0 ' + color_input[k].value; }}

            color_input[k].onkeydown=function(event){
                if(event.keyCode==13){
                    event.preventDefault();
                    color_input[k].style.boxShadow='inset -8px 0 ' + color_input[k].value; }}}}


    function show_color(){
        let color_input=document.querySelectorAll('#t_panel input[type="text"]');
        for(let k=0; k<color_input.length; k++){
            color_input[k].style.boxShadow='inset -8px 0 ' + color_input[k].value; }}


    function table_width_set(){
        let wide=document.querySelector('#wide'); // 横幅の拡張・非拡張の設定
        if(table_width=='100%'){
            wide.value='◁表幅▷'; }
        else{
            wide.value='▷表幅◁'; }
        wide.onclick=function(event){
            event.preventDefault();
            if(table_width=='100%'){
                table_width='auto';
                wide.value='▷表幅◁'; }
            else{
                table_width='100%';
                wide.value='◁表幅▷'; }}}


    function makeTable(){
        table_width_set();
        show_color();
        get_color();

        let set=document.querySelector('#set'); // 作成ボタン
        set.addEventListener('click', set_table);

        function set_table(){
            if(document.querySelector('.cke_wysiwyg_frame') !=null){ //「通常表示」から実行開始
                let editor_iframe=document.querySelector('.cke_wysiwyg_frame');
                let iframe_doc=editor_iframe.contentWindow.document;

                let rows=[];
                let col=document.querySelector('#col'); // 列数の設定
                let row=document.querySelector('#row'); // 行数の設定
                let border_width=document.querySelector('#border_width'); // 枠線幅の設定
                let border_color=document.querySelector('#border_color'); // 枠線色の設定
                let header_back=document.querySelector('#header_back'); // 最上行背景色の設定
                let cell_back=document.querySelector('#cell_back'); // 全体背景色の設定
                let t_font=document.querySelector('#t_font'); // 文字サイズの設定

                let border_para;
                if(border_width.value>0){
                    border_para=border_width.value +'px solid '+ border_color.value; }
                else if(border_width.value==-1){
                    border_para='1px solid '+ border_color.value; }

                let table=iframe_doc.createElement("table");
                for(let i=0; i<row.value; i++){
                    rows.push(table.insertRow(-1)); // 行の追加

                    for(let j=0; j<col.value; j++){
                        let cell=rows[i].insertCell(-1);
                        cell.style.border=border_para;
                        cell.style.padding='.2em .6em 0';
                        cell.appendChild(document.createTextNode("")); // 列の追加
                        if(i==0){
                            cell.style.backgroundColor=header_back.value; } // 最上行背景色の設定
                        else{
                            cell.style.backgroundColor=cell_back.value; }}} // 全体背景色の設定

                if(border_width.value>-1){
                    table.style.borderCollapse='collapse'; }
                else if(border_width.value==-1){
                    table.style.borderCollapse='separate';
                    table.style.border='1px solid ' + border_color.value; }

                table.style.width=table_width;
                table.style.font='normal '+ t_font.value +'px Meiryo';

                let selection=iframe_doc.getSelection();
                let range=selection.getRangeAt(0);
                let ac_node=selection.anchorNode;
                ac_node.parentNode.insertBefore(table, ac_node);

            }}} // makeTable()

} // main()



 

 

 

「Blog Table ⭐」最新版について 

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

 

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