問題
AdminLTE3にて、ウィンドウ幅を992pxをまたぐように変更すると、サイドバーが勝手に開閉する。
広げると開き、狭めると閉じる。
私は勝手に開閉してほしくなかったので、どうにかして解決法を探った。
解決法
AdminLTE-3.x.x/dist/js/adminlte.jsの2042行目くらいからの条件分岐を変更する。(minのほうをscriptとして読み込んでる場合は注意してね)
その後、キャッシュクリアしてスーパーリロードする。
条件文をtrue
とfalse
にしちゃう。コメントしている部分が元々の条件文である。
// ↓これが2042行目
if ( true /* 修正前: $__default["default"](window).width() <= this._options.autoCollapseSize */ ) {
if (!$bodySelector.hasClass(CLASS_NAME_OPEN$3)) {
this.collapse();
}
} else if ( false /* 修正前: resize === true */ ) {
if ($bodySelector.hasClass(CLASS_NAME_OPEN$3)) {
$bodySelector.removeClass(CLASS_NAME_OPEN$3);
} else if ($bodySelector.hasClass(CLASS_NAME_CLOSED)) {
this.expand();
}
}
解説
もうちょっと広い範囲でコードを見るとこんな感じ。
_proto.autoCollapse = function autoCollapse(resize) {
if (resize === void 0) {
resize = false;
}
if (!this._options.autoCollapseSize) {
return;
}
var $bodySelector = $__default["default"](SELECTOR_BODY);
if ( true /*$__default["default"](window).width() <= this._options.autoCollapseSize*/ ) {
if (!$bodySelector.hasClass(CLASS_NAME_OPEN$3)) {
this.collapse();
}
} else if ( false /*resize === true*/ ) {
if ($bodySelector.hasClass(CLASS_NAME_OPEN$3)) {
$bodySelector.removeClass(CLASS_NAME_OPEN$3);
} else if ($bodySelector.hasClass(CLASS_NAME_CLOSED)) {
this.expand();
}
}
};
ここはサイドバーの自動開閉動作(開閉ボタン以外での開閉)を定義しているっぽい。
引数のresize
は、ウィンドウ幅変更をして呼び出される際にtrue
となる。
このコードのもうちょい上の方で定義される定数autoCollapseSize
をいじることで、自動開閉するウィンドウ幅を変更できる。
上の方にそれが定義されてないならreturnするって書いてあるやんと思うが、それに従うと別の不具合が生じる。
具体的には、ウィンドウ幅がautoCollapseSize
以下の場合で**サイドバーを閉じる際、サイドバー外をクリックする方法が動作しなくなる。**その処理はどうやら条件文をtrueに変更したif内で行われているっぽい。