/* * @Author: Jack.Chan * @Date: 2021-06-08 10:05:54 * @Last Modified by: Jack.Chan * @Last Modified time: 2022-06-13 19:07:15 */ var Subscribe = { baseURL: '', currentScript: (function(doc) { /* https://raw.githubusercontent.com/fsjohnhuang/getCurrAbsPath/master/lib/getCurrAbsPath.js */ var a = {}, expose = +new Date(), rExtractUri = /((?:http|https|file):\/\/.*?\/[^:]+)(?::\d+)?:\d+/, isLtIE8 = ('' + doc.querySelector).indexOf('[native code]') === -1, getBaseURL = function(url) { url = url || ''; return url.split('/').slice(0, -1).join('/'); }; // FF,Chrome if (doc.currentScript){ var currentScript = doc.currentScript; currentScript.baseURL = getBaseURL(currentScript.src); return currentScript; } var stack; try{ a.b(); } catch(e){ stack = e.fileName || e.sourceURL || e.stack || e.stacktrace; } // IE10 if (stack){ var absPath = rExtractUri.exec(stack)[1]; if (absPath){ return {src: absPath, baseURL: getBaseURL(absPath)}; } } // IE5-9 for(var scripts = doc.scripts, i = scripts.length - 1, script; script = scripts[i--];){ if (script.className !== expose && script.readyState === 'interactive'){ script.className = expose; // if less than ie 8, must get abs path by getAttribute(src, 4) var src = isLtIE8 ? script.getAttribute('src', 4) : script.src return {src: src, baseURL: getBaseURL(src)}; } } })(document), request: function(key) { var search = window.location.search + window.location.hash; if (key=(new RegExp('[?&]'+encodeURIComponent(key)+'=([^&]*)')).exec(search)) { return decodeURIComponent(key[1]); }; return null; }, getArgs: function(key) { var search = this.currentScript.src || ''; if (key=(new RegExp('[?&]'+encodeURIComponent(key)+'=([^&]*)')).exec(search)) { return decodeURIComponent(key[1]); }; return null; }, create: function(url) { var _this = this; var html = []; html.push(''); var div = document.createElement('div'); div.innerHTML = html.join(''); _this.$element = div.childNodes[0]; _this.$backdrop = _this.$element.querySelector('.modal-x-subscribe-backdrop'); _this.$cell = _this.$element.querySelector('.modal-x-subscribe-cell'); _this.$btnClose = _this.$element.querySelector('.modal-x-subscribe-btn-close'); _this.$container = _this.$element.querySelector('.modal-x-subscribe-container'); _this.$btnClose.addEventListener('click', function(e) { _this.destroy(); }, false); _this.$cell.addEventListener('click', function(e) { _this.destroy(); }, false); _this.$container.addEventListener('click', function($event) { $event.stopPropagation(); }, false); window.addEventListener('keydown', _this.escape, false); document.body.appendChild(_this.$element); }, destroy: function() { if (this.$element) { document.body.removeChild(this.$element); this.$element = undefined delete this.$element window.removeEventListener('keydown', this.escape, false); } }, loadCSS: function(href) { if (href) { var link = document.createElement('link'); link.setAttribute('id', 'css-x-subscribe'); link.setAttribute('rel', 'stylesheet'); link.setAttribute('href', href); document.head.appendChild(link); } else { console.warn('CSS澶栬仈閾炬帴鍦板潃寮傚父锛岃妫€鏌ャ€?); } }, init: function() { var _this = this; _this.trigger = this.getArgs('trigger'); if (_this.trigger) { _this.baseURL = this.currentScript.baseURL; _this.theme = this.getArgs('theme'); _this._ = this.getArgs('_') || ''; _this.escape = (function(_) { return function($event) { if ($event.key === 'Escape' || $event.code === 'Escape' || $event.keyCode === 27) { _.destroy(); } } })(_this); _this.$trigger = document.querySelectorAll(_this.trigger); if (_this.$trigger && _this.$trigger.length) { _this.loadCSS(_this.baseURL +'/subscribe.css?_='+ _this._); for (var i = 0; i < _this.$trigger.length; i++) { (function($el) { $el.addEventListener('click', function(e) { _this.create(_this.baseURL +'/subscribe.html?'+ (_this.theme ? 'theme='+ _this.theme : '') + (_this.via ? '&via='+ _this.via : '') + (_this.ref ? '&ref='+ _this.ref : '') + (_this._? '&_='+ _this._ : '')); }, false); })(_this.$trigger[i]); } /*_this.$trigger.forEach(function($trigger) { (function($el) { $el.addEventListener('click', function(e) { _this.create(_this.baseURL +'/subscribe.html?'+ (_this.theme ? 'theme='+ _this.theme : '') + (_this._? '&_='+ _this._ : '')); }, false); })($trigger); });*/ } else { console.warn('鎵句笉瑕佺粦瀹氳Е鍙戜簨浠剁殑鍏冪礌锛岃妫€鏌ャ€ 锛?+ _this.trigger +')'); } } else { console.warn('鍙傛暟 trigger 寮傚父锛岃妫€鏌ャ€?); } } } Subscribe.init();