Firefox userChrome.js: ナビゲーションバーを垂直化
ナビゲーションバーを垂直化。
ロケーションバーをタブバー左に移動させるスクリプトと併用。
Firefox 72 以降での使用を推奨。
ボタンでナビゲーションバーを水平⇔垂直切り替え。
ナビゲーションバー垂直配置に伴うレイアウト変更で
標準のブックマークツールバーの表示切替が機能しなくなるため、
こちらもボタンを設置。
ナビゲーションバー、ブックマークツールバーのカスタマイズは水平配置で編集可。
アドオンのインストール、更新は水平配置推奨。
全画面表示は水平配置推奨。
オーバーフローメニュー
垂直配置でウインドウを縮小すると
格納無効(overflows="false"
)に設定しているアイテム以外は全て
オーバーフローメニューに格納されてしまう。
復元は水平配置でのみ可。
Firefox 68 ESR では垂直配置での格納は機能せず。
userChrome.js
( () => {
const uNavToolbox = document.getElementById("navigator-toolbox");
const uNavBar = document.getElementById("nav-bar");
const uNBTrg = document.getElementById("nav-bar-customization-target");
const uPersonalToolbar = document.getElementById("PersonalToolbar");
const uBrowser = document.getElementById("browser");
const uAppcontent = document.getElementById("appcontent");
// ブックマークツールバーに配置されたアイテムを読み込むため表示
uPersonalToolbar.collapsed = false;
let uVerNavbar = {
init() {
this.disableOverflows();
this.cloneToolbarButton();
this.setPersonalToolbarButton();
this.setNavBarButton();
uPersonalToolbar.collapsed = true;
this.eventToggleNavBar();
uVerNavbar = null;
},
toolbarButton: null,
ptButton: null,
nbButton: null,
disableOverflows() {
// 任意のボタンにオーバーフローメニューへの格納無効を設定
document.getElementById("sidebar-button").setAttribute("overflows", false); // サイドバーボタン
document.getElementById("zoom-controls").setAttribute("overflows", false); // ズームボタン
},
cloneToolbarButton() {
// Document.createElement("toolbarbutton") で生成したツールバーボタンが機能しないため
// 既存のものを複製、属性全除去、クラス設定
this.toolbarButton = uNBTrg.querySelector("toolbarbutton").cloneNode(false);
do {
this.toolbarButton.removeAttribute( this.toolbarButton.getAttributeNames()[0] );
} while ( this.toolbarButton.hasAttributes() );
this.toolbarButton.className = "toolbarbutton-1 chromeclass-toolbar-additional";
},
setPersonalToolbarButton() {
// ナビゲーションバー垂直配置に伴うレイアウト変更で
// 標準のブックマークツールバーの表示切替が機能しなくなるため設置
this.ptButton = this.toolbarButton.cloneNode(false);
uNBTrg.insertBefore(this.ptButton, uNBTrg.firstChild); // ボタン挿入
this.ptButton.id = "personalToolbar-button";
this.ptButton.setAttribute("label", "ブックマークツールバー");
this.ptButton.setAttribute("tooltiptext", "ブックマークツールバーを表示します");
this.ptButton.setAttribute("style", "list-style-image: url('chrome://browser/skin/bookmarks-toolbar.svg');");
this.ptButton.setAttribute("overflows", false);
this.ptButton.onclick = () => { uPersonalToolbar.collapsed = !uPersonalToolbar.collapsed; };
},
setNavBarButton() {
this.nbButton = this.toolbarButton.cloneNode(false);
uNBTrg.insertBefore(this.nbButton, uNBTrg.firstChild); // ボタン挿入
this.nbButton.id = "navbar-button";
this.nbButton.setAttribute("label", "ツールバー切り替え");
this.nbButton.setAttribute("tooltiptext", "ツールバーの配置を切り替えます");
this.nbButton.setAttribute("style", "list-style-image: url('chrome://devtools/skin/images/command-frames.svg');");
this.nbButton.setAttribute("overflows", false);
this.nbButton.onclick = this.eventToggleNavBar;
},
eventToggleNavBar() {
if (uNavBar.orient == "") {
// ナビゲーションバー垂直配置
uNavBar.orient = "vertical";
uNBTrg.orient = "vertical";
// ナビゲーションバー幅指定
uNavBar.setAttribute("style", "min-width: 40px; max-width: 40px;");
// ナビゲーションバー移動
//*** 左配置 ***
uBrowser.insertBefore(uNavBar, uBrowser.firstChild);
//*** 右配置 ***
// 配置順序指定
//uNavBar.ordinal = "6";
//uBrowser.appendChild(uNavBar);
// ブックマークツールバー移動
uAppcontent.insertBefore(uPersonalToolbar, uAppcontent.firstChild);
} else {
// ナビゲーションバー水平配置
uNavBar.removeAttribute("orient");
uNBTrg.removeAttribute("orient");
// ナビゲーションバー幅指定削除
uNavBar.removeAttribute("style");
// 配置順序指定削除
uNavBar.removeAttribute("ordinal");
// ナビゲーションバー移動
uNavToolbox.appendChild(uNavBar);
// ブックマークツールバー移動
uNavToolbox.appendChild(uPersonalToolbar);
};
}
};
// 初期化
setTimeout( () => { uVerNavbar.init(); }, 2000 );
} ) ();
userChrome.css
/*** コンバインドボタン ***/
/*
垂直配置での2つ以上結合したボタンのスタイルを変更
Firefox 68 ESR でのオーバーフローメニュー格納を避けるため
セパレータを非表示に、ボーダーで代用
*/
#nav-bar-customization-target[orient="vertical"] > .toolbaritem-combined-buttons {
-moz-box-orient: vertical !important;
margin: 2px 0 !important;
padding: 0 6px !important;
}
#nav-bar-customization-target[orient="vertical"] > .toolbaritem-combined-buttons > separator {
display: none !important;
}
#nav-bar-customization-target[orient="vertical"] > .toolbaritem-combined-buttons > separator + toolbarbutton {
border-top: 1px solid rgba(255, 255, 255, .3) !important;
}
#nav-bar-customization-target[orient="vertical"] > .toolbaritem-combined-buttons:hover > separator + toolbarbutton {
border-top: 1px solid rgba(255, 255, 255, .0) !important;
}
/*** ズームボタン ***/
/*
垂直配置でのボタン順序変更
順序変更に伴うボーダー表示変更
リセットボタンのフォント調整
*/
#nav-bar-customization-target[orient="vertical"] > #zoom-controls > #zoom-out-button {
-moz-box-ordinal-group: 3 !important;
}
#nav-bar-customization-target[orient="vertical"] > #zoom-controls > #zoom-reset-button {
-moz-box-ordinal-group: 2 !important;
border-color: rgba(255, 255, 255, .3) !important;
border-style: solid none !important;
border-width: 1px !important;
}
#nav-bar-customization-target[orient="vertical"] > #zoom-controls:hover > #zoom-reset-button {
border-color: rgba(255, 255, 255, .0) !important;
}
#nav-bar-customization-target[orient="vertical"] > #zoom-controls > #zoom-reset-button > .toolbarbutton-text {
font-size: 11px !important;
max-width: 28px !important;
min-width: 28px !important;
padding: 5px 0 !important;
}
#nav-bar-customization-target[orient="vertical"] > #zoom-controls > #zoom-in-button {
-moz-box-ordinal-group: 1 !important;
border: none !important;
}