@tarojs/components
Version:
1 lines • 8.92 kB
JavaScript
import{h as t,r as a,c as r,H as e,g as o}from"./p-9137dcab.js";import s from"@tarojs/taro";import{c as i}from"./p-de951a46.js";import{i as n}from"./p-d3c7f87d.js";const h=t=>{let a,r=t||"";const e={path:null,query:null,fragment:null};return a=r.indexOf("#"),a>-1&&(e.fragment=r.substring(a+1),r=r.substring(0,a)),a=r.indexOf("?"),a>-1&&(e.query=r.substring(a+1),r=r.substring(0,a)),e.path=r,e},b=(t="")=>"/"===t.charAt(0)?t:"/"+t,l=(t="",a="")=>((t="",a="")=>new RegExp("^"+a+"(\\/|\\?|#|$)","i").test(t)||t===a)(t,a)?t.substring(a.length):t;function d(t){return"/"===t.charAt(0)}function c(t,a){for(var r=a,e=r+1,o=t.length;e<o;r+=1,e+=1)t[r]=t[e];t.pop()}const _=({index:a,isSelected:r=!1,textColor:e,iconPath:o,badgeText:h,showRedDot:b=!1,pagePath:l,text:d,onSelect:c})=>{const _=i("weui-tabbar__item",{"weui-bar__item_on":r});return t("a",{key:a,href:"javascript:;",class:_,onClick:function(){const t=s.getCurrentPages().shift();"function"==typeof(null==t?void 0:t.onTabItemTap)&&n(this)&&t.onTabItemTap({index:a,pagePath:l,text:d}),c(a)}},t("span",{style:{display:"inline-block",position:"relative"}},t("img",{src:o,alt:"",class:"weui-tabbar__icon"}),!!h&&t("span",{class:"weui-badge taro-tabbar-badge",style:{position:"absolute",top:"-2px",right:"-13px"}},h),b&&t("span",{class:"weui-badge weui-badge_dot",style:{position:"absolute",top:"0",right:"-6px"}})),t("p",{class:"weui-tabbar__label",style:{color:e}},d))},u="taro-tabbar__tabbar",g=class{constructor(t){a(this,t),this.onLongPress=r(this,"longpress",7),this.homePage="",this.customRoutes=[],this.tabbarPos="bottom",this.getOriginUrl=t=>{const a=this.customRoutes.filter((([,a])=>h(a).path===h(t).path));return((t="",a="")=>t.includes(a)?t.substring(0,t.length-a.length):t)(a.length?a[0][0]:t,".html")},this.getSelectedIndex=t=>{let a=-1;return this.list.forEach((({pagePath:r},e)=>{h(t).path===h(r).path&&(a=e)})),a},this.switchTab=t=>{this.selectedIndex=t,s.switchTab({url:this.list[t].pagePath})},this.switchTabHandler=({url:t,successHandler:a,errorHandler:r})=>{const e=function(t,a){void 0===a&&(a="");var r,e=t&&t.split("/")||[],o=a&&a.split("/")||[],s=t&&d(t),i=a&&d(a),n=s||i;if(t&&d(t)?o=e:e.length&&(o.pop(),o=o.concat(e)),!o.length)return"/";if(o.length){var h=o[o.length-1];r="."===h||".."===h||""===h}else r=!1;for(var b=0,l=o.length;l>=0;l--){var _=o[l];"."===_?c(o,l):".."===_?(c(o,l),b++):b&&(c(o,l),b--)}if(!n)for(;b--;b)o.unshift("..");!n||""===o[0]||o[0]&&d(o[0])||o.unshift("");var u=o.join("/");return r&&"/"!==u.substr(-1)&&(u+="/"),u}(t,this.getOriginUrl(this.getCurrentUrl()||this.homePage)),o=this.getSelectedIndex(e);o>-1?(this.switchTab(o),a({errMsg:"switchTab:ok"})):r({errMsg:`switchTab:fail page "${e}" is not found`})},this.routerChangeHandler=t=>{var a;const r=null===(a=null==t?void 0:t.toLocation)||void 0===a?void 0:a.path;let e;if("string"==typeof r){const t=this.conf.basename||"/";e=l(b(r||this.homePage),t)||"/"}else e=this.getCurrentUrl();this.selectedIndex=this.getSelectedIndex(this.getOriginUrl(e))},this.setTabBarBadgeHandler=({index:t,text:a,successHandler:r,errorHandler:e})=>{const o=[...this.list];t in o?(o[t].showRedDot=!1,o[t].badgeText=a,r({errMsg:"setTabBarBadge:ok"})):e({errMsg:"setTabBarBadge:fail tabbar item not found"}),this.list=o},this.removeTabBarBadgeHandler=({index:t,successHandler:a,errorHandler:r})=>{const e=[...this.list];t in e?(e[t].badgeText=null,e[t].badgeText=null,a({errMsg:"removeTabBarBadge:ok"})):r({errMsg:"removeTabBarBadge:fail tabbar item not found"}),this.list=e},this.showTabBarRedDotHandler=({index:t,successHandler:a,errorHandler:r})=>{const e=[...this.list];t in e?(e[t].badgeText=null,e[t].showRedDot=!0,a({errMsg:"showTabBarRedDot:ok"})):r({errMsg:"showTabBarRedDot:fail tabbar item not found"}),this.list=e},this.hideTabBarRedDotHandler=({index:t,successHandler:a,errorHandler:r})=>{const e=[...this.list];t in e?(e[t].showRedDot=!1,a({errMsg:"hideTabBarRedDot:ok"})):r({errMsg:"hideTabBarRedDot:fail tabbar item not found"}),this.list=e},this.showTabBarHandler=({successHandler:t})=>{this.status=0,t({errMsg:"showTabBar:ok"})},this.hideTabBarHandler=({animation:t,successHandler:a})=>{this.status=t?2:1,a({errMsg:"hideTabBar:ok"})},this.setTabBarStyleHandler=({color:t,selectedColor:a,backgroundColor:r,borderStyle:e,successHandler:o})=>{r&&(this.backgroundColor=r),e&&(this.borderStyle=e),t&&(this.color=t),a&&(this.selectedColor=a),o({errMsg:"setTabBarStyle:ok"})},this.setTabBarItemHandler=({index:t,iconPath:a,selectedIconPath:r,text:e,successHandler:o,errorHandler:s})=>{const i=[...this.list];t in i?(a&&(i[t].iconPath=a),r&&(i[t].selectedIconPath=r),e&&(i[t].text=e),o({errMsg:"setTabBarItem:ok"})):s({errMsg:"setTabBarItem:fail tabbar item not found"}),this.list=i},this.conf=void 0,this.list=void 0,this.borderStyle=void 0,this.backgroundColor=void 0,this.color=void 0,this.selectedColor=void 0,this.selectedIndex=-1,this.status=0}componentWillLoad(){var t,a;const r=(null===(t=this.conf)||void 0===t?void 0:t.list)||[],e=(null===(a=this.conf)||void 0===a?void 0:a.customRoutes)||{};if("[object Array]"!==Object.prototype.toString.call(r)||r.length<2||r.length>5)throw new Error("tabBar 配置错误");this.homePage=b(this.conf.homePage);for(let t in e){const a=e[t];t=b(t),"string"==typeof a?this.customRoutes.push([t,b(a)]):(null==a?void 0:a.length)>0&&this.customRoutes.push(...a.map((a=>[t,b(a)])))}r.forEach((t=>{0!==t.pagePath.indexOf("/")&&(t.pagePath="/"+t.pagePath)})),this.list=r,this.borderStyle=this.conf.borderStyle,this.backgroundColor=this.conf.backgroundColor,this.color=this.conf.color,this.selectedColor=this.conf.selectedColor}getCurrentUrl(){const t=((t="hash",a="/")=>{const r="hash"===t?location.hash.slice(1).split("?")[0]:location.pathname;return b(l(r,a))})(this.conf.mode,this.conf.basename);return decodeURI("/"===t?this.homePage:t)}bindEvent(){s.eventCenter.on("__taroRouterChange",this.routerChangeHandler),s.eventCenter.on("__taroSwitchTab",this.switchTabHandler),s.eventCenter.on("__taroSetTabBarBadge",this.setTabBarBadgeHandler),s.eventCenter.on("__taroRemoveTabBarBadge",this.removeTabBarBadgeHandler),s.eventCenter.on("__taroShowTabBarRedDotHandler",this.showTabBarRedDotHandler),s.eventCenter.on("__taroHideTabBarRedDotHandler",this.hideTabBarRedDotHandler),s.eventCenter.on("__taroShowTabBar",this.showTabBarHandler),s.eventCenter.on("__taroHideTabBar",this.hideTabBarHandler),s.eventCenter.on("__taroSetTabBarStyle",this.setTabBarStyleHandler),s.eventCenter.on("__taroSetTabBarItem",this.setTabBarItemHandler)}removeEvent(){s.eventCenter.off("__taroRouterChange",this.routerChangeHandler),s.eventCenter.off("__taroSwitchTab",this.switchTabHandler),s.eventCenter.off("__taroSetTabBarBadge",this.setTabBarBadgeHandler),s.eventCenter.off("__taroRemoveTabBarBadge",this.removeTabBarBadgeHandler),s.eventCenter.off("__taroShowTabBarRedDotHandler",this.showTabBarRedDotHandler),s.eventCenter.off("__taroHideTabBarRedDotHandler",this.hideTabBarRedDotHandler),s.eventCenter.off("__taroShowTabBar",this.showTabBarHandler),s.eventCenter.off("__taroHideTabBar",this.hideTabBarHandler),s.eventCenter.off("__taroSetTabBarStyle",this.setTabBarStyleHandler),s.eventCenter.off("__taroSetTabBarItem",this.setTabBarItemHandler)}componentDidLoad(){this.tabbarPos=this.tabbar.nextElementSibling?"top":"bottom",this.bindEvent(),this.routerChangeHandler()}disconnectedCallback(){this.removeEvent()}render(){const{tabbarPos:a="bottom"}=this,r=this.status,o=i("weui-tabbar",{[`taro-tabbar__border-${this.borderStyle||"black"}`]:!0});return t(e,{class:i(u,`${u}-${a}`,{"taro-tabbar__tabbar-hide":-1===this.selectedIndex||1===r,"taro-tabbar__tabbar-slideout":2===r})},t("div",{class:o,style:{backgroundColor:this.backgroundColor||"",height:"inherit"}},this.list.map(((a,r)=>{const e=this.selectedIndex===r;let o,s;return e?(o=this.selectedColor||"",s=a.selectedIconPath):(o=this.color||"",s=a.iconPath),t(_,{index:r,onSelect:this.switchTab.bind(this),isSelected:e,textColor:o,iconPath:s,pagePath:a.pagePath,text:a.text,badgeText:a.badgeText,showRedDot:a.showRedDot})}))))}get tabbar(){return o(this)}};g.style="html,body{height:100%}#app{height:100%}.taro-tabbar__border-white::before{border-top-color:#fff !important}.taro-tabbar__container{display:-ms-flexbox;display:flex;overflow:hidden;-ms-flex-direction:column;flex-direction:column;height:100%}.taro-tabbar__panel{overflow:auto;position:relative;-ms-flex:1;flex:1;-webkit-overflow-scrolling:auto}.taro-tabbar__tabbar{position:relative;width:100%;height:50px;-webkit-transition:bottom 0.2s, top 0.2s;transition:bottom 0.2s, top 0.2s}.taro-tabbar__tabbar-top{top:0}.taro-tabbar__tabbar-bottom{bottom:0;margin-bottom:constant(safe-area-inset-bottom);margin-bottom:env(safe-area-inset-bottom)}.taro-tabbar__tabbar-hide{display:none}.taro-tabbar__tabbar-slideout{top:-52px;-ms-flex:0 0;flex:0 0}.taro-tabbar__panel+.taro-tabbar__tabbar-slideout{top:auto;bottom:-52px}";export{g as taro_tabbar}