smartbanner
Version:
Like iOS's smart app banners
1 lines • 3.07 kB
JavaScript
function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var s=t[n];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}return function(t,n,s){return n&&e(t.prototype,n),s&&e(t,s),t}}(),defaults={icon:null,title:null,author:null,appStore:null,marketUrl:null,schemeIOS:null,schemeAndroid:null,intentUrl:null,button:"OPEN",rank:"★★★★★"},agent=navigator.userAgent,Platform={isAndroid:/Android/i.test(agent),isIOS:/iPhone|iPad|iPod/i.test(agent)},Browser={isSafari:/Safari/i.test(agent)&&!/Chrome/i.test(agent),isChrome:/Chrome/i.test(agent),isOpera:/Opera/i.test(agent),isWechat:/MicroMessenger/i.test(agent)},Smartbanner=function(){function e(t){_classCallCheck(this,e),this.options=Object.assign(defaults,t),this.init()}return _createClass(e,[{key:"init",value:function(){(Platform.isAndroid||Platform.isIOS)&&(Browser.isWechat||Browser.isSafari||(this.sb=this.create(),this.show(),this.listen()))}},{key:"create",value:function(){var e=this.options,t=document.createElement("div");return t.setAttribute("id","js-smartbanner"),t.setAttribute("class","smartbanner hide"),t.innerHTML='<div class="sb-container">\n <span id="js-close" class="sb-close">×</span>\n <img src="'+e.icon+'" class="sb-icon" />\n <div class="sb-info">\n <p>'+e.title+"</p>\n <p>"+e.author+'</p>\n <p class="rank">'+e.rank+'</p>\n </div>\n <a id="js-open" class="sb-button">\n <span>'+e.button+"</span>\n </a>\n </div>",document.body.appendChild(t),t}},{key:"show",value:function(){var e=this.sb.className.replace("hide","show");this.sb.className=e}},{key:"hide",value:function(){var e=this.sb.className.replace("show","hide");this.sb.className=e}},{key:"close",value:function(){this.hide()}},{key:"open",value:function(){this["try"](),this.hide()}},{key:"listen",value:function(){var e=this,t=document.getElementById("js-close"),n=document.getElementById("js-open");t.onclick=function(){return e.close()},n.onclick=function(){return e.open()}}},{key:"try",value:function(){var e=this;if(Platform.isAndroid){var t=agent.match(/Chrome\/(\d+)/);25<=(t&&t[1])?window.location=this.options.intentUrl:!function(){var t=document.createElement("iframe");t.style.display="none",t.src=e.options.schemeAndroid,document.body.appendChild(t);var n=new Date;setTimeout(function(){600>new Date-n&&(window.location=e.options.marketUrl)},400)}()}else Platform.isIOS&&(window.location=this.options.schemeIOS,setTimeout(function(){window.location=e.options.appStore},250))}}]),e}();window.Smartbanner=Smartbanner,exports["default"]=Smartbanner,module.exports=exports["default"];
;