指定したアイコンのついた日記以外のページを表示しないUserScript
井戸端などの複数名プロジェクト用
対象アイコンのついているページをページ一覧、streamに表示しない
井戸端用に日記ページのみ対象外にしている
設置:
1. 自分のプロジェクト内の任意ページに code:script.js コードブロックを作る
2. この中身を貼ってプロジェクトをリロード(開くと自動実行される)
3. 隠したいアイコン名を HIDE_ICONS に書く(完了.icon や user.icon の「名前」部分)
注意
描画されたアイコンベースで動いているのでアイコンが描画されていない場合ちゃんと動かない
いずれちゃんとしたやり方がわかったら修正予定
code:script.js
(() => {
// ▼ 隠したいアイコン名(hoge.icon の「hoge」部分)。複数可。
// ▼ 日付ページ(YYYY/MM/DD)は隠さない
const EXCLUDE_DATE = true;
const STYLE_ID = 'hide-by-icon-style';
// src は小文字・URLエンコード形(例 .../villagepump/nyarla/icon, .../%E5%AE%8C%E4%BA%86/icon)
const enc = name => encodeURIComponent(name.toLowerCase().replace(/\s/g, '_'));
const styleEl = () => {
let s = document.getElementById(STYLE_ID);
if (!s) { s = document.createElement('style'); s.id = STYLE_ID; document.head.appendChild(s); }
return s;
};
function update() {
const L = (typeof scrapbox !== 'undefined' && scrapbox.Layout) || '';
let unit, titleAttr;
if (L === 'list' || L === 'search') { unit = 'li.page-list-item'; titleAttr = 'data-page-title'; }
else if (L === 'stream') { unit = '.page'; titleAttr = 'data-title'; }
else { styleEl().textContent = ''; return; } // 個別ページ等では無効化
const dateGuard = EXCLUDE_DATE ? :not([${titleAttr}*="/"]) : '';
const rules = HIDE_ICONS
.map(n => ${unit}${dateGuard}:has(img[src*="/${enc(n)}/icon"]))
.join(',\n');
styleEl().textContent = rules ? rules + ' { display: none !important; }' : '';
}
if (typeof scrapbox !== 'undefined' && scrapbox.on) scrapbox.on('layout:changed', update);
update();
})();