#setDashOptions <- function(sidebarExpandOnHover = FALSE, controlSidebarSlide = TRUE) {
# shiny::tags$head(
# shiny::tags$script(
# shiny::HTML(
# paste0(
# "//---------------------------------------------------------------------
# // Source file: ../srcjs/AdminLTE/app.js
#
# /*! AdminLTE app.js
# * ================
# * Main JS application file for AdminLTE v2. This file
# * should be included in all pages. It controls some layout
# * options and implements exclusive AdminLTE plugins.
# *
# * @Author Almsaeed Studio
# * @Support <http://www.almsaeedstudio.com>
# * @Email <abdullah@almsaeedstudio.com>
# * @version 2.3.11
# * @license MIT <http://opensource.org/licenses/MIT>
# */
#
# //Make sure jQuery has been loaded before app.js
# if (typeof jQuery === 'undefined') {
# throw new Error('AdminLTE requires jQuery');
# }
#
# /* AdminLTE
# *
# * @type Object
# * @description $.AdminLTE is the main object for the template's app.
# * It's used for implementing functions and options related
# * to the template. Keeping everything wrapped in an object
# * prevents conflict with other plugins and is a better
# * way to organize our code.
# */
# $.AdminLTE = {};
#
# /* --------------------
# * - AdminLTE Options -
# * --------------------
# * Modify these options to suit your implementation
# */
# $.AdminLTE.options = {
# //Add slimscroll to navbar menus
# //This requires you to load the slimscroll plugin
# //in every page before app.js
# navbarMenuSlimscroll: true,
# navbarMenuSlimscrollWidth: '3px', //The width of the scroll bar
# navbarMenuHeight: '200px', //The height of the inner menu
# //General animation speed for JS animated elements such as box collapse/expand and
# //sidebar treeview slide up/down. This options accepts an integer as milliseconds,
# //'fast', 'normal', or 'slow'
# animationSpeed: 500,
# //Sidebar push menu toggle button selector
# sidebarToggleSelector: '[data-toggle='offcanvas']',
# //Activate sidebar push menu
# sidebarPushMenu: true,
# //Activate sidebar slimscroll if the fixed layout is set (requires SlimScroll Plugin)
# sidebarSlimScroll: true,
# //Enable sidebar expand on hover effect for sidebar mini
# //This option is forced to true if both the fixed layout and sidebar mini
# //are used together
# sidebarExpandOnHover: ", sidebarExpandOnHover, ",
# //BoxRefresh Plugin
# enableBoxRefresh: true,
# //Bootstrap.js tooltip
# enableBSToppltip: true,
# BSTooltipSelector: '[data-toggle='tooltip']',
# //Enable Fast Click. Fastclick.js creates a more
# //native touch experience with touch devices. If you
# //choose to enable the plugin, make sure you load the script
# //before AdminLTE's app.js
# enableFastclick: false,
# //Control Sidebar Tree views
# enableControlTreeView: true,
# //Control Sidebar Options
# enableControlSidebar: true,
# controlSidebarOptions: {
# //Which button should trigger the open/close event
# toggleBtnSelector: '[data-toggle='control-sidebar']',
# //The sidebar selector
# selector: '.control-sidebar',
# //Enable slide over content
# slide: ", controlSidebarSlide, "
# },
# //Box Widget Plugin. Enable this plugin
# //to allow boxes to be collapsed and/or removed
# enableBoxWidget: true,
# //Box Widget plugin options
# boxWidgetOptions: {
# boxWidgetIcons: {
# //Collapse icon
# collapse: 'fa-minus',
# //Open icon
# open: 'fa-plus',
# //Remove icon
# remove: 'fa-times'
# },
# boxWidgetSelectors: {
# //Remove button selector
# remove: '[data-widget='remove']',
# //Collapse button selector
# collapse: '[data-widget='collapse']'
# }
# },
# //Direct Chat plugin options
# directChat: {
# //Enable direct chat by default
# enable: true,
# //The button to open and close the chat contacts pane
# contactToggleSelector: '[data-widget='chat-pane-toggle']'
# },
# //Define the set of colors to use globally around the website
# colors: {
# lightBlue: '#3c8dbc',
# red: '#f56954',
# green: '#00a65a',
# aqua: '#00c0ef',
# yellow: '#f39c12',
# blue: '#0073b7',
# navy: '#001F3F',
# teal: '#39CCCC',
# olive: '#3D9970',
# lime: '#01FF70',
# orange: '#FF851B',
# fuchsia: '#F012BE',
# purple: '#8E24AA',
# maroon: '#D81B60',
# black: '#222222',
# gray: '#d2d6de'
# },
#//The standard screen sizes that bootstrap uses.
#//If you change these in the variables.less file, change
#//them here too.
#screenSizes: {
# xs: 480,
# sm: 768,
# md: 992,
# lg: 1200
#}
# };
#
#/* ------------------
# * - Implementation -
# * ------------------
# * The next block of code implements AdminLTE's
#* functions and plugins as specified by the
#* options above.
#*/
#$(function () {
#use strict';
#
#//Fix for IE page transitions
#$('body').removeClass('hold-transition');
#
#//Extend options if external options exist
#if (typeof AdminLTEOptions !== 'undefined') {
#$.extend(true,
#$.AdminLTE.options,
#AdminLTEOptions);
#}
#
#//Easy access to options
#var o = $.AdminLTE.options;
#
#//Set up the object
#_init();
#
#//Activate the layout maker
#$.AdminLTE.layout.activate();
#
#//Enable sidebar tree view controls
#if (o.enableControlTreeView) {
#$.AdminLTE.tree('.sidebar');
#}
#
#//Enable control sidebar
#if (o.enableControlSidebar) {
#$.AdminLTE.controlSidebar.activate();
#}
#
#//Add slimscroll to navbar dropdown
#if (o.navbarMenuSlimscroll && typeof $.fn.slimscroll != 'undefined') {
#$('.navbar .menu').slimscroll({
#height: o.navbarMenuHeight,
#alwaysVisible: false,
#size: o.navbarMenuSlimscrollWidth
#}).css('width', '100%');
#}
#
#//Activate sidebar push menu
#if (o.sidebarPushMenu) {
#$.AdminLTE.pushMenu.activate(o.sidebarToggleSelector);
#}
#
#//Activate Bootstrap tooltip
#if (o.enableBSToppltip) {
#$('body').tooltip({
#selector: o.BSTooltipSelector,
#container: 'body'
#});
#}
#
#//Activate box widget
#if (o.enableBoxWidget) {
#$.AdminLTE.boxWidget.activate();
#}
#
#//Activate fast click
#if (o.enableFastclick && typeof FastClick != 'undefined') {
#FastClick.attach(document.body);
#}
#
#//Activate direct chat widget
#if (o.directChat.enable) {
#$(document).on('click', o.directChat.contactToggleSelector, function () {
#var box = $(this).parents('.direct-chat').first();
#box.toggleClass('direct-chat-contacts-open');
#});
#}
#
#/*
#* INITIALIZE BUTTON TOGGLE
#* ------------------------
#*/
#$('.btn-group[data-toggle='btn-toggle']').each(function () {
#var group = $(this);
#$(this).find('.btn').on('click', function (e) {
#group.find('.btn.active').removeClass('active');
#$(this).addClass('active');
#e.preventDefault();
#});
#
#});
#});
#
#/* ----------------------------------
#* - Initialize the AdminLTE Object -
#* ----------------------------------
#* All AdminLTE functions are implemented below.
#*/
#function _init() {
#use strict';
#/* Layout
#* ======
#* Fixes the layout height in case min-height fails.
#*
#* @type Object
#* @usage $.AdminLTE.layout.activate()
#* $.AdminLTE.layout.fix()
#* $.AdminLTE.layout.fixSidebar()
#*/
#$.AdminLTE.layout = {
#activate: function () {
#var _this = this;
#_this.fix();
#_this.fixSidebar();
#$('body, html, .wrapper').css('height', 'auto');
#$(window, '.wrapper').resize(function () {
#_this.fix();
#_this.fixSidebar();
#});
#},
#fix: function () {
#// Remove overflow from .wrapper if layout-boxed exists
#$('.layout-boxed > .wrapper').css('overflow', 'hidden');
#//Get window height and the wrapper height
#var footer_height = $('.main-footer').outerHeight() || 0;
#var neg = $('.main-header').outerHeight() + footer_height;
#var window_height = $(window).height();
#var sidebar_height = $('.sidebar').height() || 0;
#//Set the min-height of the content and sidebar based on the
#//the height of the document.
#if ($('body').hasClass('fixed')) {
#$('.content-wrapper, .right-side').css('min-height', window_height - footer_height);
#} else {
#var postSetWidth;
#if (window_height >= sidebar_height) {
#$('.content-wrapper, .right-side').css('min-height', window_height - neg);
#postSetWidth = window_height - neg;
#} else {
#$('.content-wrapper, .right-side').css('min-height', sidebar_height);
#postSetWidth = sidebar_height;
#}
#
#//Fix for the control sidebar height
#var controlSidebar = $($.AdminLTE.options.controlSidebarOptions.selector);
#if (typeof controlSidebar !== 'undefined') {
#if (controlSidebar.height() > postSetWidth)
#$('.content-wrapper, .right-side').css('min-height', controlSidebar.height());
#}
#
#}
#},
#fixSidebar: function () {
#//Make sure the body tag has the .fixed class
#if (!$('body').hasClass('fixed')) {
#if (typeof $.fn.slimScroll != 'undefined') {
#$('.sidebar').slimScroll({destroy: true}).height('auto');
#}
#return;
#} else if (typeof $.fn.slimScroll == 'undefined' && window.console) {
#window.console.error('Error: the fixed layout requires the slimscroll plugin!');
#}
#//Enable slimscroll for fixed layout
#if ($.AdminLTE.options.sidebarSlimScroll) {
#if (typeof $.fn.slimScroll != 'undefined') {
#//Destroy if it exists
#$('.sidebar').slimScroll({destroy: true}).height('auto');
#//Add slimscroll
#$('.sidebar').slimScroll({
#height: ($(window).height() - $('.main-header').height()) + 'px',
#color: 'rgba(0,0,0,0.2)',
#size: '3px'
#});
#}
#}
#}
#};
#
#/* PushMenu()
#* ==========
#* Adds the push menu functionality to the sidebar.
#*
#* @type Function
#* @usage: $.AdminLTE.pushMenu('[data-toggle='offcanvas']')
#*/
#$.AdminLTE.pushMenu = {
#activate: function (toggleBtn) {
#//Get the screen sizes
#var screenSizes = $.AdminLTE.options.screenSizes;
#
#//Enable sidebar toggle
#$(document).on('click', toggleBtn, function (e) {
#e.preventDefault();
#
#//Enable sidebar push menu
#if ($(window).width() > (screenSizes.sm - 1)) {
#if ($('body').hasClass('sidebar-collapse')) {
#$('body').removeClass('sidebar-collapse').trigger('expanded.pushMenu');
#} else {
#$('body').addClass('sidebar-collapse').trigger('collapsed.pushMenu');
#}
#}
#//Handle sidebar push menu for small screens
#else {
#if ($('body').hasClass('sidebar-open')) {
#$('body').removeClass('sidebar-open').removeClass('sidebar-collapse').trigger('collapsed.pushMenu');
#} else {
#$('body').addClass('sidebar-open').trigger('expanded.pushMenu');
#}
#}
#});
#
#$('.content-wrapper').click(function () {
#//Enable hide menu when clicking on the content-wrapper on small screens
#if ($(window).width() <= (screenSizes.sm - 1) && $('body').hasClass('sidebar-open')) {
#$('body').removeClass('sidebar-open');
#}
#});
#
#//Enable expand on hover for sidebar mini
#if ($.AdminLTE.options.sidebarExpandOnHover
#|| ($('body').hasClass('fixed')
#&& $('body').hasClass('sidebar-mini'))) {
#this.expandOnHover();
#}
#},
#expandOnHover: function () {
#var _this = this;
#var screenWidth = $.AdminLTE.options.screenSizes.sm - 1;
#//Expand sidebar on hover
#$('.main-sidebar').hover(function () {
#if ($('body').hasClass('sidebar-mini')
#&& $('body').hasClass('sidebar-collapse')
#&& $(window).width() > screenWidth) {
#_this.expand();
#}
#}, function () {
#if ($('body').hasClass('sidebar-mini')
#&& $('body').hasClass('sidebar-expanded-on-hover')
#&& $(window).width() > screenWidth) {
#_this.collapse();
#}
#});
#},
#expand: function () {
#$('body').removeClass('sidebar-collapse').addClass('sidebar-expanded-on-hover');
#},
#collapse: function () {
#if ($('body').hasClass('sidebar-expanded-on-hover')) {
#$('body').removeClass('sidebar-expanded-on-hover').addClass('sidebar-collapse');
#}
#}
#};
#
#/* Tree()
#* ======
#* Converts the sidebar into a multilevel
#* tree view menu.
#*
#* @type Function
#* @Usage: $.AdminLTE.tree('.sidebar')
#*/
#$.AdminLTE.tree = function (menu) {
#var _this = this;
#var animationSpeed = $.AdminLTE.options.animationSpeed;
#$(document).off('click', menu + ' li a')
#.on('click', menu + ' li a', function (e) {
#//Get the clicked link and the next element
#var $this = $(this);
#var checkElement = $this.next();
#
#//Check if the next element is a menu and is visible
#if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible')) && (!$('body').hasClass('sidebar-collapse'))) {
#//Close the menu
#checkElement.slideUp(animationSpeed, function () {
#checkElement.removeClass('menu-open');
#//Fix the layout in case the sidebar stretches over the height of the window
#//_this.layout.fix();
#});
#checkElement.parent('li').removeClass('active');
#}
#//If the menu is not visible
#else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) {
#//Get the parent menu
#var parent = $this.parents('ul').first();
#//Close all open menus within the parent
#var ul = parent.find('ul:visible').slideUp(animationSpeed);
#//Remove the menu-open class from the parent
#ul.removeClass('menu-open');
#//Get the parent li
#var parent_li = $this.parent('li');
#
#// shiny-mod (see README-shiny-mods.md)
#var shinyOutput = checkElement.find('.shiny-bound-output');
#if (shinyOutput.length !== 0 && shinyOutput.first().html().length === 0) {
#shinyOutput.first().html('<br/>');
#}
#
#//Open the target menu and add the menu-open class
#checkElement.slideDown(animationSpeed, function () {
#//Add the class active to the parent li
#checkElement.addClass('menu-open');
#parent.find('li.active').removeClass('active');
#parent_li.addClass('active');
#//Fix the layout in case the sidebar stretches over the height of the window
#_this.layout.fix();
#});
#}
#//if this isn't a link, prevent the page from being redirected
#if (checkElement.is('.treeview-menu')) {
# e.preventDefault();
#}
#});
#};
#
#/* ControlSidebar
#* ==============
# * Adds functionality to the right sidebar
#*
# * @type Object
#* @usage $.AdminLTE.controlSidebar.activate(options)
#*/
# $.AdminLTE.controlSidebar = {
# //instantiate the object
# activate: function () {
# //Get the object
# var _this = this;
# //Update options
# var o = $.AdminLTE.options.controlSidebarOptions;
# //Get the sidebar
# var sidebar = $(o.selector);
# //The toggle button
# var btn = $(o.toggleBtnSelector);
#
# //Listen to the click event
# btn.on('click', function (e) {
# e.preventDefault();
# //If the sidebar is not open
# if (!sidebar.hasClass('control-sidebar-open')
# && !$('body').hasClass('control-sidebar-open')) {
# //Open the sidebar
# _this.open(sidebar, o.slide);
# } else {
# _this.close(sidebar, o.slide);
# }
# });
#
# //If the body has a boxed layout, fix the sidebar bg position
# var bg = $('.control-sidebar-bg');
# _this._fix(bg);
#
# //If the body has a fixed layout, make the control sidebar fixed
# if ($('body').hasClass('fixed')) {
# _this._fixForFixed(sidebar);
# } else {
# //If the content height is less than the sidebar's height, force max height
# if ($('.content-wrapper, .right-side').height() < sidebar.height()) {
# _this._fixForContent(sidebar);
# }
# }
# },
# //Open the control sidebar
# open: function (sidebar, slide) {
# //Slide over content
# if (slide) {
# sidebar.addClass('control-sidebar-open');
# } else {
# //Push the content by adding the open class to the body instead
# //of the sidebar itself
# $('body').addClass('control-sidebar-open');
# }
# },
# //Close the control sidebar
# close: function (sidebar, slide) {
# if (slide) {
# sidebar.removeClass('control-sidebar-open');
# } else {
# $('body').removeClass('control-sidebar-open');
# }
# },
# _fix: function (sidebar) {
# var _this = this;
# if ($('body').hasClass('layout-boxed')) {
# sidebar.css('position', 'absolute');
# sidebar.height($('.wrapper').height());
# if (_this.hasBindedResize) {
# return;
# }
# $(window).resize(function () {
# _this._fix(sidebar);
# });
# _this.hasBindedResize = true;
# } else {
# sidebar.css({
# 'position': 'fixed',
# 'height': 'auto'
# });
# }
# },
# _fixForFixed: function (sidebar) {
# sidebar.css({
# 'position': 'fixed',
# 'max-height': '100%',
# 'overflow': 'auto',
# 'padding-bottom': '50px'
# });
# },
# _fixForContent: function (sidebar) {
# $('.content-wrapper, .right-side').css('min-height', sidebar.height());
# }
#};
#
# /* BoxWidget
# * =========
# * BoxWidget is a plugin to handle collapsing and
# * removing boxes from the screen.
# *
# * @type Object
# * @usage $.AdminLTE.boxWidget.activate()
# * Set all your options in the main $.AdminLTE.options object
# */
# $.AdminLTE.boxWidget = {
# selectors: $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors,
# icons: $.AdminLTE.options.boxWidgetOptions.boxWidgetIcons,
# animationSpeed: $.AdminLTE.options.animationSpeed,
# activate: function (_box) {
# var _this = this;
# if (!_box) {
# _box = document; // activate all boxes per default
# }
# //Listen for collapse event triggers
# $(_box).on('click', _this.selectors.collapse, function (e) {
# e.preventDefault();
# _this.collapse($(this));
# });
#
# //Listen for remove event triggers
# $(_box).on('click', _this.selectors.remove, function (e) {
# e.preventDefault();
# _this.remove($(this));
# });
# },
# collapse: function (element) {
# var _this = this;
# //Find the box parent
# var box = element.parents('.box').first();
# //Find the body and the footer
# var box_content = box.find('> .box-body, > .box-footer, > form >.box-body, > form > .box-footer');
# if (!box.hasClass('collapsed-box')) {
# //Convert minus into plus
# element.children(':first')
# .removeClass(_this.icons.collapse)
# .addClass(_this.icons.open);
# //Hide the content
# box_content.slideUp(_this.animationSpeed, function () {
# box.addClass('collapsed-box');
# box.trigger('hidden.bs.collapse');
# });
# } else {
# //Convert plus into minus
# element.children(':first')
# .removeClass(_this.icons.open)
# .addClass(_this.icons.collapse);
#
# // Technically, it should be 'show' which is triggered here, and
# // 'shown' which is triggered later. However, this works better because
# // of the slow expansion transition -- the box would fully expand, and
# // only then trigger 'shown', which then results in an update of the
# // content. This would allow users to see the old content during the
# // expansion.
# box.trigger('shown.bs.collapse');
#
# //Show the content
# box_content.slideDown(_this.animationSpeed, function () {
# box.removeClass('collapsed-box');
# });
# }
# },
# remove: function (element) {
# //Find the box parent
# var box = element.parents('.box').first();
# box.slideUp(this.animationSpeed);
# }
# };
#}
#
# /* ------------------
# * - Custom Plugins -
# * ------------------
# * All custom plugins are defined below.
# */
#
# /*
# * BOX REFRESH BUTTON
# * ------------------
# * This is a custom plugin to use with the component BOX. It allows you to add
# * a refresh button to the box. It converts the box's state to a loading state.
# *
# * @type plugin
# * @usage $('#box-widget').boxRefresh( options );
# */
# (function ($) {
#
# 'use strict';
#
# $.fn.boxRefresh = function (options) {
#
# // Render options
# var settings = $.extend({
# //Refresh button selector
# trigger: '.refresh-btn',
# //File source to be loaded (e.g: ajax/src.php)
# source: '',
# //Callbacks
# onLoadStart: function (box) {
# return box;
# }, //Right after the button has been clicked
# onLoadDone: function (box) {
# return box;
# } //When the source has been loaded
#
# }, options);
#
# //The overlay
# var overlay = $('<div class='overlay'><div class='fa fa-refresh fa-spin'></div></div>');
#
# return this.each(function () {
# //if a source is specified
# if (settings.source === '') {
# if (window.console) {
# window.console.log('Please specify a source first - boxRefresh()');
# }
# return;
# }
# //the box
# var box = $(this);
# //the button
# var rBtn = box.find(settings.trigger).first();
#
# //On trigger click
# rBtn.on('click', function (e) {
# e.preventDefault();
# //Add loading overlay
# start(box);
#
# //Perform ajax call
# box.find('.box-body').load(settings.source, function () {
# done(box);
# });
# });
# });
#
# function start(box) {
# //Add overlay and loading img
# box.append(overlay);
#
# settings.onLoadStart.call(box);
# }
#
# function done(box) {
# //Remove overlay and loading img
# box.find(overlay).remove();
#
# settings.onLoadDone.call(box);
# }
#
# };
#
# })(jQuery);
#
# /*
# * EXPLICIT BOX CONTROLS
# * -----------------------
# * This is a custom plugin to use with the component BOX. It allows you to activate
# * a box inserted in the DOM after the app.js was loaded, toggle and remove box.
# *
# * @type plugin
# * @usage $('#box-widget').activateBox();
# * @usage $('#box-widget').toggleBox();
# * @usage $('#box-widget').removeBox();
# */
# (function ($) {
#
# 'use strict';
#
# $.fn.activateBox = function () {
# $.AdminLTE.boxWidget.activate(this);
# };
#
# $.fn.toggleBox = function () {
# var button = $($.AdminLTE.boxWidget.selectors.collapse, this);
# $.AdminLTE.boxWidget.collapse(button);
# };
#
# $.fn.removeBox = function () {
# var button = $($.AdminLTE.boxWidget.selectors.remove, this);
# $.AdminLTE.boxWidget.remove(button);
# };
#
# })(jQuery);
#
# /*
# * TODO LIST CUSTOM PLUGIN
# * -----------------------
# * This plugin depends on iCheck plugin for checkbox and radio inputs
# *
# * @type plugin
# * @usage $('#todo-widget').todolist( options );
# */
# (function ($) {
#
# 'use strict';
#
# $.fn.todolist = function (options) {
# // Render options
# var settings = $.extend({
# //When the user checks the input
# onCheck: function (ele) {
# return ele;
# },
# //When the user unchecks the input
# onUncheck: function (ele) {
# return ele;
# }
# }, options);
#
# return this.each(function () {
#
# if (typeof $.fn.iCheck != 'undefined') {
# $('input', this).on('ifChecked', function () {
# var ele = $(this).parents('li').first();
# ele.toggleClass('done');
# settings.onCheck.call(ele);
# });
#
# $('input', this).on('ifUnchecked', function () {
# var ele = $(this).parents('li').first();
# ele.toggleClass('done');
# settings.onUncheck.call(ele);
# });
# } else {
# $('input', this).on('change', function () {
# var ele = $(this).parents('li').first();
# ele.toggleClass('done');
# if ($('input', ele).is(':checked')) {
# settings.onCheck.call(ele);
# } else {
# settings.onUncheck.call(ele);
# }
# });
# }
# });
# };
# }(jQuery));
#
# //# sourceMappingURL=app.js.map
# "
# )
# )
# )
# )
# }
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.