'use strict'; /*! main.js - v0.1.1 * http://admindesigns.com/ * Copyright (c) 2015 Admin Designs;*/ /* Demo theme functions. Required for * Settings Pane and misc functions */ var Demo = function() { // Demo AdminForm Functions var runDemoForms = function() { // Prevents directory response when submitting a demo form $('.admin-form').on('submit', function(e) { if ($('body.timeline-page').length || $('body.admin-validation-page').length) { return; } e.preventDefault; alert('Your form has submitted!'); return false; }); // give file-upload preview onclick functionality var fileUpload = $('.fileupload-preview'); if (fileUpload.length) { fileUpload.each(function(i, e) { var fileForm = $(e).parents('.fileupload').find('.btn-file > input'); $(e).on('click', function() { fileForm.click(); }); }); } } // Demo Header Functions var runDemoTopbar = function() { // Init jQuery Multi-Select if ($("#topbar-multiple").length) { $('#topbar-multiple').multiselect({ buttonClass: 'btn btn-default btn-sm ph15', dropRight: true }); } } // Demo AdminForm Functions var runDemoSourceCode = function() { var bsElement = $(".bs-component"); if (bsElement.length) { // allow caching of demo resources $.ajaxSetup({ cache: true }); // load highlight.js plugin stylesheet from admindesigns.com $("", { rel: "stylesheet", type: "text/css", href: "http://admindesigns.com/demos/admin/theme/vendor/plugins/highlight/styles/github.css" }).appendTo("head"); // load highlight.js plugin script from admindesigns.com $.getScript("http://admindesigns.com/demos/admin/theme/vendor/plugins/highlight/highlight.pack.js"); // Define Source code modal var modalSource = ' '; // Append modal to body $(modalSource).appendTo('body'); // Code btn definition var codeBtn = $("
< >
") codeBtn.click(function() { var html = $(this).parent().html(); html = cleanSource(html); $("#source-modal pre").text(html); $("#source-modal").modal(); // Init Highlight.js plugin after delay var source = $("#source-modal").find('pre'); setTimeout(function() { source.each(function(i, block) { hljs.highlightBlock(block); }); }, 250); // Highlight code text on click $('.btn-clipboard').on('click', function() { var selection = $(this).parents('.modal-dialog').find('pre'); selection.selectText(); }); $(document).keypress(function(e) { if (e.which == 99) { console.log('go') // highlight source code if user preses "c" key $('.btn-clipboard').click(); } }); }); // Show code btn on hover bsElement.hover(function() { $(this).append(codeBtn); codeBtn.show(); }, function() { codeBtn.hide(); }); // Show code modal on click var cleanSource = function(html) { var lines = html.split(/\n/); lines.shift(); lines.splice(-1, 1); var indentSize = lines[0].length - lines[0].trim().length, re = new RegExp(" {" + indentSize + "}"); lines = lines.map(function(line) { if (line.match(re)) { line = line.substring(indentSize); } return line; }); lines = lines.join("\n"); return lines; } // Helper function to highlight code text jQuery.fn.selectText = function() { var doc = document, element = this[0], range, selection; if (doc.body.createTextRange) { range = document.body.createTextRange(); range.moveToElementText(element); range.select(); } else if (window.getSelection) { selection = window.getSelection(); range = document.createRange(); range.selectNodeContents(element); selection.removeAllRanges(); selection.addRange(range); } }; } } // DEMO FUNCTIONS - primarily trash var runDemoSettings = function() { if ($('#skin-toolbox').length) { // Toggles Theme Settings Tray $('#skin-toolbox .panel-heading').on('click', function() { $('#skin-toolbox').toggleClass('toolbox-open'); }); // Disable text selection $('#skin-toolbox .panel-heading').disableSelection(); // Cache component elements var Body = $('body'); var Breadcrumbs = $('#topbar'); var Sidebar = $('#sidebar_left'); var Header = $('.navbar'); var Branding = Header.children('.navbar-branding'); // Possible Component Skins var headerSkins = "bg-primary bg-success bg-info bg-warning bg-danger bg-alert bg-system bg-dark"; var sidebarSkins = "sidebar-light light dark"; // Theme Settings var settingsObj = { // 'headerTone': true, 'headerSkin': '', 'sidebarSkin': 'sidebar-default', 'headerState': 'navbar-fixed-top', 'sidebarState': 'affix', 'sidebarAlign': '', 'breadcrumbState': 'relative', 'breadcrumbHidden': 'visible', }; // Local Storage Theme Key var themeKey = 'admin-settings1'; // Local Storage Theme Get var themeGet = localStorage.getItem(themeKey); // Set new key if one doesn't exist if (themeGet === null) { localStorage.setItem(themeKey, JSON.stringify(settingsObj)); themeGet = localStorage.getItem(themeKey); } // Restore Theme Settings onload from Local Storage Key (function() { var settingsParse = JSON.parse(themeGet); settingsObj = settingsParse; $.each(settingsParse, function(i, e) { switch (i) { case 'headerSkin': Header.removeClass(headerSkins).addClass(e); Branding.removeClass(headerSkins).addClass(e + ' dark'); if (e === "bg-light") { Branding.removeClass(headerSkins); } else { Branding.removeClass(headerSkins).addClass(e); } $('#toolbox-header-skin input[value="bg-light"]').prop('checked', false); $('#toolbox-header-skin input[value="' + e + '"]').prop('checked', true); break; case 'sidebarSkin': Sidebar.removeClass(sidebarSkins).addClass(e); $('#toolbox-sidebar-skin input[value="bg-light"]').prop('checked', false); $('#toolbox-sidebar-skin input[value="' + e + '"]').prop('checked', true); break; case 'headerState': if (e === "navbar-fixed-top") { Header.addClass('navbar-fixed-top'); $('#header-option').prop('checked', true); } else { Header.removeClass('navbar-fixed-top'); $('#header-option').prop('checked', false); // Remove left over inline styles from nanoscroller plugin Sidebar.nanoScroller({ destroy: true }); Sidebar.find('.nano-content').attr('style', ''); Sidebar.removeClass('affix'); $('#sidebar-option').prop('checked', false); } break; case 'sidebarState': if (e === "affix") { Sidebar.addClass('affix'); $('#sidebar-option').prop('checked', true); } else { // Remove left over inline styles from nanoscroller plugin Sidebar.nanoScroller({ destroy: true }); Sidebar.find('.nano-content').attr('style', ''); Sidebar.removeClass('affix'); $('#sidebar-option').prop('checked', false); } break; case 'sidebarAlign': if (e === "sb-top") { Body.addClass('sb-top'); $('#sidebar-align').prop('checked', true); } else { Body.removeClass('sb-top'); $('#sidebar-align').prop('checked', false); } break; case 'breadcrumbState': if (e === "affix") { Breadcrumbs.addClass('affix'); $('#breadcrumb-option').prop('checked', true); } else { Breadcrumbs.removeClass('affix'); $('#breadcrumb-option').prop('checked', false); } break; case 'breadcrumbHidden': if (Breadcrumbs.hasClass('hidden')) { $('#breadcrumb-hidden').prop('checked', true); } else { if (e === "hidden") { Breadcrumbs.addClass('hidden'); $('#breadcrumb-hidden').prop('checked', true); } else { Breadcrumbs.removeClass('hidden'); $('#breadcrumb-hidden').prop('checked', false); } } break; } }); })(); // Header Skin Switcher $('#toolbox-header-skin input').on('click', function() { var This = $(this); var Val = This.val(); var ID = This.attr('id'); // Swap Header Skin Header.removeClass(headerSkins).addClass(Val); Branding.removeClass(headerSkins).addClass(Val + ' dark'); // Save new Skin to Settings Key settingsObj['headerSkin'] = Val; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); }); // Sidebar Skin Switcher $('#toolbox-sidebar-skin input').on('click', function() { var Val = $(this).val(); // Swap Sidebar Skin Sidebar.removeClass(sidebarSkins).addClass(Val); // Save new Skin to Settings Key settingsObj['sidebarSkin'] = Val; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); }); // Fixed Header Switcher $('#header-option').on('click', function() { var headerState = "navbar-fixed-top"; if (Header.hasClass('navbar-fixed-top')) { Header.removeClass('navbar-fixed-top'); headerState = "relative"; // Remove Fixed Sidebar option if navbar isnt fixed Sidebar.removeClass('affix'); // Remove left over inline styles from nanoscroller plugin Sidebar.nanoScroller({ destroy: true }); Sidebar.find('.nano-content').attr('style', ''); Sidebar.removeClass('affix'); $('#sidebar-option').prop('checked', false); $('#sidebar-option').parent('.checkbox-custom').addClass('checkbox-disabled').end().prop('checked', false).attr('disabled', true); settingsObj['sidebarState'] = ""; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); // Remove Fixed Breadcrumb option if navbar isnt fixed Breadcrumbs.removeClass('affix'); $('#breadcrumb-option').parent('.checkbox-custom').addClass('checkbox-disabled').end().prop('checked', false).attr('disabled', true); settingsObj['breadcrumbState'] = ""; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); } else { Header.addClass('navbar-fixed-top'); headerState = "navbar-fixed-top"; // Enable fixed sidebar and breadcrumb options $('#sidebar-option').parent('.checkbox-custom').removeClass('checkbox-disabled').end().attr('disabled', false); $('#breadcrumb-option').parent('.checkbox-custom').removeClass('checkbox-disabled').end().attr('disabled', false); } // Save new setting to Settings Key settingsObj['headerState'] = headerState; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); }); // Fixed Sidebar Switcher $('#sidebar-option').on('click', function() { var sidebarState = ""; if (Sidebar.hasClass('affix')) { // Remove left over inline styles from nanoscroller plugin Sidebar.nanoScroller({ destroy: true }); Sidebar.find('.nano-content').attr('style', ''); Sidebar.removeClass('affix'); sidebarState = ""; } else { Sidebar.addClass('affix'); // If sidebar is fixed init nano scrollbar plugin if ($('.nano.affix').length) { $(".nano.affix").nanoScroller({ preventPageScrolling: true }); } sidebarState = "affix"; } $(window).trigger('resize'); // Save new setting to Settings Key settingsObj['sidebarState'] = sidebarState; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); }); // Sidebar Horizontal Setting Switcher $('#sidebar-align').on('click', function() { var sidebarAlign = ""; if (Body.hasClass('sb-top')) { Body.removeClass('sb-top'); sidebarAlign = ""; } else { Body.removeClass('sb-top'); sidebarAlign = "sb-top"; } // Save new setting to Settings Key settingsObj['sidebarAlign'] = sidebarAlign; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); }); // Fixed Breadcrumb Switcher $('#breadcrumb-option').on('click', function() { var breadcrumbState = ""; if (Breadcrumbs.hasClass('affix')) { Breadcrumbs.removeClass('affix'); breadcrumbState = ""; } else { Breadcrumbs.addClass('affix'); breadcrumbState = "affix"; } // Save new setting to Settings Key settingsObj['breadcrumbState'] = breadcrumbState; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); }); // Hidden Breadcrumb Switcher $('#breadcrumb-hidden').on('click', function() { var breadcrumbState = ""; if (Breadcrumbs.hasClass('hidden')) { Breadcrumbs.removeClass('hidden'); breadcrumbState = ""; } else { Breadcrumbs.addClass('hidden'); breadcrumbState = "hidden"; } // Save new setting to Settings Key settingsObj['breadcrumbHidden'] = breadcrumbState; localStorage.setItem(themeKey, JSON.stringify(settingsObj)); }); // Clear local storage button and confirm dialog $("#clearLocalStorage").on('click', function() { // check for Bootbox plugin - should be in core if (bootbox.confirm) { bootbox.confirm("Are You Sure?!", function(e) { // e returns true if user clicks "accept" // false if "cancel" or dismiss icon are clicked if (e) { // Timeout simply gives the user a second for the modal to // fade away so they can visibly see the options reset setTimeout(function() { localStorage.clear(); location.reload(); }, 200); } else { return; } }); } }); } } var runFullscreenDemo = function() { // If browser is IE we need to pass the fullsreen plugin the 'html' selector // rather than the 'body' selector. Fixes a fullscreen overflow bug var selector = $('html'); var ua = window.navigator.userAgent; var old_ie = ua.indexOf('MSIE '); var new_ie = ua.indexOf('Trident/'); if ((old_ie > -1) || (new_ie > -1)) { selector = $('body'); } // Fullscreen Functionality var screenCheck = $.fullscreen.isNativelySupported(); // Attach handler to navbar fullscreen button $('.request-fullscreen').on('click', function() { // Check for fullscreen browser support if (screenCheck) { if ($.fullscreen.isFullScreen()) { $.fullscreen.exit(); } else { selector.fullscreen({ overflow: 'auto' }); } } else { alert('Your browser does not support fullscreen mode.') } }); } return { init: function() { runDemoForms(); runDemoTopbar(); runDemoSourceCode(); runDemoSettings(); runFullscreenDemo(); } } }();