freeCodeCamp/client/commonFramework/init.js

107 lines
2.8 KiB
JavaScript
Raw Normal View History

2015-11-13 19:10:23 +00:00
window.common = (function(global) {
// common namespace
// all classes should be stored here
// called at the beginning of dom ready
const {
2015-11-23 03:42:53 +00:00
Rx: { Disposable, Observable, config },
2015-11-13 19:10:23 +00:00
common = { init: [] }
} = global;
config.longStackSupport = true;
2015-11-13 19:10:23 +00:00
common.head = common.head || [];
common.tail = common.tail || [];
common.salt = Math.random();
2015-11-18 05:25:16 +00:00
common.challengeTypes = {
HTML: '0',
JS: '1',
VIDEO: '2',
ZIPLINE: '3',
BASEJUMP: '4',
BONFIRE: '5',
HIKES: '6',
STEP: '7'
};
2015-11-13 19:10:23 +00:00
common.arrayToNewLineString = function arrayToNewLineString(seedData) {
seedData = Array.isArray(seedData) ? seedData : [seedData];
return seedData.reduce(function(seed, line) {
return '' + seed + line + '\n';
}, '');
};
common.seed = common.arrayToNewLineString(common.challengeSeed);
common.replaceScriptTags = function replaceScriptTags(value) {
return value
.replace(/<script>/gi, 'fccss')
.replace(/<\/script>/gi, 'fcces');
};
common.replaceSafeTags = function replaceSafeTags(value) {
return value
.replace(/fccss/gi, '<script>')
.replace(/fcces/gi, '</script>');
};
common.replaceFormActionAttr = function replaceFormAction(value) {
return value.replace(/<form[^>]*>/, function(val) {
return val.replace(/action(\s*?)=/, 'fccfaa$1=');
});
};
common.replaceFccfaaAttr = function replaceFccfaaAttr(value) {
return value.replace(/<form[^>]*>/, function(val) {
return val.replace(/fccfaa(\s*?)=/, 'action$1=');
});
};
common.scopejQuery = function scopejQuery(str) {
return str
.replace(/\$/gi, 'j$')
.replace(/document/gi, 'jdocument')
.replace(/jQuery/gi, 'jjQuery');
};
common.unScopeJQuery = function unScopeJQuery(str) {
return str
.replace(/j\$/gi, '$')
.replace(/jdocument/gi, 'document')
.replace(/jjQuery/gi, 'jQuery');
};
const commentRegex = /(\/\*[^(\*\/)]*\*\/)|([ \n]\/\/[^\n]*)/g;
common.removeComments = function removeComments(str) {
2015-11-13 19:10:23 +00:00
return str.replace(commentRegex, '');
};
const logRegex = /(console\.[\w]+\s*\(.*\;)/g;
common.removeLogs = function removeLogs(str) {
return str.replace(logRegex, '');
};
2015-11-18 05:25:16 +00:00
common.reassembleTest = function reassembleTest(code = '', { line, text }) {
2015-11-21 22:44:33 +00:00
var regexp = new RegExp('//' + line + common.salt);
2015-11-18 05:25:16 +00:00
return code.replace(regexp, text);
2015-11-13 19:10:23 +00:00
};
2015-11-23 03:42:53 +00:00
common.getScriptContent$ = function getScriptContent$(script) {
return Observable.create(function(observer) {
const jqXHR = $.get(script)
.success(data => {
observer.onNext(data);
observer.onCompleted();
})
.fail(e => observer.onError(e))
.always(() => observer.onCompleted());
return new Disposable(() => {
jqXHR.abort();
});
});
};
2015-11-13 19:10:23 +00:00
return common;
2015-11-20 01:27:05 +00:00
})(window);