UNPKG

blinx

Version:

The Scalable JavaScript Application Framework

216 lines (165 loc) 7.12 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: src/interfaces/module.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: src/interfaces/module.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>import Utils from "../helpers/utils"; import {moduleS, middleWareFns} from "./store"; import PubSub from "./pubsub"; import {createInstance} from "../truss"; /** * All the modules created by this framework will be extended by this Module. * @module Module */ let Module = (function () { let modulePrivateData = new WeakMap(); /** * @class * @extends {@link PubSub} */ class Module extends PubSub { /** * * @param moduleName {string} the name of the module * @param uniqueId {string} the unique id of the module * @param path {string} the path of the module * @param lifeCycleFlags {lifeCycleFlags} the initial value of the lifecycle flags * @param instanceConfig the configuration of the module passed * @param instanceData It is the reference of module */ constructor(name, moduleName, lifeCycleFlags, instanceConfig, instanceData, meta) { super(); // Apply middleware, PRE:_Create middleWareFns.forEach((middlewareFn)=>{ Object.assign(this, middlewareFn(this)); }); this.moduleName = moduleName; this.name = name; // this.path = path; this.lifeCycleFlags = lifeCycleFlags; this.instanceConfig = instanceConfig; this.modulePlaceholders = this.instanceConfig.placeholders; this.createInstance = createInstance.bind(this); this.meta = meta; for (let key in instanceData) { this[key] = instanceData[key]; } modulePrivateData.set(this, { moduleSubscriptions: [], uniqueId: meta.id }); } /** * renders the template using placeholder * @param placeholderData : The placeholder data for creation of template */ render(placeholderData) { const containerSelector = this.getUniqueId(); const placeholders = placeholderData || this.instanceConfig.placeholders; if(!this.template) return; document.querySelector(`#${containerSelector}`).innerHTML = this.template(placeholders); }; /** * gets all the events of all types subscribed by the module * @returns {array} array of subscriptions */ getAllSubscriptions() { return modulePrivateData.get(this).moduleSubscriptions; }; /** * gets the unique id of the module * @returns {string} */ getUniqueId() { return modulePrivateData.get(this).uniqueId; }; /** * gets the unique id of the parent element * @returns {string} */ getParentInstanceId() { if(this.meta.parent){ return this.meta.parent.id } return ""; }; getModuleContainer() { return `#${this.getUniqueId()}`; }; getModuleName() { return this.moduleName; }; getInstanceConfig() { return this.instanceConfig.placeholders; }; getCSSSelector() { return Utils.getCSSSelector(this, moduleS); }; destroy() { }; subscribe(subscription, eventName = subscription.eventName) { subscription.eventSubscriber = this.getModuleContainer(); modulePrivateData.get(this).moduleSubscriptions.push(subscription); super.subscribe(subscription, eventName); }; publish(eventName, message) { super.publish(eventName, message); }; unsubscribe(eventName, callback) { if(typeof eventName === "object"){ callback = eventName.callback; eventName = eventName.eventName; } super.unsubscribe(this.getModuleContainer(), eventName, callback); }; static createModuleArena(module, compiledHTML) { // If compiledHTML is not provided, start creating dom element progressively. let themeClass =""; if(module.instanceConfig.moduleClassName){ themeClass = module.instanceConfig.theme ? module.instanceConfig.moduleClassName + '-' + module.instanceConfig.theme : module.instanceConfig.moduleClassName + '-default'; } else { themeClass = module.instanceConfig.theme ? module.moduleName + '-' + module.instanceConfig.theme : module.moduleName + '-default'; } if (typeof compiledHTML !== "string") { document.querySelector(module.instanceConfig.container).innerHTML = `&lt;div id="${module.getUniqueId()}" class="${themeClass} play-arena">&lt;/div>`; return; } // If compiledHTML is provided, create page string. if (compiledHTML.trim() === "") { compiledHTML = `&lt;div id="${module.getUniqueId()}">&lt;/div>`; } else { } return compiledHTML; } } return Module; })(); export default Module </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-Module.html">Module</a></li><li><a href="module-src_interfaces_store.html">src/interfaces/store</a></li></ul><h3>Classes</h3><ul><li><a href="module-Module-Module.html">Module</a></li><li><a href="PubSub.html">PubSub</a></li></ul><h3>Global</h3><ul><li><a href="global.html#_callRender">_callRender</a></li><li><a href="global.html#_callResolveRenderOn">_callResolveRenderOn</a></li><li><a href="global.html#_emitLifeCycleEvent">_emitLifeCycleEvent</a></li><li><a href="global.html#_listenForInitOn">_listenForInitOn</a></li><li><a href="global.html#_lockEvents">_lockEvents</a></li><li><a href="global.html#_onBreath">_onBreath</a></li><li><a href="global.html#_registerModule">_registerModule</a></li><li><a href="global.html#_registerSubscription">_registerSubscription</a></li><li><a href="global.html#_startExec">_startExec</a></li><li><a href="global.html#addMethodsOnInstance">addMethodsOnInstance</a></li><li><a href="global.html#createInstance">createInstance</a></li><li><a href="global.html#deleteInstance">deleteInstance</a></li><li><a href="global.html#destroyModuleInstance">destroyModuleInstance</a></li><li><a href="global.html#eventQ">eventQ</a></li><li><a href="global.html#findInstance">findInstance</a></li><li><a href="global.html#insertInstance">insertInstance</a></li><li><a href="global.html#isBrowser">isBrowser</a></li><li><a href="global.html#isServer">isServer</a></li><li><a href="global.html#iterateToAddMethodsOnInstance">iterateToAddMethodsOnInstance</a></li><li><a href="global.html#lifeCycleFlags">lifeCycleFlags</a></li><li><a href="global.html#Router">Router</a></li><li><a href="global.html#subscriptions">subscriptions</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Tue Jul 05 2016 12:45:01 GMT+0530 (IST) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>