var App = function() { var basePath = '/content/'; var imgPath = 'ui/img/'; var pluginsPath = 'plugins/'; var cssPath = 'ui/css/'; //初始化内容页layout组件高度 var handleIframeLayoutHeight = function () { var height = App.getViewPort().height - $('.main-footer').outerHeight() - $('.main-header').outerHeight() - $(".content-tabs").outerHeight(); // $("#layout").css({ "height": height }); return height; } //初始化iframe内容页高度 var handleIframeLayoutContent = function () { var height = App.getViewPort().height - $('.main-footer').outerHeight() - $('.main-header').outerHeight() - $(".content-tabs").outerHeight(); $(".tab_iframe").css({ height: height }); //var width = App.getViewPort().width- $(".page-sidebar-menu").width(); $(".tab_iframe").css({ width: "100%" }); } //处理全屏 var handleFullScreen = function () { var de = document.documentElement; if (de.requestFullscreen) { de.requestFullscreen(); } else if (de.mozRequestFullScreen) { de.mozRequestFullScreen(); } else if (de.webkitRequestFullScreen) { de.webkitRequestFullScreen(); } else if (de.msRequestFullscreen) { de.msRequestFullscreen(); } else { // App.alert({ message: "该浏览器不支持全屏!", type: "danger" }); alert("当前浏览器不支持全屏!"); } }; // 判断浏览器种类 var exitFullscreen=function() { if(document.exitFullscreen) { document.exitFullscreen(); } else if(document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if(document.webkitExitFullscreen) { document.webkitExitFullscreen(); } } // Handles custom checkboxes & radios using jQuery iCheck plugin var handleiCheck = function () { if (!$().iCheck) { return; } $('.icheck').each(function () { var checkboxClass = $(this).attr('data-checkbox') ? $(this).attr('data-checkbox') : 'icheckbox_minimal-grey'; var radioClass = $(this).attr('data-radio') ? $(this).attr('data-radio') : 'iradio_minimal-grey'; if (checkboxClass.indexOf('_line') > -1 || radioClass.indexOf('_line') > -1) { $(this).iCheck({ checkboxClass: checkboxClass, radioClass: radioClass, insert: '
' + $(this).attr("data-label") }); } else { $(this).iCheck({ checkboxClass: checkboxClass, radioClass: radioClass }); } }); }; // Handles Bootstrap switches var handleBootstrapSwitch = function () { if (!$().bootstrapSwitch) { return; } $('.make-switch').bootstrapSwitch(); }; // Handles Bootstrap confirmations var handleBootstrapConfirmation = function () { if (!$().confirmation) { return; } $('[data-toggle=confirmation]').confirmation({ container: 'body', btnOkClass: 'btn btn-sm btn-success', btnCancelClass: 'btn btn-sm btn-danger' }); } // Handles Bootstrap Accordions. var handleAccordions = function () { $('body').on('shown.bs.collapse', '.accordion.scrollable', function (e) { App.scrollTo($(e.target)); }); }; // Handles Bootstrap Tabs. var handleTabs = function () { //activate tab if tab id provided in the URL if (location.hash) { var tabid = encodeURI(location.hash.substr(1)); $('a[href="#' + tabid + '"]').parents('.tab-pane:hidden').each(function () { var tabid = $(this).attr("id"); $('a[href="#' + tabid + '"]').click(); }); $('a[href="#' + tabid + '"]').click(); } if ($().tabdrop) { $('.tabbable-tabdrop .nav-pills, .tabbable-tabdrop .nav-tabs').tabdrop({ text: ' ' }); } }; // Handles Bootstrap Modals. var handleModals = function () { // fix stackable modal issue: when 2 or more modals opened, closing one of modal will remove .modal-open class. $('body').on('hide.bs.modal', function () { if ($('.modal:visible').size() > 1 && $('html').hasClass('modal-open') === false) { $('html').addClass('modal-open'); } else if ($('.modal:visible').size() <= 1) { $('html').removeClass('modal-open'); } }); // fix page scrollbars issue $('body').on('show.bs.modal', '.modal', function () { if ($(this).hasClass("modal-scroll")) { $('body').addClass("modal-open-noscroll"); } }); // fix page scrollbars issue $('body').on('hide.bs.modal', '.modal', function () { $('body').removeClass("modal-open-noscroll"); }); // remove ajax content and remove cache on modal closed $('body').on('hidden.bs.modal', '.modal:not(.modal-cached)', function () { $(this).removeData('bs.modal'); }); }; // Handles Bootstrap Tooltips. var handleTooltips = function () { // global tooltips $('.tooltips').tooltip(); // portlet tooltips $('.portlet > .portlet-title .fullscreen').tooltip({ container: 'body', title: 'Fullscreen' }); $('.portlet > .portlet-title > .tools > .reload').tooltip({ container: 'body', title: 'Reload' }); $('.portlet > .portlet-title > .tools > .remove').tooltip({ container: 'body', title: 'Remove' }); $('.portlet > .portlet-title > .tools > .config').tooltip({ container: 'body', title: 'Settings' }); $('.portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand').tooltip({ container: 'body', title: 'Collapse/Expand' }); }; // Handles Bootstrap Dropdowns var handleDropdowns = function () { /* Hold dropdown on click */ $('body').on('click', '.dropdown-menu.hold-on-click', function (e) { e.stopPropagation(); }); }; var handleAlerts = function () { $('body').on('click', '[data-close="alert"]', function (e) { $(this).parent('.alert').hide(); $(this).closest('.note').hide(); e.preventDefault(); }); $('body').on('click', '[data-close="note"]', function (e) { $(this).closest('.note').hide(); e.preventDefault(); }); $('body').on('click', '[data-remove="note"]', function (e) { $(this).closest('.note').remove(); e.preventDefault(); }); }; // Handle Hower Dropdowns var handleDropdownHover = function () { $('[data-hover="dropdown"]').not('.hover-initialized').each(function () { $(this).dropdownHover(); $(this).addClass('hover-initialized'); }); }; // Fix input placeholder issue for IE8 and IE9 var handleFixInputPlaceholderForIE = function () { var isIe8 = !!navigator.userAgent.match(/MSIE 8.0/); var isIe9 = !!navigator.userAgent.match(/MSIE 9.0/); var isIe10 = !!navigator.userAgent.match(/MSIE 10.0/); //fix html5 placeholder attribute for ie7 & ie8 if (isIe8 || isIe9) { // ie8 & ie9 // this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need this for password fields) $('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function () { var input = $(this); if (input.val() === '' && input.attr("placeholder") !== '') { input.addClass("placeholder").val(input.attr('placeholder')); } input.focus(function () { if (input.val() == input.attr('placeholder')) { input.val(''); } }); input.blur(function () { if (input.val() === '' || input.val() == input.attr('placeholder')) { input.val(input.attr('placeholder')); } }); }); } }; // last popep popover var lastPopedPopover; var handlePopovers = function () { $('.popovers').popover(); // close last displayed popover $(document).on('click.bs.popover.data-api', function (e) { if (lastPopedPopover) { lastPopedPopover.popover('hide'); } }); }; // Handles scrollable contents using jQuery SlimScroll plugin. var handleScrollers = function () { App.initSlimScroll('.scroller'); }; var handleInitFullScreen = function() { fullScreenClickCount = 0; $(".fullscreen").bind("click", function() { if (fullScreenClickCount % 2 === 0) { handleFullScreen(); } else { exitFullscreen(); } fullScreenClickCount++; }); }; return { init: function () { //IMPORTANT!!!: Do not modify the core handlers call order. //UI Component handlers handleiCheck(); // handles custom icheck radio and checkboxes handleBootstrapSwitch(); // handle bootstrap switch plugin handleScrollers(); // handles slim scrolling contents handleAlerts(); //handle closabled alerts handleDropdowns(); // handle dropdowns handleTabs(); // handle tabs handleTooltips(); // handle bootstrap tooltips handlePopovers(); // handles bootstrap popovers handleAccordions(); //handles accordions handleModals(); // handle modals handleBootstrapConfirmation(); // handle bootstrap confirmations handleFixInputPlaceholderForIE(); //IE8 & IE9 input placeholder issue fix handleInitFullScreen(); }, initSlimScroll: function (el) { $(el).each(function () { if ($(this).attr("data-initialized")) { return; // exit } var height; if ($(this).attr("data-height")) { height = $(this).attr("data-height"); } else { height = $(this).css('height'); } $(this).slimScroll({ allowPageScroll: true, // allow page scroll when the element scroll is ended size: '7px', color: ($(this).attr("data-handle-color") ? $(this).attr("data-handle-color") : '#bbb'), wrapperClass: ($(this).attr("data-wrapper-class") ? $(this).attr("data-wrapper-class") : 'slimScrollDiv'), railColor: ($(this).attr("data-rail-color") ? $(this).attr("data-rail-color") : '#eaeaea'), position: isRTL ? 'left' : 'right', height: height, alwaysVisible: ($(this).attr("data-always-visible") == "1" ? true : false), railVisible: ($(this).attr("data-rail-visible") == "1" ? true : false), disableFadeOut: true }); $(this).attr("data-initialized", "1"); }); }, destroySlimScroll: function (el) { $(el).each(function () { if ($(this).attr("data-initialized") === "1") { // destroy existing instance before updating the height $(this).removeAttr("data-initialized"); $(this).removeAttr("style"); var attrList = {}; // store the custom attribures so later we will reassign. if ($(this).attr("data-handle-color")) { attrList["data-handle-color"] = $(this).attr("data-handle-color"); } if ($(this).attr("data-wrapper-class")) { attrList["data-wrapper-class"] = $(this).attr("data-wrapper-class"); } if ($(this).attr("data-rail-color")) { attrList["data-rail-color"] = $(this).attr("data-rail-color"); } if ($(this).attr("data-always-visible")) { attrList["data-always-visible"] = $(this).attr("data-always-visible"); } if ($(this).attr("data-rail-visible")) { attrList["data-rail-visible"] = $(this).attr("data-rail-visible"); } $(this).slimScroll({ wrapperClass: ($(this).attr("data-wrapper-class") ? $(this).attr("data-wrapper-class") : 'slimScrollDiv'), destroy: true }); var the = $(this); // reassign custom attributes $.each(attrList, function (key, value) { the.attr(key, value); }); } }); }, getIframeLayoutHeight: function () { return handleIframeLayoutHeight(); }, requestFullScreen:function() { return handleFullScreen(); }, //处理iframe内容 handleIframeContent:function() { return handleIframeLayoutContent(); }, //处理sidebar ajax方式加载 handleSidebarAjaxContent:function() { jQuery('.sidebar-menu').on('click', ' li > a.ajaxify', function (e) { e.preventDefault(); var url = $(this).attr("href"); var pageContentBody = $('#tab-page-content'); App.startPageLoading({ message: '加载中...' }); $.get(url, {}, function (res) { pageContentBody.html(res); // App.fixContentHeight(); // fix content height App.stopPageLoading(); }); }); }, fixIframeCotent: function () { setInterval(function () { //_runResizeHandlers(); handleIframeLayoutContent(); }, 200); return; }, blockUI: function (options) { options = $.extend(true, {}, options); var html = ''; if (options.animate) { html = ''; } else if (options.iconOnly) { html = ''; } else if (options.textOnly) { html = ''; } else { html = ''; } if (options.target) { // element blocking var el = $(options.target); if (el.height() <= ($(window).height())) { options.cenrerY = true; } el.block({ message: html, baseZ: options.zIndex ? options.zIndex : 1000, centerY: options.cenrerY !== undefined ? options.cenrerY : false, css: { top: '10%', border: '0', padding: '0', backgroundColor: 'none' }, overlayCSS: { backgroundColor: options.overlayColor ? options.overlayColor : '#555', opacity: options.boxed ? 0.05 : 0.1, cursor: 'wait' } }); } else { // page blocking $.blockUI({ message: html, baseZ: options.zIndex ? options.zIndex : 1000, css: { border: '0', padding: '0', backgroundColor: 'none' }, overlayCSS: { backgroundColor: options.overlayColor ? options.overlayColor : '#555', opacity: options.boxed ? 0.05 : 0.1, cursor: 'wait' } }); } }, // wrApper function to un-block element(finish loading) unblockUI: function (target) { if (target) { $(target).unblock({ onUnblock: function () { $(target).css('position', ''); $(target).css('zoom', ''); } }); } else { $.unblockUI(); } }, startPageLoading: function (options) { if (options && options.animate) { $('.page-spinner-bar').remove(); $('body').append(''); } else { $('.page-loading').remove(); $('body').append('
' + (options && options.message ? options.message : 'Loading...') + '