UNPKG

cluedin-widget

Version:

This is the project for creating and managing widgets in CluedIn.

98 lines (74 loc) 3.6 kB
var widgetFileBuilder = require( './widgetFileBuilder' ); var browserifyWidget = require( './browserifyWidget' ); var fileNameBuilder = require( './fileNameBuilder' ); var node_env = process.env.NODE_ENV || 'production'; //Before: read knex files for the CODE to get list of Widget. var cache = {}; var buildTokenCode = function( token ) { var cookieInfo = "var __cluedIn = __cluedIn || {};"; cookieInfo += "__cluedIn.token = '" + ( token || "" ) + "';"; return cookieInfo; }; var buildOrgCode = function( code ) { return "__cluedIn.org = '" + ( code || "" ) + "';"; }; var buildEnvCode = function() { return "__cluedIn.env = '" + node_env + "';"; }; var buildWidgetToBuild = function( widgets ) { var script = '__cluedIn.widgets = [];'; widgets.forEach( function( w ) { script += "__cluedIn.widgets.push('" + w + "');"; } ); return script; }; module.exports = function( bookshelf ) { var data = require( './widgetData' )( bookshelf ); return { userProfile: require( './userProfile' )( bookshelf ), express: { getTokenScript: function( req, res ) { res.header( 'Content-Type', 'application/javascript; charset=utf-8' ); res.send( buildTokenCode( req.cookies.token ) ); }, buildFullScript: function( req, res ) { var code = req.params.code; res.header( 'Content-Type', 'application/javascript; charset=utf-8' ); var content = widgetFileBuilder.buildFullFile(); var builtCode = buildTokenCode( req.cookies.token ) + buildOrgCode( req.cookies.clientId ) + buildEnvCode(); if ( !code ) { return res.send( builtCode + content ); } else { data.getAppropriateWidgetList( code, function( err, widgets ) { var widgetCode = buildWidgetToBuild( widgets ); console.log( 'Widget to build' ); console.log( widgets ); return res.send( builtCode + widgetCode + content ) } ); } }, buildScript: function( req, res ) { var code = req.params.code; res.header( 'Content-Type', 'application/javascript; charset=utf-8' ); var fileName = fileNameBuilder.getFileName( code ); if ( cache[ fileName ] ) { var fullContent = ( buildTokenCode( req.cookies.token ) + buildOrgCode( req.cookies.clientId ) + cache[ fileName ].content ) + buildEnvCode(); return res.send( fullContent ); } data.getAppropriateWidgetList( code, function( err, widgets ) { widgetFileBuilder.build( { fileName: fileName, widgets: widgets }, function( err, fileName ) { browserifyWidget.make( fileName, function( err, fileContent ) { var contentWithWidgets = ( buildWidgetToBuild( widgets ) + fileContent ); cache[ fileName ] = { content: contentWithWidgets, date: Date.now() }; var builtCode = buildTokenCode( req.cookies.token ) + buildOrgCode( req.cookies.clientId ); res.send( builtCode + contentWithWidgets ); } ); } ); } ); } } }; };