File tree Expand file tree Collapse file tree
bases/rsptx/interactives/runestone Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -152,17 +152,21 @@ export default class ClickableArea extends RunestoneBase {
152152 var ex = localStorage . getItem ( this . localStorageKey ( ) ) ;
153153 if ( ex !== null ) {
154154 this . hasStoredAnswers = true ;
155+ let error = false ;
155156 try {
156157 storageObj = JSON . parse ( ex ) ;
157- this . clickedIndexArray = storageObj . answer . split ( ";" ) ;
158158 } catch ( err ) {
159159 // error while parsing; likely due to bad value stored in storage
160- console . log ( err . message ) ;
160+ console . log ( `Error parsing stored ClickableArea data for ${ this . divid } : ${ err . message } ` ) ;
161+ error = true ;
162+ }
163+ if ( error || storageObj . timestamp < eBookConfig . termStartDate ) {
161164 localStorage . removeItem ( this . localStorageKey ( ) ) ;
162165 this . hasStoredAnswers = false ;
163166 this . restoreAnswers ( { } ) ;
164167 return ;
165168 }
169+ this . clickedIndexArray = storageObj . answer . split ( ";" ) ;
166170 if ( this . useRunestoneServices ) {
167171 // log answer to server
168172 this . givenIndexArray = [ ] ;
Original file line number Diff line number Diff line change @@ -700,19 +700,24 @@ export default class DragNDrop extends RunestoneBase {
700700 var ex = localStorage . getItem ( this . localStorageKey ( ) ) ;
701701 if ( ex !== null ) {
702702 this . hasStoredDropzones = true ;
703+ let error = false ;
703704 try {
704705 storedObj = JSON . parse ( ex ) ;
705706 this . minheight = storedObj . min_height ;
706707 this . dragwidth = storedObj . drag_width ;
707708 this . dropwidth = storedObj . drop_width ;
708709 } catch ( err ) {
709710 // error while parsing; likely due to bad value stored in storage
710- console . log ( err . message ) ;
711+ console . log ( `Error parsing stored DragNDrop data for ${ this . divid } : ${ err } ` ) ;
712+ error = true ;
713+ }
714+ if ( error || storedObj . timestamp < eBookConfig . termStartDate ) {
711715 localStorage . removeItem ( this . localStorageKey ( ) ) ;
712716 this . hasStoredDropzones = false ;
713717 this . finishSettingUp ( ) ;
714718 return ;
715719 }
720+ localStorage . removeItem ( this . localStorageKey ( ) ) ;
716721 this . answerState = storedObj . answer ;
717722 if ( this . useRunestoneServices ) {
718723 // store answer in database
Original file line number Diff line number Diff line change @@ -442,11 +442,15 @@ export default class FITB extends RunestoneBase {
442442 if ( len > 0 ) {
443443 var ex = localStorage . getItem ( this . localStorageKey ( ) ) ;
444444 if ( ex !== null ) {
445+ let error = false ;
445446 try {
446447 storedData = JSON . parse ( ex ) ;
447448 } catch ( err ) {
448449 // error while parsing; likely due to bad value stored in storage
449- console . assert ( false , err . message ) ;
450+ console . log ( `Error parsing stored FITB data for ${ this . divid } : ${ err . message } ` ) ;
451+ error = true ;
452+ }
453+ if ( error || storedData . timestamp < eBookConfig . termStartDate ) {
450454 localStorage . removeItem ( this . localStorageKey ( ) ) ;
451455 return ;
452456 }
Original file line number Diff line number Diff line change @@ -278,6 +278,11 @@ export default class HParsons extends RunestoneBase {
278278 return ;
279279 }
280280 let localData = this . localData ( ) ;
281+ // Guard against no timestamp as it was only added 3/24/2026
282+ if ( localData . timestamp && localData . timestamp < eBookConfig . termStartDate ) {
283+ localStorage . removeItem ( this . storageId ) ;
284+ return ;
285+ }
281286 if ( localData . answerIndices && this . hparsonsInput . restoreAnswerByIndices ) {
282287 this . hparsonsInput . restoreAnswerByIndices ( localData . answerIndices . map ( Number ) ) ;
283288 } else if ( localData . answer ) {
@@ -299,7 +304,6 @@ export default class HParsons extends RunestoneBase {
299304 setLocalStorage ( data ) {
300305 let currentState = { } ;
301306 if ( data == undefined ) {
302-
303307 if ( this . isBlockGrading ) {
304308 const answerIndices = this . hparsonsInput . getBlockIndices ( ) ;
305309 currentState = { answerIndices : answerIndices } ;
@@ -308,7 +312,7 @@ export default class HParsons extends RunestoneBase {
308312 const userAnswer = this . hparsonsInput . getParsonsTextArray ( ) ;
309313 currentState = { answer : userAnswer } ;
310314 }
311-
315+ currentState . timestamp = new Date ( ) ;
312316 } else {
313317 currentState = data ;
314318 }
Original file line number Diff line number Diff line change @@ -253,11 +253,15 @@ class LP extends RunestoneBase {
253253 var key = this . localStorageKey ( ) ;
254254 var ex = localStorage . getItem ( key ) ;
255255 if ( ex !== null ) {
256+ let error = false ;
256257 try {
257258 storedData = JSON . parse ( ex ) ;
258259 } catch ( err ) {
259260 // error while parsing; likely due to bad value stored in storage
260- console . log ( err . message ) ;
261+ console . log ( `Error parsing stored LP data for ${ this . divid } : ${ err . message } ` ) ;
262+ error = true ;
263+ }
264+ if ( error || storedData . timestamp < eBookConfig . termStartDate ) {
261265 localStorage . removeItem ( key ) ;
262266 return ;
263267 }
Original file line number Diff line number Diff line change @@ -170,6 +170,10 @@ export class MatchingProblem extends RunestoneBase {
170170 const data = localStorage . getItem ( this . divid ) ;
171171 if ( data ) {
172172 const parsedData = JSON . parse ( data ) ;
173+ if ( parsedData . timestamp && parsedData . timestamp < eBookConfig . termStartDate ) {
174+ localStorage . removeItem ( this . divid ) ;
175+ return ;
176+ }
173177 this . connections = parsedData . connections . map ( conn => ( {
174178 fromBox : this . allBoxes . find ( box => box . dataset . id === conn . from ) ,
175179 toBox : this . allBoxes . find ( box => box . dataset . id === conn . to )
@@ -184,6 +188,7 @@ export class MatchingProblem extends RunestoneBase {
184188 }
185189 }
186190 setLocalStorage ( ) {
191+ const timeStamp = new Date ( ) ;
187192 const data = {
188193 connections : this . connections . map ( conn => ( {
189194 from : conn . fromBox . dataset . id ,
@@ -192,7 +197,8 @@ export class MatchingProblem extends RunestoneBase {
192197 score : this . scorePercent ,
193198 correctCount : this . correctCount ,
194199 incorrectCount : this . incorrectCount ,
195- missingCount : this . missingCount
200+ missingCount : this . missingCount ,
201+ timestamp : timeStamp
196202 } ;
197203 localStorage . setItem ( this . divid , JSON . stringify ( data ) ) ;
198204 }
Original file line number Diff line number Diff line change @@ -346,13 +346,17 @@ export default class MultipleChoice extends RunestoneBase {
346346 var len = localStorage . length ;
347347 if ( len > 0 ) {
348348 var ex = localStorage . getItem ( this . localStorageKey ( ) ) ;
349+ let error = false ;
349350 if ( ex !== null ) {
350351 try {
351352 storedData = JSON . parse ( ex ) ;
352353 answers = storedData . answer . split ( "," ) ;
353354 } catch ( err ) {
354355 // error while parsing; likely due to bad value stored in storage
355- console . log ( err . message ) ;
356+ console . log ( `Error parsing stored mchoice data for ${ this . divid } : ${ err . message } ` ) ;
357+ error = true ;
358+ }
359+ if ( error || storedData . timestamp < eBookConfig . termStartDate ) {
356360 localStorage . removeItem ( this . localStorageKey ( ) ) ;
357361 return ;
358362 }
Original file line number Diff line number Diff line change @@ -998,7 +998,12 @@ export default class Parsons extends RunestoneBase {
998998 if ( this . graderactive ) {
999999 return ;
10001000 }
1001- this . loadData ( this . localData ( ) ) ;
1001+ const localData = this . localData ( ) ;
1002+ if ( localData . timestamp && localData . timestamp < eBookConfig . termStartDate ) {
1003+ localStorage . removeItem ( this . storageId ) ;
1004+ localData = { } ;
1005+ }
1006+ this . loadData ( localData ) ;
10021007 }
10031008 // RunestoneBase: Set the state of the problem in local storage
10041009 setLocalStorage ( data ) {
Original file line number Diff line number Diff line change @@ -252,12 +252,16 @@ export default class ShortAnswer extends RunestoneBase {
252252 if ( len > 0 ) {
253253 var ex = localStorage . getItem ( this . localStorageKey ( ) ) ;
254254 if ( ex !== null ) {
255+ let error = false ;
255256 try {
256257 var storedData = JSON . parse ( ex ) ;
257258 answer = storedData . answer ;
258259 } catch ( err ) {
259260 // error while parsing; likely due to bad value stored in storage
260- console . log ( err . message ) ;
261+ console . log ( `Error parsing stored shortanswer data for ${ this . divid } : ${ err . message } ` ) ;
262+ error = true ;
263+ }
264+ if ( error || storedData . timestamp < eBookConfig . termStartDate ) {
261265 localStorage . removeItem ( this . localStorageKey ( ) ) ;
262266 return ;
263267 }
Original file line number Diff line number Diff line change @@ -1193,13 +1193,19 @@ export default class Timed extends RunestoneBase {
11931193 this . taken = 1 ;
11941194 var tmpArr ;
11951195 if ( data === "" ) {
1196+ let error = false ;
1197+ let storageObj ;
11961198 try {
1197- tmpArr = JSON . parse (
1199+ storageObj = JSON . parse (
11981200 localStorage . getItem ( this . localStorageKey ( ) )
1199- ) . answer ;
1201+ ) ;
1202+ tmpArr = storageObj . answer ;
12001203 } catch ( err ) {
12011204 // error while parsing; likely due to bad value stored in storage
1202- console . log ( err . message ) ;
1205+ console . log ( `Error parsing stored Timed data for ${ this . divid } : ${ err . message } ` ) ;
1206+ error = true ;
1207+ }
1208+ if ( error || storageObj . timestamp < eBookConfig . termStartDate ) {
12031209 localStorage . removeItem ( this . localStorageKey ( ) ) ;
12041210 this . taken = 0 ;
12051211 return ;
You can’t perform that action at this time.
0 commit comments