mirror of
https://github.com/xinliangnote/go-gin-api.git
synced 2024-04-21 12:31:46 +00:00
1 line
18 KiB
JavaScript
1 line
18 KiB
JavaScript
if("undefined"==typeof jQuery)throw new Error("MultiTabs requires jQuery");!function(a){"use strict";var c,b=".multitabs",e=function(a,c,d,e,f){var g=f?c:c.split(" ").join(b+" ")+b;a.off(g,d,e).on(g,d,e)},f=function(a,b){return"main"===a?0:(b=b||8,c=c||0,c++,c%=b)},i=function(b,c){var d,e,f,g;for(c=c||a.fn.multitabs.defaults.navTab.maxTitleLength,d=(b+"").split(" "),e="",f=0;f<d.length;f++)g=a.trim(d[f]),e+=g?g+" ":"";return e.length>c&&(e=e.substr(0,c),e+="..."),e},j=function(a){return!(void 0===sessionStorage)&&a},h=function(b){var c=0;return a(b).each(function(){c+=a(this).outerWidth(!0)}),c},g=function(a){var b=function(a){var b=document.createElement("a");return b.href=a,b.href}(a),c=window.location.protocol+"//"+window.location.host+"/",d=b.substr(0,c.length);return!(d===c)},k={"default":'<div class="mt-wrapper {mainClass}" style="height: 100%;" ><div class="mt-nav-bar {navClass}" style="background-color: {backgroundColor};"><div class="mt-nav mt-nav-tools-left"><ul class="nav {nav-tabs}"><li class="nav-item mt-move-left"><a class="nav-link"><i class="mdi mdi-skip-backward"></i></a></li></ul></div><nav class="mt-nav mt-nav-panel"><ul class="nav {nav-tabs}"></ul></nav><div class="mt-nav mt-nav-tools-right"><ul class="nav {nav-tabs}"><li class="nav-item mt-move-right"><a class="nav-link"><i class="mdi mdi-skip-forward"></i></a></li><li class="nav-item mt-dropdown dropdown"><a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">{dropdown}<span class="caret"></span></a><ul role="menu" class="dropdown-menu dropdown-menu-right"><li class="mt-show-actived-tab"><a class="dropdown-item">{showActivedTab}</a></li><li class="dropdown-divider"></li><li class="mt-close-all-tabs"><a class="dropdown-item">{closeAllTabs}</a></li><li class="mt-close-other-tabs"><a class="dropdown-item">{closeOtherTabs}</a></li></ul></li></ul></div></div><div class="tab-content mt-tab-content " > </div></div>',classic:'<div class="mt-wrapper {mainClass}" style="height: 100%;" ><div class="mt-nav-bar {navClass}" style="background-color: {backgroundColor};"><nav class="mt-nav mt-nav-panel"><ul class="nav {nav-tabs}"> </ul></nav><div class="mt-nav mt-nav-tools-right"><ul class="nav {nav-tabs}"><li class="mt-dropdown dropdown"><a href="#" class="dropdown-toggle dropdown-item" data-toggle="dropdown">{dropdown}<span class="caret"></span></a><ul role="menu" class="mt-hidden-list dropdown-menu dropdown-menu-right"></ul></li></ul></div></div><div class="tab-content mt-tab-content " > </div></div>',simple:'<div class="mt-wrapper {mainClass}" style="height: 100%;" ><div class="mt-nav-bar {navClass}" style="background-color: {backgroundColor};"><nav class="mt-nav mt-nav-panel"><ul class="nav {nav-tabs}"> </ul></nav></div><div class="tab-content mt-tab-content " > </div></div>',navTab:'<a data-id="{navTabId}" class="nav-link mt-nav-tab" data-type="{type}" data-index="{index}" data-url="{url}">{title}</a>',closeBtn:' <i class="mt-close-tab mdi mdi-close" style="{style}"></i>',ajaxTabPane:'<div id="{tabPaneId}" class="tab-pane {class}">{content}</div>',iframeTabPane:'<iframe id="{tabPaneId}" class="tab-pane {class}" width="100%" height="100%" frameborder="0" src="" seamless></iframe>'},l=[{type:"main",title:"main",content:"<h1>Demo page</h1><h2>Welcome to use bootstrap multi-tabs :) </h2>"}],d=function(b,c){var d=this;d.$element=a(b),d._init(c)._listen()._final()};d.prototype={constructor:d,create:function(a,b){this.options;var d,e;return(d=this._getParam(a))?(e=this._exist(d),e&&!d.isNewTab?(this.active(e),this):(d.active=d.active?d.active:b,e=this._createNavTab(d),this._createTabPane(d),this._storage(d.did,d),d.active&&this.active(e),this)):this},_createTabPane:function(a){var b=this,c=b.$element;return c.tabContent.append(b._getTabPaneHtml(a)),c.tabContent.find("#"+a.did)},_getTabPaneHtml:function(a){var b=this,c=b.options;return!a.content&&a.iframe?k.iframeTabPane.replace("{class}",c.content.iframe.class).replace("{tabPaneId}",a.did):k.ajaxTabPane.replace("{class}",c.content.ajax.class).replace("{tabPaneId}",a.did).replace("{content}",a.content)},_createNavTab:function(a){var b=this,c=b.$element,d=b._getNavTabHtml(a),e=c.navPanelList.find('a[data-type="'+a.type+'"][data-index="'+a.index+'"]').parent("li");return e.length?(e.html(d),b._getTabPane(e.find("a:first")).remove()):c.navPanelList.append('<li class="nav-item">'+d+"</li>"),c.navPanelList.find('a[data-type="'+a.type+'"][data-index="'+a.index+'"]:first')},_getNavTabHtml:function(a){var b=this,c=b.options,e=c.nav.showCloseOnHover?"":"display:inline;",d="main"===a.type?"":k.closeBtn.replace("{style}",e);return k.navTab.replace("{index}",a.index).replace("{navTabId}",a.did).replace("{url}",a.url).replace("{title}",a.title).replace("{type}",a.type)+d},_generateId:function(a){return"multitabs_"+a.type+"_"+a.index},active:function(a,b){var e,f,g,h,i,j,c=this,d=c.$element;return b=0==b?!1:!0,e=c._getNavTab(a),f=c._getTabPane(e),g=d.navPanelList.find("li a.active"),h=g.length?c._getParam(g):{},i=e.length?c._getParam(e):{},j=c._storage(),j[h.id]&&(j[h.id].active=!1),j[i.id]&&(j[i.id].active=!0),c._resetStorage(j),g.removeClass("active"),e.addClass("active"),c._fixTabPosition(e),c._getTabPane(g).removeClass("active"),f.addClass("active"),c._fixTabContentLayout(f),c._fillTabPane(f,i,b),c},_fillTabPane:function(b,c,d){var e=this,f=e.options,g=a(b);g.html()||(g.is("iframe")?(!g.attr("src")&&"no"==f.refresh||"nav"==f.refresh&&d||"all"==f.refresh)&&g.attr("src",c.url):a.ajax({url:c.url,dataType:"html",success:function(a){g.html(f.content.ajax.success(a))},error:function(a){g.html(f.content.ajax.error(a))}}))},moveLeft:function(){var i,a=this,b=a.$element,c=Math.abs(parseInt(b.navPanelList.css("margin-left"))),d=b.navPanel.outerWidth(!0),e=h(b.navPanelList.children("li")),f=0,g=0;if(d>e)return a;for(i=b.navPanelList.children("li:first");g+i.width()<=c;)g+=i.outerWidth(!0),i=i.next();if(g=0,h(i.prevAll())>d){for(;g+i.width()<d&&i.length>0;)g+=i.outerWidth(!0),i=i.prev();f=h(i.prevAll())}return b.navPanelList.animate({marginLeft:0-f+"px"},"fast"),a},moveRight:function(){var g,i,a=this,b=a.$element,c=Math.abs(parseInt(b.navPanelList.css("margin-left"))),d=b.navPanel.outerWidth(!0),e=h(b.navPanelList.children("li")),f=0;if(d>e)return a;for(g=b.navPanelList.children("li:first"),i=0;i+g.width()<=c;)i+=g.outerWidth(!0),g=g.next();for(i=0;i+g.width()<d&&g.length>0;)i+=g.outerWidth(!0),g=g.next();return f=h(g.prevAll()),f>0&&b.navPanelList.animate({marginLeft:0-f+"px"},"fast"),a},close:function(a){var f,g,b=this,d=b._getNavTab(a),e=d.parent("li"),c=b._getTabPane(d);return e.length&&c.length&&c.hasClass("unsave")&&!b._unsaveConfirm()?b:(e.find("a").hasClass("active")&&(f=e.next("li:first"),g=e.prev("li:last"),f.length?(b.active(f),b.activeMenu(f.find("a"))):g.length&&(b.active(g),b.activeMenu(g.find("a")))),b._delStorage(d.attr("data-id")),e.remove(),c.remove(),b)},closeOthers:function(b){var e,c=this,d=c.$element;return e=b?d.navPanelList.find('a:not([data-type="main"])').filter(function(){return b!=a(this).data("index")?this:void 0}):d.navPanelList.find('li a:not([data-type="main"],.active)'),e.each(function(){var b=a(this);c._delStorage(b.attr("data-id")),c._getTabPane(b).remove(),b.parent("li").remove()}),b&&(c.active(d.navPanelList.find('a[data-index="'+b+'"]')),c.activeMenu(d.navPanelList.find('a[data-index="'+b+'"]'))),d.navPanelList.css("margin-left","0"),c},showActive:function(){var a=this,b=a.$element,c=b.navPanelList.find("li a.active");return a._fixTabPosition(c),a},closeAll:function(){var b=this,c=b.$element;return c.navPanelList.find('a:not([data-type="main"])').each(function(){var c=a(this);b._delStorage(c.attr("data-id")),b._getTabPane(c).remove(),c.parent("li").remove()}),b.active(c.navPanelList.find('a[data-type="main"]:first').parent("li")),b.activeMenu(c.navPanelList.find('a[data-type="main"]:first')),b},activeMenu:function(b){var f,c=a("a[href$='"+a(b).data("url")+"']"),d=c.parents(".nav-item"),e=d.siblings().find(".nav-subnav:visible").outerHeight();a(".nav-item").each(function(){a(this).hasClass("active")&&!c.parents(".nav-item").last().hasClass("active")&&(a(this).removeClass("active").removeClass("open"),a(this).find(".nav-subnav:visible").slideUp(500),window.innerWidth>1024&&a("body").hasClass("lyear-layout-sidebar-close")&&a(this).find(".nav-subnav").hide())}),a(".nav-drawer").find("li").removeClass("active"),c.parent("li").addClass("active"),d.first().addClass("active"),c.parents(".nav-item").first().is(".nav-item-has-subnav")||(f=48*(c.parents(".nav-item").first().prevAll().length-1),a(".lyear-layout-sidebar-info").animate({scrollTop:f},300)),c.parents("ul.nav-subnav").last().is(":hidden")&&c.parents("ul.nav-subnav").last().slideDown(500,function(){d.last().addClass("open");var b=0,c=a(".lyear-layout-sidebar-info"),f=d.last().prevAll().length,g=c.outerHeight(),h=a(".sidebar-main").outerHeight(),i=c.scrollTop(),j=a(this).outerHeight(),k=121;k+h-g>=48*f&&(b=48*f),1==d.length?c.animate({scrollTop:b},300):"undefined"!=typeof e&&null!=e?(b=i+j-e,c.animate({scrollTop:b},300)):0==i+g-c[0].scrollHeight&&(b=i-j,c.animate({scrollTop:b},300))})},_init:function(a){var b=this,c=b.$element;return c.html(k[a.nav.layout].replace("{mainClass}",a.class).replace("{navClass}",a.nav.class).replace(/\{nav-tabs\}/g,a.nav.style).replace(/\{backgroundColor\}/g,a.nav.backgroundColor).replace("{dropdown}",a.language.nav.dropdown).replace("{showActivedTab}",a.language.nav.showActivedTab).replace("{closeAllTabs}",a.language.nav.closeAllTabs).replace("{closeOtherTabs}",a.language.nav.closeOtherTabs)),c.wrapper=c.find(".mt-wrapper:first"),c.nav=c.find(".mt-nav-bar:first"),c.navToolsLeft=c.nav.find(".mt-nav-tools-left:first"),c.navPanel=c.nav.find(".mt-nav-panel:first"),c.navPanelList=c.nav.find(".mt-nav-panel:first ul"),c.navToolsRight=c.nav.find(".mt-nav-tools-right:first"),c.tabContent=c.find(".tab-content:first"),a.nav.maxTabs<=1&&(a.nav.maxTabs=1,c.nav.hide()),c.navPanel.css("width","calc(100% - 147px)"),b.options=a,b},_final:function(){var e,g,h,b=this,c=b.$element,d=b.options,f=d.init;if(j(d.cache)&&(e=b._storage(),b._resetStorage({}),a.each(e,function(a,c){b.create(c,!1)})),a.isEmptyObject(e))for(f=!a.isEmptyObject(f)&&f instanceof Array?f:l,h=0;h<f.length;h++)g=b._getParam(f[h]),g&&b.create(g);return c.navPanelList.children("li a.active").length||b.active(c.navPanelList.find('[data-type="main"]:first')),b},_listen:function(){var f,b=this,c=b.$element,d=b.options;return e(a(document),"click",d.selector,function(){return b.create(this,!0),a(this).parent().parent("ul").hasClass("dropdown-menu")?void 0:!1}),e(c.nav,"click",".mt-nav-tab",function(){b.active(this,!1),b.activeMenu(this)}),d.nav.draggable&&e(c.navPanelList,"mousedown",".mt-nav-tab",function(b){var d=a(this),e=d.closest("li"),f=e.prev(),g=!0,h=!1,i="main"===d.data("type"),j="mt_tmp_id_"+(new Date).getTime(),k='<li id="'+j+'" class="mt-dragging" style="width:'+e.outerWidth()+"px; height:"+e.outerHeight()+'px;"><a style="width: 100%; height: 100%; "></a></li>',l=b.pageX-e.offset().left+c.nav.offset().left;e.before(k),e.addClass("mt-dragging mt-dragging-tab").css({left:b.pageX-l+"px"}),a(document).on("mousemove",function(b){g&&!i&&(e.css({left:b.pageX-l+"px"}),c.navPanelList.children('li:not(".mt-dragging")').each(function(){var b=a(this).offset().left+a(this).outerWidth()+20;return b>e.offset().left?(a(this).next().attr("id")!==j&&(h=!0,f=a(this),a("#"+j).remove(),f.after(k)),!1):void 0}))}).on("selectstart",function(){return g?!1:void 0}).on("mouseup",function(){g&&(e.removeClass("mt-dragging mt-dragging-tab").css({left:"auto"}),h&&f.after(e),a("#"+j).remove()),g=!1})}),e(c.nav,"contextmenu",".mt-nav-tab",function(c){var d,e,f,g,h,i,j,l,k,m,n,o,p,q,r,s;for(c.preventDefault(),d=a('<ul class="dropdown-menu" role="menu" id="contextify-menu"/>'),e=a(this),f=e.closest("li"),g=b._getNavTab(f),h=b._getTabPane(g),i=g.length?b._getParam(g):{},j=[{text:"刷新",onclick:function(){var c=a(h);return c.is("iframe")?c.attr("src",i.url):a.ajax({url:i.url,dataType:"html",success:function(a){c.html(b.options.content.ajax.success(a))},error:function(a){c.html(b.options.content.ajax.error(a))}}),d.hide(),!1}}],i=b._getParam(g),"main"!==i.type&&j.push({text:"关闭",onclick:function(){return b.close(g),d.hide(),!1}}),j.push({text:"关闭其他",onclick:function(){return b.closeOthers(g.data("index")),d.hide(),!1}}),k=j.length,l=0;k>l;l++)m=j[l],n=a("<li/>"),n.append('<a class="dropdown-item" />'),o=n.find("a"),o.on("click",m.onclick),o.css("cursor","pointer"),o.html(m.text),d.append(n);p=a("#contextify-menu"),p.length>0?p!==d&&p.replaceWith(d):a("body").append(d),q=a(window).scrollTop()+c.clientY,r=d.width()+c.clientX<a(window).width()?c.clientX:c.clientX-d.width(),s=d.height()+c.clientY<a(window).height()?q:q-d.height(),d.css("top",s).css("left",r).css("position","fixed").show(),a(this).parents().on("click",function(){d.hide()}),a("#iframe-content").find("iframe").contents().find("body").on("click",function(){d.hide()})}),e(c.nav,"dblclick",".mt-nav-tab",function(){if(d.dbclickRefresh===!0){var e=a(this),f=e.closest("li"),g=b._getNavTab(f),h=b._getTabPane(g),i=g.length?b._getParam(g):{},j=a(h);j.is("iframe")?j.attr("src",i.url):a.ajax({url:i.url,dataType:"html",success:function(a){j.html(b.options.content.ajax.success(a))},error:function(a){j.html(b.options.content.ajax.error(a))}})}return!1}),e(c.nav,"click",".mt-close-tab",function(){return b.close(a(this).closest("li")),!1}),e(c.nav,"click",".mt-move-left",function(){return b.moveLeft(),!1}),e(c.nav,"click",".mt-move-right",function(){return b.moveRight(),!1}),e(c.nav,"click",".mt-show-actived-tab",function(){b.showActive()}),e(c.nav,"click",".mt-close-all-tabs",function(){b.closeAll()}),e(c.nav,"click",".mt-close-other-tabs",function(){b.closeOthers()}),f=c.nav.outerHeight(),c.tabContent.css("paddingTop",f),d.nav.fixed&&e(a(window),"scroll",function(){var b=a(this).scrollTop();return b=b<c.wrapper.height()-f?b+"px":"auto",c.nav.css("top",b),!1}),"classic"===d.nav.layout&&e(c.nav,"click",".mt-dropdown:not(.open)",function(){var a=b._getHiddenList(),d=c.navToolsRight.find(".mt-hidden-list:first").empty();if(a){for(;a.prevList.length;)d.append(a.prevList.shift().clone());for(;a.nextList.length;)d.append(a.nextList.shift().clone())}else d.append("<li>empty</li>")}),b},_getParam:function(b){if(a.isEmptyObject(b))return!1;var c=this,d=c.options,e={},h=a(b),j=h.data();return e.content=j.content||b.content||"",e.content.length?e.url="":(e.url=j.url||b.url||h.attr("href")||h.attr("url")||"",e.url=a.trim(decodeURIComponent(e.url.replace("#","")))),e.url.length||e.content.length?(e.isNewTab=j.hasOwnProperty("isNewTab")||b.hasOwnProperty("isNewTab")||d.isNewTab,e.iframe=j.iframe||b.iframe||g(e.url)||d.iframe,e.type=j.type||b.type||d.type,e.title=j.title||b.title||h.text()||e.url.replace("http://","").replace("https://","")||d.language.nav.title,e.title=i(e.title,d.nav.maxTitleLength),e.active=j.active||b.active||!1,e.index=j.index||b.index||f(e.type,d.nav.maxTabs),e.did=j.did||b.did||this._generateId(e),e):!1},_storage:function(a,b){if(j(this.options.cache)){var c=JSON.parse(sessionStorage.multitabs||"{}");return a?b?(c[a]=b,sessionStorage.multitabs=JSON.stringify(c),c):c[a]:c}return{}},_delStorage:function(a){if(j(this.options.cache)){var b=JSON.parse(sessionStorage.multitabs||"{}");return a?(delete b[a],sessionStorage.multitabs=JSON.stringify(b),b):b}return{}},_resetStorage:function(a){j(this.options.cache)&&"object"==typeof a&&(sessionStorage.multitabs=JSON.stringify(a))},_exist:function(a){var b,c,d;return a&&a.url?(b=this,c=b.$element,d=c.navPanelList.find('a[data-url="'+a.url+'"]:first'),d.length?d:!1):!1},_getTabPane:function(b){return a("#"+a(b).attr("data-id"))},_getNavTab:function(b){var c=this,d=c.$element,e=a(b).attr("data-id")||a(b).find("a").attr("data-id");return d.navPanelList.find('a[data-id="'+e+'"]:first')},_fixTabPosition:function(b){var c=this,d=c.$element,e=a(b).parent("li"),f=e.outerWidth(!0),g=e.prev().outerWidth(!0),i=e.prev().prev().outerWidth(!0),j=h(e.prevAll()),k=h(e.nextAll()),l=d.navPanel.outerWidth(!0),m=h(d.navPanelList.children("li")),n=0;if(l>m)n=0;else if(l>=g+f+k)for(n=j;l>m-n+g;)e=e.prev(),n-=e.outerWidth();else j+f>l&&(n=j-g-i);n=n>0?n:0,d.navPanelList.animate({marginLeft:0-n+"px"},"fast")},_getHiddenList:function(){var i,j,a=this,b=a.$element,c=Math.abs(parseInt(b.navPanelList.css("margin-left"))),d=b.navPanel.outerWidth(!0),e=h(b.navPanelList.children("li")),f=[],g=[];if(d>e)return!1;for(i=b.navPanelList.children("li:first"),j=0;j+i.width()<=c;)j+=i.outerWidth(!0),f.push(i),i=i.next();if(e>j)for(i=b.navPanelList.children("li:last"),j=e;j>c+d;)j-=i.outerWidth(!0),g.unshift(i),i=i.prev();return{prevList:f,nextList:g}},_fixTabContentLayout:function(b){var c=a(b);c.is("iframe")?(a("body").addClass("full-height-layout"),c.css("height","99%"),window.setTimeout(function(){c.css("height","100%")},0)):a("body").removeClass("full-height-layout")}},a.fn.multitabs=function(b,c){var i,e=a(this),f=c?c:"multitabs",g=a(document).data(f),h="object"==typeof b&&b;return g||(i=a.extend(!0,{},a.fn.multitabs.defaults,h,e.data()),i.nav.style="nav-pills"===i.nav.style?"nav-pills":"nav-tabs",g=new d(this,i),a(document).data(f,g)),a(document).data(f)},a.fn.multitabs.defaults={selector:".multitabs",iframe:!1,cache:!1,"class":"",type:"info",init:[],isNewTab:!1,refresh:"no",dbclickRefresh:!1,nav:{backgroundColor:"#f5f5f5","class":"",draggable:!0,fixed:!1,layout:"default",maxTabs:15,maxTitleLength:25,showCloseOnHover:!1,style:"nav-tabs"},content:{ajax:{"class":"",error:function(a){return a},success:function(a){return a}},iframe:{"class":""}},language:{nav:{title:"Tab",dropdown:'<i class="mdi mdi-menu"></i>',showActivedTab:"显示当前选项卡",closeAllTabs:"关闭所有标签页",closeOtherTabs:"关闭其他标签页"}}}}(jQuery); |