UNPKG

bigape

Version:

an bigpipe inpired node structure based on express

151 lines (129 loc) 4.58 kB
;(function(window){ var _data = {}; console = console || { log: function(){}, warn: function(){} }; var createEvent = document.createEvent ? function(name, data){ event = document.createEvent("HTMLEvents"); event.initEvent(name, true, true); event.detail = data; return event; } : function(name, data){ event = document.createEventObject(); event.eventType = name; event.detail = data; return event; }; var triggerEvent = document.createEvent ? function(element, event){ element.dispatchEvent(event); } : function(element, event){ element.fireEvent('on' + event.eventType, event); }; function trigger(name, data){ var eve = createEvent(name, data); triggerEvent(document, eve); } function removeClass(dom, cls) { if(!dom) return; dom.classList.remove(cls); // var domCls = dom.className; // cls = cls.split(/\s+/); // cls.map(function(clsItem){ // clsItem && (domCls = domCls.replace(clsItem, '')); // }); // dom.className = domCls; } function addClass(dom, cls) { if(!dom) return; dom.classList.add(cls); } function replaceDom(dom, html) { if(!dom) return; var parentNode = dom.parentNode; if(!parentNode) { return; }; var fragement = document.createDocumentFragment(); var tmp = document.createElement('div'); tmp.innerHTML = html; fragement.appendChild(tmp); parentNode.replaceChild(fragement, dom); } window.BigPipe = { setData : function(key, value, eventName){ eventName = (eventName || key) + '-data-ready'; _data[key] = value; trigger(eventName, value); }, getData : function(key){ return key ? _data[key] : _data }, onArrive : function(options){ var domID = options.domID, dom = null, html = options.html, scripts = options.scripts, styles = options.styles, data = options.data, i = 0, len = 0, tmpEle, mode = options.mode, doc = document.body, dataEventName = options.dataEventName, pageletEventName = options.pageletEventName || domID; trigger('arrive', options); dom = document.getElementById(domID); if(html){ if(dom){ switch (mode) { case 'append': dom.innerHTML += html; break; case 'remove': dom.innerHTML = ''; break; case 'removeDom': addClass(dom, 'hide'); break; case 'replace': replaceDom(dom, html); break; case 'html': default: dom.innerHTML = html; break; } removeClass(dom, 'hide'); } else if(mode === 'layout') { doc.innerHTML += html; } else { console.warn('element #' + domID + ' does not exists.'); } } if(data){ // console.log(options, options.dataKey, options.modID); this.setData(options.dataKey || options.modID, data, dataEventName); } for(i = 0, len = styles.length; i < len; i++){ tmpEle = document.createElement('link'); tmpEle.type = 'text/css'; tmpEle.rel = 'stylesheet'; tmpEle.href = styles[i]; document.head.appendChild(tmpEle)//.parentNode.removeChild(tmpEle) } for(i = 0, len = scripts.length; i < len; i++){ tmpEle = document.createElement('script'); tmpEle.type = 'text/javascript'; tmpEle.src = scripts[i]; document.head.appendChild(tmpEle)//.parentNode.removeChild(tmpEle) } trigger(pageletEventName + '-ready'); } }; })(window);