Files
freeCodeCamp/client/plugin.js
Berkeley Martinez 306c441ae7 add revisioning to js/css files to break caching
This moves the location of javascript files, commonFramework,
iFrameScript, sandbox, plugin, and all the less files.
On gulp or gulp build these files are moved and revisioned.
Places where they are references in jade/html are now removed and
replaced with the use of a helper function `rev`. This function will
take the required file and return a string referencing the revisioned
file. This should alleviate the need for hard refreshing and will break
caches when files change, so fixes for firefox caching issue as well.

NOTE: @benmcmahon @quincylarson, This means files will need to be build
on the server in production before doing a server restart/reload
In production: 'npm run build' To build and revision js/css files

`gulp` and `gulp build` will used in development

npm install also needs to be run in production on initial deploy
2015-08-26 23:30:33 -07:00

89 lines
1.9 KiB
JavaScript

// executes the given code and handles the result
var run = function(code) {
var result = {
input: code,
output: null,
error: null,
type: null
};
try {
var codeExec = runHidden(code);
result.type = typeof codeExec;
result.output = stringify(codeExec);
} catch(e) {
result.error = e.message;
}
application.remote.output(result);
self.close();
};
// protects even the worker scope from being accessed
var runHidden = function(code) {
var importScript = function(url) {
var error = null;
try {
importScripts(url);
} catch (e) {
error = e;
console.log('Unable to load %s!', url);
}
};
var indexedDB = null;
var location = null;
var navigator = null;
var onerror = null;
var onmessage = null;
var performance = null;
var self = null;
var webkitIndexedDB = null;
var postMessage = null;
var close = null;
var openDatabase = null;
var openDatabaseSync = null;
var webkitRequestFileSystem = null;
var webkitRequestFileSystemSync = null;
var webkitResolveLocalFileSystemSyncURL = null;
var webkitResolveLocalFileSystemURL = null;
var addEventListener = null;
var dispatchEvent = null;
var removeEventListener = null;
var dump = null;
var onoffline = null;
var ononline = null;
importScripts(
"https://cdnjs.cloudflare.com/ajax/libs/ramda/0.13.0/ramda.min.js");
importScripts(
"https://cdnjs.cloudflare.com/ajax/libs/chai/2.2.0/chai.min.js"
)
var expect = chai.expect;
var assert = chai.assert;
return eval(code);
}
// converts the output into a string
var stringify = function(output) {
var result;
if (typeof output == 'undefined') {
result = 'undefined';
} else if (output === null) {
result = 'null';
} else {
result = JSON.stringify(output) || output.toString();
}
return result;
}
application.setInterface({run:run});