| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  | window.common = (function(global) { | 
					
						
							|  |  |  |   // common namespace
 | 
					
						
							|  |  |  |   // all classes should be stored here
 | 
					
						
							|  |  |  |   // called at the beginning of dom ready
 | 
					
						
							|  |  |  |   const { | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |     Rx: { Disposable, Observable, config }, | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |     common = { init: [] } | 
					
						
							|  |  |  |   } = global; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-19 21:51:38 -08:00
										 |  |  |   config.longStackSupport = true; | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   common.head = common.head || []; | 
					
						
							|  |  |  |   common.tail = common.tail || []; | 
					
						
							|  |  |  |   common.salt = Math.random(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 21:25:16 -08:00
										 |  |  |   common.challengeTypes = { | 
					
						
							|  |  |  |     HTML: '0', | 
					
						
							|  |  |  |     JS: '1', | 
					
						
							|  |  |  |     VIDEO: '2', | 
					
						
							|  |  |  |     ZIPLINE: '3', | 
					
						
							|  |  |  |     BASEJUMP: '4', | 
					
						
							|  |  |  |     BONFIRE: '5', | 
					
						
							|  |  |  |     HIKES: '6', | 
					
						
							|  |  |  |     STEP: '7' | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   common.arrayToNewLineString = function arrayToNewLineString(seedData) { | 
					
						
							|  |  |  |     seedData = Array.isArray(seedData) ? seedData : [seedData]; | 
					
						
							|  |  |  |     return seedData.reduce(function(seed, line) { | 
					
						
							|  |  |  |       return '' + seed + line + '\n'; | 
					
						
							| 
									
										
										
										
											2016-03-29 20:12:40 -07:00
										 |  |  |     }, '\n'); | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   common.seed = common.arrayToNewLineString(common.challengeSeed); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-14 00:25:42 +01:00
										 |  |  |   common.replaceNoprotect = function replaceNoprotect(value) { | 
					
						
							|  |  |  |     return value.replace(/noprotect/gi, ''); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   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; | 
					
						
							| 
									
										
										
										
											2015-11-19 21:51:38 -08:00
										 |  |  |   common.removeComments = function removeComments(str) { | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |     return str.replace(commentRegex, ''); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const logRegex = /(console\.[\w]+\s*\(.*\;)/g; | 
					
						
							|  |  |  |   common.removeLogs = function removeLogs(str) { | 
					
						
							|  |  |  |     return str.replace(logRegex, ''); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 21:25:16 -08:00
										 |  |  |   common.reassembleTest = function reassembleTest(code = '', { line, text }) { | 
					
						
							| 
									
										
										
										
											2015-11-21 14:44:33 -08:00
										 |  |  |     var regexp = new RegExp('//' + line + common.salt); | 
					
						
							| 
									
										
										
										
											2015-11-17 21:25:16 -08:00
										 |  |  |     return code.replace(regexp, text); | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |   common.getScriptContent$ = function getScriptContent$(script) { | 
					
						
							|  |  |  |     return Observable.create(function(observer) { | 
					
						
							| 
									
										
										
										
											2015-11-24 15:56:16 -08:00
										 |  |  |       const jqXHR = $.get(script, null, null, 'text') | 
					
						
							| 
									
										
										
										
											2015-11-22 19:42:53 -08:00
										 |  |  |         .success(data => { | 
					
						
							|  |  |  |           observer.onNext(data); | 
					
						
							|  |  |  |           observer.onCompleted(); | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         .fail(e => observer.onError(e)) | 
					
						
							|  |  |  |         .always(() => observer.onCompleted()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return new Disposable(() => { | 
					
						
							|  |  |  |         jqXHR.abort(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-30 14:27:39 -08:00
										 |  |  |   const openScript = /\<\s?script\s?\>/gi; | 
					
						
							|  |  |  |   const closingScript = /\<\s?\/\s?script\s?\>/gi; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // detects if there is JavaScript in the first script tag
 | 
					
						
							|  |  |  |   common.hasJs = function hasJs(code) { | 
					
						
							|  |  |  |     return !!common.getJsFromHtml(code); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // grabs the content from the first script tag in the code
 | 
					
						
							|  |  |  |   common.getJsFromHtml = function getJsFromHtml(code) { | 
					
						
							|  |  |  |     // grab user javaScript
 | 
					
						
							|  |  |  |     return (code.split(openScript)[1] || '').split(closingScript)[0] || ''; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-13 11:10:23 -08:00
										 |  |  |   return common; | 
					
						
							| 
									
										
										
										
											2015-11-19 17:27:05 -08:00
										 |  |  | })(window); |