見せるリンク
URLにタイトルをつける
idが振られているページだとURLだけでは内容が
タイトルの取得
scrapboxのURLは見せるリンクになっている
URLを設計できるScrapboxだからできること
これをリスペクトしてそのほかでも,見せるリンクにしたい
/villagepump/Cosenseを読書ノートとして使うときのちょっとした工夫でも使われている
URLのハッシュ部#を使って
この手法って,scrapboxの#.jpgで学んだものじゃないか?
なんちゃって拡張子はgyazoに順番であげる#68abbd8b0000000000fc4974でも使わせてもらった手口
textfragmentもそのまま使って引用にしようか
引用元のドメインも重複するが,入れてあげれば,引用文の後にかける
引用文中でブラケティングできない問題が発生する
ブロックチェーンの論文を読む#67642dfd53b4e60000f48149
本文とURL重複するの気持ち悪いし
%20が目障り
空白を意味する
settings#68a1ebb10000000000ddfd17にあるように, CSSで上手く選択して非表示にして,擬似要素で空白をつけた
にあるエスケープを全て作ってしまう
URLのエスケープをプレビューでデコードする
Scrapboxの文字が一文字ごとにタグで囲われているおかげ
以前はidで空白がある場合に使われる_を使っていたが,
それ以外はサーバーに送られるので,サーバー側の実装によって消されたり,エラーの原因になる
サーバーに送られずともクライアント側でエラーになる事例
https://www.bbc.com/japanese#:~:最新ニュース
テキストフラグメントを消してくる
window.location.hashからhistory.replaceStateに変えたら解決
なんか再読み込みしているんだろうな
コンテキストメニューからも取得できるようにするか
https://github.com/Tampermonkey/tampermonkey/issues/953
テキストフラグメントを消してくる
history.replaceStateに変えてもだめ
読み込み時で誰かに上書きされてる
任意のタイミングで実行したときはうまくいく
https://www.deepl.com/ja/translator#ja/en/こんにちは
https://www.seil.jp/doc/index.html#tool/url-encode.html
結構あるな
よくわからないwebサイトの不具合の原因になってしまう
:~:を使おう
みたいな感じ
結構良さげだぞ
code:core.js
const ogTitle = document.querySelector('metaproperty="og:title"');
const title = (ogTitle && ogTitle.getAttribute('content')) || document.title;
location.hash = encodeURIComponent(title);
code:_.js
function updateHash() {
const ogTitle = document.querySelector('metaproperty="og:title"');
const title = (ogTitle && ogTitle.getAttribute('content')) || document.title;
if (title) {
location.hash = encodeURIComponent(title);
}
}
document.addEventListener("DOMContentLoaded", () => {
// 初回実行
updateHash();
// <title> 要素の変更監視
const titleEl = document.querySelector('title');
if (titleEl) {
const observerTitle = new MutationObserver(updateHash);
observerTitle.observe(titleEl, {
childList: true,
characterData: true,
subtree: true
});
}
// <meta property="og:title"> の変更監視
const metaEl = document.querySelector('metaproperty="og:title"');
if (metaEl) {
const observerMeta = new MutationObserver(updateHash);
observerMeta.observe(metaEl, {
attributes: true,
attributeFilter: 'content'
});
}
});
updateHash();
arcの場合はオムニバーでURLエンコードされてしまう
scrapboxにペーストすると,自動でデコードしてくれる
デコードの仕方に問題あり,デコードされるとリンクが効かなくなる音がある
%25とか
デコードの仕方もいろいろありそう
エスケープを残したデコードをやりたい
いや,textfragmentのデコードの要求が特殊なのかも
https://github.com/WICG/scroll-to-text-fragment
scrapboxにこれをやってもらわなきゃならんがどうしたら
scrapboxに渡す手前で,エンコードを二重にすりゃいいんじゃね??
scraoboxでしか需要ないので,scrapboxのUserscriptに組み込みたいが行けるか?
ペーストする文字列を変形するuserscriptを拝借した
昔の自分ありがとう
地味に便利
前からこうだったけ?
twitterは考え所だな
タグが追加されるまで時間がかかる
span[data-char="t"]:nth-of-type(2)とかは,span[data-char="t"]でかつspan:nth-of-type(2)になってしまう.
2番目のtをとかを指定したい.
span:nth-child(3 of [data-char="/"])でできるみたい
https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Selectors/:nth-child#of_selector_構文
https://duckduckgo.com/?atb=v489-1&q=CSS+Selectors+Level+4
https://www.google.com/search?q=fダクト&sca_esv=c9abda672b4293cf&sxsrf=ANbL-n5c0H9sHiv0YGF1saD6FaCZN0w3gQ%3A1769403282870&source=hp&ei=kvN2acyIM-Pf2roP2fXyyQ8&iflsig=AFdpzrgAAAAAaXcBohOEuVw_cezLZYUk3BdgkJDGekbI&oq=fだ&gs_lp=Egdnd3Mtd2l6IgRm44GgKgIIAjIHEAAYgAQYBDIJEAAYgAQYBBgKMgcQABiABBgEMgcQABiABBgEMgcQABiABBgEMgcQABiABBgEMgcQABiABBgEMgcQABiABBgEMgUQABiABDIHEAAYgAQYBEiQCVAAWPEBcAB4AJABAJgBZKABqAKqAQMyLjG4AQHIAQD4AQGYAgKgAswBwgIEECMYJ8ICDRAAGIAEGLEDGIMBGATCAhAQABiABBixAxiDARgEGIoFwgIKEAAYgAQYsQMYBJgDAJIHAzEuMaAHuxCyBwMxLjG4B8wBwgcFMC4xLjHIBwSACAA&sclient=gws-wiz
scrspboxの名前付きリンク使えば良くね?
URLをコピーすればいいので楽
グリッドビューだと,生のまま見えてしまう
ホームのリンクを目立たなくする
後方互換性のためにハッシュがないものは,一番最後のパスを題名代わりに
ハッシュがあるものは,最後のパスを添えて
これは自然に実装されていた
クエリは基本的に非表示に
検索クエリは+を空白に直してあえて表示する
翻訳している時は?
どちらもテキストフラグメントでぶち込もう
ヒットする方だけがハイライトされる
code:.js
waitForElement('title',() => {
code:.js
history.replaceState(
null,
'',
'#'
+ window.location.hash
|| ':~:'
+ encodeURIComponent(document.title)
.replace(/-/g, '%2D')
.replace(/,/g, '%2C')
.replace(/&/g, '%26')
);
code:.js
})
function waitForElement(selector, callback) {
const el = document.querySelector(selector);
if (el) {
callback(el);
return;
}
const observer = new MutationObserver(() => {
const el = document.querySelector(selector);
if (el) {
callback(el);
}
});
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
}