cluedin-widget
Version:
This is the project for creating and managing widgets in CluedIn.
98 lines (74 loc) • 3.6 kB
JavaScript
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 );
} );
} );
} );
}
}
};
};