generated at
Kozaneba開発日記2021-08-27

最前面に矢印レイヤーを導入しちゃうのが楽かなぁ
中括弧はオブジェクトレイヤーで良い
別オブジェクトにわかれない方が良い
カスタムスタイルか

複数の箱の間の関係
箱の位置が確定してからなら容易に描画できる
矢印に対して矢印を引けるようにすると?
循環参照が発生しうる

グループも「複数の箱の間の関係」では
子要素のバウンディングボックスを先に計算して自分の位置を決めている

矢印のことを考えてたのだけど、完全に矢印を後から書くレイヤーにしてしまえばさほど難しくない
ただしその場合
矢印が常に最前面だから矢印の上にこざねを置くことはできない
矢印はこざねやグループなどの「箱」とは別種のオブジェクトになるので、矢印に対して矢印を引くことはできない
となる

おそらく僕は「グループ化機能」などのない紙の付箋の状態からこざね的手法を使ってるから無意識に左のやり方を選択している
一方で新機能として「紙の付箋にはできなかったグループ化ができるようになった!」をアピールしてしまうので、それを見てから使い始めた人は無意識に右のやり方を選択するのだろう
紙の付箋になかった「大きくする」ができるぞ!
紙の付箋だと難しかった広い空間を無尽蔵に使って並べることができるぞ!!

---
うーん、これ、戻せそうに見えるよな
しかしリンクを他人に渡した上でリンクを知ってる人が編集できるモードに戻したら当然編集できちゃう
それでいいのか?

Google Spreadsheet
viewの時のリンクとeditの時のリンクは同一
viewの時に開いた画面はreadonlyのままだが、再度開いたら書き込めた

うーん、じゃあ僕が作ろうとしてた形と同じだな、これでいいのか。
viewのリンクとwriteのリンクが分かれてて個別にON/OFFできた方がいいのではと思ったが、まあそんな機能がなくても大部分のケースでは問題なく使えてるってことか

今の設計で問題が起きるケース
viewのリンクを公開した後で、writerを追加したくなった時に追加手段がない
editに戻すと予期しない人がwriterに昇格してしまう可能性がある
これは「編集した人はwriterに昇格し、viewに戻した後もwrite権限を持つ」という仕様だから
そもそも基本的に個人ユース想定なのでwriter追加が必要になる可能性が低いのでは
「UIDを受け取って、それを追加する」もしくは「viewモードのまま、writerに追加するためのinviteリンクを別途発行する」があればいい
後者だけでいい


リードオンリー共有ができるようになった!Kozaneba Kanbanを画像ではなく直接シェアできるぞ!
なおTwitterとかに投稿した時に画像が出る機能はまだない。

コピーの作成と削除があれば、うっかり見せてはいけないものをシェアしたとしても、コピーして、元のやつを削除すれば大丈夫。あ、開こうとしたものがなかった時のエラー処理を作ってないな。
あ、あとタッチイベントの対応がまだ終わってないのでスマホでリンクを開いた人は何もできません
将来的には「手書きこざね追加」「開いたダイアログに手書き」「Gyazoこざねになる」という流れが欲しい

グループを開いた時に最前面へ
4枚追加した時もグループマージンが小さいと選択しにくい
GyazoGIFこざね

リードオンリー共有を受けた人がトップページに行ってチュートリアルを見るための動線がない
サービス名をクリックしたらトップページか
リードオンリー共有を自分の別の端末で開いた時に、ログインしてないから編集できないわけだが、編集可能でないからクラウド保存のメニューも出ないのでログインできない

splitメニュー、よく使ってるけど、ほとんどReplaceしてる
これ、クリックしたこざねをcloneすることができればAddとReplaceの使い分けは必要ないのでは
split, add = clone, edit
split, replace = edit

あれ?そうか、Regroupの時にGyazoからの画像を使うのに苦労したのはCanvasだったからで、単にimgで貼るだけなら問題ないのか?
Scrapboxこざねを作る場合、結局Gyazo読み込み機能は必要
この辺、DOMも違うし、ユーザ拡張でやるのは問題を難しくしすぎてる気はするなぁ

ts
export const id_to_dom = (id: string, offset: TOffset) => { const item = get_item(getGlobal(), id); if (item.type === "kozane") { return <Kozane value={item} offset={offset} key={id} data-testid={id} />; } else if (item.type === "group") { return <Group value={item} offset={offset} key={id} data-testid={id} />; } return null; };
ここにGyazoとScrapboxを追加する感じか

見た目をScrapboxに寄せるのか(CSSを丸写し) 自分の理解したものだけの最小限のにするのか分かれ道ではある
見た目をしっかり合わせるより、目的の機能を果たせる最小限のものにしておいて、もしユーザが見た目をいじりたいなら拡張機能でやってというのがいいかもなぁ
だいたい本家にピッタリ合わせて行ったところで、UserCSSでいじってる人に取っては「慣れた見た目」ですらないからな
やっぱ機能を果たせる最小限の実装にするかー

これの2〜3倍くらいのサイズがちょうどいいのかもな…
よさそう

見た目はできたが
ドラッグ&ドロップできない
範囲選択できない
バウンディングボックスの計算が未実装なのでスペースキーで死ぬ