テキストをクリップボードへコピーするJavaScript

UIを考える上で、コピペのための機能が欲しくなったので用意しました。
検索すると色々出てくるのですが、使い勝手が悪いというかなんというか。
実用に堪えるものがなかったので自作しました。
クラス名co2cl (copy to clipboard)を付与した要素を対象に動作します。
動作時にカーソルが一瞬変わります。
エラー補足できなさそうなので判定はありません。
非SSL用コードです。

HTML部

<span class="co2cl">テキスト</span>
<form><input type="text" class="co2cl" value="インプット"></form>

JvaScript部

$(function(){ //console.log(co2cl);
	co2cl.load();
});

var co2cl = {
	version: '2023-12-07',
	//-------- LOAD
	load: function(){
		var target = $('.co2cl'); //console.log(target);
		target.each(function(i, elm) { //console.log(i, elm);
			// コピー用ボタン
			var html = ''
				+'<button'
					+' type="button"'
					+' class="co2cl_btn"'
					+' onclick="co2cl.run(this)"'
				+'>'
					+'copy'
				+'</button>';
			$(elm).after(html);
		});
	},
	//-------- RUN
	run: function(caller){ //console.log(target);
		var target = $(caller.previousElementSibling); //console.log(target);
		var tagName = target.get(0).tagName; //console.log(tagName);
		// フォーム部品とそれ以外で取得先が異なる
		var value = (tagName == 'INPUT' || tagName == 'TEXTAREA')
				? target.val()
				: target.text(); //console.log(value);
		// コピペ用フォーム
		var html = ''
			+'<form>'
				+'<textarea'
					+' id="co2cl_temp"'
					+' class="co2cl"'
					+' style="position:absolute;left:-9999px"'
				+'>'
				+'</textarea>'
			+'</form>';
		$('BODY').append(html);
		var temp = $('#co2cl_temp'); //console.log(temp);
		temp.html(value);
		temp.select();
		document.execCommand('copy');
		$(temp).remove();
		//---- カーソル変更
		$(caller).css('cursor','wait');
		setTimeout(function(){$(caller).css('cursor','pointer');}, 200);
	}
};

Twitterのアイコンを青い鳥に戻すTampermonkeyスクリプト

Twitterのアイコンが青い鳥からXに変わってしまいました。
どうしても青い鳥が良いという方のために用意しました。

ページ(https://twitter.com/home)の読み込み完了後、3秒後にロゴを書き換えます。
ページが読み込まれてから画面が書き換わるまで時間がかかるようであれば、タイマーの3000を5000など大きく変更してください。
動作確認はPCのみ、ブラウザはChrome・Edge・Vivaldiです。
Firefoxは少し前からTampermonkeyは動かなくなっている感じです。

※ 色の指定が抜けていたので、追加したものが0.2


// ==UserScript==
// @name Twitterのアイコンを青い鳥に戻す
// @namespace http://tampermonkey.net/
// @version 0.2
// @description none
// @author penlabo
// @match https://twitter.com/*
// @grant none
// ==/UserScript==

(function() {
'use strict';
setTimeout(change, 3000);
function change(){
var target = document.querySelector('h1 > a > div');
target.innerHTML = '<svg viewBox="0 0 24 24" style="fill:#1da1f2" aria-hidden="true" class="r-1cvl2hr r-4qtqp9 r-yyyyoo r-16y2uox r-8kz0gk r-dnmrzs r-bnwqim r-1plcrui r-lrvibr r-lrsllp"><g><path d="M23.643 4.937c-.835.37-1.732.62-2.675.733.962-.576 1.7-1.49 2.048-2.578-.9.534-1.897.922-2.958 1.13-.85-.904-2.06-1.47-3.4-1.47-2.572 0-4.658 2.086-4.658 4.66 0 .364.042.718.12 1.06-3.873-.195-7.304-2.05-9.602-4.868-.4.69-.63 1.49-.63 2.342 0 1.616.823 3.043 2.072 3.878-.764-.025-1.482-.234-2.11-.583v.06c0 2.257 1.605 4.14 3.737 4.568-.392.106-.803.162-1.227.162-.3 0-.593-.028-.877-.082.593 1.85 2.313 3.198 4.352 3.234-1.595 1.25-3.604 1.995-5.786 1.995-.376 0-.747-.022-1.112-.065 2.062 1.323 4.51 2.093 7.14 2.093 8.57 0 13.255-7.098 13.255-13.254 0-.2-.005-.402-.014-.602.91-.658 1.7-1.477 2.323-2.41z"></path></g></svg>';
}
})();

更新:クリックポストで「Amazon Pay」の支払手続きをTampermonkeyで自動実行するスクリプト

前の記事から更新しました。
一日使用してみまして、実際の挙動を確認したところで修正を行いました。
ボタンをクリックしてページ変移が始まればTampermonkeyでの処理が終わるかと思っていたのですが、ループが進んでいたので明示的に抜けるように変更しました。

// ==UserScript==
// @name         クリックポスト:一時保存(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2023-05-01
// @description  “内容品”が「/skip」ではないお届け先の“支払手続き”を自動で実行します。
// @author       penlabo
// @match        https://clickpost.jp/packages/list
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    onload = function (){
        var line = 1;
        while (1) {
            var elmTarget = document.getElementById('AmazonPayCV2Button' + line);
            if (!elmTarget) return false;
            var elmParent = elmTarget.parentNode;
            var elmPrevious = elmParent.previousElementSibling;
            var elmText = elmPrevious.innerText;
            if (elmText != '/skip') {
                elmTarget.click();
                return false;
            }
            elmParent.style.backgroundColor = 'lightgrey';
            line++;
        }
    };
})();

その後の手続きを実行するものも追記しておきます。

// ==UserScript==
// @name         クリックポスト:決済(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2023-05-01
// @description  決済を実行します。
// @author       penlabo
// @match        https://payments.amazon.co.jp/checkout?*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var target = document.querySelector('#a-autoid-0 > span > input');
    target.click();
})();

// ==UserScript==
// @name         クリックポスト:支払手続き完了(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2023-05-01
// @description  支払手続き完了を実行します。
// @author       penlabo
// @match        https://clickpost.jp/amazon_pay/confirm?*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var target = document.querySelector('#payment_complete_message > input');
    target.click();
})();


これで全自動で処理が進みます。

クリックポストで「Amazon Pay」の支払手続きをTampermonkeyで自動実行するスクリプト

日本郵便のクリックポストは、お届け先毎に支払手続きを実行しなければなりません。
さらに、その先で決済を実行する手続きも必要になります。
件数が多くなると、PCに張り付いて作業しなければならず、操作が面倒です。
ということで、この手続きを自動で実行させようということです。
…が、このスクリプトはお届け先の一覧画面から個別の決済画面に飛ぶだけのものです。
決済を実行するものは近いうちに用意します。

なお、このスクリプトは「Amazon Pay」用に用意したもので、「Yahoo!ウォレット」では動作しません。

このスクリプトは、クリックポストのサイト「一時保存」でお届け先を一覧表示した状態で動作するように制限を設けています。
「まとめ申込み」では動作しません。
ところで、クリックポストでは登録したお届け先を任意に削除することができません。
そこで、誤って登録したり保留したいものなど、支払いを実行したくないお届け先は、内容品を「/skip」に変更してください。
これ以外のお届け先について、支払手続きを自動で実行します。
なお、内容品の変更時には一度決済画面を表示することになりますので、決済用のスクリプトは切っておかないと決済が実行されますのでご注意ください。

この画面の場合、1件目の手続きは実行せず、2件目を実行します。
お届け先の一覧が空になるか、内容品が「/skip」のものだけが残った状態で動作を終了します。

余談ですが、他サイトで紹介されている同様のスクリプトでは、お届け先の全てが処理の対象になっているものしかないと思います。
日本郵便側で受付処理を行うまでは決済が確定することはありませんが、発行済として一覧から消えるため処理済みとして扱ってしまう、追跡番号が発行されることで発送通知を誤って送信してしまう、などの問題に繋がる可能性があります。
有用そうな記事が一つ上がると、内容を精査せずパクり記事が量産されるので本当にたちが悪いと感じます。
便利なものほど、実際に挙動を確認したり、実務への影響を考慮して欲しいところです。

コードは分かりやすいように努めました。
コメントや説明がなければ処理を追えない場合は、このスクリプトは使わない方がよいでしょう。

ブラウザで手続きを自動化するには、拡張機能のTampermonkeyを利用します。
おそらくGreasemonkeyでも動作しますが未確認です。
これらの使い方はここでは説明しませんので、他所で確認してください。

以下のコードを保存してください。

// ==UserScript==
// @name         クリックポスト:一時保存(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2023-04-30
// @description  “内容品”が「/skip」ではないお届け先の“支払手続き”を自動で実行します。
// @author       penlabo
// @match        https://clickpost.jp/packages/list
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    onload = function (){
        var line = 1;
        while (1) {
            var elmTarget = document.getElementById('AmazonPayCV2Button' + line);
            if (!elmTarget) return false;
            var elmParent = elmTarget.parentNode;
            var elmPrevious = elmParent.previousElementSibling;
            var elmText = elmPrevious.innerText;
            if (elmText == '/skip') {
                elmParent.style.backgroundColor = 'lightgrey';
            }
            else {
                elmTarget.click();
            }
            line++;
        }
    };
})();

PHPでSSLの情報を取得する

以前にも少し仕掛けていたのですが、PHPでSSLの情報を取得するクラスを作りました。
正確には、作りかけていたクラスをしっかりした形に直しました。
ベースとなっていたソケットを使用する方法に、エラー判定や新しいメソッドを追加したりした上で、
cURLを使用する方法を追加しました。
モードを切り替えることで、ソケットとcURLを使い分けられるわけですが、VPSでもレンサバでも、どっちも動くみたいなので、1つのクラスに両方を実装した意味があったのかどうかは謎です。

で、新しく用意したクラスを使ったツールは、「SSL情報取得」にて公開しました。
サーバー管理ツールに組み込んだり、結果をフックして通知させたり、API的に使えるようになるといいかもですね。
いい加減に、Let’s Encryptの更新漏れを見落とさないようにしないと…

jQuery Tabsのタブを下側に

jQuery UIのウィジェットの1つ、Tabsです。

タブコントロールを実現するライブラリです。 解説ページを参考に導入したのですが、一部の修正が必要だったのでメモっておきます。

参考ページは以下の通り
http://js.studio-kingdom.com/jqueryui/widgets/tabs
スタイルシートに漏れがあって、タブに下線が表示されないのでそれを追加します。
.tabs-bottom .ui-tabs-nav li

border-bottom-width: 1px
を追加すればOK

ところでこのWordPress、いつのまにかピンバックを送るフォームが消えてるんですけど、どこで設定するんでしょう… WordPressってどんどん使いにくくなる印象なのですが、クラシックモードとか無いのでしょうか。

PerlのImage::Magickが動かなくなっていた

Windows上で久しぶりに実行したスクリプトが、Image::Magickが見つからないとエラーを吐くようになっていた。
パス周りだろうか、EmEditorにPATHをぶっ壊されてからこんなのばっかりだ。
仕方がないので入れ直すことに。
ImageMagickからDLLを入れれば早いだろうと思ったけど、現在配布されている6.9.1はPerlの対応バージョンが5.20になっていて、今の5.12とは異なるので入れられない。
Perlを入れ直すのも面倒だし、他のところで問題が出そうなのでパス。
cpanからは相変わらず入れられない。
そうだ、ppmがあった。

ppm install http://www.bribes.org/perl/ppm/Image-Magick.ppd
Downloading Image-Magick-6.8.3...done
Unpacking Image-Magick-6.8.3...done
Generating HTML for Image-Magick-6.8.3...done
Updating files in site area...done
 157 files installed

これで呼び出せるようになって、動くようになった。
めでたしめでたし。

ImageMagickでEPSに変換したファイルをIllustrator CS5で開くとフリーズする問題

ImageMagickのconvertコマンドでJPEG形式の画像ファイルををEPSファイルに変換したものを、Illustrator(イラストレータ) CS5で開くと、CS5が固まる問題を調査しました。
この現象を確認したのは、CentOS上で変換したJEPGファイルです。
昔はこんなことは無かった気がしますが、いつの間にかこの問題が発生していたので調査しました。

開発環境:
Windows7(64bit)
mageMagick 6.8.3-0 2013-02-13 Q16
Illustrator CS5

本番環境:
CentOS Linux 5.11
ImageMagick 6.2.8 05/07/12 Q16

CentOS上のImageMagickでJPEGファイルをEPSファイルにconvertしたものをイラレCS5で開くとイラレが固まって強制終了するしかなくなります。
単純に変換するときのコマンドです。
convert a.jpg a.eps

環境それぞれで生成されたEPSファイルを比較しました。
本番環境で生成したファイルにはヘッダ情報に

%begin_xml_code
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:OriginalDocumentID="xmp.did:A379835BBF2068118A6DF5258C3E39CC" xmpMM:DocumentID="xmp.did:660D7D5C2F0F11E3A9DB9D247D1C6687" xmpMM:InstanceID="xmp.iid:660D7D5B2F0F11E3A9DB9D247D1C6687" xmp:CreatorTool="Adobe Photoshop CS5.1 Macintosh"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:A56F4D9AC92068118A6DF5258C3E39CC" stRef:documentID="xmp.did:A379835BBF2068118A6DF5258C3E39CC"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>
%end_xml_code

というものが追加されていました。
MACのフォトショCS5.1で保存されたとの記載を確認できます。
簡単に言うとファイル情報ですね。
これを削除するとイラレは固まらずにファイルを開けます。
よ~くソースを見ると、
「%begin_xml_code」と「%end_xml_code」に挟まれた行、XMLで言うところの「<?xpacket />」がベタで書かれていました。
この行、ソースとしてはベタで書かれていてちょっと引っかかったので、行をコメントアウト、つまり先頭に「%」を追加すると、イラレで固まらなくなりました。

XMLをPostScriptにベタで書いているので構文エラーで固まっていたようです。
PostScriptにはヒアドキュメントはなかった気がするので、stremaとしてデータとして埋め込むか、1行ずつコメントアウトしてやらないとだめなのでしょう。

XML情報は特に必要がないので、除去するオプション「-strip」を追加してconvertしてみます。
convert a.jpg -strip a.eps
これでファイル情報が格納されなくなり、イラレで無事開けるようになりました。

ファイル情報が埋め込まれるかどうかはコンパイル時のスイッチ設定だとは思うのですが、そこまでガッツリ調べるのが面倒なので、回避方法を確認したところで良しとします。

でめたしでめたし。