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:
.collapse = function collapse() {
_protovar _this = this;
this._parent.children(Selector.CARD_BODY + ", " + Selector.CARD_FOOTER).slideUp(this._settings.animationSpeed, function () {
._parent.addClass(ClassName.COLLAPSED);
_this._parent.trigger("hidden.bs.collapse");
_this;
})
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);
; }
.expand = function expand() {
_protovar _this2 = this;
this._parent.children(Selector.CARD_BODY + ", " + Selector.CARD_FOOTER).slideDown(this._settings.animationSpeed, function () {
._parent.trigger("shown.bs.collapse");
_this2._parent.removeClass(ClassName.COLLAPSED);
_this2;
})
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.
.maximize = function maximize() {
_protothis._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);
; }
.minimize = function minimize() {
_protothis._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);
; }