From a53114e7b617bb96a735eb481555467aa81066a2 Mon Sep 17 00:00:00 2001 From: Andrew Cay Date: Mon, 15 Jun 2015 22:47:17 -0700 Subject: [PATCH] Update and rename coursewaresJSFramework_0.0.5.js to coursewaresJSFramework_0.0.6.js Added auto save(to local storage) for any progress. It will set the IDE text to whatever the user last saw within 24 hours. The auto save happens every 1.5 seconds _after_ someone lifts a key. --- ...0.5.js => coursewaresJSFramework_0.0.6.js} | 66 ++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) rename public/js/lib/coursewares/{coursewaresJSFramework_0.0.5.js => coursewaresJSFramework_0.0.6.js} (77%) diff --git a/public/js/lib/coursewares/coursewaresJSFramework_0.0.5.js b/public/js/lib/coursewares/coursewaresJSFramework_0.0.6.js similarity index 77% rename from public/js/lib/coursewares/coursewaresJSFramework_0.0.5.js rename to public/js/lib/coursewares/coursewaresJSFramework_0.0.6.js index 5e6de0e413..a339037b0e 100644 --- a/public/js/lib/coursewares/coursewaresJSFramework_0.0.5.js +++ b/public/js/lib/coursewares/coursewaresJSFramework_0.0.6.js @@ -40,6 +40,66 @@ editor.setOption("extraKeys", { }); +/* + Local Storage Update System By Andrew Cay(Resto) + localBonfire: singleton object that contains properties and methods related to + dealing with the localStorage system. + The keys work off of the variable challenge_name to make unique identifiers per bonfire + + Two extra functionalities: + Added anonymous version checking system incase of future updates to the system + Added keyup listener to editor(myCodeMirror) so the last update has been saved to storage +*/ +var localBonfire = { + version: 0.01, + keyVersion:"saveVersion", + keyStamp: challenge_Name + 'Stamp', + keyValue: challenge_Name + 'Val', + stampExpireTime: (1000 *60) *60 *24, + updateWait: 1500,// 1.5 seconds + updateTimeoutId: null +}; +localBonfire.getEditorValue = function(){ + return localStorage.getItem(localBonfire.keyValue); +}; +localBonfire.getStampTime = function(){ + //localstorage always saves as strings. + return Number.parseInt( localStorage.getItem(localBonfire.keyStamp) ); +}; +localBonfire.isAlive = function(){// returns true if IDE was edited within expire time + return ( Date.now() - localBonfire.getStampTime() < localBonfire.stampExpireTime ); +}; +localBonfire.updateStorage = function(){ + if(typeof(Storage) !== undefined) { + var stamp = Date.now(), + value = editor.getValue(); + localStorage.setItem(localBonfire.keyValue, value); + localStorage.setItem(localBonfire.keyStamp, stamp); + } else { + if( debugging ){ + console.log('no web storage'); + } + } + localBonfire.updateTimeoutId = null; + console.log('updated!'); +}; +// ANONYMOUS 1 TIME UPDATE VERSION +(function(){ + var savedVersion = localStorage.getItem('saveVersion'); + if( savedVersion === null ){ + localStorage.setItem(localBonfire.keyVersion, localBonfire.version);//just write current version + }else{ + //do checking if not current version + if( savedVersion !== localBonfire.version ){ + //update version + } + } +})(); + +editor.on('keyup', function(codMir, event){ + window.clearTimeout(localBonfire.updateTimeoutId); + localBonfire.updateTimeoutId = window.setTimeout(localBonfire.updateStorage, localBonfire.updateWait); +}); var attempts = 0; if (attempts) { @@ -71,15 +131,15 @@ var editorValue; var challengeSeed = challengeSeed || null; var tests = tests || []; + var allSeeds = ''; (function() { challengeSeed.forEach(function(elem) { - allSeeds += elem + '\n'; + allSeeds += elem + '\n'; }); })(); -editorValue = allSeeds; - +editorValue = (localBonfire.isAlive())? localBonfire.getEditorValue() : allSeeds; myCodeMirror.setValue(editorValue);