3030 var WebSocket = null ; // isBrowser ? window.WebSocket || window.MozWebSocket : {};
3131 var UIState = null ;
3232
33+ var localStorageName = 'localStorage' ;
34+
3335 var previousBackendless = root . Backendless ;
3436
3537 var Backendless = { } ,
603605 }
604606
605607 function setCache ( ) {
606- var store = { } ,
607- localStorageName = 'localStorage' ,
608- storage ;
608+ var store = { } ,
609+ storage = { } ;
609610
610611 store . enabled = false ;
612+
611613 store . exists = function ( key ) {
614+ return store . get ( key ) !== undefined ;
612615 } ;
616+
613617 store . set = function ( key , value ) {
618+ return storage [ key ] = store . serialize ( value ) ;
614619 } ;
620+
615621 store . get = function ( key ) {
622+ var result = storage [ key ] ;
623+
624+ return result && store . deserialize ( result ) ;
616625 } ;
626+
617627 store . remove = function ( key ) {
628+ return delete storage [ key ] ;
618629 } ;
630+
619631 store . clear = function ( ) {
632+ storage = { } ;
620633 } ;
634+
621635 store . flushExpired = function ( ) {
622636 } ;
637+
623638 store . getCachePolicy = function ( key ) {
624639 } ;
625- store . getAll = function ( ) {
640+
641+ store . getAll = function ( ) {
642+ var result = { } ;
643+
644+ for ( var prop in storage ) {
645+ if ( storage . hasOwnProperty ( prop ) ) {
646+ result [ prop ] = storage [ prop ] ;
647+ }
648+ }
649+
650+ return result ;
626651 } ;
652+
627653 store . serialize = function ( value ) {
628654 return JSON . stringify ( value ) ;
629655 } ;
656+
630657 store . deserialize = function ( value ) {
631658 if ( typeof value != 'string' ) {
632659 return undefined ;
653680 }
654681
655682 if ( isLocalStorageSupported ( ) ) {
656- storage = window [ localStorageName ] ;
683+ return extendToLocalStorageCache ( store ) ;
684+ }
657685
658- var createBndlsStorage = function ( ) {
659- if ( ! ( storage . getItem ( 'Backendless' ) ) ) {
660- storage . setItem ( 'Backendless' , store . serialize ( { } ) ) ;
661- }
662- } ;
686+ return store ;
687+ }
663688
664- var expired = function ( obj ) {
665- var result = false ;
666- if ( obj && Object . prototype . toString . call ( obj ) . slice ( 8 , - 1 ) == "Object" ) {
667- if ( 'cachePolicy' in obj && 'timeToLive' in obj [ 'cachePolicy' ] && obj [ 'cachePolicy' ] [ 'timeToLive' ] != - 1 && 'created' in obj [ 'cachePolicy' ] ) {
668- result = ( new Date ( ) . getTime ( ) - obj [ 'cachePolicy' ] [ 'created' ] ) > obj [ 'cachePolicy' ] [ 'timeToLive' ] ;
669- }
689+ function extendToLocalStorageCache ( store ) {
690+ var storage = window [ localStorageName ] ;
691+
692+ var createBndlsStorage = function ( ) {
693+ if ( ! ( storage . getItem ( 'Backendless' ) ) ) {
694+ storage . setItem ( 'Backendless' , store . serialize ( { } ) ) ;
695+ }
696+ } ;
697+
698+ var expired = function ( obj ) {
699+ var result = false ;
700+ if ( obj && Object . prototype . toString . call ( obj ) . slice ( 8 , - 1 ) == "Object" ) {
701+ if ( 'cachePolicy' in obj && 'timeToLive' in obj [ 'cachePolicy' ] && obj [ 'cachePolicy' ] [ 'timeToLive' ] != - 1 && 'created' in obj [ 'cachePolicy' ] ) {
702+ result = ( new Date ( ) . getTime ( ) - obj [ 'cachePolicy' ] [ 'created' ] ) > obj [ 'cachePolicy' ] [ 'timeToLive' ] ;
670703 }
704+ }
671705
672- return result ;
673- } ;
706+ return result ;
707+ } ;
674708
675- var addTimestamp = function ( obj ) {
676- if ( obj && Object . prototype . toString . call ( obj ) . slice ( 8 , - 1 ) == "Object" ) {
677- if ( 'cachePolicy' in obj && 'timeToLive' in obj [ 'cachePolicy' ] ) {
678- obj [ 'cachePolicy' ] [ 'created' ] = new Date ( ) . getTime ( ) ;
679- }
709+ var addTimestamp = function ( obj ) {
710+ if ( obj && Object . prototype . toString . call ( obj ) . slice ( 8 , - 1 ) == "Object" ) {
711+ if ( 'cachePolicy' in obj && 'timeToLive' in obj [ 'cachePolicy' ] ) {
712+ obj [ 'cachePolicy' ] [ 'created' ] = new Date ( ) . getTime ( ) ;
680713 }
681- } ;
714+ }
715+ } ;
716+
717+ createBndlsStorage ( ) ;
718+
719+ store . enabled = true ;
720+
721+ store . exists = function ( key ) {
722+ return store . get ( key ) !== undefined ;
723+ } ;
724+
725+ store . set = function ( key , val ) {
726+ if ( val === undefined ) {
727+ return store . remove ( key ) ;
728+ }
682729
683730 createBndlsStorage ( ) ;
684- store . enabled = true ;
685731
686- store . exists = function ( key ) {
687- return store . get ( key ) !== undefined ;
688- } ;
732+ var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
689733
690- store . set = function ( key , val ) {
691- if ( val === undefined ) {
692- return store . remove ( key ) ;
693- }
734+ addTimestamp ( val ) ;
735+
736+ backendlessObj [ key ] = val ;
694737
695- createBndlsStorage ( ) ;
696- var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
697- addTimestamp ( val ) ;
738+ try {
739+ storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
740+ } catch ( e ) {
741+ backendlessObj = { } ;
698742 backendlessObj [ key ] = val ;
743+ storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
744+ }
699745
700- try {
701- storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
702- } catch ( e ) {
703- backendlessObj = { } ;
704- backendlessObj [ key ] = val ;
705- storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
706- }
746+ return val ;
747+ } ;
707748
708- return val ;
709- } ;
749+ store . get = function ( key ) {
750+ createBndlsStorage ( ) ;
710751
711- store . get = function ( key ) {
712- createBndlsStorage ( ) ;
713- var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ,
714- obj = backendlessObj [ key ] ,
715- result = obj ;
752+ var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ,
753+ obj = backendlessObj [ key ] ,
754+ result = obj ;
716755
717- if ( expired ( obj ) ) {
718- delete backendlessObj [ key ] ;
719- storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
720- result = undefined ;
721- }
756+ if ( expired ( obj ) ) {
757+ delete backendlessObj [ key ] ;
758+ storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
759+ result = undefined ;
760+ }
722761
723- if ( result && result [ 'cachePolicy' ] ) {
724- delete result [ 'cachePolicy' ] ;
725- }
762+ if ( result && result [ 'cachePolicy' ] ) {
763+ delete result [ 'cachePolicy' ] ;
764+ }
726765
727- return result ;
728- } ;
766+ return result ;
767+ } ;
729768
730- store . remove = function ( key ) {
731- var result ;
732- createBndlsStorage ( ) ;
733- key = key . replace ( / ( [ ^ A - Z a - z 0 - 9 - ] ) / g, '' ) ;
734- var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
769+ store . remove = function ( key ) {
770+ var result ;
735771
736- if ( backendlessObj . hasOwnProperty ( key ) ) {
737- result = delete backendlessObj [ key ] ;
738- }
772+ createBndlsStorage ( ) ;
739773
740- storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
774+ key = key . replace ( / ( [ ^ A - Z a - z 0 - 9 - ] ) / g , '' ) ;
741775
742- return result ;
743- } ;
776+ var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
744777
745- store . clear = function ( ) {
746- storage . setItem ( 'Backendless' , store . serialize ( { } ) ) ;
747- } ;
778+ if ( backendlessObj . hasOwnProperty ( key ) ) {
779+ result = delete backendlessObj [ key ] ;
780+ }
781+
782+ storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
748783
749- store . getAll = function ( ) {
750- createBndlsStorage ( ) ;
784+ return result ;
785+ } ;
751786
752- var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
753- var ret = { } ;
787+ store . clear = function ( ) {
788+ storage . setItem ( 'Backendless' , store . serialize ( { } ) ) ;
789+ } ;
754790
755- for ( var prop in backendlessObj ) {
756- if ( backendlessObj . hasOwnProperty ( prop ) ) {
757- ret [ prop ] = backendlessObj [ prop ] ;
758- if ( ret [ prop ] !== null && ret [ prop ] . hasOwnProperty ( 'cachePolicy' ) ) {
759- delete ret [ prop ] [ 'cachePolicy' ] ;
760- }
791+ store . getAll = function ( ) {
792+ createBndlsStorage ( ) ;
793+
794+ var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
795+ var ret = { } ;
796+
797+ for ( var prop in backendlessObj ) {
798+ if ( backendlessObj . hasOwnProperty ( prop ) ) {
799+ ret [ prop ] = backendlessObj [ prop ] ;
800+ if ( ret [ prop ] !== null && ret [ prop ] . hasOwnProperty ( 'cachePolicy' ) ) {
801+ delete ret [ prop ] [ 'cachePolicy' ] ;
761802 }
762803 }
804+ }
763805
764- return ret ;
765- } ;
806+ return ret ;
807+ } ;
766808
767- store . flushExpired = function ( ) {
768- createBndlsStorage ( ) ;
769- var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ,
770- obj ;
771-
772- for ( var prop in backendlessObj ) {
773- if ( backendlessObj . hasOwnProperty ( prop ) ) {
774- obj = backendlessObj [ prop ] ;
775- if ( expired ( obj ) ) {
776- delete backendlessObj [ prop ] ;
777- storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
778- }
809+ store . flushExpired = function ( ) {
810+ createBndlsStorage ( ) ;
811+
812+ var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ,
813+ obj ;
814+
815+ for ( var prop in backendlessObj ) {
816+ if ( backendlessObj . hasOwnProperty ( prop ) ) {
817+ obj = backendlessObj [ prop ] ;
818+ if ( expired ( obj ) ) {
819+ delete backendlessObj [ prop ] ;
820+ storage . setItem ( 'Backendless' , store . serialize ( backendlessObj ) ) ;
779821 }
780822 }
781- } ;
823+ }
824+ } ;
782825
783- store . getCachePolicy = function ( key ) {
784- createBndlsStorage ( ) ;
785- var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
786- var obj = backendlessObj [ key ] ;
826+ store . getCachePolicy = function ( key ) {
827+ createBndlsStorage ( ) ;
787828
788- return obj ? obj [ 'cachePolicy' ] : undefined ;
789- } ;
790- }
829+ var backendlessObj = store . deserialize ( storage . getItem ( 'Backendless' ) ) ;
830+ var obj = backendlessObj [ key ] ;
831+
832+ return obj ? obj [ 'cachePolicy' ] : undefined ;
833+ } ;
791834
792835 return store ;
793836 }
20832126 asyncHandler : responder
20842127 } ) ;
20852128 } ,
2086-
2129+
20872130 /** @deprecated */
20882131 addPoint : function ( geopoint , async ) {
20892132 return this . savePoint . apply ( this , arguments ) ;
46164659 }
46174660
46184661 return Backendless ;
4619- } ) ;
4662+ } ) ;
0 commit comments