Here are some advises to make adminLTE3 working better with shiny.
For instance, for primary cards, we have:
.card-primary:not(.card-outline) .card-header,
.card-primary:not(.card-outline) .card-header a {
color: #ffffff;
}
In the bs4Dash.css we have:
.dropdown-item {
color: #000 !important;
}
In the bs4Dash.css we have:
.post {
border-bottom: none !important;
}
This feature does not play well with the collapse option and has been removed.
Since shinyFiles is based on Boostrap 3, one may expect conflicts. Here is a css tweak to apply to fix modals:
/* Remove for shinyFiles support
.modal.fade .modal-dialog {
transition: -webkit-transform 0.3s ease-out;
transition: transform 0.3s ease-out;
transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
-webkit-transform: translate(0, -50px);
transform: translate(0, -50px);
}
*/
.modal-header {
/* Remove for shinyFiles support */
/*display: -ms-flexbox;
display: flex;
-ms-flex-align: start;
align-items: flex-start;
-ms-flex-pack: justify;
justify-content: space-between; */
padding: 1rem;
border-bottom: 1px solid #e9ecef;
border-top-left-radius: 0.3rem;
border-top-right-radius: 0.3rem;
}
When a card start collapsed, we need to tell shiny to show the content
when expanded. Add _this._parent.trigger("hidden.bs.collapse");
and _this2._parent.trigger("shown.bs.collapse");
to collapse and expand prototypes,
respectively in adminlte.js:
_proto.collapse = function collapse() {
var _this = this;
this._parent.children(Selector.CARD_BODY + ", " + Selector.CARD_FOOTER).slideUp(this._settings.animationSpeed, function () {
_this._parent.addClass(ClassName.COLLAPSED);
_this._parent.trigger("hidden.bs.collapse");
});
this._parent.find(this._settings.collapseTrigger + ' .' + this._settings.collapseIcon).addClass(this._settings.expandIcon).removeClass(this._settings.collapseIcon);
var collapsed = $.Event(Event.COLLAPSED);
this._element.trigger(collapsed, this._parent);
};
_proto.expand = function expand() {
var _this2 = this;
this._parent.children(Selector.CARD_BODY + ", " + Selector.CARD_FOOTER).slideDown(this._settings.animationSpeed, function () {
_this2._parent.trigger("shown.bs.collapse");
_this2._parent.removeClass(ClassName.COLLAPSED);
});
this._parent.find(this._settings.collapseTrigger + ' .' + this._settings.expandIcon).addClass(this._settings.collapseIcon).removeClass(this._settings.expandIcon);
var expanded = $.Event(Event.EXPANDED);
this._element.trigger(expanded, this._parent);
};
AdminLTE3 introduces a nice feature called "maximize". However, shiny does not
know when the content needs to be resized after toggle maximize.
We need to add the following code $(this).trigger('shown')
to each prototype in adminlte.js.
Moreover, so that the input binding works well, we have to remove the delay function for
maximize and minimize events.
_proto.maximize = function maximize() {
this._parent.find(this._settings.maximizeTrigger + ' .' + this._settings.maximizeIcon).addClass(this._settings.minimizeIcon).removeClass(this._settings.maximizeIcon);
this._parent.css({
'height': this._parent.height(),
'width': this._parent.width(),
'transition': 'all .15s'
}).delay(150).queue(function () {
$(this).addClass(ClassName.MAXIMIZED);
$('html').addClass(ClassName.MAXIMIZED);
// tells shiny to resize the content
$(this).trigger('shown');
if ($(this).hasClass(ClassName.COLLAPSED)) {
$(this).addClass(ClassName.WAS_COLLAPSED);
}
$(this).dequeue();
});
var maximized = $.Event(Event.MAXIMIZED);
this._element.trigger(maximized, this._parent);
};
_proto.minimize = function minimize() {
this._parent.find(this._settings.maximizeTrigger + ' .' + this._settings.minimizeIcon).addClass(this._settings.maximizeIcon).removeClass(this._settings.minimizeIcon);
this._parent.css('cssText', 'height:' + this._parent[0].style.height + ' !important;' + 'width:' + this._parent[0].style.width + ' !important; transition: all .15s;').delay(10).queue(function () {
$(this).removeClass(ClassName.MAXIMIZED);
$('html').removeClass(ClassName.MAXIMIZED);
$(this).css({
'height': 'inherit',
'width': 'inherit'
});
// tells shiny to resize the content
$(this).trigger('shown');
if ($(this).hasClass(ClassName.WAS_COLLAPSED)) {
$(this).removeClass(ClassName.WAS_COLLAPSED);
}
$(this).dequeue();
});
var MINIMIZED = $.Event(Event.MINIMIZED);
this._element.trigger(MINIMIZED, this._parent);
};