表作成のスクリプトは思ったより簡単
人様のコードを参考にしたからですが、想像以上に苦労もなく「table要素」を構成する事が出来ました。 要素を生成するエンジン部のコードは以下です。
(実際のコードを要約したものです)
この生成エンジンをコントロールするコードを作る事が主要な作業になりましたが、作成される「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;」が記入されています。
この場合は、ここに「margin: 0 auto;」を追加するだけで、中央配置になります。
また ◁表▷ で作成したが、結果として幅に余裕が出来た場合は、これを中央配置に変更する事が出来ます。 ◁表▷ で作成した「tableタグ」には「width: 100%;」が以下の様に書き込まれています。
この「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 ⭐」の最新バージョンへのリンクは、以下のページのリンクリストから探せます。







