- 1スレッド1ログファイル形式のスレッド式の画像掲示板です。
- PaintBBS NEO,tegaki.js,ChickenPaint,Klecksが使えるお絵かき掲示板です。
- PHP7.0以上の環境が必要です。
PHP7.2,PHP8.2,PHP8.3,PHP8.4で動作確認しています。
PHP8.0-PHP8.3での使用を推奨します。
- リリースから安定版をダウンロードできます。
- 設置するサーバのPHPのバージョンが5.6以上になっている事を確認します。
- リリースのページの一番下からzipファイルをダウンロードします。
petitnote
フォルダ内のconfig.php
の管理者パスワードを他の人にはわからないパスワードに変更します。petitnote
フォルダをアップロードします。- サーバ上の
petitnote
ディレクトリにブラウザでアクセスすると設置が完了します。
- 設置時にディレクトリやファイルのパーミッションを変更すると正常に動作しない事があります。
必要なディレクトリの作成・パーミッションの設定はPHPスクリプトが自動的に行います。
- PHPのバージョンが5.3以下の時は500エラーになります。
PHPのバージョンが切り替え可能な場合はPHP7.0以上への変更をお願いします。
このスクリプトの動作環境はPHP7.0-PHP8.xです。推奨はPHP8.0以上です。
- 設置したサーバによっては、同梱している.htaccessが原因でエラーになる事があります。
その場合はpetitnote/
ディレクトリ、petitnote/template/
ディレクトリにある.htaccess
を削除すると動作するようになります。
ただし、問題なく動作している場合は削除してはいけません。このファイルはセキュリティリスクを低減させるためのものです。
設置サポート掲示板をご利用ください。
- イラスト投稿サイト Petit Note
お絵かきとアップロード。 - お絵かき掲示板交流サイトPetit Note
お絵かきのみ。
BBSNoteとPOTI-boardのログファイルをPetit Note形式に変換できます。
ただし新しく設置したPetit Noteで変換したログを使う事しかできません。
変換して新しくできたログファイルで上書きすると既存の投稿は消えてしまいますのでご注意ください。
このバグによりログが破損する可能性があります。 通常は編集、または書き込みが同時に行われても一瞬でも先にファイルを開いた側が他からファイルを読み込めないようにロックします。 そのロック処理が二箇所抜けていました。 その他の機能追加が特に必要ではない方もアップデートをお願いします。
- ChickenPaint Beのテクスチャパレットがスクロールできなくなっていたのを修正しました。
( テクスチャパレットのスクロールが必要になるのはスマホのような小さな画面の端末の時です。)
thumbnail_gd.php
に機能を詰め込んだ結果、ソースコードの可読性が著しく低下してしまったため静的クラスにまとめ直しました。
thumbnail_gd.php
は削除されました。
代わりにthumbnail_gd.inc.php
を使います。
thumbnail_gd.php
は不要になりましたが、サーバ上に残っていても問題ありません。
不要なファイルを削除しようとして、必要なファイルを削除してしまう事もありますので、削除する時は十分にご注意ください。
- カタログ専用のwebpサムネイル画像が存在しているにも関わらず、レスのカタログモードなどにjpegやpng形式の画像が表示されていました。
カタログモードのための軽量化されたファイルが存在しているのに有効活用されていませんでした。
webpサムネイルを表示するしないを判定する処理のバグを修正しました。
- 指定サイズを超過したpng画像をjpegに変換する機能を改修し、jpegではなく、webpに変換するようにしました。
画像のサイズ変更やフォーマットの変更のためのthumbnail_gd.phpを有効に活用して、本体のコードを整理しました。
同じ繰り返しを何度も記述しないようにし、可読性と保守性を高めました。 - 投稿可能な最大サイズを超過しそうな時には、もとの画像フォーマットに関係なく、webpへの変換を試みるようになりました。
フォーマットを変換してファイルサイズを削減し、投稿可能にします。 - この変更によるメリットは、透過png画像を、webpに変換したときに、透過を維持できる事です。
これまでは、png画像をjpegに変換するときに、透過png画像の透過情報が失われ背景色が白になっていました。 - デメリットは、古いiOSのSafariではwebp画像が表示できない事です。
iOS14未満の時にこの問題が発生します。これはGoogleが開発したwebp形式画像をAppleがなかなか採用しなかった事により発生している問題ですが、2020年頃にはほとんどのブラウザが対応しているため、2020年でブラウザの更新が停止しているようなケースでなければ問題ないはずです。
- ブラシプレビューのプレビュー画面の円をドラッグしてブラシサイズを変更する操作がペンでもできるようになりました。
ペンでも操作できるようにするため、マウスに最適化されていた処理をPointerEventに書き直しました。
また、各パレットとメインメニューのtouchmoveEventのデフォルトの動作をキャンセルし、誤動作が発生しないようにしました。
ペンが画面から離れているにもかかわらず、ドラッグしている対象が動いたままになる問題を修正しました。
- 「テクスチャパレット」に「ノイズテクスチャ」を追加しました。
これまでも、「効果メニュー」の「単色ノイズ」とレイヤー効果でノイズをのせる事ができましたが、それとも少し違うノイズを出す事ができます。
ペンや鉛筆と組み合わせて使う事で、より鉛筆らしい線を描写できます。
また水彩ブラシなどの厚塗りの時にも効果を発揮します。
- 消しゴム使用時はテクスチャを無効化する処理を追加しました。
テクスチャを選択している時にも、消しゴムで消去できるようになりました。
これまでは、テクスチャを選択したまま消しゴムをかけると、薄くはなるものの、消す事ができませんでした。 - 薄消しゴム使用時はテクスチャが適用されます。消しゴムを使ったテクスチャのかけ合わせによる模様の作成をする時は薄消しゴムをご利用ください。
- 同じ処理の繰り返しを関数化してコードの可読性を高めました。
この関数化により同じ処理を繰り返していた16行を4行にまとめる事ができました。
- Bootstrapをグローバルに宣言するのをやめ必要な箇所にimportするようにしました。
また、削減可能な処理を削除しました。
ビルドの日付が、「ChickenPaint Beについて」に入るようになりました。
これにより、いつビルドされたChickenPaint Beなのかが一目でわかるようになります。
- ChickenPaint Be拡大縮小のショートカットキーをKlecksやAXNOS Paintと同じ、「+」「-」に変更しました。
これまでは、「ctrl + +」「ctrl + -」のように「ctrlキー」と一緒に押下する必要がありました。 - ChickenPaint Beのファイルサイズを23.7%削減。
ビルドツールの変更とIE互換のために使用していたポリフィルのパッケージの削除により、ファイルサイズを779KBから594KBに削減する事ができました。
軽量化により、より高速に起動できるようになりました。
- Lightbox v2.11.5にアップデートし、さらにそこから再度改造してお絵かき掲示板仕様にしました。
- レイヤーのサムネイル画像の背景を単色グレーから市松模様に変更しました。
- レイヤーのサムネイル画像の線画等の太さを太くして視認性を向上させました。
これはAXNOS Paintの公式対応ではなく、改造版の仕様変更です。
この仕様変更によって問題が発生した場合の責任はオリジナルのAXNOS Paintの開発者にはありませんので、そのような内容をオリジナルのAXNOS Paintの開発者に問い合わせないようお願いします。
- MisskeyのAPIを使った投稿機能(Misskeyにノート)機能には、一度認証が成功したサーバは次回の認証をスキップできる便利な機能があります。
しかし、認証が成功した時に別のMisskeyサーバに投稿しようとすると、認証に失敗して投稿画面にもどされてしまいます。
これは、認証に成功したときのトークンが残っているからです。
別のMisskeyサーバを選択した時は、このトークンをクリアして、再度認証のための操作が行えるようにしました。
別ページに移動してしまった時や、ブラウザのタブを誤って閉じた時に画像を復元する機能が、PaintBBS NEOにはありますが、復元時にあやまって小さなキャンバスサイズを選択して復元すると、その小さなキャンバスサイズにあわせて画像が切り取られていました。
その後に大きなキャンバスサイズを選択して再度復元しても、画像は小さく切り取られたままでした。
今回の更新により、再度大きなキャンバスサイズを選択すればもとのサイズで画像を復元できるようになりました。
別ページに移動してしまった時や、ブラウザのタブを誤って閉じた時に画像を復元する機能が、PaintBBS NEOにはありますが、落雷による停電等でPCの電源が落ちてしまった時は、画像を復元する事ができませんでした。
ページを移動した時やタブを閉じた時にしかバックアップ用のデータを保存していなかったため、落雷等による予期しない電源の遮断時に復元データは保存されていませんでした。
そのため、復元用のデータを10ストロークごとに保存し、ブラウザを完全に終了した時にもデータを保存するようにしました。
そして、データの保存先がモバイル端末の時と同じようにローカルストレージになるように変更しました。
しかし、これだけでは問題が残ります。
試し書き等のデータが1週間後あるいはもっと先まで保存され続け、予期しないタイミングで復元される可能性があります。
それらを考え、3日以上経過した古い復元データは自動的に破棄する仕様にしました。
近年の気候変動により、雷雨による停電が増えています。
今回のPaintBBS NEO v1.6.5により、突然停電になった時でも、描画途中のデータを復元できるようになりました。
PC版のChrome、EdgeそしてFirefoxで動作確認しています。
JavaScriptに関連する箇所のコードを整理しました。
機能に変更はないため、急いで更新する必要はありません。
11月に正式にリリースされる予定のPHP8.4のテスト環境を構築して、テストを行いましたが現時点では特に問題なさそうです。
現状のままでも、軽微なエラーも深刻なエラーも発生しないものと思われます。
- 1時間ちょうどの時に「描画時間:1時間」となっていた表示を「1時間0分0秒」のような表示になるようにしました。
日があれば「日時分秒」を表示。時間があれば「時分秒」を表示。分があれば「分秒」を表示します。
- 1 daysや、1postsのように数値が1であるにも関わらず複数形表示になっていたのを修正しました。 ブラウザの優先言語が日本語以外時の表示に関する修正であるため、優先言語が日本語の時の表示の変更はありません。
- 「あと2日で」「あと1時間で」等の「日時」に加え「あと28分で」のような「分」表示を追加しました。
- Bootstrap3、Bootstrap4のレガシーなCSSクラスが残っていたのを整理しました。
- Klecksで続きを描く時にPNG、JPEGなどの画像ファイルの読み込みに失敗する事があるのを修正しました。
- Klecksで透過PNGから続きを描いた時に透過にならず白塗りつぶし背景になるバグを修正しました。
レイヤー情報を記録しているPSDファイルが存在している時にはこの問題は発生しないため発見が遅れました。 - 画像を保存するためのファイルが存在しない時の404エラーのエラーメッセージを修正しました。
エラーメッセージにインクルードして使っている直接呼び出していないファイル名が表示されていました。
リリースされたAXNOS Paint v2.3.0をPetit Note用に改造し直しました。
-
公式版のAXNOS Paintが更新されたため、それにあわせて起動オプションを追加しました。
AXNOS Paintを改造して1000px制限を1800pxに拡大しました。 -
AXNOS Paintで続きを描く時に、元の画像が掲示板で設定している幅と高さの最大値を超えているときは、画像の幅と高さをもとに最大値を設定するようになりました。
これにより、幅と高さの最大値が1000pxで続きを描く時の元の画像が幅2000px、高さ2000pxの時は、幅1800px 高さ1800pxのキャンバスが開きます。
お絵かきできる最大の幅と高さの最大値が1000pxでも、続きを描く時のもとの画像サイズにあわせて幅と高さを拡張します。
しかし、AXNOS Paintの制限値1800pxを超える事はありません。 AXNOS Paintの本来の最大の幅と高さは1000pxであるため、キャンバスサイズが1800pxの時に発生する問題は、AXNOS Paint公式の問題ではなく、改造版の問題です。
画像のサイズがお絵かきできる最小値より小さくなる場合も想定してPetit Note側で調整しました。 -
AXNOS Paintの最新版でAndroid端末+消しゴムツール使用時にピンチズームが動作しなくなる事がある問題が修正されました。
- 掲示板で設定したキャンバスサイズの最大値と最小値がAXNOS Paintの設定タブのキャンバスサイズ最大値、最小値に反映されるようになりました。
- ブラウザの優先言語の設定が日本語以外の時には英語UIで起動するようになりました。
- 改造して使用していた続きを描くための処理をAXNOS Paint公式のものに置き換えました。
- Submitボタンの二度押し防止処理を一部変更しました。ボタンの無効化を解除するべきではないタイミングで無効化が解除されていたのを修正しました。
- Klecksの自由変形処理画面の操作中にペンの長押しを検知して右クリックメニューが開いてしまう問題を修正しました。
- レイヤーの合成結果がSAIやFireAlpacaと近くなるように変更しました。
これは現時点では改造版のAXNOS Paintの仕様変更です。
この変更によって発生したレイヤーの合成結果に関する問題は改造版の問題であり、開発元が作成したオリジナル版のAXNOSPaintの問題ではありません。
そのような問題もあるためバージョン情報に改造版のリポジトリのURLを追記して改造版である事を明確にしました。 - AXNOS PaintとTegakiの投稿ボタン連打対策を行いました 投稿ボタンを連打すると何枚も画像が送信され、未投稿画像に入る問題を修正しました。
- MacOS+Safariブラウザで、ツールパレットを移動すると、描画時にツールパレットがカーソルと一緒についてきてしまい描く事ができなかった問題を非公式に修正しました。
この問題は、Safariの最新版では再現しません。Safari14で発生する問題に対処するための非公式な修正です。
- Petit Note用にカスタマイズしたAXNOS Paintをさらにカスタマイズしました。
AXNOS Paintとは (アクノスペイントとは) [単語記事] - ニコニコ大百科
// Axnos Paintを使う
// 使う:true 使わない:false
$use_axnos = true;
// $use_axnos = false;
この設定項目が存在しない時は、Axnos Paintを使うになります。 Axnos Paintをペイントアプリ選択一覧に出したくない時は、上記設定項目を追加してください。
- ツールパレットのぼかしツールのショートカットキーをUに設定しました。 これで、キャンバスの回転とハンドツールによる移動以外のツールパレットのショートカットキーがすべて割り当てずみになりました。 キャンバスの回転は、R+ドラッグ、ハンドツールはスペース+ドラッグで同様の操作ができるため、ツールパレットのこの機能のショートカットキーは設定しませんでした。
- オリジナルのChickenPaintと同じように変形確定ボタンをパレットの横幅いっぱいに広がるようにしました。 これはBootstrap5対応にする時に、必要なCSSが一部欠落した事が原因だったため、オリジナルのChickenPaintのCSSの一部を追加しなおしました。
- 2024/07/13 v1.38.5でChickenPaint Beがレイヤー2枚で起動するようになりましたが、その時に自動的に作成される透明レイヤーが正しく動作していなかったのを修正しました。
混色系ブラシで描画した時に黒を引き摺り画面が黒くなっていました。
- コードを整理しました。機能に変更はありません。
- Klecksを最新版にアップデートしました。細かな修正が行われています。
- 管理者パスワードを5回連続して間違えた時に、それ以上入力できないようにロックする機能を改善しました。 誤ったパスワードが入力された時に記録するログファイル(中身は操作したデバイスのIPアドレスと誤入力の回数がわかるもの)をftp接続して削除しなくても、ロックを解除できるようになりました。
// 管理者パスワードを5回連続して間違えた時は拒絶する
// する: true しない: false
// trueにするとセキュリティは高まりますが、ログインページがロックされた時の解除に手間がかかります。
$check_password_input_error_count = false;
config.phpのこの設定項目で
$check_password_input_error_count = false;
と設定すると、管理者パスワード誤入力を記録したログファイルが削除されます。
その後、
$check_password_input_error_count = true;
にして5回連続したときに拒絶する設定にすると、ロックは一度解除されているので、次の誤入力連続5回が発生するまでロックはかかりません。
- 掲示板全体に年齢制限をかける設定にした時の警告処理の個所をパーツディレクトリにまとめました。
これにより、同じコードの繰り返しをいくつものテンプレートに記述する必要がなくなりました。
これまではそれぞれ細部の異なるフォームでしたが、フォームの内容をJavaScriptのfetch APIに渡し、処理が成功したらリロードするようにしたため、完全に共通のフォームの部品を使えるようになりました。
掲示板の投稿や表示に合言葉の入力が必要な設定で使っている時に表示される、合言葉入力フォームを外部化して、こちらも処理が成功した時にリロードするようになりました。 - 指定日数を超過して閉じたスレッドのレスカタログ画面にMisskeyノートのリンクが表示されるバグを修正しました。
- レスカタログモードから[管理]のリンクを経由して管理者モードにログイン・ログアウトした時に、もとのレスカタログページにもどるようになりました。
- この更新の主な内容はテンプレートの保守の容易さを確保するためのものですから、今回のテンプレートの更新はエンドユーザーが必ずしも変更しなければならないものではありません。
ただし、テンプレートを更新する場合は、template/basic/js/common.js
の更新が必須になります。 テンプレートをカスタマイズしていない場合は、template/
ディレクトリを上書きアップデートするだけで更新が終わります。
- ChickenPaint Beのグループ結合アイコンのデザインを変更しました。
- レイヤーパレットに複製アイコンを追加しました。
レイヤーやレイヤーグループを1タップで複製できるようになりました。
これまではショートカットキーを使用するか、上段のメニューから複製を選択する必要がありました。 - 下のレイヤーと結合アイコンをより視覚的にわかりやすいものに変更しました。
- レイヤーグループ結合アイコンを下のレイヤーと結合アイコンと同じ位置に配置しました。
レイヤーグループのフォルダ選択時はグループ結合アイコンになり、レイヤーの選択時には下のレイヤーと結合アイコンに入れ替わります。
- 背景レイヤーと透明なレイヤー合計2枚で起動します。
白い背景レイヤーに線画を描く事故を減らせます。
- klecksを最新版に更新しました。
- ファイル名を
noticemail.inc.php
に変更しました。 古いコードにはnoticemail.inc
のように拡張子がinc
のものが多く存在しますがセキュリティ上の観点から最近はあまり使われていません。そのためnoticemail.inc
からnoticemail.inc.php
にファイル名を変更しました。
またファイル名の変更だけではなく内部の処理も変更しましたので今回追加されたnoticemail.inc.php
をご利用ください。
noticemail.inc.php
のアップロードを忘れるとファイルが存在しない事を知らせるエラーメッセージが表示され、掲示板が動作しなくなりますので、必ずアップロードしてくださいますようお願いします。 - 送られてくる通知メールの
Name: Subject:
が、日本語の名前: 記事題名:
になりました。
英語版のPetit Noteの場合は、config.phpをアップデートすれば従来通りの英語表記になります。 日本語で使用する場合は設定不要です。 設定項目が存在しない時はデフォルト設定の日本語で通知メールが送信されます。
- iPad Air相当の幅または.高さが820px以下でタッチデバイスの時にモバイルモードで起動するようになりました。
これまでは、幅または高さが800px以下という条件だったため、iPad Airの時はPC用UIで起動していました。
またPCでブラウザのウィンドウサイズを小さくした時にもモバイル用の画面に切り替わっていましたが、タッチデバイス判定処理を追加した事によりPCではPC用のUIで起動するようになりました。
- 拡張子
.json
の呼び出しを禁止する設定にしていましたが、PWAやスマホのホーム画面に設定するためのアイコンを設定するmanifest.json
の呼び出しも禁止になってしまいタッチアイコンが設定できなくなっていたため、ファイル名がmanifest.json
の場合は呼び出し可能になるように設定を変更しました。
この更新はmanifest.json
の設置が必要ない場合は関係ないため、その場合は更新する必要はありません。
- モバイルモード時にレイヤーパレットの不透明度調整スライダの文字がぼやけてしまう問題を修正しました。
-
ツールオプションのスライダの間隔を広げて、指で操作できるようにしました。
-
画面の幅に余裕があるにも関わらずツールオプションの画面上からの位置がモバイルモード時は操作パレットの下になってしまっていたため、
画面幅-(ツールパレット+操作パレット)<200px
の時は、操作パレットの下の位置、それ以上の画面の横幅がある時は最上段に表示するようにしました。 これによりより広く画面を使えるようになります。
- 768px以下の幅と高さのデバイスの時はスマホ用のUIに切り替えてパレットを折りたたみます。UIが使用する面積が少なくなるため、より大きなキャンバスに描画する事ができるようになります。
iPad.mini.mp4
- スマホ用UIの時のカラーセットのマージンを広げ、指でタップできるようにしました。
- 表示専用であるにも関わらずスマホのスクリーンキーボードが表示されてしまうため、readonly属性を追加しました。
- スマホモードの時のパレットのタイトルバーの厚みを折りたたみ/展開の操作を容易にするため増やしました。
- スマホモード時のレイヤーパレットの操作アイコンの間隔が狭くなっていたため広げました。
- 折りたたみ/展開のアイコンと閉じるアイコンの両方を表示する事により誤タップが発生して、誤って閉じてしまう事があったため、スマホモード時は閉じるアイコンを表示しなくなりました。 代わりに上段の表示/非表示のショートカットメニューで操作します。
- パレット表示非表示のショートカットメニューがスマホ・タブレット以外でも常に表示されるようになりました。
- 横幅にあわせたレスポンシブデザインをさらに最適化しました。
- ショートカットメニューの色を黄色からライトグレーに変更しました。
default.mp4
- スマホ時にもあえてブランドロゴを表示して、ブラウザのホームボタンの誤タップが発生しないようにしました。
- パレット表示非表示のショートカットメニューがデバイスの幅いっぱいに広がるようにしました。
これまでは、間隔が狭すぎて意図した箇所の黄色いショートカットメニューをタップできない事がありました。
- スマホ時のChickenPaintのメニュー操作で、ぼかしやグリッド設定などの数値入力を行ったあとキャンバスサイズが全画面にもどらなくなる問題を、v1.36.8で修正しましたが、パレット位置がモーダル表示前と表示後でずれる問題が残っていました。
モーダルウィンドウの表示イベントを取得して、自動的にハンバガーメニューを閉じるようにして、この問題を修正しました。 - スマホ・タブレットを縦または横に変更したときにハレットの配置を自動的に初期化します。 v1.36.8で、ウィンドウのサイズが変更になった時にパレットの配置の初期化する処理を追加しましたが、レイヤー名のリネーム時のスクリーンキーボードの出現をウィンドウのサイズ変更として検出してしまい、レイヤー名を変更できなくなっていたため、スマホ・タブレットの向きが変更された時にパレットの配置の初期化するようにしました。
- v1.36.10で追加した
"orientationchange"
が非推奨になっていたため、screen.orientation
オブジェクトの変更を取得するようにしました。 - スマホ用のパレット表示/非表示のショートカットメニューがGoogle Pixel 7や、iPhone14 で表示されない事が判明したため、デバイスのCSSピクセルが幅800px高さ768px以下の時にはスマホ用のショートカットメニューを表示するようにしました。
- ブラシを変更しながら描きたい時に毎回折りたたまれてしまうとタップする回数が増えてしまいます。
スマホ時は全パレットの非表示もショートカットメニューを1タップすれば可能なため、ツールパレットの自動折りたたみ機能を廃止しました。
- スマホ時のChickenPaintのメニュー操作で、ぼかしやグリッド設定などの数値入力を行ったあとキャンバスサイズが全画面にもどらなくなる問題を修正しました。
スマホを縦横に傾けた時に、レイヤーパレットの位置が期待した位置に表示されない事がある問題に対応するため、画面のリサイズ時にパレット配置の初期化を自動的に行うようにしました。
PCでブラウザのウィンドウサイズを変更した時にもサイズが変わるたびにパレットの配置が初期化されます。
これにより、ウィンドウの幅を狭くした時にパレットが左に偏ってしまいウィンドウを広げ直しても元に戻らなくなっていた問題も解決しました。
ただし、ウィンドウを少し変更するだけでパレットの配置が初期化されてしまうため、パレットの位置を動かしながら描きたい場合には問題が発生するかもしれません。 しかしながら、ウィンドウのサイズを変更しなければ初期化はされませんので、一定のブラウザのウィンドウサイズで描く分には問題ないはずです。
- ChickenPaint Beのレイヤーパレットの操作アイコンが横1列に収まるように調整しました。 これまでは、スマホやタブレットの時に改行が入り、ゴミ箱アイコンの手前で改行が入っていました。 (Androidスマホで動作確認しました。iOSでの実機による動作確認はできていません。PC版chromeのエミュレータにのみ。)
- ChickenPaintの操作パレットに左右反転アイコンを追加しました。
キーボードショートカットキーを使うことができない端末でも簡単に左右反転できるようになりました。
ただし、レイヤー単位の左右反転になり、表示の左右反転ではなく実データの左右反転になります。
そのためこの左右反転は履歴にも残ります。
v1.32.1で追加した「編集前・編集中画面」での「閲覧注意画像を隠す/隠さない」を設定するテンプレートの変数の未定義エラーを修正しました。
- ChickenPaint Beで使用しているBootstrapをv5.3.3にアップデートしました。
- ChickenPaint beで使用されていた非推奨の構文
returnValue
を修正しました。
設定がtwitter.com
でもx.com
、でもx.com
のURLでSNS共有リンクが作成されるようになりました。
// SNS共有の時に一覧で表示するサーバ
//例 ["表示名","https://example.com (SNSのサーバのurl)"],(最後にカンマが必要です)
$servers =
[
["X","https://x.com"],
["Bluesky","https://bsky.app"],
["pawoo.net","https://pawoo.net"],
["fedibird.com","https://fedibird.com"],
["misskey.io","https://misskey.io"],
["misskey.design","https://misskey.design"],
["nijimiss.moe","https://nijimiss.moe"],
["sushi.ski","https://sushi.ski"],
];
config.php
のX(旧ツイッター)のURLがtwitter.com
のままでも問題なくx.com
のリンクが作成できるようにしました。
一覧で開くSNSの名称が「Twitter」のままでも構わなければ、config.phpを修正する必要はありません。
ただし、config.php
の設定が優先されてしまうため、旧ツイッターを「X」と表示させたい場合は、上記の該当箇所を["X","https://x.com"],
に変更する必要があります。
- v1.33.6で追加した、コメント本文が変更されている時に別ページに移動する時の警告が、記事の投稿時にも表示されてしまうバグを修正しました。
- PC版Chromeでは発生ぜず、Mac、iOSのsafariの時にのみこの問題が発生していました。
- v1.33.8の修正では不十分だったため、PlaywrightでSafariの動作を確認して再度修正しました。
- v1.33.6で追加した、コメント本文が変更されている時に別ページに移動する時の警告が、記事の投稿時にも表示されてしまうバグを修正しました。
- PC版Chromeでは発生ぜず、Mac、iOSのsafariの時にのみこの問題が発生していました。
- JavaScriptの関数を関数式に変更する事で、safariの関数巻き上げによる関数内の変数未定義問題を修正しました。
- コメント本文を入力途中の時に、再読み込や、別のページへ移動が発生した時に「このサイトを離れますか?行った変更が保存されない可能性があります。」というダイヤログを出して、現在のページに留まるかどうか確認します。
これにより、入力途中の本文が失われるリスクを軽減できます。 - スマホ+指では、「続きを描く」「動画再生」のリンクを押しにくい状態だっただめ、画面が狭いデバイスの時はこれらのリンクの上下の間隔が広くなるようにしました。
- お絵かきコメント入力画面に画像が存在しない時にJavaScriptの軽微なエラーが発生していたのを修正しました。
- 外出先等でスマホを使って掲示板を管理する時に閲覧注意画像を表示したくない時があるかもしれません。
記事の編集中は画像が見えていたほうがいいだろうという判断で、編集中は画像にぼかしのフィルタがかからないようにしていましたが、ぼかしのフィルタをかける、かけないを選択できるようにしました。
これにより、閲覧注意画像にぼかしフィルタがかかった状態で記事の編集が可能になります。
- スマホ時はフォントサイズを1.1remに拡大。 Google Pixel 7aの実機で見てみたところ軽度の老眼でも厳しかったのでフォントサイズを大きくしました。
管理者編集モード時は閲覧注意画像を隠さない仕様なので、隠す/隠さないの設定を表示しない。 管理者編集モードの時には閲覧注意を隠す/隠さないの設定をしていてもしていなくても、画像が表示されるので、管理者編集モード時にはそのメニューを表示しません。- 管理者編集モード時には閲覧注意画像にフィルタがかからない仕様でしたが、閲覧注意画像を隠すに設定すると画像にぼかしが入るようになりました。
閲覧注意画像がそのまま表示されていると人目が気になる場所でモデレーションができなくなるからです。
ただし、編集画面では画像にぼかしがはいりませんのご注意ください。 - PCではカタログ表示5列、タブレット・スマホで4列にしていましたが、スマホで閲覧すると画像が小さくなってしまうため、スマホ時は横3列になるようにしました。
(今回のリリースではv1.30.0、v1.30.1、v1.30.2の更新内容をまとめてリリースしています。前回のリリースv1.30.1はリリースノートは更新されていましたがファイルが更新されていませんでした。)
- Blueskyが、共有一覧に無い時にも、直接入力で
https://bsky.app
と入力すればBlueskyに共有できるようになりました。 - スマホ等で、X、Bluesky、Misskey等に共有するときにアプリ版が起動し、共有サーバの選択画面がChrome側に残ってしまう問題を修正しました。
SNSの共有サーバ一覧画面からフォーカスが外れた時に、画面を閉じるようにしてこの問題を解決しました。
ただし、一覧画面からすでに、SNSのサイトに画面が移動している時はフォーカスが外れても閉じません。
その場合は、すでに入力中か、あるいはSNSの投稿を閲覧中だからです。
PCで使用している時にも発生していた、SNS共有ウィンドウがいくつも開いて残ってしまう問題も解決しました。
「編集」「削除」「Misskeyにノート」ボタンを押下したあとに表示される画面の「掲示板にもどる」リンクを改善しました。
「掲示板にもどる」場合は、ボタンを押す前のもとのページ番号に戻ります。
「スレッドにもどる」リンクへの自動切替を行い、ボタンを押す前のもとのスレッドに戻ります。
Twitter、マストドン、Misskeyに加え、Blueskyへの記事の共有もできるようになりました。
ただし、これを有効にするには、config.php
の設定が必要になる場合があります。
// SNS共有の時に一覧で表示するサーバ
//例 ["表示名","https://example.com (SNSのサーバのurl)"],(最後にカンマが必要です)
$servers =
[
["Twitter","https://twitter.com"],
["Bluesky","https://bsky.app"],
["pawoo.net","https://pawoo.net"],
["fedibird.com","https://fedibird.com"],
["misskey.io","https://misskey.io"],
["misskey.design","https://misskey.design"],
["nijimiss.moe","https://nijimiss.moe"],
["sushi.ski","https://sushi.ski"],
];
config.php
のSNS共有サーバの設定項目がすでに存在している時にはその設定が優先されるため、config.php
に
["Bluesky","https://bsky.app"],
を追加する必要があります。
Blueskyへの記事の共有が必要ない場合は特に何もしなくてもそのほかの機能は正常に動作します。
もしも、共有するサーバ一覧が増える事で、ポップアップメニューに入り切らなくなってしまった場合は、
//windowの高さ 初期値 490
$sns_window_height = 490;
を490より大きな数値に変更してみてください。
今回更新したconfig.php
は、
https://mstdn.jp/
を外し、代わりにBlueskyを追加して共有するサーバの数を増やさない形で対応しています。
ここには、マストドンやMisskeyであれば何件でもユーザーがサーバを追加できますので、必要に応じて追加や削除をお願いします。
なおこのリリース執筆時点で、Bluesky共有の際に二回キー操作を行わないとリンクカードが表示されない現象を確認しています。
現時点ではBlueskyの仕様であるためどうする事もできません。
エンターキーを二回でもスペースキーを二回でも構いませんので、キー操作を行えば表示されます。
- 比較的初期に書いたJavaScriptのコードを修正しました。
より適切で読みやすいコードに修正しました。 - 管理者編集モードでログインした時の表示を修正 編集モードでログイン中です。→管理者編集モードでログイン中です。
- ChickenPaintの画像差し換え時のパスワード処理の関数の文法の厳格化。 宣言なしの変数に関数を代入してグローバルスコープで参照していましたが、あまり良い書き方ではないため定数化し、定数化した状態でも動作するようにしました。
- CSSの配色を微調整
- 上に戻るボタンの円がスクロールバーにかかってしまうため、6px左に移動しました。
- 管理者による記事編集時は、IDを変更しません。(ホスト名は変わります)
CSSを修正しました。
ライトモード時の掲示板タイトル、記事タイトル、名前、チェックされた項目等の太字の箇所の文字色を#555
に戻しました。
モニターの性能によっては何が変わったのかわからない程度の差かもしれないのですが、ダークモード実装後のライトモード表示が何か落ち着かない感じがしたため、修正しました。
また、ほぼ必要ないのかもしれないけれど、もしかしたら別の色に設定したい人がいるかもしれないため、チェックボックスとラジオボタンのチェック済み時のラベルの文字色を設定できるようにしました。
ダークモードの背景色を調整しました。
ダークモードの記事タイトルの背景色を調整しました。
より作品が映える配色になりました。
/* チェック済みのフォームのラベルの色 */--checked-color:var(--title-a-color);
このように、初期状態では、タイトルのリンクの文字色--title-a-color
を使いまわしています。
ここを別の色に設定したい時は、RGBやHSL、16進数等で色を指定します。
自動リンクの正規表現を修正しました。URLとして判定する文字に:
を追加しました。
これによりInternet ArchiveのURLの自動リンクが可能になります。
この仕様は過去の投稿にさかのぼって適用されます。
https://example.com/https://www.example.com
tegaki.jsが更新されたので、それを元にして、改造していた箇所を再改造して日本語化そのほかの機能を追加しました。
更新内容はアニメ再生時の不具合の修正のようです。
閲覧に合言葉が必要と設定した時の合言葉入力欄のHTMLのタイトルタグに掲示板の名称が入るようになりました。
あえて<title></title>
としていましたが、中身が空だとHTMLの文法エラーになってしまうため、titleタグに掲示板名を入れました。
もしも検索よけが必要な場合は、robots.txt
の設置をおすすめします。
Googleで検索すれば検索避けとしての使い方がたくさん出てきます。
ChickenPaintのレイヤーをリネームして、iPadのスクリーンキーボードが画面から消えた時にChickenPaintのメニューバーが隠れてしまう問題に対応しました。
スクリーンキーボードが表示されると画面が強制スクロールされますが、キーボードが消えたあとが元の位置にもどらなくなっていたのを修正しました。
CSSの新しい単位dvhを使用して、高さを100vhから、100dvhに変更しました。
従来の右クリックに加え、ペン、指による長押しでも、パレットに色を登録できるようにしました。
ただし、パレットを長く押してしまうと長押しになり、色の選択ではなく色の登録になってしまいます。
色を拾うだけの時は長押しにならないようご注意ください。
ショートカットキーを追加しました。「ctrl+i」でネガポジ反転できるようになりました。
レイヤーマスクのネガポジ反転も可能です。マスクをネガポジ反転して、可視領域を反転する事もできます
カタログ用のwebpサムネイルが存在しているにも関わらず、レスカタログモードおよび、Misskeyノート画像一覧で、PNGまたはjpegのサムネイル画像が表示されていました。
ダークモードの採用により、透過webp画像が目視で確認できるようになった事でこのバグが見つかりました。
検索画面の画像一覧にも、カタログ表示用のテンプレートのパーツが使えるようにしました。
これにより、同じ処理の繰り返しのための余分なコードを記述しなくてもよくなりました。
サムネイル作成処理の同じ処理の繰り返しを関数化しました。
サムネイルが存在しない記事を編集した時にサムネイルがある事になってしまい、画像が表示されなくなるバグを修正しました。
カタログモードやスレッド個別表示時の下段にはすでにwebp形式の画像を採用していましたが、記事本文内のサムネイル画像はjpeg形式のままでした。
その記事本文のサムネイルをwebp形式対応にして、webp形式が読み込めるブラウザの場合はwebpで表示します。
ブラウザが対応していない場合はjpeg形式のサムネイルを表示します。
pictureタグで自動的に振り分けます。
- ファイルサイズが削減できる。
- 透過画像を表示できる。
jpeg形式では透明色を作る事ができないため不透明な画像にしかなりません。
webp形式なら、透明な箇所を透明なまま表示する事ができます。
透過画像に対応できるwebpなら、ChickenPaintで透過画像を作成して、サムネイルも透過画像にする事ができます。
透過GIF、透過PNG画像をアップロードして透過webp形式のサムネイルを作る事もできます。
Lightboxで画像をポップアップ表示した時の背景がより暗くなるようにしました。
ダークモードを実装しました。
しかしながら、ダークモードを使いたくないという方もいると思います。
また、ライトモードからダークモードに切り替えるのではなく、最初からダークモードにしたい方もいるでしょう。
例えばサイトの全体の色調はダークモードなのに掲示板だけライトモードの場合等です。
そのため以下の設定項目をconfig.phpに追加しました。
//ダークモードを使用する
// する: true しない: false
$use_darkmode = true;
// $use_darkmode = false;
//デフォルトの表示をダークモードにする
// する: true しない: false
// $darkmode_by_default = true;
$darkmode_by_default = false;
これらの設定項目が必要ない場合は、すでに設定ずみのconfig.phpをそのままご利用ください。
設定項目が存在しない場合は、「ダークモードを使用する」「デフォルトの表示はライトモード」になります。
ChickenPaint Beのレイヤーの合成方法やブラシ先端を選択するためのセレクトメニューが、iPadで操作できなくなっていたのを修正しました。
CSS カスタムプロパティ(変数)の使用 - CSS: カスケーディングスタイルシート | MDN
変数で色を指定するCSSカスタム変数により、簡単に色の設定ができるようになりました。
:root{/* ライトモードの配色 */
/* 文字色 */--text-color: hsl(200 5% 30% / 1);
/* リンクの色 */--a-color:var(--text-color);
/* リンクホバー */--a-hover-color:var(--text-color);
/* 背景色 */--background-color:#fff;
/* 掲示板タイトルの文字色 */--title-a-color: var(--a-color);
/* 記事タイトルの文字色 */--article-title-color: var(--a-color);
/* 記事タイトルの背景色 */--accent-background-color:#ffe6e6;
/* 記事タイトル背景色のアクセント */--strong-accent-background-color:#ffcfcf;
/* チェック済みのフォームのラベルの色 */--checked-background-color:var(--accent-background-color);
/* ボーダー */--border-color: var(--strong-accent-background-color);
/* 点線 */--border-dashed-color:#888;
/* ラベルのボーダー */--border-label-color: var(--checked-background-color);
/* ダイナミックパレットのボーダー */--border-dynamic-palette-color: #555;
/* 名前のリンクの色 */--name-a-color:var(--a-color);
/* 名前のリンクのホバー */--soft-hover-color:#fff7f7;
/* 閲覧注意の文字色 */--posted-image-span-color: #fff;
/* 閲覧注意の背景色 */--posted-image-span-background-color: #555;
/* 上に戻るボタンの矢印の色 */--page-top-color: #fff;
/* 上に戻るボタンの背景色 */--page-top-background-color:var(--strong-accent-background-color);
/* エラーメッセージの背景色 */--error-message-background-color:hsl(60 100% 88% / 1);
/* 注意が必要な項目の背景色 */--warning-color:#fff;
/* 注意が必要な項目のボーダー */--warning-border-color:rgb(255, 170, 192);}
.darkmode{/* ダークモードの配色 */
/* 文字色 */--text-color: hsl(205 16% 90% / 1);
/* リンクの色 */--a-color: hsl(211 18% 79% / 1);
/* リンクホバー */--a-hover-color:var(--a-color);
/* 背景色 */--background-color: hsl(202 22% 14% / 1);
/* 掲示板タイトルの文字色 */--title-a-color: var(--a-color);
/* 記事タイトルの文字色 */--article-title-color: var(--a-color);
/* 記事タイトルの背景色 */--accent-background-color: hsl(205 25% 26% / 1);
/* 記事タイトル背景色のアクセント */--strong-accent-background-color: hsl(205 30% 37% / 1);
/* チェック済みのフォームのラベルの色 */--checked-background-color:var(--accent-background-color);
/* ボーダー */--border-color: var(--strong-accent-background-color);
/* 点線 */--border-dashed-color: var(--border-color);
/* ラベルのボーダー */--border-label-color: var(--checked-background-color);
/* ダイナミックパレットのボーダー */--border-dynamic-palette-color: hsl(211 30% 38% / 1);
/* 名前のリンクの色 */--name-a-color:var(--title-a-color);
/* 名前のリンクのホバー */--soft-hover-color: hsl(205 20% 18% / 1);
/* 閲覧注意の文字色 */--posted-image-span-color: #fff;
/* 閲覧注意の背景色 */--posted-image-span-background-color: #555;
/* 上に戻るボタンの矢印の色 */--page-top-color: #fff;
/* 上に戻るボタンの背景色 */--page-top-background-color: hsl(205 33% 29% / 1);
/* エラーメッセージの背景色 */--error-message-background-color:var(--accent-background-color);
/* 注意が必要な項目のボーダー */--warning-border-color:rgb(255, 170, 192);
/* フォーム入力欄の背景色 */--form-input-background-color: #e5eaeb;input[type="text"], input[type="password"], input[type="url"], textarea, select {
background-color:var(--form-input-background-color);
}}
この色の設定項目は、index.cssの行の先頭にあります。
この箇所を変更するだけで、細やかに色の設定を行う事ができるようになりました。
ライトモード、ダークモードそれぞれの色を設定できます。
この色の設定に特別なアプリは必要なく、Google Chromeの開発者ツールで変数の色を設定して、Chromeで変更したCSSをPCに保存するだけで色の設定ができます。
記事のタイトルの背景色を朱色から青に変更する場合は、
/* 記事タイトルの背景色 */--accent-background-color:#ffe6e6;
上記の箇所を変更するだけで変更が完了します。
/* 掲示板タイトルの文字色 */--title-a-color: var(--a-color);
すでに変数で設定した色を別の変数でも使う場合は、変数の値に変数を使用できます。
値に変数を使わなければならない訳ではなく、変数を使う事もできるだけです。
var(--a-color)
となっている箇所を16進数やhsl、rgbで直接設定する事もできます。
また、変数名はエンドユーザーが変更・追加できます。
もっと多くの変数が必要な場合は自由に追加する事ができます。
ペイント画面ではブラウザデフォルトのショートカットキー「ctrl+o」が無効になるようにしました。
描画中にファイルを開くと、開いたファイルが表示され、描いているイラストが消えてしまうからです。
Chromeの警告を回避するため、PaintBBS NEOと、chickenpaint Beを更新して、明示的に{passive: false}を指定しました。
警告がでなくなっただけで、動作が変わった訳でも処理が速くなった訳でもないのですが、警告の件数がかなりの数にのぼっていたため修正しました。
長い間気になっていた、パスワード等の機密データのGET渡しをfetchを使ったPOSTに変更する事ができました。
パスワードはPHPのOpenSSL 関数 で暗号化して、リダイレクトの一瞬のURLにそのデータを入れて送信していました。
リダイレクト処理なのでブラウザの履歴にはそのURLは残りません。
とはいっても、GETはURLそのものにデータをセットしますから、URLが判明すればセキュリティ上のリスクが発生します。 その懸念を払拭するために、PaintBBS NEOとChickenPaint Beを更新して、画面移動時の処理を掲示板で用意した関数を使って実行できるようにしました。
これにより、他の掲示板の開発者も、それぞれの掲示板に必要なデータの受け渡しを、NEOやChickenPaintをこれ以上改造する事なく、掲示板側で用意したJavaScriptで実行する事が可能になり、柔軟に対応する事ができるようになりました。
KlecksとTegakiは通信に関する処理が内部には存在していないため、これまでも掲示板側で通信の制御を行っていました。
この2つのアプリの通信に関する処理も改良して、より安全なPOSTによるデータの受け渡しに移行しました。
KlecksとTegakiの画像差し換え時のデータの送信をGETパラメータから、fetchを使ったPOSTに変更しました。
テンプレート内のJavaScriptの行数は増えましたが、安全性がより一層高まりました。
ペイント画面のテンプレートに残っていたusercodeを削除しました。
また、NEOの拡張ヘッダの使用が受信に失敗する原因ではなかった事が確定したため、GET渡しから、拡張ヘッダ経由のPOSTに戻しました。
変数に格納されたテキストが HTML として解釈されるXSSの脆弱性を修正しました。
現時点で配布されている最新版のlightboxに存在する問題をPetit Noteで独自に修正しました。
編集モードの時のボタンの配色変更処理を忘れていたため追加しました。
編集画面でも、「閲覧注意にする」にチェックが入るとボタンの周囲にピンク色のボーダーが入り背景色が白くなります。
「閲覧注意」に設定している時は「スレッドを立てる」「投稿する」等のボタンの周囲にピンク色のボーダーが入り、ボタンの背景色が白くなるようにしました。
これにより、「閲覧注意」に設定し忘れていた、逆に「閲覧注意」に設定されているとは思わなかったというトラブルを解消できます。
また、「閲覧注意にする」チェックボックスの配置を、「投稿する」ボタンの常に左側に表示するようにしました。
ほとんどの場合、文字を読む方向の左から順番に目視して確認するためです。
これにより、設定のし忘れ、間違いを減らす事ができます。
また、画像を添付していない時には「閲覧注意にする」チェックボックスを表示しないようにしました。
文字しか投稿しないのに「閲覧注意にする」のチェックボックスが表示されているのは変だからです。
これらの対応には少し長いJavaScriptが必要でしたが、なんとか対応しました。
「閲覧注意にする」のチェックボックスにデフォルトでチェックが入るようになりました。
デフォルトでチェックでは困る場合は、config.php
のどの場所でもいいので以下の設定項目を追加してください。
設定項目が存在しない場合は、デフォルトで「閲覧注意にする」がチェックされた状態になります。
//「閲覧注意にする」をデフォルトでチェックする
//する: trueに設定すると「閲覧注意にする」設定のチェックボックスがデフォルトでチェックされます。
// する: true しない: false
$nsfw_checked = true;
// $nsfw_checked = false;
閲覧注意の設定項目を使う設定にしている場合しか関係ない設定項目ですので、閲覧注意の設定項目が表示されないようにしている場合はこの設定項目は必要はありません。
このボタンを押すと削除されてしまう最後の削除ボタンの配色を変更しました。
編集ボタンと間違って削除する事故を防止します。
NEOが起動している画面ではNEOのキーボードショートカットキーとテキスト入力以外のキー操作ができませんでした。
そのため、動的パレットの「textarea」へのパレットデータの貼り付けのためにマウスの右クリックメニューを使用する事しかできない状態でした。
また貼り付けたパレットデータの編集もできませんでした。
2024年に動的パレットのデータの取得や貼り付けを使っている人はそれほど多くいないとは思いますが、これが使えると自分専用のパレットをどこの掲示板でも使えるようになります。
今回の更新で、パレットデータの入力欄のキー入力が可能になりました。
オリジナルのPaintBBSのようにctrl+v(貼り付け)crtl+x(切り取り)ctrl+c(コピー)crtl+a(すべて選択)等がパレットデータ入力欄で使用できるようになりました。
また、NEOの文字入力機能使用時に全キー入力が許可されてしまい、ctrl+r(リロード)crtl+h(履歴)ctrl++(拡大)ctrl+-(縮小)のブラウザデフォルトのショートカットキーが作動してしまう問題も修正しました。
TegakiのデータがPOST可能な限界サイズを超えてしまう時は、アニメデータを切り捨てて画像だけ投稿するようにしました。 (前回のNEOの更新のTegaki版)
neoの描画アニメのファイルサイズが大きくなりすぎてサーバで処理でなくなり、画像を含むすべての投稿が失敗する問題を修正しました。
サーバの投稿可能なファイルサイズの限界値をPHPスクリプトで取得して、それをneoに渡して計算し、限界を超える時には描画アニメファイルを切り捨てて、画像の投稿が成功するようにしました。
動画を切り捨てないと投稿そのものが失敗するため、動画はなくなりますが仕方ありません。
動画の投稿が成功する前提で一番上のレイヤーを塗り潰して下の絵を隠して続きを描く習慣がお絵かき掲示板にはありますが、その場合は動画が切り捨てられた時点で塗りつぶした一番上のレイヤーの画像しか残りませんのでご注意ください。
さくらのレンタルサーバのデフォルト設定では8MBがPOSTの上限で、それを超える場合は動画が切り捨てられます。
画像のみの投稿になりますが、投稿は成功します。
動画(レイヤー情報)がファイルサイズ超過で送信されない時は、「画像のみが送信されます。レイヤー情報は保持されません。」というダイヤログが開いて「OK」をタップした時のみ送信が実行され、「キャンセル」した時は送信されません。
画像のみの送信では困る状態の時は「キャンセル」してレイヤー情報が保持されない事を前提にした作画を続行する事ができます。
POSTの上限が8MBでは足りない場合は、php.ini
の設定で以下のように記述します。
upload_max_filesize = 22M
post_max_size = 22M
上記は、1つのファイルの最大ファイルサイズが22MBで、POSTの合計サイズが22MBまで投稿可能になるようにした設定例です。 必要に応じて増減してご利用ください。 (レンタルサーバの設定のサポートは掲示板開発者のサポート範囲外ですので、サーバ会社のQ&A等で調べていただく形になります)
関連して、続きを描く画面のダウンロードボタンの横に続きを描く時点での動画のファイルサイズを表示するようにしました。
neoの.pch
ファイルのファイルサイズがサーバに投稿可能なサイズかどうかの判断の目安になります。
HTML 属性: rel - HTML: ハイパーテキストマークアップ言語 | MDN
被リンク数が多いとSEOに有利になる事が理由で、掲示板にスパム投稿が集まる事があります。
それを回避するため、検索エンジンに評価されないようにするrel="nofollow"
を付与したリンクを作成してきました。
<a href="https://example.com" target="_blank" rel="nofollow">example</a>
のように、rel属性に"nofollow"
を付与していました。
しかし、管理者による投稿の場合は、紹介したいサイトのURLや管理者のSNSアカウントが「URL」欄に入っている事が多いため、管理者が投稿したURLには、"rel="nofollow"
を付与しないようにしました。
これにより、管理者が投稿したURLはGoogle等の検索エンジンによって評価されるようになります。
管理者投稿を示すマークが表示されている記事すべてが対象になり、過去の投稿に遡ってこの仕様が適用されます。
画像をポップアップ表示した時の背景の暗さを不透明度0.6から0.65に変更しました。 ほんの少しの変化ですが、画像の背景がより暗くなるようにしました。
レス画面用のカタログモードやMisskeyへのノートのための画像一覧の画面を開いた時に「記事がありません」というエラーにメッセージが表示され、画像がまったく表示されないバグを修正しました。
記事の最初の投稿が画像の無い文字だけの投稿の時に、記事が存在しない事になるバグを修正しました。
先読みしたJavaScriptが使用されていない状態だったのを修正しました。
ライトボックスのJavaScriptのminifyで圧縮したファイルが使用されていなかったのを修正しました。
不要な</script>
タグが混じっていたのを取り除きました。
画像をポップアップ表示する時に使用していたLuminousの開発が中止になり、中止されただけでなくLICENSEファイルもリポジトリから削除されてしまったため、LICENSE不明になってしまいました。
そのため、Lightboxを使用してポップアップ表示する事にしました。
しかし、Lightboxでは、Luminousではできていたいくつかの事ができません。
そのためLightboxを改造して、見た目と機能をLuminousに近づけてその問題を解決しました。
- 透過PNGを透過させる
Lightboxでは背景色が白になってしまうため、背景部分を透明にして透過PNG画像の背景が透明になるようにしました。 - 画像長押しで保存
Lightboxでは画像の長押しで画像を保存できない仕様のため、CSSを調整して画像の長押しで画像を保存できるようにしました。 - 前後のナビゲーションバーの位置を変更 画像の上に表示されていた前後の画像を表示するための矢印を、左右の横幅からの位置に変更して、左右に余白があるときは画像の上でではなく、画面の左右にナビゲーションの矢印を表示するようにしました。
- 閉じるボタン
前後ナビゲーションの矢印以外のどこを押しても画像を閉じるようにしました。
そのため閉じるボタンは必要がなくなりました。 - 画像読み込み中の画像
ローディング中の円のGIFを、透過PNGで作成した大小ふたつの円に変更。CSS3で画像が回転します。
PHPでエラーが発生している時にPaintBBS NEOでエラーを検出できず画面が移動して描いているイラストが消えてしまう問題を修正しました。
サーバから「ok」という文字列以外が返って来た時には、「投稿に失敗。時間を置いて再度投稿してみてください。」というアラートを開いて、投稿に失敗した事を知らせます。
ペイント画面から移動しないので、描いているイラストはキャンバスに残ります。
PHPのエラーが解消されれば、投稿可能になります。
HTMLにセットしたCookieの値と、実際のCookieの値を照合するシステムを廃止。
投稿時にCookieが存在しない場合もユーザーコードのCookieを再発行して投稿できるようにしました。
ユーザーのブラウザからCookieが消えた場合だけでなく、サーバのWAFの設定によってCookieが照合できなくなる問題にも対応できていると思います。
また、PaintBBS NEOの拡張ヘッダに情報を詰め込んでいましたが、拡張ヘッダ経由ではなく、GETパラメータで取得する方式に切り替えました。
互換性維持のため、GETで取得できない場合は拡張ヘッダでも取得できるようにしました。
これにより、save.inc.php
をアップデートした時にNEOで描いている途中の人がいても投稿できるようになります。
管理者投稿モードでは、初期設定で180日を過ぎてしまった投稿でも、続きを描く事ができるようにしていた筈でしたが、負荷削減のための配列のキャッシュを読み込んでしまい、管理者投稿モードの時にも続きを描くリンクが消えたままになるバグがみつかりました。 管理者投稿モードの時にはキャッシュを「読み込まない/書き込まない」ようにしてこの問題を解決しました。
閉じたスレッドで続きを描く→新規投稿を選択した時に「同じスレッドに表示する」のチェックボックスが表示されていましたが、実際には閉じたスレッドには投稿されず、新しいスレッドへの投稿になっていました。
「同じスレッドに投稿する」のチェックボックスを閉じたスレッドには表示しないようにしました。
- グリッド設定のモーダルを開いた時に数値入力項目にフォーカスが移動する元の仕様が動作していなかったのを修正。
- グリッド設定の数値入力確定のエンターキーで画面が移動してペイント画面から移動する問題が残っていたのを修正。
仮に意図どおりに処理が行われなかった場合でも、エンターキーが無効になるだけにして被害が最小になるように。
その上で、グリッド・ぼかし・変形確定のエンターキーが意図どおりに動作する事を確認しました。 - グリッド、ぼかしの表示終了後はモーダルを破棄するようにしました。 この問題は改造前のChickenPaintに存在していた問題で、新しく発生したものではありません。
"+", ";", "=","-","s","h","r"
が入力できなくなっていました。
これは、v1.12.2.3で、ctrl+rによる画面更新を防止するためにキーのDefaultの動作をキャンセルした時に発生したものです。
ctrlキーまたは⌘キーが押下されている事を確認した上でその組み合わせの場合のみDefaultの動作をキャンセルするようにしました。
innerHTML
でテキストを使用している箇所をテキストしか入らないtextContent
へ。- ぼかしフィルタのモーダルを開いた時に数値入力項目にフォーカスが移動する元の仕様が動作していなかったのを修正。
- ヘルプの3つの項目のモーダルを非表示にしても構築されたモーダルのHTMLが見えないだけで残ってしまっていたのを消去するようにしました。
- 「ctrl+r」による再読み込み、「ctrl++」によるブラウザ全体の拡大縮小、「ctrl+h」による履歴の表示「ctrl+s」によるページを保存といったブラウザのデフォルトのショートカットをChickenPaint、Tegaki、Klecksのペイント画面で無効化しました。
- ChickenPaintのショートカットキーを変更。「ctrl+y」をやり直し、「ctrl+h」を変形にしました。
- Macの時はマスク適用、マスク削除のショートカットキーを「⌘+」に。
これは、かなり以前から存在していた問題です。
「透明部分を保護」等のチェックボックスや「合成方法」等のセレクトボックスを操作すると、ChickenPaintのショートカットが効かなくなる問題がありました。
ショートカットが使えなくなった時は、画面のどこかをペンでタッチするとショートカットが再び使えるようになるので、操作を続行できにはできていたのですが、「ctrl++」で画面を拡大しようとした時にブラウザのショートカットが有効になりUIが拡大されてしまったり、「ctrl+s」で画像をPCに保存しようとしたらブラウザのデフォルトのショートカットとして認識されてしまって、画像の保存ではなくHTMLが保存される等の問題が発生していました。
時間がかかりましたが、何とか問題を特定し、解決方法を見つける事ができました。
問題があった箇所を操作しても、ChickenPaintのショートカットは有効なまま維持されます。
ブラウザのデフォルトのショートカットと入れ替わってしまう問題は解消されました。
しかし、念のため、UIの拡大のショートカットに使用される「+」「-」と、保存に使用される「s」のブラウザのショートカットキーを最初から無効化する処理も追加して、意図しない動作にならないようにしました。
- icomoonで、fontawesomeのアイコンフォントのファイルサイズを1/18に。 これまでは使用していないフォントを大量に読み込んでいました。
- ドロップダウンメニューのHTMLをBootstrap5.3形式に統一しました。
-
ズームの拡大率を141%に、縮小率を70.92%に変更しました。
これまでは、拡大時に200%拡大され、縮小時には50%に縮小されていました。 この拡縮率は大きすぎるため、二度拡大すると200%になるように調整しました。
また、拡大縮小を繰り返すと、100%、200%または50%に戻らなくなる事がありました。
拡大縮小を繰り返しても、100%、200%または50%に正確に戻るようになりました。 -
70.92%に縮小した時に描線がガタガタに表示されてしまうため、ズーム時に補完して表示するオプションをデフォルトで有効になるようにしました。
ドットの状態を確認したい時には、この機能をオフにする必要があるため「表示」→「ズームをなめらかに表示する」をオフにしてご利用ください。
- ショートカットキー一覧、送信ダイヤログの未翻訳箇所の日本語訳を追加しました。
「Right」「Left」も「右」「左」に翻訳しました。
この間の更新でレイヤーマスクやブラシサイズのスライダーのショートカットキーも追加されていますので、見やすくなったショートカットキー一覧のヘルプをぜひご利用ください。
- 必要がなくなったコードを整理しました。
余計なコードが残っていると、そのコードに何らかの意味があるかもしれないとなって、今後の保守作業に影響がでます。
また、Bootstrap5の文法にそって記述していれば追加のJavaScriptが必要ない事が判明した箇所のJavaScriptの撤去も行いました。
ドロップダウンメニューのメニュー項目にカーソルを合わせた時に英語の説明文が表示されていましたが、表示する項目を整理して必要なものだけ残し、それを日本語に翻訳しました。
レイヤーマスクのサムネイルをクリックして使用するショートカットキーを追加しました。 以下の一覧にはマニュアルに記載がなかったものの最初から存在していたショートカットキーも含まれています。
- シフト+クリックでレイヤーマスクの表示/非表示
- alt+クリックでレイヤーマスクのマスク部分を表示
- ctrl+クリックでレイヤーマスク適用
- シフト+ctrl+クリックでレイヤーマスク削除
このショートカットキーの追加で、レイヤーパレットの右クリックメニューに存在していた処理を行う事がでるようになりました。
どのぐらいの方が使っていたのかわかりませんが、レイヤーパレットの右クリックメニューにはグループ結合や、レイヤーマスクの表示/非表示等数多くの項目が存在していました。
CSSフレームワークBootstrapをBootstrap4からBootstrap5対応に変更する作業で、この右クリックメニューを再実装する事ができなかったため、多くの埋め合わせを行いました。
レイヤーパレットにグループ結合アイコンを追加したのもそのためです。
しかし、iPad等最初から右クリックが使えない環境の場合は、より操作しやすいChickenPaintになっていると思います。
通常の下のレイヤーと結合で結合するとクリッピングが解除されてしまいますが、レイヤーグループ内で下のレイヤーとクリッピングしていれば、グループ結合でレイヤーを結合しても、クリッピングが維持できます。 また、たくさんレイヤーがある時はグループ化して閉じればレイヤーパレットの場所を取らず便利です。
しかし、これまではグループレイヤーを結合するには右クリックメニューから選ぶか上段のメニューからグループ結合を選択する必要がありました。
そして、レイヤーの右クリックメニュー機能を再実装できなかったので、実質上のメニューか、ショートカットキーでしか操作できなくなっていました。
そこで、レイヤーパレットに「グループ結合」アイコンを追加しました。
1タップで、グループフォルダ内のレイヤーを結合して1つにします。
レイヤーパレットのマスクアイコンの動作を変更しました。
選択しているレイヤーにマスクが無い時は「マスク追加」になり、マスクが存在している時は「マスク適用」に変わります。
これによりペン操作で簡単にレイヤーマスクを適用できようになります。
これまでの、マスクアイコンには「マスク追加」機能しかありませんでした。
- SHIFT+Mでマスク削除
追加されたショートカットキーの一覧はこのページを確認して覚える必要はありません。
メニューの横にショートカットキーが表示されていますので、追加されたショートカットキーはそこから確認できます。
- 右クリックで、ブラシパレットのスライダーが緩やかに変化するようになる機能を改善しました。
従来は、ブラシサイズと、不透明度以外のスライダーも右クリックによる緩やかなスライダーの変化の動作に入っていましたが、スライダーの種類によっては28%や56%でスライダーが動かなくなる等の問題が発生していました。
また、右クリックしながらスライダーを調整するのは結構面倒です。
- 右クリックによるドラッグに加え、SHIFT+左ドラッグでもスライダーが緩やかに変化するようにしました。
ペンを使っている時は、シフトキーを押しながらペンでスライダーを調整するだけで緩やかに変化するようになります。 - ブラシサイズと不透明度以外の期待通りに動作しないスライダーには緩やかなスライダーの変化を適用しないようにしました。
ブラシサイズと不透明度以外のスライダーが途中で止まったり、スライダーが入力できなくなったりする項目のスライダーは最初から緩やかに変化するスライダーのモードに入らないようにしました。
「ChickenPaint」のロゴ部分を「ChickenPaint Be」に変更して、改造版である事が一目でわかるようにしました。
掲示板のエンドユーザーの方には直接関係ありませんが、「ChickenPaint Be」のソースコードはここにあります。
satopian/ChickenPaint_Be: お絵かき掲示板Petit Noteのためのbootstrap5対応のChickenPaint
改造したものを再配布する時のライセンス上の条件にソースコード公開の義務があります。
そのためヘルプページにも「ChickenPaint Be」のGitHubのリポジトリのURLを記載しました。
ChickenPaintのショートカットキーを拡張しました|さとぴあ
- R+左クリックでキャンバスの回転
- Hでレイヤーの左右反転
- Wで水彩
- Aでエアブラシ
- Sで薄消しゴム
- Dで指先ツール
- Cで混色ツール
- SHIFT+CTRL+Eで全レイヤー結合
- SHIFT+CTRL+Gでグループ結合
- CTRL+Mでマスク適用
- 「下のレイヤーと結合」をペンによる操作で簡単に実現できるようにするため、レイヤーパレットに「下のレイヤーと結合」アイコンを追加しました。
英語のみだったショートカットキー一覧の説明ページの日本語辞書を追加して、日本語と英語を自動的に切り替えで表示できるようになりました。 これで、ほとんどの日本語未翻訳箇所の日本語翻訳作業が完了しました。
satopian/ChickenPaint_Be: お絵かき掲示板Petit Noteのためのbootstrap5対応のChickenPaint
- レイヤーを変形しようとした時にレイヤーが非表示または不透明度0%の時にも、非表示、不透明度0%というメッセージをポップオーバーで出すようにしました。
これまでは、単に変形できないだけで、なぜ変形できないのかを説明するメッセージの表示がありませんでした。 - レイヤー名をマウスで変更できなくなっていたのを修正しました。
ペンタブレットやタッチデバイスの場合はダブルタップでレイヤー名の変更が可能ですが、マウスではそれが出来ません。
従来は、マウスの右クリックで、「マスク追加」「クリッピング」「レイヤー名変更」などのコンテキストメニューが開いていたので、そのメニューを使ってレイヤー名を変更する事が可能でした。
しかしながらBootstrap5に更新した結果、同じコンテキストメニューを表示を表示する事が困難になってしまったため、マウスの場合は右クリックでレイヤー名の変更になるようにコードを変更しました。
たったそれだけの作業でしたが、解明が困難な軽微なエラーメッセージが表示される問題を解決するためだけに20時間以上費やしてしまいました。 - ファイルメニューで「PCに保存」(CTRL+S)した時のファイル名に投稿日時分秒が入るようになりました。
これによりファイル名を変更して保存しなくても、同一フォルダに途中経過を保存できるようになりました。 これまではファイル名が「oekaki.png」固定でした。
改造版に固有の機能が存在し、オリジナルには存在している機能が無くなっている事や、改造版に固有の問題が発生している可能性もある事から、オリジナルの「ChickenPaint」と区別するために、改造版の「ChickenPaint」の名称を「ChickenPaint Be」としました。
satopian/ChickenPaint_Be: お絵かき掲示板Petit Noteのためのbootstrap5対応のChickenPaint
- Bootstrap4ではjQueryで制御していた箇所が、Bootstrap5ではJavaScriptとなり、大幅なコードの書き換えが必要になりました。
また、従来の書き方を単に置き換えただけでは意図した動作にならないケースがいくつかあり、新しく処理を追加して対応しました。
気が遠くなるような作業量でしたが、将来廃止予定のJavaScriptがBootstrap4のコードに入っていたため、これから先の数年後もChickenPaintが使えるようにするために必要な作業でした。
satopian/ChickenPaint_Be: お絵かき掲示板Petit Noteのためのbootstrap5対応のChickenPaint
↑ ビルドするためのソースコードはここにありますので、気になる方はご確認ください。
ChickenPaint-Bootstrap5.-Petit.Note-Chrome-2024-01-07-10-55-53-Trim.mp4
- 変形確定前にレイヤーを追加しようとすると変形を確定する取り消すなどの操作を促すダイヤログが表示されますが、従来の動作では、変形確定のエンターキーの押下で変形は確定されるものの、ダイヤログはすぐには消えず、レイヤーの追加も行われませんでした。
今回の修正により、エンターキーによる変形の確定と同時にダイヤログは閉じられ、かつ、レイヤーも追加されるようになります。
また、一連のダイヤログの日本語対応も行いました。
- グリッドのサイズを設定する項目に数値を入力して、エンターキーで確定した時に、描画画面から掲示板トップに画面が移動して描いていたイラストが消えてしまうバグを修正しました。
開発元のリポジトリにいくつか開いているIssueとプルリクエストに現時点では何も回答がないため、追加のIssueは開かず独自に修正しました。
ソースコードはライセンスにしたがって公開していますので、ソースコードが気になる方は以下のリポジトリをご参照ください。
https://github.com/satopian/ChickenPaint_for_Petit_Note
- ユーザーコードとSESSIONのCookieを削除しても、Cookieチェックでエラーにならなくなっていたのを修正しました。
- Tegakiのブラシサイズが1pxの時にも円カーソルを表示するようにしました。
- 従来は1pxの時には表示されない仕様でした。
- 1pxの円カーソルは小さすぎて見えないので、1pxの時は2px相当の円カーソルを表示します。
- モバイルでは円カーソルを表示しないようにしました。 タッチしている時にしかカーソルが動かないため。
- 開発元リポジトリのバージョン表記にあわせて、v1.6.1に。 バージョン表記以外は前回更新したものと同じです。
- 1スレッドに150件投稿可能で、最大検索数が300件の時に、3スレッド目以後に新しい投稿が存在していても上位2スレッド分しか検索の対象にならない問題を修正しました。
最大検索数を超える記事を取得ずみの場合でも、上位10スレッドは必ず検索の対象になるようにしました。
- 独自カスタマイズ版のChickenPaintを更新しました。
描画時の円カーソル表示を別の方法で再実装しました。
タッチデバイス以外のPC等で描画時にも円カーソルを表示します。
Petit.Note.-.Google.Chrome.2023-12-25.18-53-44.-.Trim.mp4
- 独自カスタマイズ版のChickenPaintを更新しました。
描画時の円カーソル表示をあきらめ、もとに戻しました。- 独自カスタマイズ版のPaintBBS NEOを更新しました。 タッチデバイスでは円カーソルを表示しないようにしました。
- 独自カスタマイズ版のChickenPaintを更新しました。
- 独自カスタマイズ版のPaintBBS NEOを更新しました。
NEO、ChickenPaintともに、描画中にも円カーソルを表示するようにしました。
また、オリジナルのPaintBBSの動作にあわせて8px以下のブラシサイズの時には円カーソルを出さないようにしていたPaintBBS NEOの仕様を変更して1pxの時にも2px相当の円カーソルを表示するようにしました。
これは、Windows Inkのペンタブレット+Chromeの時に、ブラウザのデフォルトのカーソルが消える問題に対応するための改造です。
視認性が高い黒の1pxの描線の時には、カーソルが見えなくても描線が見えるので何とかなりますが、視認性が悪い薄い色の線を長く引きたい時にはカーソルが見える必要があるからです。
- 合言葉が一致しなかった時のエラーメッセージも、別画面に移動してエラーを知らせるのではなく、同一の画面に合言葉不一致のエラーメッセージを表示します。
- 「ユーザーコードが一致しません」というエラーが発生して本来なら投稿できるはずの投稿に失敗する事例の報告がありました。
Cookieにも、SESSIONデータにもユーザーコードをセットしてCookieとSESSIONのどちらかが一致すれば投稿できるようにして、この問題を修正しました。
テンプレートで使用しているJavaScriptとcssの先読み処理5行と、JavaScriptの読み込みの3行を外部共通パーツ化しました。
- ヘッダに入っていたJavaScriptとcssの先読み処理の5行
template/basic/parts/head_preload_css_js.html
</body>
の直前に入っていたJavaScriptの読み込みのための3行
template/basic/parts/footer_js.html
共通パーツ化して外部化した事により、画像のポップアップで使っているluminousを、別のlight-boxに置き換える時にファイルを2つ書き換えるだけですむようになりました。
- 「内容を隠す」設定にして注釈欄を開いて、かつ、注釈が何も記入されていなかった時に、MisskeyのAPIを使ったMisskeyへの投稿が失敗する問題を修正しました。
- 注釈が記入されていなかった時は、Misskeyの投稿エラーになる前に、掲示板のエラーメッセージを出し、注釈の記入を促すようになりました。
- v1.03.8で編集画面のdivタグをh3に変更した影響で画面のレイアウトが崩れていたのを修正しました。
h3タグをduvに戻し、管理者編集モードの時に表示されるホスト名の表示位置をその他のモードと同じ位置になるように調整しました。
.container
(コンテナ)の横幅928pxより横長の動画を再生すると、左には余白があるのにも関わらず、画面の右方向に動画がはみだす状態になっていました。
横幅928px以下の場合は問題ありませんが、例えば横幅が1800pxで、1920pxの横幅のモニターで動画を再生すると横スクロールが発生していました。
928px以上の横幅が必要な時は、コンテナの横幅の最大幅がコンテンツの幅になるように調整しました。
- HTMLの文法エラーを修正しました。
リンクのa
タグの中にブロック要素のp
タグが入っていたのを修正しました。 - HTMLの見出しのタグを追加してブラウザがメインコンテンツを検出できるようにしました。
article
タグや、h3
タグを追加して投稿された記事のHTMLの文書構造を最適化しました。
指先ツールと、混色ツールのショートカットキーを追加しました。
- 「R+左クリック」キャンバスの回転
- 「H」レイヤーの左右反転
- 「S」薄消しゴムに切り替え
- 「W」水彩ブラシに切り替え
- 「A」エアブラシに切り替え
- 「D」指先ツールに切り替え
- 「C」混色ツールに切り替え
231125_ChickenPaint_._._.mp4
- Altキーのキーアップのデフォルトの動作をキャンセルしてこの問題を修正しました。
- PaintBBS NEO+Firefox時の問題は解決できましたが、CheerpJを使って起動したしぃペインターでは、AltキーでFirefoxのメニューバーの表示/非表示の動作が発生してしまいます。 CheerpJが起動した時点で、キーアップイベントの取得ができなくなるようです。 Chromeではこの問題はなく、FirefoxとFirefox派生ブラウザで発生します。
- 「Altキー」押下直後にショートカットキーが効かなくなる問題が、tegaki.jsでも発生していました。
- ChickenPaintと同じように「 「Altキー」」を離した時点で「altキー」のデフォルトの動作をキャンセルする事でこの問題を解決しました。
- 「R+左クリック」でキャンバスを回転するショートカットキーの動作確認中に、キャンバスが回転せずブラシツール等の描線が意図せず引かれてしまう問題に気が付きました。
一連のショートカットキーの追加などのスクリプトの改造が原因かもしれないと疑い、調査した結果、もともとこの動作だった事がわかりました。
しかしながら、「altキー」を押して色をスポイトそのまま、「R+左クリック」でキャンバスを回転といった処理をしたい時もあります。 この問題の原因を探るため、「altキー」で追加している処理をすべて削除してみましたが問題は解決しませんでした。
原因は「altキー」のデフォルトの動作そのものでした。
「altキー」を離した時点で「altキー」のデフォルトの動作をキャンセルする事でこの問題を解決する事ができました。
23/11/25 v1.02.3で、ChickenPaintのショートカットキーを追加。 その後発生したバグをv1.02.7で修正しています。
- 個別スレッド時のスレタイへの個別スレッドの固定リンクを追加しました。
- メインページ同様スレタイをクリックすると、その個別スレッドが表示されます。
- 個別スレッド表示時に、スレタイをクリックするとスレッドをリロードできるようになります。
- Rキーでキャンバスの回転モードに入る条件を細かく設定しなおしました。
- また、GitHubのコードスキャンで見つかったブラウザの言語を取得する処理の脆弱性を修正しました。
- エアブラシのショートカットキーを追加しました。
- スレッド内画像一覧カタログモードの時に、画像がある場合にのみ配列に追加して省メモリ化を実現しました。
画像一覧の時には、コメントのみの投稿の記事は必要ないからです。
これまでは1スレッドに100件投稿があり、画像が2枚だけの時にも100件分の配列を取得していました。 更新後は、画像が存在する2件分のみですむようになります。
- 動作しなくなっていたキャンバスの回転のショートカットキーを別のショートカットキーに変更して改修しました。
キャンバスの回転の元のショートカットキーは、「altキー+スペースキー+左クリック」でした。この元のショートカットキーを動くようにしても、ブラウザの、「alt」を押したあと「スペース」でブラウザのメニューが開くため操作を間違えるとタブを閉じてしまいます。
また、キーを2つ同時に押す必要が発生します。
そこで、「Rキー+左クリック」にショートカットキーを変更して、「Rキー」を押している間だけ、キャンバスが回転するようにしました。 - レイヤーの左右反転のショートカットキーを追加しました。
「Hキー」を押すたびに、選択中のレイヤーが左右反転します。 - ツールの切り替えのショートカットキーを2つ追加しました。「薄消しゴム(Sキー)」「水彩(W)」 「ソフトイレーサー」の「S」。水彩=Water Colorで、「W」です。
- Macの⌘キーのマッピングを追加しました。
Macを持っていないのでショートカットキーが動作していたのか動作していなかったのかも解明できなかったのですが、
⌘+z
や、⌘+y
などのショートカットキーに関連するコードを修正しました。
(これはあくまでも独自仕様版の問題で開発元のコードのミス等やバグ等ではありません。) - willReadFrequentlyオプションを使用する事を推奨する警告が表示された箇所のコードを最適化しました。 このオプション設定を設定する事でより高速に動作するようになります。
- 一定の条件を満たした時に画像のポップアップ表示がギャラリーモードに切り替わるようになりました。
個別スレッド表示で、閲覧注意画像が存在しないか、閲覧注意画像を隠さない設定になっている時は画像のポップアップ表示がギャラリーモードに切り替わるようになりました。
画像をタップすると前後の画像を表示するための矢印が表示され、矢印をタップする事でスレッド内の画像を順番に表示します。
閲覧注意画像があり、閲覧注意画像を隠す設定の場合は、矢印のタップで閲覧注意画像が表示されるのは適切ではないため、画像をタップしても一枚の画像を表示するだけの従来の動作になります。
- ペイントアプリ、Klecksを更新しました。
config.phpに新規設定項目を追加しました。
//1スレッドに表示するレスの数
//返信画面では全て表示します。
//設定しないなら 0 で。
$dispres= 10; //従来の設定項目
//1スレッドに表示するレス画像の数
//表示できるレス画像の設定値を超えた時は、レスを省略します。
//1スレッドに表示するレスの数で設定した値よりも、レスの表示数が多くなる事はありません。
//返信画面では全て表示します。
//設定しないなら 0 で。
$disp_image_res= 5; //追加された設定項目
メインページではスレッドを全件表示せず、レスを省略しています。
例えば、表示するレスの数が10の場合はレスを省略した残りの10件が表示されていました。
しかしながら、画像の場合はある程度表示に負担がかかるため、一定の枚数以上のレス画像を制限したくなる事もあります。
そのために、表示できるレスの件数を少なくすると省略される件数が多くなり投稿された画像が見えなくなってしまいます。
そこで、1スレッドに表示する返信数そのものは多めに設定しておいて、画像付きレスの数でも制限できるようにしました。
1スレッドに表示するレスの数が10で、画像付きレスが5件に設定されている場合は5件以内に収まるようにレスを省略します。
また、返信数全体が10件を超えた時にもレスを省略します。
$disp_image_res= 0
と設定すれば、従来と同じ動作になります。
- マイクロ秒を秒に戻す計算が何箇所もあるため処理を関数化して可読性とメンテナンス性を向上させました。
また、ループ外に出すことができる関数はループ外に出し無駄な計算が発生しないようにしました。 - 同じコメントチェックを同じIPアドレスの場合から同じIDの場合に変更。
- 管理者による閲覧注意への切り替えの時にIDが変わらないようにしました。 これまでは閲覧注意への切り替えのみでもIDが管理者のものに切り替わっていました。
- 必要の無いコードを整理しました。
- 編集モード時の
res.html
のコメント欄の開閉の制御をindex.php
にまとめました。
Exifチェックの時にGDによる画像の生成に失敗した時のエラー処理を追加しました。
これまでは、失敗した時に致命的エラーが発生していました。
といっても、その致命的エラーは実際の運用ではまだ発生した事がなく、さらに、ユーザーにとっては画像のアップロードをしようとしても反応が何もないだけで、再度投稿ボタンを押せば投稿に成功する状態でした。
つまり、念には念を入れたエラー処理になります。
お絵かきアプリから送信されたPNG画像が破損していたら、お絵かき画面から移動せず、スクリーンショットの撮影を促すエラーメッセージを出すようになりました。
ImageCreateFromPNG()
で画像を生成する事ができるかどうかチェックする事で、画像が破損しているかどうかを検出する事に成功しました。
これにより、画像が破損した状態で投稿され作品が失われる確率をさげる事ができました。
psdファイルやchiファイル等アプリ固有ファイルのチェックは含まれていません。固有ファイルが破損して、同時に画像を上のレイヤーで隠している場合は、画像の復旧ができませんのでご了承ください。
破損状況を確認する事ができたのはPNG形式の画像のみです。
//URL入力欄を使用する
//管理者は設定に関わらずURL入力欄を使用できます
// する: true しない: false
$use_url_input_field = true;
// $use_url_input_field = false;
config.phpに上記設定項目を追加しました。
本文へのURLの書き込みを禁止して、URL入力欄を使用しない設定にするとURLを書き込む事ができなくなります。
これにより、URLを貼り付ける事を目的としたスパムはURLを貼る事ができなくなるため、来なくなる事が予想できます。
URL入力欄を使用しない設定の時は、URLの入力欄が見えなくなるだけでなく、Chromeの開発者ツール等でフォームを改変して投稿する事もできなくなります。
管理者は設定にかかわらず、URL入力欄を使用可能です。
管理者投稿モードログインすると、URL入力欄が表示され、URLの投稿が可能になります。
入力されたパスワードが管理者パスワードかどうか確認する処理を関数化して可読性を高めglobal変数$admin_pass
を削減しました。
//トップページの入力フォームを使用する // しない: false でお絵かきボタンのみの表示になります。 // する: true しない: false
$use_top_form = true; // $use_top_form = false;
この設定項目は廃止されました。 config.phpに設定項目が残っていても問題ありませんが、設定を切り替えても表示に変更はありません。
理由。 これまでも、画像アップロード機能も、コメントのみの新規投稿も許可しない場合は、トップの入力フォームは表示されなかったからです。 画像のアップロード機能を使用しない、コメントのみの新規投稿も許可しない場合は、トップの入力フォームが表示されていても何も投稿できないためフォームを表示しない動作になっていました。
### バグ修正
//添付画像アップロード機能を使う
//管理者投稿モード(日記)でログインしている時は使わないに設定しても、ファイルアップロードが可能です。
//使わないに設定すると、掲示板トップやレス画面からの画像アップロードを使用しない設定になります。
// 使う:true 使わない:false
// $use_upload = true;
$use_upload = false;
で、画像アップロードを使わない設定にすると、「投稿する」ボタンが表示されなくなるバグを修正しました。 このバグはv0.83.3で発生し、v0.98.12で修正されました。
Klecksを更新しました。
- 拡張子が
.png
や.jpg
で、中身が画像ではなかった時に、画像処理の関数でエラーが発生していたのを修正しました。$_FILES['imgfile']['type']
では拡張子による画像形式の判別しかできないため、mime-content-type()に置き換えました。
また関連するコードを整理して可読性を向上させました。
- JPEG画像が回転していたり、位置情報がついている事が判明した時の処理が改善されました。
これまでは、回転または位置情報を検出した時には同じサイズのJPEG画像を出力していました。
今回の更新で$max_px
で指定した値(例えば1024px)に縮小されるようになりました。
これにより、幅と高さが、$max_px
で指定した値を超える時の二度目の画像処理を行わなくてもすむようになります。
JPEG画像を作成して、さらにJPEG画像を作成する処理の無駄と画質の劣化どちらも解決します。
- デジカメやスマホで撮影したjpeg画像のExif情報から、画像の回転を検出して向きを修正した画像を自動的に生成してアップロードできるようになりました。
スマホ撮影の縦長の画像の多くは横長の画像+カメラの向きの情報で縦長に表示されています。
その向きの情報を元に、縦向きに表示されている画像が縦長になるように新たに画像を生成します。 - スマホ・デジカメ撮影の写真には位置情報が入っている事があるため、位置情報が存在している事が検出された場合は、画像を新たに生成しなおす事で位置情報を削除します。
アップロード画像等、ペイントタイムが存在しない画像をMisskeyのAPIを使ってMisskeyに投稿する時にペイントタイム関連の配列のキーが未定義になりエラーが発生していたのを修正しました。
キャンバスサイズの増減値を設定できるようになりました。 これまでは50px固定でした。
//プルダウンメニューのキャンバスサイズの増減値
$step_of_canvas_size = 50;
config.phpのどこでもいいので上記設定を追加すれば、変更できるようになります。
設定項目が存在しない時はこれまで通り50px固定になります。
- テンプレートが改ざんされた場合でも管理者パスワードが漏洩しないようにスクリプト本体で、nullをセットしてからHTMLに渡すようにしました。
- 使用していないコードを整理しました。
index.phpで処理していたペイントアプリの選択と、キャンバスサイズの選択のプルダウンメニューに必要な変数の処理をテンプレートに移動しました。
そのため、index.phpをv0.97.1にアップデートする場合は、
- template/basic/parts/select_apps.html
- template/basic/parts/select_canvas_size.html また、それを利用する、
- template/basic/main.html
- template/basic/res.html
を最新版に更新する必要があります。
古いテンプレートを利用されている方は、差分エディタ等で比較して修正するか、
template/
ディレクトリごとアップデートするなどの検討をお願いします。
テンプレートのバージョンが古い場合は、お絵かきアプリと、キャンバスサイズの選択ができなくなります。
//お絵かきできる幅と高さのデフォルトサイズ
//前回使用時の値がCookieに存在する時は、Cookieの値が使用されます。
$pdef_w = 300;//幅
$pdef_h = 300;//高さ
config.phpのどの場所でも構いませんので、上記設定項目を追加すれば、Cookieが存在しない時のお絵かきアプリの幅と高さのデフォルト値を設定できるようになります。
前回使用時のCookieが残っている時は、Cookieの値がキャンバスサイズのデフォルト値になります。
関数名が必要ない箇所をアロー関数に置き換えました。
- Klecksを更新しました。
- アップロード画像の画像差し換え時のファイルサイズの最終チェックが入っていなかったのを修正しました。
- pngからjpegに変換される閾値のお絵かきとアップロードの2種類の設定を厳密にお絵かきとアップロードで別の動作になるように修正しました。
- pngをjpegに変換してみてファイル容量が小さくなっていたら元のファイルを上書きする処理を関数化しました。 ごくわずかですが、コードの行数を削減する事ができました。
- ペイントアプリの幅と高さの最小値はこれまで300px固定でした。 今回の更新でconfig.phpで設定できるようになりました。 50x50pxのキャンバスも選択可能になります。
//お絵かきできる幅と高さの最小サイズ
$pmin_w = 300;//幅
$pmin_h = 300;//高さ
config.phpのどの箇所でも構いませんので、上記設定項目を追加すればアプリの幅と高さの最低値を設定できるようになります。
- 幅300px以下の時にPaintBBS NEOのレイアウトがくずれる問題を修正しました。 PaintBBS NEOのCSSを独自にカスタマイズして、300px以下の横幅の場合でも操作が可能になるように調整しました。
- メール通知機能のコードを整理しました。
- 通知されるメールの記事のURLに投稿時刻のIDを追加して該当スレッドの記事の箇所までスクロールする機能を追加しました。
(続きを描く等で画像が入れ替わってしまうとIDが存在しなくなるため、スレッドの一番上が表示されてしまいますが、仕様です。)
投稿を通知するメール本文の記事へのリンクのURLが正しく設定されていなかったのを修正しました。
記事の正しいURLは、
/?resno=5
のような形式ですが該当箇所が
/?res=5
のような誤った形式になっていました。
- v0.93.2以前のバージョンと表示が同じになるように調整。 レス返信画面の時のタイトルにはリンクが入らないようにしました。
- JavaScriptのコードを整理しました。
短くできる箇所は短く。内容をよりわかりやすいものに。
mainとresのテンプレートのコードを整理しました。
mainとresのテンプレートの両方で使用されている記事表示の長い繰り返しの箇所を外部化しました。template/basic/parts/threads_loop.html
に共通箇所をまとめました。
記事の題名や、記事本文に関連する箇所を変更する時は、template/basic/parts/threads_loop.html
を変更するだけで、通常表示とレス画面の両方に反映されます。
ファイル数は増えましたが、コードの行数は200行以上減り保守性が向上しました。
- カタログモード時と検索モードの時にページネーションの、「First」と「Last」をクリックすると、通常モードになるバグを修正しました。
- 長い記述のアプリのキャバスサイズ設定のテンプレートを外部化して、通常表示とレス画面の共通パーツとして使えるようにしました。
- klecksを更新しました。
- ChickenPaintを更新しました。
ChickenPaintの固有ファイル、.chiファイルのmime typeチェックが抜けていたのを修正しました。
不正なmime typeの場合は、これまでの状態であってもtemp/
ディレクトリより先へのファイルの移動はブロックされていましたが、temp/
ディレクトリには不正なファイルを受信できる状態でした。
個別スレッド下段の前後のスレッドのサムネイル画像がきちんと6個表示されるように再調整しました。
メモリ消費量を最大で36%削減する事に成功しました。(実測値)
これまでは最も古いスレッドを表示する時に前後のスレッドのサムネイルの表示するのために全体ログ(alllog.log
)をすべて読み込んでいました。
5000スレッド分の投稿があれば、5000行読み込む事になり、メモリを圧迫していました。
実際に運用している掲示板では、最初のスレッドのメモリ消費量が1.6MBで、最後のスレッドを表示するときには2.6MB消費する形になっていました。
今回の更新で、どの位置のスレッドを表示する場合でも、最大で40行分のみ取得するようになり、どのスレッドを表示しても、1.6MB程度のメモリ消費量ですむようになりました。
お絵かきアプリ固有形式ファイル「pch
,psd
,chi
」に加え、画像ファイルのキャンバスへの読み込みもできるようになりました。
これにより、アップロードした画像から続きを描く事ができるようになります。
通常の画像アップロードのフォームからアップロードされた画像からはこれまで通り続きを描く事ができません。
この機能を追加したのは、合作の時に、別バージョンができてしまい掲示板の管理者が全員の分の画像をクリスタなどのペイントソフトで合成してアップロードする必要にせまられたからです。
この場合はアップロードした画像から別の参加者が続きを描いて合作できるようにする必要があります。
この機能は管理者投稿モード限定機能です。
通常は、アップロードした画像なのか、アプレットを使って描いた画像なのかがわかるようにしておきたいため、単に画像アップロードした場合はアプレットで続きを描く事ができないようにしてあります。
- 独自仕様版のChickenPaintのデータ送信処理を古いxhrからfetch APIに変更しました。
- 「Web Style by BASIC」の表示を「Template BASIC」に変更しました。
- 新規投稿時の投稿完了後も、個別スレッド表示になりました。 これまでは、新規投稿の投稿完了後には掲示板トップが表示され、返信時の投稿完了後には個別スレッドが表示されていました。
前後ナビゲーションと、ページネーションのパーツを分離しました。
これにより、前後ナビゲーションを上段にも追加する場合は、prev_next.html
をincludeするだけでよくなりました。
- template/basic/res.html topをTopに変更して、デザインを統一しました。
- ページング処理の、最初と最後のリンクの出現条件を修正しました。これまでは、0番目の記事と「start」がどちらも表示されていました。「end」も同様です。
- 「start」を「First」に変更しました。
- 「end」を「Last」に変更しました。
- 長いページング処理がmain、catalog、searchそれぞれに記述されていたのを外部化しました。これにより、ページング処理に変更を加える時は、ひとつのファイルを変更するだけですむようになりました。
config.php
で
//すべての投稿を拒否する
$deny_all_posts = true;
に設定しても、管理者投稿モードでログインするとレスフォームが開いてしまう軽微なバグを修正しました。
レスフォームは開きますが、すべての投稿を拒否する設定の場合は、意図通り投稿に失敗します。
今回の修正で、すべての投稿を拒否する設定の時には、管理者投稿モードでログインしてもレスフォームが開かなくなりました。
PaintBBS NEOと、Klecks、Tegakiからのデータに非同期通信のヘッダが付いていない時のエラーメッセージ「拒絶されました。」がアラートに正しく表示されなくなっていたのを修正しました。
表示に合言葉が必要に設定した時の合言葉入力後の動作を改善。
合言葉入力時のスレッドまたはページが表示されるようになりました。
これまでは、掲示板のトップページが表示されるのみでした。
- save.inc.php
エラーメッセージのHTML特殊文字をエスケープする処理を追加しました。 - functions.php
非同期通信で表示するエラーメッセージのContent-Typeがtext/plainになるようにheader()関数で指定しました。
- PaintBBS NEOの続きを描く画面で「動画を表示しない」設定で続きを描くと、「続きを描く」リンクがでなくなるバグを修正しました。
- このバグは、2023年6月28日に更新したv0.78.9で発生し、v0.87.0で修正されました。
4種類のお絵かきアプリからの画像とレイヤー情報のデータを3種類の受信ファイルで受信する方式を見直しました。
PHPの拡張子を非表示にしてリダイレクトする.htaccessを使用しているサーバでも動作するようにしました。
- save.php
- saveklecks.php
- saveneo.php
を廃止して、
- save.inc.php
に統一しました。
さらに、save.inc.phpは直接アクセスするのではなく、Petit Note本体のindex.phpに読み込んで使います。
これにより、拡張子を省略した、
"./?mode=saveimage&tool=neo"
のようなパスでお絵かきアプリからのデータ受信ができるようになりました。
.htaccessでPHPの拡張子がある場合はリダイレクトする設定になっていても、受信できるようになりました。
また同じ記述の繰り返しのある箇所をひとつのファイルに統合する事によりメンテナンスも容易になりました。
- カラーセットをPCから読み込みできなくなっていたのを修正しました。
- app/chickenpaint/ ディレクトリを上書きアップデート
- index.php
- save.php
- saveklecks.php
- saveneo.php
- スレッド内のコメントをコメントの新着順に並び替えるオプションを追加しました。
- 日記モードなどで利用しているケースで、新しい投稿を上に表示したい時に使います。
// スレッド内のコメントを新着順に並び替える
// 初期値 false
// $sort_comments_by_newest = true;
$sort_comments_by_newest = false;
$sort_comments_by_newest = true;
に設定すると、スレッド内のコメントを新着順に並える事ができます。
- 編集モードの時にコメント欄が表示されたままになっていたのを修正しました。
- 閲覧注意の設定ありで、合言葉の入力も必要な時に入力項目が近くなりすぎていたのを修正しました。
- Misskey投稿時の本文の連続した空行を1行に。
- 半角スペース区切りだったMisskeyに投稿する情報を、改行区切りに変更しました。
- ペイントボタンの表記を「PAINT」から「Paint」に変更しました。
- ペイントボタンの横幅の余白を調整しました。
- Misskeyへの投稿時のアプリの認証失敗時にエラーメッセージが表示されずPHPのエラーになるケースがあったのを修正しました。
- 指定経過日数を過ぎている閉じたスレッドを管理者モードで編集したりMisskeyに投稿する時に、別の画面でログアウトしても、操作可能であるかのような画面のまま表示される問題を修正しました。
たとえばパスワード入力画面が表示されているにも関わらず、パスワードが一致しても「失敗しました」というエラーがでるケースがありました。 今回の修正で、「このスレッドは閉じられています」というエラーメッセージが表示されるようになりました。 - ユーザー削除モードかどうかを判定する処理を関数化してコードが簡潔になるようにしました。
- 繰り返し使用される同じ処理のテンプレートのコードを外部化して共通のパーツにしました。
非表示レイヤーの色がスポイトされる問題が修正されています。
Misskeyへのノートの時と、投稿時に描画時間を表示するしないを選択できるようにしました。
ただし投稿時の描画時間表示オフは掲示板によっては歓迎されない可能性があるためデフォルト設定ではオフになっています。
デフォルト設定はオフですが、管理者は描画時間を表示しないオプションを選択できるようにしました。
これは、pchやpsdをアップロードしてキャンバスに読み込んで投稿すると、描画時間が5秒などになるためで、それは実際の作画時間ではないからです。そのような場合は描画時間をオフにしたほうが混乱を招かないでしょう。
paint_com.htmlに書きかけのJavaScriptが残っていました。 未定義の関数を呼び出そうとしてConsoleエラーになっていました。 幸い投稿には支障が無いようですが、修正しました。
これまでは、レイヤーを非表示にするにはレイヤーの不透明度のスライダーを動かして不透明度を0%にする必要がありました。
今回の更新で不透明度の設定を維持したまま、レイヤーの表示/非表示をチェックボックスで切り替える事ができるようになりました。
消しゴム使用時の、「Tip」が「先端」に翻訳されるようになりました。
Misskeyノートのリンクが表示される条件がメイン画面とレス画面で統一されていなかったため、調整しました。
編集モードの時にはMisskeyノートのリンクを表示しないようにしました。SNS共有リンクと同じ条件で表示される形になりました。
スレッド表示のカタログモードのタイトルタグに、記事の表題と作者名が入るようになりました。
スレッドの個別表示の時と同じタイトルが入るようになりました。
- Misskey投稿時に追加する記事のURLに
#画像のタイムスタンプ
形式のIDを追加。リンクを開いた時に該当の画像がスレッドの内のどこにあるのか探さなくてもよくなりました。
- バグ修正とセキュリティ強化
一度アプリを認証して認証したトークンを取得ずみであるにも関わらず、その後もMisskeyへのノートのたびにアプリを再度認証しなければならないのは不便です。
またMisskeyの設定画面のAPIトークンの管理画面を開くと、認証した数のトークンの一覧がでてきてしまいます。
Petit Noteはブラウザを閉じるとセッションが終了するアプリなので、ブラウザを閉じる前までが前提になりますが、同一セッションの場合はアプリを再認証しないで発行ずみのトークンを使えるようにしました。
すでにトークンを取得ずみの時はMisskeyのサーバ一覧からサーバを選んでノートボタンを押すと、少し待ったあと投稿の完了画面に切り替わります。
v0.82.5で「編集」メニューから「Misskeyにノート」するボタンを追加しました。
その機能に加え、スレッドの画像一覧からもMisskeyにノートする事ができるようになりました。
MisskeyにはCW機能があります。
用語集 | Misskey Hub
ネタバレありの時や、発言内容がNSFWの時にコメントや添付ファイル等のコンテンツを隠す機能です。
コンテンツを隠した上で「注釈」を追加します。これにより注釈を読んだ上で内容を開くかどうかを判断する事ができます。
その機能に対応するため「内容を隠す」にチェックすると表示される「CW 注釈」のテキストエリアを追加しました。
1スレッドに100件あるいはもっとたくさんの画像が投稿されるケースがあります。
従来のカタログモードは、スレッドの一番上の画像の一覧を表示して、画像をタップするとスレッドが表示されます。
今回追加したカタログモードは、そのスレッドに投稿されている画像の一覧を表示します。
タップすると、スレッド内のその画像の位置に移動します。
お絵かき掲示板に投稿済みの画像をMisskeyにも投稿したい時にお絵かき掲示板からMisskeyに接続して投稿する事ができるようになりました。
- 編集→編集モードの時に編集・削除ボタンと一緒に 「Misskeyにノート」ボタンを表示します。
- パスワードが一致したらMisskeyにノートする本文の編集画面が開きます。
- 投稿するMisskeyサーバを選択して認証します。
- 認証に成功すると画像と本文が投稿されます。
(お絵かき掲示板からMisskeyのAPIに接続してMisskeyに投稿)
config.phpに新規設定項目を追加しました。
// SNS共有の時に開くWindowsの幅と高さ
//windowの幅 初期値 350
$sns_window_width = 350;
//windowの高さ 初期値 490
$sns_window_height = 490;
SNS共有時のサーバ一を追加した時に、共有画面のWindowの高さが不足して、スクロールする必要があるケースがありました。 SNS共有時のサーバ一覧の共有画面のWindowsの幅と高さを設定できるようにして、その問題を解決しました。 上記設定項目がconfig.phpに存在しない時は、デフォルト値の、幅350px、高さ490pxが適用されます。
共有するサーバの選択時にラベルの文字列の上にカーソルをあわせなくても選択できるようにしました。
ラベルの文字列の右側の余白をタップした時にも選択できるうようになりました。
- petitnote/template/basic/set_share_server.html のHTMLの文法エラーを修正しました。
- 記事の編集時に管理者編集モードを管理者として認識しせず、NGワードフィルタが動作するバグを修正しました。
- 完全一致の時にもAlphabetの大文字・小文字の区別をしないようにしました。
- 管理者による画像の閲覧注意への変更時に投稿者のホスト名が管理者のホスト名に変わってしまっていたのを修正しました。
- 閲覧注意設定以外の項目が同じ時は、元の投稿者のホスト名から変更されません。
- 返信画面で編集時にのみ表示していた閲覧注意画像を「隠す/隠さない」の設定項目を、常に表示するようにしました。 (閲覧注意機能を使用しない設定にしている場合は、閲覧注意画像を「隠す/隠さない」の設定項目は表示されません)
v0.80.3から「Twitter」以外の、「Mastodon」「Misskey」等の短文投稿SNSに投稿を共有できるようになりました。
config.phpで設定すれば以前のツイートボタンに戻す事もできます。
また、共有するMastodon、Misskeyのサーバ一覧を編集する事もできます。
- 題名を必須に設定した時にレス記事の編集時に題名を求められて編集できなくなるバグを修正しました。
- 使用ツールが不明な時に ??? と表示していましたが、不明な時はツールの表示箇所を最初から表示しないようにしました。
- 記事の編集に管理パスを使用している時にはコメントの二重投稿チェックをしないようにしました。
- 閲覧注意画像を「隠す/隠さない」を検索とカタログモードに追加しました。
- 閲覧注意画像を「隠す/隠さない」の処理を非同期通信化しました。
- テンプレートの共通箇所を外部化して
parts/
ディレクトリにまとめました。
- Twitterだけでなく、分散型SNSにも記事を共有できるようになりました。
「Mastodon」「Misskey」等の分散型SNSに記事を共有できます。
一覧に無いサーバも直接入力すれば共有できます。
ペイント画面で使用するテンプレートのビューポートを調整しました。
各お絵描きアプリからデータを受信しているファイルの使用アプリの判定処理を調整しました。
Tegakiの描画アニメ再生時のタイトルタグが、「Tegaki」になっていました。
掲示板の名称が入るように修正しました。
- Tegakiの描画アニメの初期再生速度を25倍に変更しました。
- 編集画面でTegakiの描画アニメを表示するしないを変更できるようにしました。
- tegaki.js使用時にConsoleに表示されるChromeの軽微な警告を解消しました。(独自修正版)
tegaki.jsの描画アニメの記録と再生に対応しました。
描画アニメにはレイヤー情報が保存されているのですが、現時点では続きを描く事ができるのはレイヤーが統合されたPNG画像からになります。
描画アニメも、続きを描くと消えてしまいます。
現時点では仕様です。
アニメファイルから続きを描きたいという要望をtegaki.jsの開発元リポジトリでIssueを開いて提出しました。
英語文化圏の画像掲示板で使用されているお絵かきアプリ、tegaki.jsに対応しました。
本当は描画アニメの記録と再生まで対応したかったのですが、細部がどうしても調整できなかったため、PNG画像の投稿どまります。
(v0.78.3で対応)
PNGしか投稿されないので、続きを描くも、レイヤーが統合された画像からになります。
レイヤーは最大25枚まで。
不透明度のスライダで網の濃さがかわる塗るトーンもあります。
「投稿者名をコピー」ボタンを押すと、スレッドの投稿者名がコメント入力欄に追加される機能を改良しました。
従来は、入力ずみのテキストが存在する時は、テキストの末尾に投稿者名が追加されていました。
今回の更新で、カーソールの位置に投稿者名が読み込まれるようになりました。
ChickenPaint内の非推奨のJavaScriptの構文e.whichをe.keyに置き換えました。
- app/chickenpaint/ ディレクトリを上書きアップデート。
閲覧注意画像を隠す隠さないを設定できるようになりましたが、続きを描く画面では、閲覧注意画像がそもそも隠されていませんでした。 続きを描く画面でも隠すように修正して、さらに、設定が反映されるようにしました。
共通箇所を何度も繰り返し書く必要はないので、外部ファイル化しました。 PHPのif文を含む、CSS切り替えのパーツをまとめて、他のファイルにインクルードするようにしました。
- Klecksが起動しなくなっていたのを修正しました。 このバグはv0.76.8で発生し、v0.76.9で修正されました。
マストドンや、Misskey等のSNSでは軽微な表現の場合にもメディアへの「閲覧注意」の設定が義務付けられています。
一方で「閲覧注意」のメディアをぼかさずそのまま表示する事もできるようになっています。
この事によって、観たくない人の目にはふれにくくなり、一方で見たい人は余分なタップを行う事なく画像を閲覧する事ができるようになっています。
それとほぼ同じ設定項目を「編集メニュー」に追加しました。
これにより、閲覧注意に設定された画像が増えた場合でも、閲覧注意を隠さないに設定している人はそのまま画像を表示できます。
管理者権限で閲覧注意に切り替えた場合、投稿者が「ぼかしが入ってしまったし見てくれる人はいない」と感じる場合があります。
今回の機能追加によって、閲覧注意に変更されても画像をそのまま見ている人もいると捉えてもらえるようになるかもしれません。
ぼかしが入らない状態でも、閲覧注意に設定されている画像には「NSFW」の文字が小さく入ります。
投稿者が閲覧注意に設定して配慮している事がわかるようにするためです。
// 閲覧注意を設定する
//する: trueに設定すると閲覧注意の設定ができるようになります。閲覧注意画像にぼかしが入ります。
// する: true しない: false
$mark_sensitive_image = true;
config.phpで$mark_sensitive_image = true;
に設定していない場合は、上記、閲覧注意に関する設定項目は表示されません。
- Klecksの起動時に追加される「レイヤー 1」のレイヤー名を日本語、英語、ドイツ語、フランス語、繁體中文、簡体中文各国語対応になるように改善しました。
- PaintBBS NEO v1.6.0のエラーメッセージが
NaN
になるバグを修正しました。
(さとぴあの作業ミスにより、文字列結合の+が二重になってしまっていたのが原因です) - 検索画面のコメント画面で「このスレッドを表示」ボタンを押すとボタンが無効化されたままになるバグを修正しました。
2023年1月のv0.57.1で発生したバグが見つかりました。
動画を非表示にする機能を追加する際の作業ミスが原因です。
PaintBBS NEOで動画から続きを描くのではなく、画像から続きを描いた時には動画ファイルが無くなり動画のリンクもでない筈なのですが、動画は消えているのに動画のリンクが出る状態になっていました。
動画のリンクをクリックしても動画は無いので「ファイルがありません。」というエラーメッセージが表示されていました。
お絵かきアプリのCSS、JSがブラウザに強力にキャッシュされるため掲示板のlot番号をクエリに追加しました。
掲示板が更新されればキャッシュではなく新しく読み込まれます。
お絵かきアプレットに更新がある時には有効ですが、お絵かきアプレットの更新が無い時は何も変わりません。
テンプレートの更新が負担になる場合は、テンプレートを更新する必要はありませんが、更新しておけばペイントアプリに更新が入った時にすぐに反映されるようになります。
PaintBBS NEOを独自に仕様変更していましたが、その変更内容をPaintBBS NEOの開発元リポジトリにマージしていただく事ができました。
PaintBBS NEOv1.6.0になりました。
ChickenPaintのショートカットキー「Delete」が動作しなくなっていたのを修正しました。
(これは独自版を作成する際に発生したバグであり、ChickenPaintの開発元の問題ではありません。)
ChickenPaintと、PaintBBS NEOの非推奨になったJavaScriptの構文を修正しました。
現時点では、どちらも独自修正版です。
ChickenPaintのショートカットキーを「CTRL」+「+」でもキャンバスが拡大するように独自に修正しました。 本来のショートカットキーは、usキーボードで「CTRL」+「=」、日本語キーボードでは、「CTRL」+「;」がキャンバスの拡大です。
それに加えてテンキーの「CTRL」+「+」でもキャンバスの拡大が可能になりました。
また、テンキーの数字キーでも不透明度を調整できるようになりました。
お絵かき掲示板のCGI、BBSNoteやRelmは、一番多く表示されるindexページのみHTML化して負荷をさげていました。
しかし、フォーム入力欄があるページをHTML化するとCSRFトークンの発行ができなくなります。
そこで最初の1ページ目の表示のための配列をjson形式でファイルに書き出してキャッシュする事にしました。
仮にそのjsonファイルが改ざんされた場合でも、テンプレートでエスケープ処理を行っているため比較的安全な運用が可能です。
しかしながら念のため、.htaccess
の記述内容を変更して、.json
という拡張子がついたファイルの外部への表示を禁止する設定にしました。
この高速化によって、トップページの表示のための計算時間が1/3に短縮されました。
キャッシュは記事になんらかの変更があった時に破棄され、キャッシュが存在しない時にページが表示されると計算結果がキャッシュに再度保存されます。
テンプレートに誰でも閲覧出来る形で投稿者のホスト名を表示したいと思ったら出来てしまっていたのを修正しました。
管理者編集モードでログインしている事が確認できない場合は、ホスト名に空白が入るようになりました。
- jQueryをjQuery3.7.0に更新しました。
- lib/jquery-3.7.0.min.js
- index.php
index.phpを更新するだけlib/jquery-3.7.0.min.js
がテンプレートで使用できるようになります。
テンプレートの個別修正の必要はありません。
- このバグはv0.67で発生し、v0.72.7で修正されました。
- 2023年の4月29日以後のバージョンのChickenPaintの起動のためのテンプレートにバグがありました。
template/basic/paint_chi.html
の上書きアップデートをお願いします。
- 非推奨になった機能を使った構文が残っていたため、修正しました。
- 検索画面のテンプレートに共通箇所のjQueryの構文がインラインで残っていたため外部化してまとめました。
- 同一ホストからの投稿で本文の内容が同じ場合は5スレッド分さかのぼって重複チェックをしています。
- この時の管理者の投稿を重複チェックから除外します。
- 例えば管理者が、「いらっしゃい」というコメントを繰り返し使った時に「同じコメントがありました。」というエラーになっていましたが、今回の更新でエラーにならなくなりました。
- 記事の編集時に本文の重複チェックが行われていなかったのを修正しました。
- お絵かき画像の時にも、画像重複チェックのための画像をもとにしたmd5のハッシュ値を記録するようにしました。
- お絵かき投稿のあと、同じ画像をアップロードすると「同じ画像がありました。」というエラーを出すようになります。
- ただし、管理者が管理者投稿モードにログインしている時には、同じ画像チェックを行いません。
- これは、例えば、不適切画像を別の画像に差し替えて本文だけを残す編集を行う時に使用する画像は同じ画像の場合があるからです。
- 複数回出現するコードを関数化して行数を削減し保守性を高めました。
- コード整理
- 一連の各モードでの省メモリ・低負荷化に加え、検索画面で画像のみを表示する時にもコメントのテキスト処理を省略し、さらに省メモリ・低負荷に。
この間の更新で、読み込む必要がなかったり、処理を行う必要がない箇所を切り分けて省メモリ化と高速・低負荷化をすすめてきました。
今回の更新では、検索モードとカタログモードの処理を振りわけてカタログモードでは使用しない本文の処理を省略しています。
レス返信画面下の前後のスレッドの画像も該当箇所です。レス返信画面の処理もごくわずかですが高速化されています。
ユーザーコードやリプレイスコードを発行して、本人の投稿かどうかをチェックする処理に、変数が存在するかどうかを確認する処理を追加しました。
チェックする変数の内容がどちらも空白の時に一致した事になるため、空白ではない事を確認するようにしました。
- PaintBBS NEO、ChickenPaint、Klecksすべてのペイントアプリを使わない時は、未投稿画像のリンクを表示しないようにしました。
- スレッドの題名を必須にするしないをconfig.phpで設定できるようになりました。
- 上段のメニューに、検索画面へのリンクを表示するしないをconfig.phpで設定できるようになりました。
これらは、上記設置サポート掲示板などで利用する時に必要な設定項目でした。
Petit Noteは画像掲示板として、あるいは画像アップロード機能もないただのテキスト掲示板として使う事もできます。
この間の一連の省メモリ化で、メイン画面、カタログ画面の省メモリ化を実現しました。
それに加え、v0.70.1では、レス画面(スレッド表示)の省メモリ化を実現し、2500スレッドが存在する運用中の掲示板の実測値で、メモリ消費量を35%削減する事に成功しました。
(しかしながら、これは比較的新しいスレッドの場合でもっとも古いスレッドを表示する時のメモリ消費量はほとんど変わりません。それでも最新の記事を表示する機会のほうが多い筈ですからそれなりの効果はあります。)
テンプレート内のJavaScript、jQueryをチェックして、非推奨の構文を修正しました。 残念ながら、ペイントアプリの中には非推奨のjQueryの構文が残っていますが、基本的にはそれぞれのアプリでの修正作業になります。
- 投稿に合言葉が必要と設定している時に表示されていなかったカタログモードを表示し、合言葉が入力されていない時は投稿に関連する項目のみが非表示になるように調整しなおしました
- 掲示板の閲覧に合言葉が必要と設定している時の動作は従来と同じです。
v0.68.8.1から、klecksがレイヤー2枚で起動するようになりました。
真っ白な背景レイヤーと透明なレイヤー1の2枚で起動します。
透明なレイヤー1が選択された状態で起動します。
線画を描いて気がついたら不透明な白いレイヤーに描いていたという事故を減らす事ができます。
- カタログモードのコードを最適化しました。
- 推奨されなくなったjQuery、JavaScriptのコードを修正しました。
ブラウザsafariのバグを回避するための修正作業が行われています。
- 通常表示画面と、カタログ画面のメモリ消費量を27%削減。(実際に運営している掲示板のログを使った実測値)
- Klecksをブラウザsafariのバグ回避処理など細かな修正が施された最新版に更新しました。
- 編集画面でアップロード画像の差し換えを行った時に、編集画面に戻れなくなり「記事がありません」というエラーになっていました。
このバグはv0.67.3で発生し、v0.68.0で修正されました。 - 編集画面で画像差し換えを行った時にエラーチェックのためにアップロードしたファイルがテンポラリに残ってしまうバグを修正しました。
-
エラーメッセージを画面を切り替えることなく表示することができるようになりました。コメントの入力欄だけでなく、お絵かきボタン、続きを描く、ダウンロード、編集、削除、管理者ログイン各フォームで非同期通信を使ったエラーメッセージの表示ができるうようになりました。
これにより、エラー画面が表示され、戻るリンクをタップして前の画面に戻るという一連の煩わしい操作から解放されます。
またエラーメッセージの表示をより安全なinnerTextに変更することができました。 お手数をおかけしますが、ぜひバージョンアップをお願いします。 -
Klecksのエラー処理がよりいっそう確実になるようにfetch APIの処理を書き直しました。
response.ok
以外の時はエラーメッセージを表示して描画画面から移動しないようになりました。
chickenpaintをiPadのフルスクリーンモード、あるいはiPhoneで使用した時に、パレットメニューが画面外に出る、描画領域の縦横比が縦に伸びる、横に伸びるなどの問題が発生していました。
フルスクリーンモードの時のスタイルシートが原因でした。ただしこれは、iPad、iPhoneの時にのみ発生する問題です。
逆にいうと、PC+Chromeで問題が発生していなくても、iPadユーザーがChickenPaintを使用する時にはトラブルが発生していたということです。
v0.66.6と、控えめなバージョン番号の差ですが、chickenpaint/
ディレクトリの上書きアップデートのみでも構いませんので、更新をご検討ください。
現時点では開発元での修正はまだ行われておらず、これは独自修正版です。
エラメッセージの1行目がerror\nで始まる事を確認して2行目をエラメッセージとして表示する書き方になっていたため、エラメッセージの3行目以後が表示されなくなっていました。
common.js
のJavaScriptの修正のみでも大丈夫なのですが、キャッシュを読み込む可能性があるため、index.php
のバージョン情報も更新しています。
- 編集画面→画像差し換えの時のエラメッセージも非同期通信で行います。エラーメッセージは、同じ画面に表示されます。
- エラメッセージが表示されるはずの箇所に、掲示板の本体部分が表示されるケースがあったため、エラメッセージは、error\nではじまるもののみを表示する形に変更しました。
- サーバからのレスポンスをエラメッセージとして表示できるようになりました。
サーバ混雑時の502 bad gatewayや503 Service Unavailable、ファイルが存在しない時に表示される404 Not Found等。
- 従来のエラー画面
- 新しいエラー表示
サーバーに通信する時にブラウザの画面を切り替える必要がない、非同期通信を採用し、エラーが発生した時のエラーメッセージをフォームの入力欄の上に表示します。
これによりエラー画面からもどって修正する必要がなくなります。
- iPad使用時にデバイスの向きを横から縦に縦から横に傾けると、描画領域のアスペクト比をただしく取得できなくなり、画像の縦横比の表示が変わり、ペンの座標が一致しなくなる問題が確認されました。
- この問題はChickenPaintをフルスクリーンモードで起動している時にのみ発生します。
- そのため、ChickenPaintのフルスクリーンモードでの起動オプションを外し、起動時にはミニスクリーンモードになるようにしました。
フルスクリーンモードで起動するとミニスクリーンに切り替える事ができなくなるからです。
ミニスクリーンからフルスクリーンモードへの切り替えは可能です。またフルスクリーンモードからミニスクリーンへの切り替えも可能です。 - ChickenPaintのコードを一部修正しました。ブラウザの表示領域の高さの取得がiPadの時と、PCでは異なる場合があるためです。
しかしながら、その箇所が本当に今回の問題に関連する事なのかどうかはわかりません。
Aspect ratio is broken when iPad is turned from landscape to portrait in full screen mode · Issue #51 · thenickdude/chickenpaint
ChickenPaintの作者の方のリポジトリでIssueを開いてこの問題を報告しています。
作者の方による修正があった場合は、その最新版のChickenPaintに再度入れ替える予定です。
したがって今回同梱したChickenPaintは暫定独自修正版となります。
- すでに複数の投稿が存在するスレッドの親の投稿を削除した時は、「この記事はありません」という表示に切り替わりスレッド全体は削除されなくなりました。
しかし、その中身が空白の削除ずみの記事が検索画面に表示されていました。
記事の中身が空白の時は検索画面に表示されないようにしました。
- 投稿件数が上限を超えていたり、スレッドの最初の投稿が古くてスレッドが閉じる事があります。
閉じたスレッドの時は、「このスレッドに投稿」から「このスレッドを表示」にボタンの表記が切り替わります。
しかし、1ページ中の途中に閉じたスレッドが存在すると、その位置から下のスレッドのボタンが「このスレッドを表示」になってしまうバグが見つかりました。 テンプレートのmain.html
に処理を追加してこの問題を修正しました。
- 「この記事は存在しません」という投稿を管理者編集モードで表示したときに、投稿者にホスト名を表示できるようにしました。
仮にこれらの「この記事は存在しません」の投稿が掲示板を荒らすためのものだった時は対応しなければならないからです。
- 記事が削除ずみで「この記事はありません」になったスレッドのTweetの時に名前+byのTweetが作成されてしまうため、親の記事が削除ずみの時にはbyが含まれないように調整しました。
- WCS動的パレットスクリプトのsubstr()をsubstring()に書き直しました。 String.prototype.substr() - JavaScript | MDN MDN
- 管理者が「スレッドを削除する」にチェックを入れて削除した時はスレッドが削除されます。
管理者はいつでもスレッド全体を削除できます。 - スレッドに残っている記事が1つの時は、その記事を削除すればスレッドが削除されます。
スレッドを立てた人が最初の投稿を削除するとスレッド全体が削除されるてしまう問題を修正しました。 スレッドの最初の投稿のみを削除できるようになりました。
- urlを判定する正規表現を新しいものに置き換えました。
- PHP5.6環境下で、作成されるwepb形式の画像が不正な画像形式になる場合があったため、PHP7.0以上である事をPHPスクリプトで判定してから処理を行うようになりました。
- アクセス制限がかかっている時にコンティニュー画面から新規投稿を選択できる問題を修正しました。
投稿出来ないのであれば最初から描ける状態にしないほうが良いからです。 - ユーザーidをセッションに格納し、同一セッションの時はIPアドレスが変わっても同じユーザーidになるようにしました。
古いバージョンでは、続きを描く→新規投稿を選択すると新しいスレッドへの投稿になっていました。
たとえば1枚の線画の塗り絵を10名が行う時に10スレッド必要でした。
これを1つのスレッドにまとめる事ができるようになります。
また返信として投稿されたお絵かき画像からの続きを描く時には、同じスレッドへの投稿になるようにしていましたが、こちらも返信からの新規投稿を新しいスレッドに投稿したい場合があり、自由に選択できるようにするべきという結論に達しました。
その選択のために「同じスレッドに投稿する」というチェックボックスを追加しました。
しかし「画像差し換え」の場合は同じスレッドに投稿するより他ないためこの選択肢は不要です。
そこで、JavaScriptを使って、新規投稿を選択した時のみ「同じスレッドに投稿する」というチェックボックスを表示するようにしました。
また、「新規投稿ならパスワードがなくても続きを描く事ができます。」という説明を表示しているものの、これまでのバージョンではパスワードの入力欄が表示されたままだったため、新規投稿を選択してもパスワードが必要であるかのように見えていました。
そこで、新規投稿を選択すると、パスワードの入力欄が表示されないようにしました。
しかしながら、新規投稿の場合でもパスワードがなければ続きを描けないようにして欲しいという方もいらっしゃるかもしれません。 そこで、config.phpに新規設定項目を追加しました。
//続きを描く時は新規投稿でもパスワードを必須にする
// する: true しない: false
// しない: false に設定すると、元の画像を上書きしない新規投稿なら誰でも続きを描く事ができるようになります。
// 合作の時にパスワードを公開する必要はありません。// $password_require_to_continue = true;
$password_require_to_continue = false;
新規投稿の時にもパスワードが必要な時は、新規投稿を選択してもパスワードの入力欄は非表示になりません。
1スレッドに1枚のイラストの場合、100枚のイラストのために100スレッド必要になります。
Petit Noteのような1スレッド1ログファイル形式の掲示板の場合は、1スレッドに複数枚のイラストを掲載したほうが全体ログのファイルの肥大化の進行を遅らせる事ができるため掲示板の寿命を延ばす事ができます。
これまで、「返信」のところからイラストを投稿して欲しいとお願いする事が多々ありました。
しかし、自分で描いたイラストに「返信」から別のイラストを投稿するのは、「返信」ではないため、「このスレッドに投稿する」にボタンの名称を変更しました。
カタログ画像にオンマウスカーソルした時に投稿日時を表示できるように修正しました。
ホスト名で拒絶する時の一般的な例は後方一致です。
example.com
のように後ろの方が一致する部分を拒絶します。 しかし、IPアドレスの場合は前方一致で拒絶する必要があります。
ホスト名が取得出来ないIPアドレスからの投稿の時はホスト名にIPアドレスが表示されますが、従来は、このIPアドレスが後方一致による拒絶処理になってしまい拒絶不能になっていました。
そこで、ホスト名とIPアドレスが同じユーザーの時は、ホスト名として表示されているIPアドレスの前から数文字分を指定して前方一致で拒絶できるようにしました。
$badhost =["example.com","100.100.200"];
このように設定した場合、
"example.com"は後方一致で拒絶処理が行われ、"100.100.200"は前方一致で拒絶処理が行われます。
これまでは禁止ホストで拒絶していても、ペイントボタンやコメントの入力欄は依然表示されたままでした。
仮に禁止ホスト指定が巻き込みになってしまった時は、ペイントボタンが表示されている事で絵を描いてしまうかもしれません。
絵を何時間もかけて描いて投稿する時に、「拒絶されました」と表示されてしまう事になります。
禁止ホストで拒絶指定した時は、ペイントボタンやコメントの入力欄を閉じる事で投稿を最初から制限するようにしました。
//拒絶する文字列 正規表現
//拒絶するurl
//使用できない名前 正規表現
//AとBが両方あったら拒絶 正規表現
これらのスパム対策のための禁止語句を管理者は制限なく投稿できるようになりました。
これにより、○○○という用語は使わないでくださいという説明をする時に、○○○を禁止語句に指定していても管理者はその語句を使用できるようになります。
また、「使用できない名前」に「管理人」や管理者のハンドル名を登録する事ができるようになりました。
管理者名が「使用できない名前」に指定されていれば、管理者以外のユーザーが管理者名を名乗って投稿するなりすまし投稿ができなくなります。
- ダークテーマが選択可能になりました。
- フランス語に対応しました。
- iPhone、iPadのタッチジェスチャーでフリーズする問題が修正されました。
- 大き目のディスプレイを使用時3列、スマホ2列だった表示を5列、スマホ4列に変更しました。
- 検索画面と共通のCSSを使用する形に変更になりました。
<div class="catalog_desc_wrap">
が、<div class="catalog_wrap">
に変更されていたり、divがspanに変更になっていたりします。
また検索画面のテンプレートは大幅に変更になりました。
index.css
とsearch.css
とcatalog.html
とsearch.html
をセットで更新して頂く形になります。
従来通りの表示のほうが良い場合は、CSSと上記テンプレートのHTML部分を変更しないようにしてください。
<link rel="stylesheet" href="template/basic/index.css?lot.230225">
?lot.230225
の部分が今回追加されたクエリです。
CSSを変更してもブラウザのキャッシュのCSSが読み込まれてしまい画面が変更されない問題を解消するため、Petit Noteのロット番号をクエリに追加しました。
Petit Noteを更新すれば新しいCSSをブラウザが読み込みます。
検索画面の日付が10桁のユニックス秒になるバグを修正しました。
サムネイル画像のありなしのifの分岐が間違っていたのを修正しました。
元のサイズよりも幅と高さが大きな拡大されたwebサムネイルが作成されるケースがあったのを修正しました。
POTI-boardで使っている外部PHPスクリプト、search.phpのコードをベースにした、記事検索機能を追加しました。
上記スクリプトを作成した当時と今では出力時のテンプレートでのエスケープの徹底化などの考え方に違いがあります。
そのままでは、Petit Noteのその他の処理と異なったコードになってしまうため、コードの整理と再構築を行いました。
この作業だけでまる一週間を費やしましたが、できる事はPOTI-boardの検索機能とほとんど同じです。
ページ送り機能はPetit Noteのほうが高機能です。
Petit Noteには日本語と英語の自動切り替え機能があります。
ブラウザの言語が日本語以外の時にはUIを英語表示します。
検索画面のUIもブラウザの言語が日本語以外の時には英語で表示されます。
/検索機能/
//検索可能最大数
//この値を大きくすれば検索可能件数が増えますが、サーバの負荷が大きくなります。
$max_search= 300;//画像検索の時の1ページあたりの表示件数
$search_images_pagedef = 60;//通常検索の時の1ページあたりの表示件数
$search_comments_pagedef = 30;
細かく設定したい方のみ、この設定項目を追加して調整してください。
この設定項目がconfig.phpに存在しない場合は上記の設定値が自動的に適用されます。
ファイルサイズの圧縮率が高いwebp形式のサムネイル機能を追加しました。
ただし、webpサムネイルは従来のJPEGサムネイルの代わりに使うためのものではありません。
検索画面や、カタログ画面のように画像をたくさん表示する画面で使います。
<picture> ~ </picture>
タグを使用して振り分けて、webpに対応していない旧バージョンのApple製品ではPNGやJPEGを表示します。
対応ブラウザの時はwebpを表示します。
v0.60.8以後は、お絵かき画像もアップロード画像の場合でも、投稿時にwebp画像が別途生成されwebp/
ディレクトリに保存されます。
表示する時に、webp画像の存在確認を行ってあればwebpの表示を試みてブラウザが対応していればwebp画像を表示します。
カタログ画面、検索画面、レス画面の下段の前後の投稿記事でwebpを使用します。
これにより1ページに60枚の画像を表示する場合でも、モバイル端末の通信費の負担が軽減されます。
また、固定回線の場合であっても画像が表示されるまでの待ち時間を短縮できます。
PNGやJPEGで投稿されたスレッドの画像は従来どおりの表示です。
webp画像は使用しているサーバの対応も必要です。
webp画像生成機能が存在してるかどうかを確認して、機能が存在していない時はwebp画像を生成しません。
ホームページを持っていない人が掲示板だけ設置する事を想定して、上段メニューのホームページへ戻るためのリンクを表示しない形にしていましたが、ホームページを持っていてそこから掲示板を利用する方が一定数存在しているため、初期設定状態でホームページへ戻るリンクを表示する事にしました。
上段メニューにはホームページに戻るリンクは必要ない方は設定をお願いします。
/使用目的別設定/
// ホームページへ戻るリンクを上段のメニューに表示する
// ホームページへのリンクが必要ない場合は 表示しない:false
// 表示する:true 表示しない:false
$display_link_back_to_home = true;
// $display_link_back_to_home = false;
初期設定では、表示するになっています。
またこの設定項目がconfig.phpに存在しない場合も、表示するになります。
編集→アップロード画像の差し換えの処理の時に、動画ファイル関連の変数が未定義エラーになっていました。
この問題はv0.52.6で発生しv0.58.5で修正されました。
サーバのステータスが「502 Bad Gateway」の時に描いていた絵が消えてしまうバグを修正しました。
サーバのステータスが200以外の時には「投稿に失敗時間を置いて再度投稿してください」というアラートを表示するのみで、画面を推移しないようにしました。 画面を推移しないので、スクショを取る事が可能になります。また、ほとんどの場合、再度投稿ボタン押せば投稿に成功します。
- app/klecks ディレクトリを上書きアップデート。
または、klecksフォルダの中のhelp.html
をアップロード。
- 記事の編集時に変数
$pchext
が未定義エラーになる場合があったのを修正しました。
この問題は、v0.56.3で発生し、v0.57.5で修正されました。
- 古いスレッドが閉じられる60日前に残り日数を表示する機能を追加しました。
- 返信可能な残り件数が20件以下になった時に返信可能件数を表示する機能を追加しました。
たとえば漫画などの連載ものの投稿時に途中でスレッドが閉じて、複数のスレッドに分割されてしまう事がありました。
スレッドがもうすぐ閉じられる事を事前に表示する事でそれらの問題を回避できるようにしました。
著作リンクを外部化しました。
parts/copyright.html
が著作リンクです。
そのHTML部分を著作リンクを表示するその他のテンプレートで読み込みます。
またPetit Noteの著作リンクのリンク先を、https://paintbbs.sakura.ne.jp/ に変更しています。
これは、作者のサイト「お絵かき掲示板Petit Note」のSEO対策のための変更です。
ご理解いただければ幸いです。
掲示板のトップページの時には必要がない、返信画面のための計算を他の画面でも行っていました。
各モードで必要な処理を振り分ける事で表示時の負荷を削減しました。
閉じたスレッドには返信できませんが、お絵かきでレスを描いているうちにスレッドが閉じてしまう事もあります。
その場合はスレッドが閉じていても新しいスレッドへの投稿として投稿を受け付けます。
この時に、ファイルロックがかかったレス先のログファイルを二重に開こうとしてパーミッションエラーが発生する事があったのを修正しました。
これまでは、アップロード画像は800kb、お絵かきアプレットからの投稿は1MB以上の時はJPEGへの変換を試行して、
JPEGに変換したあとの画像のほうが小さくなる時だけ、JPEGに変換していました。
しかしながら、比較的ファイルサイズが大きな場合でもPNG形式で保存したい。
逆にJPEGで保存したいという要望に応えるため、PNG形式のまま投稿可能なファイルサイズの上限を設定できるようにしました。
//アップロード時にpng形式で保存する最大ファイルサイズ
// このファイルサイズを超える時はJPEGに変換(単位kb)
$max_file_size_in_png_format_upload = 800;// ペイント時にpng形式で保存する最大ファイルサイズ
// このファイルサイズを超える時はJPEGに変換(単位kb)
$max_file_size_in_png_format_paint = 1024;
この設定項目の数値が小さいほどPNG画像がJPEGに変換されやすくなります。
この設定項目の数値が大きければPNG画像がJPEGに変換されなくなります。
↑
お絵かきコメントの時に「動画を表示しない」を選択すると、動画のリンクがでません。
また動画のURLを呼び出してもエラーになります。
↑
編集画面で、「動画を表示しない」のチェックを外すと、動画が表示されるようになります。
編集画面で、「動画を表示しない」にチェックをいれると、動画が表示されなくなります。
↑
「続きを描く」画面で「動画を表示しない」を選択すると、「差し換え」でも「新規投稿でも」動画のリンクがでなくなります。
PaintBBS NEOの動画は描いた手順を記録しているだけでなく、レイヤー情報も保存しているため続きを描く時に必要になります。
そのため、「動画を保存しない」というオプションはPetit Noteでは採用していません。
しかし、どうしても動画を完全にサーバから消してしまいたい時もあるかもしれません。
その場合は、「動画から続きを描く」となっている箇所を「画像から続きを描く」に変更して描くと、これまで記録されていた動画ファイルが削除されます。
コピーやレイヤー結合などの時にキャンバス周辺の紫の網目のところをスワイプしても画面が上下に動かなくする工夫を行っていましたが、その事が原因でモバイル端末で操作不能になるケースもありました。
今回の更新で、開いたキャンバスサイズの幅に対して端末の横幅に余裕がある時だけ、NEOのキャンバスの周囲の網目のところでスワイプしない形に変更になりました。
NEOの網目のところをつかんでスクロールできるようにしておかなければ操作不能になるからです。
キャンバスサイズと比較して、端末の横幅に余裕がある時は、NEOの網目のところをつかんでもスクロールしなくなります。
コピーやレイヤー結合、Bz曲線の操作の時に画面が上下に動いてしまうからです。
また、ピンチズームで拡大している時も網目のところをつかんでスクロールできるようになりました。
操作不能になるのを回避するためです。
これらは、NEOのペイント画面のインラインのJavaScriptで実装していますので、ペイント画面のテンプレートの更新が必要です。
Canvas2D: Multiple readback operations using getImageData are faster with the willReadFrequently attribute set to true
Chromeに上記の警告が表示されるようになったため、PaintBBS NEOを独自に修正しました。
HTMLCanvasElement.getContext() - Web APIs | MDN
willReadFrequently
多くのリードバック操作が計画されているかどうかを示すブール値。getImageData() これにより、(ハードウェア アクセラレーションではなく) ソフトウェア 2D キャンバスの使用が強制され、頻繁 に呼び出すときにメモリを節約できます。
- 新方式のPaintBBS NEOのデータを受信する
saveneo.php
に大きなバグが見つかりました。 PHP5.6、PHP7.2、などPHP8より古いバージョンのPHPで、saveneo.phpの致命的エラーが発生するバグを修正しました。
PHP8.1、PHP8.2では何もエラーを出さずに動作するためこのバグを見落としてしまっていました。
v0.55.2で追加された機能が必要ない方も、saveneo.php
の更新をお願いします。
- 合言葉のログイン状態を維持するオプションを追加しました。
config.phpに新規設定項目を追加しました。
config.phpのどこでもいいので、下記設定項目を追加すると、この設定が有効になります。
設定項目が存在しない時は、これまでのバージョンと同じ動作になります。
//合言葉のログイン状態を維持する
// する: true しない: false
// する: true に設定すると合言葉のログイン状態を30日間維持します。// $keep_aikotoba_login_status=true;
$keep_aikotoba_login_status=false;
//お絵かきアプリで投稿する時の必要最低限の描画時間
//(単位:秒)。この設定が不要な時は : 0
// 指定した秒数に達しない場合は、描画に必要な秒数を知らせるアラートが開きます。$security_timer = 0;
// $security_timer = 60;
この設定項目で、投稿に必要な最低限の描画時間が設定されている時に、エラーメッセージが、すべて「あと0秒」になるバグを修正しました。
このバグが残っている状態でも必要最低秒数が60秒で60秒を超えていれば、エラーメッセージは表示されず問題なく投稿できます。
また、投稿に必要な最低限の描画時間が設定されていない場合も、エラーメッセージは表示されず問題なく投稿できます。
今回の修正で、60秒以下の時は「あと50秒」のように表示されるようになります。
このバグはv0.55.0で発生し、v0.55.0.2で修正されました。
saveneo.php
のバグを修正しました。 新しく追加したPaintBBS NEOの新しい受信ファイルsaveneo.php
にバグが見つかりました。
非対応ブラウザの時にエラーのアラートが開かず画面を推移して投稿画像が消えてしまうバグを修正しました。 saveneo.phpを最新版に差し替えてください。
- 従来のお絵かき掲示板に投稿できるようにするために、生データを送信していたNEOを改造して、formDataでヘッダ、画像、動画データを送信できるようにしました。
この変更によって、WAFがNEOの送信データを攻撃と判断して遮断する確率が低くなり投稿が成功する確率が飛躍的に高くなります。
NEOはこれまで生データを古い掲示板との互換性を確保するために送信してきました。今回の独自拡張でによってそれが、formDataに変わります。 現時点では独自規格ですが規格が乱立するのはよくない事ですので、開発元にプルリクエストを出しています。
- これまではNEOのデータの受信を
picpost.php
で行っていました。
このバージョン以後は新しく追加した、saveneo.php
でNEOのデータを受信します。
このファイルのアップロードを忘れると、NEOからの投稿ができなくなりますので、必ずアップデートしてください。
potiboard.phpと同じディレクトリに転送します。 - Paint画面のテンプレートの更新
paint_neo.html
の更新をお願いします。 formDataで送信するモードに切り替えるためのパラメータが追加されています。
//お絵かきアプリで投稿する時の必要最低限の描画時間
//(単位:秒)。この設定が不要な時は : 0
// 指定した秒数に達しない場合は、描画に必要な秒数を知らせるアラートが開きます。$security_timer = 0;
// $security_timer = 60;
描画時間が指定秒数より短い時はPaintBBS NEO、ChickenPaint、Klecksすべてのアプリで、「"描画時間が短すぎます。あと30秒。」というアラートが開きます。
エラーはできるだけ出ないほうがいいのですが、エラーになってしまった時の詳細なエラー内容が日本語のアラートで開くようになりました。
アラートは開きますが描いている絵の画面は切り替わらずにそのままの状態になりますので、スクリーンショットをとってあとでアップロードする事ができます。
動作上の差はほぼありませんが、コードが整理された事により上記のようなエラーメッセージの表示が可能になりました。
従来の「投稿する時に合言葉が必要」に加え、「掲示板の閲覧に合言葉が必要」という設定項目が追加されました。
/合言葉設定/
// 投稿に合言葉を必須にする
// する: trueで投稿に合言葉が必要になります。
// する: true しない: false// $use_aikotoba = true;
$use_aikotoba=false;// 掲示板の閲覧に合言葉を必須にする
// する: true しない: false
// する: trueで掲示板のすべてのコンテンツの閲覧に合言葉が必要になります。// $aikotoba_required_to_view=true;
$aikotoba_required_to_view=false;//合言葉
//上記の合言葉機能のどちらか、あいるは両方が true の時に入力する秘密の答え。
// 必要に応じて変更してください。
$aikotoba = "ひみつ";
config.phpの合言葉設定の箇所を整理して合言葉の項目を新たに追加しました。
5回連続してパスワードを間違えた時は管理者ログインをロックしてログインできなくする機能を実装しましたが、ftp接続による手動での解除は面倒なため、ログインがロックされてもそこから3日経過すれば再度ログインできるようにしました。
記事のまわりこみ方によっては、編集・削除のボタンの位置が本文と離れた場所に表示されてしまう事がありました。
更新するテンプレートの数が多くなってしまいお手数をおかけしますが細かく修正しました。
閉じたスレッドの返信ボタンは「表示」になりますが、管理者投稿モードでログインしている時には返信可能なので、ボタンの「表示」が「返信」になるように修正しました。
古いスレッドを自動的に閉じる日数の指定が無効になってしまうバグを修正しました。
記事の管理に使っている投稿管理時刻の16桁化の時に、該当箇所へのマイクロタイム3桁と6桁を振り分ける機能の追加を忘れていました。
一時的に古いスレッドを閉じなくなっていただけですので、ログファイルその他への影響はありません。
config.phpの以下の設定項目が、管理時刻の16桁化以降無効になっていました。
//古いスレッドを自動的に閉じる日数 単位 日 //古いスレッドへのスパム防止 //初期設定の180で、半年前に立てられたスレッドに返信できなくなります。 //日数による制限をしない時は 0 。 //管理者投稿はこの制限を受けません。
$elapsed_days=180;
.pch
データや.psd
データのmime typeのチェックを追加しました。
mime typeのチェックのコードが煩雑にならないようにするため、pchファイルかどうかをチェックしているcheck_pch_ext()
関数のコードを整理してforeach化しました。
これまでも、続きを描く→動画からを選択した時は、動画から画像と同じ幅と高さのキャンバスを開いて続きを描く事ができました。
しかしそれは、PNG形式やJPEG形式の画像の幅と高さをキャンバスに反映したものでした。
したがって、動画ファイルをアップロードする時には、その動画の幅と高さを手動で設定する必要がありました。
今回のアップデードにより、すべてのアプリの固有ファイルのアップロード時に、幅と高さを入力しなくてもよくなりました。
どのお絵かきアプリのファイルなのかはアップロードしたファイルのファイル名から取得します。
拡張子.pch、.chi、.psdなどの各ファイルをアップロードする時は、ファイルを選択してペイントボタンを押すだけになりました。
↑
v0.52で、pchファイルアップロードペイント時のキャンバスサイズの入力は不要になりました。
pchファイルのバイナリデータを解析して幅と高さの情報を取り出しています。
config.phpに新規設定項目を追加しました。 管理者パスワードを5回連続して間違えた時はログインページをロックします。
config.phpのどこでもいいので、以下の設定を追加すれば、設定が有効になります。 この設定項目が存在しない場合は、従来と同じ動作でなにも変わりません。
// 管理者パスワードを5回連続して間違えた時は拒絶する
// する: true しない: false
// trueにするとセキュリティは高まりますが、ログインページがロックされた時の解除に手間がかかります。// $check_password_input_error_count = true;
$check_password_input_error_count = false;//ftp等でアクセスして、
//template/errorlog/error.log
// を削除すると、再度ログインできるようになります。
//このファイルには、間違った管理者パスワードを入力したクライアントのIPアドレスが保存されています。
本来意図しない階層にあるファイルを開いてしまうディレクトリトラバーサルの脆弱性が存在している事がわかりましたので、対策しました。
Petit Noteのログファイルの形式と同じか、ものすごく良く似た構造のあるファイルで、拡張子が.log
のファイルが意図せず開かれる可能性があります。
開いているログファイルの形式が正しいかどうかチェックする処理が入っているため、まったく無関係な機密ファイルを開かる可能性は低いと思います。
しかしながら、別の階層のファイルが読み込めてしまうのは明らかな脆弱性ですので、これを機会にぜひアップデートをお願いします。
ファイルパスに変数を使用している箇所の変数チェックの徹底化を行いました。
数字が入るべき変数に数字以外の文字列が入っていた時はエラーになるようにしました。
basename()
関数を使用してディレクトリの階層を表す../../
のようなパスを無効化しました。
ファイルパスに変数が存在しているすべての箇所にこれらの対策を行いました。
postの送信元のOrijinヘッダを調べて、ホスト名と同じOrijinでは無い時は拒絶する処理を追加し、さらにブラウザによるアクセスの時にはある筈のCookieが確認できない時は処理を拒絶するようになりました。
効果がどの程度あるのかは不明ですが、それほど大変な処理の追加ではなかったため、実装いたしました。
なお、外部サイトに不正な投稿フォームが設置されて、閲覧するだけで記事が送信されてしまうCSRFはトークンで防止しています。
それに加え、すべてのpostのOrijinヘッダとCookieのチェックを行う形にしました。
これによって、たとえばブラウザを使用しないbotではpostできなくなるかもしれません。
ブラウザ自動化が当たり前になって来ていますので、効果は限定的ですが、なにもしないよりはいいのではないでしょうか。
-
個別スレッドのログファイルの削除処理がPHP7.2で動作していなかったのを修正 削除処理のスッド削除とスレッド数オーバー時のスレッド削除の時に、 個別スレッドのログファイルの削除に失敗する事があったのを修正しました。
たとえば、PHP8.1では開発者の意図通りにログファイルの削除が行われ、PHP7.2では削除される筈のファイルが削除されていませんでした。 -
削除処理でファイルクローズが二重になって、PHP8環境でエラーが出ていたのを修正しました。
-
画像が存在しない時にgetimagesize()がコールされてerrorが発生していたのを修正しました。
-
続きを描くからの管理者判定に管理者パスワードとの一致の処理が抜けていたのを修正しました。
-
お絵かき投稿のIPアドレスにブランクが入ってしまった時に、ブランクとブランクを比較してIPアドレスの一致になっていたのを修正しました。
-
存在しないツール名がログファイルに記録されないように入力値をチェックするようになりました。 お絵かき投稿時のツール名が['neo','chi','klecks']ではない時は???に。
-
ツール名がアップロードになるのは、明確にアップロード処理を経た画像のみになるように修正しました。
- IPアドレスの取得方法を変更。getenv()から$_SERVERへ。
- ユーザーコードとリプレースコードの作成にuniqid()を使用してマイクロタイム単位に。
- リプレースコードを8桁から12桁に変更。
- メール通知クラス更新。IPアドレスの取得方法をgetenv()から$_SERVERに変更しました。
- 画像差し換えの画像アップロード処理の時にgetで取得したパスワードが入らないようにしました。
WAF誤検知で投稿できなかった時のエラーを追加したPaintBBS NEOの独自拡張版を同梱しました。
ロリポップやさくらのレンタルサーバに標準で装備されているWAFが、NEOからの投稿をブロックする事があります。
その時、NEOからのデータを受信しているpicpost.phpが403拒絶にWAFによって変更されてしまい投稿が失敗します。
しかし、何か続きを描くとパターンが変わり投稿が可能になる事があります。
WAFをオンにしていないのであれば、何も変わりませんが、セキュリティ対策でWAFをオンにして使う時には、投稿に失敗した原因と対策がエラーメッセージで表示されるので、対応しやすくなります。
- ブラシのショートカットキーの動作が修正されています。
- ペイントボタンを押す直前にブラウザのCookieを消去するとお絵かき投稿に失敗するバグを修正しました。
また、お絵かき画面にCookieと照合するユーザーコードが入力されていない時にはエラー画面が表示されるようにしました。
これは、時間をかけて描いた絵が投稿できなくなるのを回避するためです。
今回の更新でいくつかのファイルやディレクトリが更新されていますが、index.php
のアップデートのみでもこの問題に対処できますのでよろしくお願いいたします。
- 続きを描くで画像を差し換える時の処理でエラーが発生した時は、画像差し換えではなく、未投稿画像の投稿画面に切り替わるようになりました。それにより画像の差し換えには失敗しても新規投稿は可能な事がわかるからです。
これまでは、失敗した事を知らせるエラーメッセージが表示され、そのあとどうすればよいのかを知らせるメッセージ等はありませんでした。 - 待機時間がマイナスの時は通す。
連続投稿のチェック処理で前回の投稿時刻に未来の時間が検出された時は、エラーにならず通過するようになりました。
たとえば前回の投稿時刻がなんらかのミスによって100年後になっていたら、100年経過しないと投稿できなくなるからです。 - 投稿時刻の重複回避処理5箇所のコードを統一しました。
- お絵かきコメントの画像の幅と高さ。 お絵かきコメントの記入画面の画像にHTMLの幅と高さを追加しました。これまでは、画像が表示されるにしがたってコメント欄が下に移動していくユーザーが予期しないレイアウト シフトが発生していました。
- klecksとPaintBBS NEOのエラーメッセージの種類が増えました。
- klecksで投稿時にサーバのステータスが200以外の時にはエラーメッセージのアラートが開くようになりました。
ステータスが200以外の場合は投稿に失敗します。しかし、400番以上をエラーとして判定してしまっていたため200番以外の時にエラーメッセージのアラートが表示されないままになっていました。
- 指定日数を経過して閉じたスレッド、レス数が上限に達して閉じたスレッドでも管理者投稿モードでログインしていれば投稿が可能になりました。
多くの機能の制限を指定しても管理者は制限を受けない仕様になりました。
- 全体ログに保存されている本文のコメントを読み込んでいる箇所はありません。
そのため全体ログにはコメントを保存しないようにする事もできますが、どんなコメントが入っているスレッドなのか把握できるようにするため、120バイト分だけ保存する形に変更しました。
各スレッドの個別ログから実際のコメントの読み込みは行われるため、実際の画面ではコメントの全文が表示されます。
これによりログファイルの肥大化の進行を遅らせる事ができます。
すべてのログを1つのファイルにすべて保存するPOTI-boardでは動作が重くなる数の書き込み数でも比較的軽快に動作します。
- 負荷削減策として、数字の0と文字列の0の時、そして、ブランク''の時はhtmlspecialchars()関数に文字列が入る前に'0'や'ブランク''をreturnするようになりました。
組み込み関数は高速に動作しますが、回避できる不要な関数の処理は回避したほうがより高速に処理できるからです。 ただし、あえていうほとの高速化には至りません。
やらなくていい処理はやらないほうがいいという事です。
- 自己終了タグを除去。 w3c Validation チェックで非推奨のエラーが発生するため自己終了タグを整理しました。
- NEO描画画面のHTMLの文法ミスを修正しました。
- 長い英文の改行時に英文が読みにくくなっていたため、英語圏での利用を考慮して改行方法の指定を変更しました。
- tweet→Tweet 頭文字は大文字と公式に掲載されていたため修正しました。
- TOOLとすべて大文字で記載していましたが、統一感がないため、Toolに変更しました。
- 動画再生時に画像ファイルが存在しない時はエラーにして動画の再生を止めるようにしました。
画像が存在しない時に画像の幅と高さを取得しようとしてエラーになっていたため対処しました。
- PaintBBS NEO、klecks、ChickenPaintの各アプリのデータ受信ファイルの設定を変更し、画像ファイルサイズの上限設定を8MBに増やしました。
しかしながら、さくらのレンタルサーバ等ではサーバ側の設定で初期値で5MBまでに制限している事が多いため、それ以上の容量のファイルのアップロードが必要な場合はサーバの設定も必要になります。 .psdファイルや.chiファイルは20MBあたりまで肥大化する事があります。
その時にサーバのphp.iniで上限が5MBになっていると動画ファイル、.chiファイル、.psdファイルを切り捨てて画像だけ投稿される形になります。
投稿可能な容量サイズの設定を20MB程度まで大きくしておく事をおすすめします。 ここのファイルサイズの設定が5MBのままでも、画像は受信できると思いますが、.psdや.chiは受信できない場合があります。
運営しているお絵かき掲示板では、
upload_max_filesize = 20M
post_max_size = 20M
に設定を変更しています。
php.iniの変更は各自でお願いします。
不明な場合は、各レンタルサーバ運営会社等にお問い合わせください。
さくらのレンタルサーバであればブラウザ上の管理画面からでもphp.iniの設定ができます。
- 動的パレットのパレットファイルが存在しない時はファイルが存在しない事を知らせるエラーを出すようになりました。
- ブラウザの言語が日本語以外の時に表示される動的paletteの英語翻訳版のtypoを修正しました。
- config.phpの文字列のシングルクオートをダブルクオートに変更しました。
config.phpの再設定は面倒なので設定項目を追加するのでなければ更新しなくても大丈夫です。 英語圏では、let's
のように、単語の省略型にシングルクオートの文字を使用する事があるため、文字列の区切りにシングルクオートが適さない例があるため更新しただけです。
英語圏での使用を想定した変更点になります。
- ゆがみを使用したあとに白く塗りつぶした箇所にゆがみの形にそった線が入る問題が修正されています。
- ヘルプページに使い方の動画リンクが追加され、グラデーションのショートカットキーの項目が追加されました。
- ChickenPaintのカラーピッカーで色を選択する操作をすると、表示されていた色が消え、真っ白になる問題がChromeのバグによって発生しました。
このGoogle Chromeのバグを回避して動作するChickenPaintの最新版に更新しました。
- グラデーションツールにグラデーションを消しゴム化して使うオプションが追加されました。
- 集中線を描写する機能が追加されました。
- luminousの実行に必要なファイルが存在しない時はエラーメッセージでファイルが存在しない事を知らせるようになりました。
- Klecksを最新版に更新しました。
グラデーションツールとパターンフィルタが追加されました。
- Luminous
サムネイル画像をクリックした時の動作を変更しました。同じ画面内で画像をポップアップ表示します。
LuminousのデフォルトのCSSにはスマホ表示時に画像を拡大してスワイプしながら閲覧する拡大機能がありますが、スマホの縦横の幅の範囲に画像が収まるように調整しました。
Luminousでポップアップ表示すると、画像の周囲が暗くなるため、掲示板の背景色が白でも透過PNGの透明部分がきっちり透過した状態で閲覧できます。
ChickenPaintとKlecksは透過PNG画像の作成に対応していますので、ぜひお試しください。
- 日記モードを改善。
日記モードで絵を描いて投稿する時に管理者ログインのセッションが終了してログアウトしてしまうと投稿できなくなる問題に対応するため、管理者投稿の判定条件を変更しました。
仮に管理者投稿モードのログインのセッションが切れてしまっても管理者パスワードで投稿すれば管理者の投稿として受理されるようになりました。
日記モードに設定すると新規スレッドの作成は管理者のみになりますが、スレッドへの返信は誰でもできる状態でした。
スレッドへの返信を管理者に限定する機能を追加しました。
config.phpのどこでもいいので下記設定項目を追加することでこの機能を有効にできます。 設定項目が存在しない時は、従来どおりの動作になります。
//返信を管理者のみに限定する
//する: true で管理者以外返信ができなくなります。
//日記モードと併用すれば、すべての書き込みが管理者のみになります。
$only_admin_can_reply = true;
// $only_admin_can_reply = false;
- 閲覧注意の設定ができるようになりました。 投稿画面で、閲覧注意にするにチェックを入れると、画像にぼかしが入ります。 編集画面で、閲覧注意のオン、オフを切り替える事もできます。
config.phpのどこでもいいので下記設定項目を追加することでこの機能を有効にできます。 設定項目が存在しない時や、閲覧注意を設定しない場合は従来どおりの動作になります。 従来通りの設定の時は閲覧注意のチェックボックスも表示されません。
// 閲覧注意を設定する
//する: trueに設定すると閲覧注意の設定ができるようになります。閲覧注意画像にぼかしが入ります。
// する: true しない: false
$mark_sensitive_image = true;
// $mark_sensitive_image = false;
-
Java版のpchの時は、対応フォーマットではない事を知らせるエラーメッセージを表示。
管理者投稿モードでログインしている時はPaintBBS NEOの.pch
、ChickenPaintの.chi
、Klecksの.psd
ファイルをアップロードする事ができます。
しかし、Java版の.pch
とPaintBBS NEOの.pch
は拡張子は同じでも、中身が違うためPetit Noteでは扱えません。
Java版の.pch
とNEOの.pch
を判定する処理を追加して、Java版の.pchの時にはエラーメッセージを出すようにしました。 -
PNGファイルをjpegに変換する関数
png2jpg()
の処理の最後にjpeg画像の作成に成功したかどうかをチェックする処理を追加しました。 -
.pch
、.psd
、.chi
ファイルのダウンロード時のパス確認処理を他の箇所と同じになるようにしました。 パスワード入力欄が空欄の時はCookieに記録されているパスワードを使って照合します。 -
投稿処理で個別スレッドのログファイルを2回開いていたのを1回にまとめ、ファイルのopenと同時にファイルをロック。
連続投稿や投稿時刻、画像重複のチェックをファイルロックがかかった状態できるようになりました。
より確実に内容をチェックできるようになりました。
同じスレッドに同じ投稿時刻の重複が発生する可能性を排除する事ができました。
(投稿時刻=UNIXタイム10桁+マイクロ秒6桁の16桁の数字) -
サムネイル画像が存在する時は、コンティニュー前画面に軽量なサムネイル画像を表示するようにしました。
-
ファイルの存在確認の結果がまったく表示されないバグを修正しました。
必要なファイルが存在しなかった時は、そのファイルのパスを表示できるようにしました。 -
メール送信時のエンコードが多国語対応になっていなかったのを修正しました。
安定版をリリースからダウンロードできます。
Petit Note v0.30.6 リリース
- jQueryをv3.6.0に更新しました。
- Klecksを最新版に更新しました。
ノイズフィルタが追加されました。
//禁止ホスト
$badhost =['example.com','example.org'];
config.phpに上記設定項目を追加する事で、指定したホストからの書き込みを拒絶できます。
- クリックジャッキングの脆弱性を修正しました。
フレーム内に掲示板を表示しないのであれば下記設定項目の追加は必要ありません。 フレーム内で表示したい方のみ、下記設定項目をconfig.phpのどこでもいいので貼り付けて設定してください。
//iframe内での表示を 拒否する:true 許可する:false
//セキュリティリスクを回避するため "拒否する:true" を強く推奨。
$x_frame_options_deny=true;
// $x_frame_options_deny=false;
-
スマホ操作に適した表示に。
-
表示高速化。JavaScriptを先読みして、クリティカルチェーンを少なく。
-
ページーングのループを削減。コードを短縮。
-
jQueryのバージョンをindex.phpの設定から読み込んで、テンプレートに自動的に反映できるようにしました。
これまではjQueryのバージョンを変更するにはテンプレートを直接書き直して設定を変更する必要がありました。
すでに表示されているところにloading="lazy"が入っていると表示が遅くなるため、スレッドの上のほうの画像にはloading="lazy"
が追加されないようにしました。
- PaintBBS NEO起動画面の時計のJavaScriptを修正しました。
コンテンツセキュリティポリシーを設定したらPOTI-boardのお絵かき画面の時計が動かなくなりました。|さとぴあ|note
- 記事の管理のための時刻を13桁から16桁へ。 マイクロ秒の下3桁を6桁に増やしました。 この変更はまったく同じ投稿時刻になる可能性を1/1000に下げるためです。 また、仮に重複しても1秒分ずらして対応できるように処理を書き直しました。
- お絵かきの投稿を管理している時刻も16桁に増やしました。
- お絵かきの投稿時にすでに同じファイル名の画像が存在している時は秒数を1秒ずらして重複を回避します。
- Klecksを最新版に更新しました。 編集メニューにグリッドを描画するフィルタが追加されています。
- トップの入力フォームを使用しない設定にすると管理者ログインの時にもトップのフォーム、そして画像アップロードのフォームが表示されなくなるバグを修正しました。
管理者のみアップロード可にしたいときに、アップロードができなくなっていました。
管理者投稿モード(日記モード)でログインしているときは、トップの入力フォームと画像アップロードのフォームが表示され、コメントのみの投稿も画像アップロードもできるようになりました。
- 動画を表示する画面からの戻り先のリンクを掲示板のトップページから、個別スレッドに変更しました。 動画再生画面から掲示板の該当スレッドに戻れるようになりました。
- 名前クリック時の作者検索が正しく動作しなくなっていたのを修正しました。
v0.18.10、lot.220522で発生したバグです。
- ChickenPaintが全画面表示で起動するようになりました。
- メインページとカタログページのページ番号が番号の途中で改行されないようにしました。
- 現在ページの番号を太字で表示するようになりました。
- 管理者ログイン時の確認処理に使用している第2パスワードの存在チェックを処理に追加しました。
- 指定経過日数を超えた古い投稿でも管理者は続きを描けるようになりました。
指定経過日数を超えた古い投稿はユーザーによる編集、続きを描くができなくなるようにしてあります。
管理者は編集が可能でしたが、続きを描くはできなくなっていました。
管理者は編集、削除、続きを描く、画像差し換えすべての機能を制限なく使えるようになりました。
- レス先のスレッドの番号が1000を超えている時にレスでお絵かきできなくなるバグを修正しました。 レス先の番号が1000以上の時にレスでお絵かきすると「問題が発生しました」というエラーメッセージが表示されて投稿できなくなるバグを修正ました。
- v0.18で発生した指定サイズ以上の実体データの縮小処理が効かなくなるバグを修正しました。
- 画像差し換え時の指定サイズ以上の実体データの縮小処理が抜けていたを修正しました。
アップロードした画像を差し換える事ができるようになりました。 修正した画像と差し換えたい時などにご利用いただけます。
多くのウェブサイトに実装されている上に戻るボタンを実装しました。
- スレッドの親が1行目にある事を厳密に確認してから、スレッドのレスを作成するようになりました。
ファイルロックがかかった状態で、1行目が親である事を確認してから処理を行うようになりました。
一瞬の隙をついたタイミングで問題が発生する可能性がゼロではないため対策を行いました。
config.phpに新規設定項目を追加しました。 その設定が特に必要ない方は従来のconfig.phpをそのままご利用ください。
- スパムの拒絶処理で、拒絶する文字列の指定に
/
(スラッシュ)が含まれる時に処理が失敗するバグを修正しました。 - お絵かき画像投稿時のコメント欄でURLを入力しても反映されないバグを修正しました。
- アップロード画像の作業ファイルのゴミが残るバグを修正しました。
- 「続きを描く」ができなくなる大きなバグがv0.12で発生していました。 v0.12は使用しないようにしてください。 index.phpの上書きアップデートをお願いします。
- iPadOSで発生するいくつかの問題が修正されました。
- 使用可能な言語に繁体字中文が追加されました。
-
必要なファイルの存在をチェックする機能を追加しました。 設置や移転の時のための機能です。 必要なファイルが存在しない時は、エラメッセージでファイルの場所とファイル名を表示します。
-
klecksの送信失敗の原因がサーバーエラーの時はエラー番号をアラートで表示します。 例えば、Klecksのデータを受信する
saveklecks.php
が存在しない時は、「エラー404」というアラートを表示します。 -
ファイルサイズが指定サイズよりも大きなときに、PNGからJPEGに変換する処理の作業ディレクトリを
temp/
に変更しました。 これにより、処理に失敗して作業ファイルのゴミが残っても、テンポラリの掃除機能で不要なファイルとして自動的に削除されるようになります。
-
全体ログのパスワードが一致しなかった時に処理が停止せず、スレッドのログファイルの画像やログが先に削除されてしまう箇所がありました。 編集、削除、続きを描くの画像差換えの3箇所です。 全体ログのパスワードが一致しない時は、スレッド個別のログファイルにかかわる処理が実行されないように書き直しました。
-
config.phpの設定で、
$deny_all_posts = true;
//全ての投稿を拒否 に設定した時に、返信ボタンに「返信」と表示されていたのを「表示」に修正しました。 古いスレッドを閉じた時、1スレッドあたりの最大投稿数を超過した時と同じ動作になるように調整しました。
- Klecksが多国語対応したのに伴い、日本語翻訳版を作成しました。
PetitNoteにも、日本語対応版を同梱する事ができました。 この新しいバージョンのKlecksは、ブラウザの言語の優先順位を自動検出して言語を切り替えてくれます。
また、ブラウザの言語の設定にかかわらず使用する言語を指定する事もできます。
英語、ドイツ語、日本語が選択できます。
中文は簡体字のみで細部はまだ英語のままです。
日本語翻訳版はすでに開発元に統合済みです。
- 透過PNGの透明部分がJPEG化する時に、真っ黒になっていたのを修正しました。
透明色が黒も間違いではないのですが、意図しない結果になる事が多いため、透過GIF、透過PNGからJPEGに変換する時は、透明色を白に変換します。
- ファイルサイズの上限のチェックが、アップロード前のファイルサイズだったのを修正しました。
アップロード処理でファイルサイズが減少した後にファイルサイズをチェックする方式になりました。
- 管理者ログイン時に使うアップロードペイントアプリ固有形式、pch、chi、psdなどの不要になったファイルの自動削除機能の動作時に軽微なエラーが発生するケースがあったのを修正しました。
.pch
ファイル(PaintBBS).chi
ファイル(ChickenPaint).psd
ファイル(Klecks)
Klecksのレイヤー情報を含むファイルはPhotoshop形式の.psd
ファイルです。
ダウンロードした.psd
ファイルはクリスタやSAIそのほか多くのアプリで開く事ができます。
.pch
と、.chi
は、それぞれNEOとChickenPaintで開く事ができます。
管理者投稿モードでログイン時に.pch
、.chi
、.psd
を添付してペイントボタンを押せば、キャンバスに読み込んで投稿できます。
- iPad+Apple Pencilでアプリのメニューが操作できなくなっていたのを修正しました。
ペイント画面から問題の発生の原因になっていたJavascriptを削除しました。
- 新しいブラシが追加されました。左右対称、上下対称のミラーペインティングができるようになりました。
新しいリリースの確認を簡単にするため、管理者メニューに最新のリリースのバージョンを表示します。 このバージョンの画像をクリックすると、GitHubの最新のリリースのページが開きます。
config.phpに新規設定項目を追加しました。
わかりやすいUIと強力なブラシが使えるアプリです。 レイヤーの最大数は16枚です。 数多くのフィルタが使えます。輝度を透明に変換、明るさ/コントラスト、色調補正など。
このアプリの追加にともない、管理者投稿モードのときにアップロードできるファイル形式に「PSD」が追加されました。
PSDファイルを選択してペイントボタンを押すと「Klecks」のキャンバスにPSD画像が読み込まれます。
トップページからのpch、chi、psdのアップロードペイントだけでなく、返信画面からのpch、chi、psdの投稿もできるようになりました。
- スレッドのレス表示件数がページの下になるにつれ1ずつ増えるバグを修正しました。
- 未定義エラーを修正しました。
このバグによりログが破損する可能性があります。 通常は編集、または書き込みが同時に行われても一瞬でも先にファイルを開いた側が他からファイルを読み込めないようにロックします。 そのロック処理が二箇所抜けていました。 その他の機能追加が特に必要ではない方も、以下の2つのファイルの上書きアップデートをお願いします。
- functions.php
- index.php
-
編集削除時のパスワードチェック処理を変更しました。レスのログファイルのパスに加えて全体ログのパスワードをチェックするようになりました。
-
レス画像から続きを描く時は、新規投稿でもレスになりました。
-
レス画面に前のスレッドと次のスレッドが表示されるようになりました。
-
続きから描くからの「もどる」のリンク先を該当スレッドに。
これまでは掲示板のトップページにもどっていました。そのため「続きを描く」の画面がGoogle検索でヒットしても、もとのスレッドがどこにあるのかわかりませんでした。 -
画像チェックの負荷を削減しました。
-
テンプレートのエスケープ漏れがあってもXSSが実行されないように編集画面の変数をHTMLファイルに渡す前にエスケープしました。
-
iPadの768pxで閲覧時に画像の右側の余白がでないように調整しました。
768px以上の幅の画像を表示する時は右側のmarginを0にフロートをnoneに。 -
入力文字列、拒絶する文字列どちらからもスペースを除去。拒絶する文字列にスペースがはいっていても機能するようになりました。
これまでは拒絶する文字列の設定に半角スペース、全角スペースがあると、入力文字列にスペースがあっても拒絶できなくなっていました。
これは、入力された文字列からスペースや改行をとりのぞいた文字列をチェックしているからです。
拒絶する文字列に入っているスペースもチェック時に除去する事でこの問題を解決しました。 -
文字化け対策。投稿者名をコピーで使用する時は特殊文字を全角に。
セキュリティを確保しながらかつ文字化けが最低限になるようにするためHTMLの特殊文字を全角に変換します。 投稿者名をコピーの箇所のみの対応でそのほかの箇所はもとの入力文字列が表示されます。 -
コメントの最小幅を350pxに。 より見やすい画面になりました。
- 英語対応。ブラウザの言語が日本語以外の時は、UIとエラーメッセージを英語で表示します。
- sageにチェックが入っていなくても、レスでスレッドがあがらないようにする設定項目を追加しました。
//する: trueに設定するとレスがついてもスレッドがあがりません。(全てsage)。
//初期値 false
//$sage_all = true;
$sage_all = false;
- HTMLの文法エラーを修正しました。
-
chiファイルアップロードペイントファイルの削除処理
管理者投稿でChickenPaint固有ファイル、chi形式のファイルをアップロードしてキャンバスに読み込んだあとのchiファイルの削除処理が抜けていたのを修正、追加しました。
今回の修正でアップロードから5分経過していればtempディレクトリから削除されるようになりました。この修正を行う前でも、数日経過すれば不要になったファイルは削除されていました。 -
編集削除のIDとして使っている投稿時間が重複しないように入力値を検証してエラーにする
同じ記事ナンバーかつ同じタイムスタンプとなる可能性を完全に排除しました。 -
画像のALT文の見直し。続きを描く時の画像にもイラストのタイトルと作者名
画像のALT文にタイトルと作者名が入るようになりました。 -
HTMLの文法ミスを修正しました
- PaintBBS NEO v1.5.15 の右ボタン常時表示に対応しました。
neo.js
と、paint_neo.html
のアップデートをお願いします。
また、ブラウザの言語が日本語以外の時に表示されるPaintBBS NEOの英語表記版の半角文字列の改行が意図通りに行われずレイアウトがくずれていたのを修正しました。
paint_neo.html
のアップデートをお願いします。
v0.9.8.18.1に更新したファイルが入っていなかったため、改めて更新をお願いします。
-
簡易的なCSRF対策を行いました。
picpost.php
save.php
と、index.php
のアップデートをお願いします。 -
PaintBBS NEO v1.5.15 の右ボタン常時表示に対応しました。neo.js
と、paint_neo.html
のアップデートをお願いします。
また、ブラウザの言語が日本語以外の時に表示されるPaintBBS NEOの英語表記版の半角文字列の改行が意図通りに行われずレイアウトがくずれていたのを修正しました。
paint_neo.html
のアップデートをお願いします。
- Descriptionが長くなりすぎる問題に対応しました。
これまではスレッドの親のコメント全文がDescriptionに入っていました。
-
config.phpに新規設定項目追加
-
コメント欄に投稿可能な最大文字数を設定できるようになりました。
-
投稿できる画像の幅と高さを設定できるようになりました。サイズ超過の時は設定したサイズの範囲内になるように自動的に縮小します。
index.phpとthumbnail_gd.phpを同時に更新する必要があります。 thumbnail_gd.phpのバージョンが古い時は、バージョンが古いというエラーメッセージがでます。通常通り起動していれば更新に成功しています。 -
save.phpを更新しました。ChickenPaintによる投稿の時に画像の幅と高さのサイズ違反をチェックするようになりました。
-
picpost.phpを更新しました。PaintBBSNEOによる投稿の時に幅と高さのサイズ違反をチェックするようになりました。
-
template/basic/ ディレクトリの index.css を更新しました。長い英数字の時に文字列がコンテナを突き抜けて横に長く表示されてしまう問題を解決しました。
- 重大バグ修正 urlの長さチェックを追加しました
- エラーメッセージurlが長すぎますを追加しました。
ログファイルを外部から直接開かれる事が無いよいうにパーミッションを600にしているログファイルですが、さらに.htaccess
というファイルを追加して、拡張子がlogのファイルを外部から開けないようにしました。
.htaccess
をindex.php
と同じディレクトリにアップロードします。
- 著作リンクを変更しました。templateのリンク先が変わっただけです。
新url https://paintbbs.sakura.ne.jp/
- csv(tsv)としてログファイルを読み込んでいたため、ダブルクォートが入力された時にデータが壊れていました。
重大なバグですので、アップデートが必要です。
-
お絵かきアプリの幅と高さのcookieが正しく処理されていなかったのを修正しました。 高さのcookieが反映されていませんでした。
-
画像のファイルサイズが1MBを超えている時は幅と高さが範囲内でもサムネイルを表示する形に変更。 GIFアニメのアップロードを行っても表示が重くならないように。
-
削除時に記事がチェックされていない時はエラー表示にする。 これまでは、記事削除の最終確認のチェックを入れ忘れていた時に何も起こりませんでした。
-
読み込みだけの処理なのにfopenの"r+"で開いている箇所があったのを"r"に修正しました。
-
指定日数を超える古い記事の編集禁止。 古いスレッドを閉じる処理はありましたが、編集はできていました。 古い記事の編集はロックされますが、削除はできます。 また管理者は古い記事の編集と削除どちらもできます。
- 新しいスレッドを行末に追加する仕様を変更し行頭に。従来の
alllog.log
を逆順に。
v0.9.7で仕様変更、v0.9.6.3以前のalllog.log(全体ログ)の変換が必要になりました。 · Issue #6 · satopian/Petit_Note
ログファイルの変換が必要になりました。
上記リンク先にログファイルの変換方法の詳細をまとめました。お手数をおかけしますがよろしくお願いいたします。
- 管理者編集モードで編集に失敗するバグを修正。
- 最下部の「管理」メニューが2重に表示されるバグを修正。
- 管理パス、第2パス未設定時にはパス不一致とする処理を追加。
- 名前の入力を必須にする、しないを設定できるようにしました。
- sage機能を追加しました。
- config.phpに新規設定項目。第2パスワードを使って管理者である事を再確認する処理を追加。
- セキュリティ対策。
- ログイン時にsessionIDを再発行してsession固定攻撃対策。
- 編集・削除時にcsrfによる処理が行われないようにトークンをセット。
これまでは、削除の時にはトークンがセットされていませんでした。 - sessionのクッキーの範囲を掲示板のカレントディレクトリに限定。
これまでは複数設置したPetit Noteのモードが同時に変更されていました。
操作する人は同じ人とはいえ、他のディレクトリのアプリに影響がでるのはよくない事なので、アプリのカレントディレクトリ別のsession IDとクッキーを使用する形に変更しました。
- 日記モードで使用していても画像でレスができる状態だったため、レスで画像アップロードを使う・使わないを設定できるようにしました。
- 編集時にタイトル欄を空にした時にも「無題」と入るようにした。レスの題名をスレッドの親のタイトルにRe:を付けたものに。
- レスの時は親のタイトルを自動で入れる。ただし掲示板には表示されない。外部プログラム使用時に必要。
- お絵かきコメントのJavaScriptの修正。 レスでお絵かきの時に題名欄が表示されないようにする工夫ですが、動作していれば従来通りでも問題ありません。
- 記事の編集・削除。続きを描く、管理者認証マークの表示。カタログ機能。投稿者名の名前で記事の一覧。メール通知機能。
ログファイルの拡張に区切をつけて、ログファイルの形式をいったん確定。
- 投稿時のパスワードをパスワードハッシュで保存。
- ユーザー削除機能を追加しました。
- 日記モードができました。
- 日記モードの時は、スレ立てができるのは管理者のみになり、フォームを偽装して投稿してもエラーになります。
- 管理者削除と日記モードログインのための管理者ログインページができました。
続きを描く機能はありませんが、NEOとChickenPaintで絵を描いて投稿する事ができます。- 管理者モードにログインすると記事の削除が可能になります。
ユーザーのパスワード入力欄はまだないので、ユーザーによる編集や削除もできません。- 合言葉機能を使えば、合言葉を知っている人しか投稿できなくなります。入力フォームもでません。
- 1スレッドに投稿できるレスの数を超えると入力フォームが消えます。さらにフォームを偽装して投稿してもエラーになります。
- レスがついたスレッドが一番上に表示される仕様。
- 古いスレッド判定も投稿順ではなく、最新レス順です。
- レスポンシブデザイン。スマホ・タブレットに対応しています。
- HTMLファイルを外部化して、1枚のHTMLファイルとして扱う事ができるため、ユーザーによるデザインの変更が容易です。