Line 2: |
Line 2: |
| // Indexeddb JavaScript | | // Indexeddb JavaScript |
| console.log('Indb loading'); | | console.log('Indb loading'); |
| + | |
| + | function idxdbContainer( ww ) { |
| + | |
| + | hashCode = function(s) { |
| + | if ( s == undefined ) { |
| + | s = '00' |
| + | } |
| + | var h = 0, l = s.length, i = 0; |
| + | if ( l > 0 ) |
| + | while (i < l) |
| + | h = (h << 5) - h + s.charCodeAt(i++) | 0; |
| + | return h; |
| + | }; |
| + | |
| + | if ( ww.user != undefined ) { |
| + | var self = ww.user.getName(); |
| + | |
| + | var idgen = hashCode(self); |
| + | |
| + | console.log(idgen); |
| + | // Take username for standard databasename format |
| + | var PersonalDataDataBaseName = "PD.IO" + idgen + "Database"; |
| + | // Use username in user to get up to date version of self |
| + | var CurrentPerson = {id: idgen, name: {user: self}, age: 0}; |
| + | |
| + | console.log(PersonalDataDataBaseName); |
| + | console.log(CurrentPerson); |
| + | } |
| + | |
| + | // ADD MORE DOC |
| + | |
| + | // EnqueuePDIO a PDIOLocalDatabase:User database access function with modes |
| + | // External accessible wrapper for Enquire |
| + | |
| + | this.EnqueuePDIO = function( sw, c1, c2, c3 ) { |
| + | return Enquire( PersonalDataDataBaseName, CurrentPerson, sw, c1, c2, c3 ); |
| + | } |
| + | |
| + | // Enquire, a general purpose indexeddb update function with modes |
| + | |
| + | // Mode 'aggressive push': |
| + | // parameter record is pushed to database, overwriting whatever is there |
| + | |
| + | // Mode 'checkin': |
| + | // record is retrieved from database, parameter record is pushed if not found |
| + | |
| + | // Mode 'get record' |
| + | // tries to get record from db, returns undefined if not found |
| + | |
| + | // Mode 'update record' field1 field2 field3 |
| + | // retrieve record, make record.field1.field2 = field3, push back |
| + | |
| + | // Mode 'update record' field1 field2 |
| + | // retrieve record, make record.field1 = field2, push back |
| + | |
| + | function Enquire( pddbname, record, sqitch, control_1, control_2, control_3 ) { |
| + | var pddb = window.indexedDB.open(pddbname, 3); |
| + | pddb.onupgradeneeded = function() { |
| + | var db = pddb.result; |
| + | var store = db.createObjectStore(pddbname, {keyPath: "id"}); |
| + | |
| + | // shouldn't the index be the wiki.personaldata.io username? |
| + | |
| + | var index = store.createIndex("NameIndex", ["id"]); |
| + | }; |
| + | pddb.onsuccess = function() { |
| + | var db = pddb.result; |
| + | var tx = db.transaction(pddbname, "readwrite"); |
| + | var store = tx.objectStore(pddbname); |
| + | var index = store.index("NameIndex"); |
| + | |
| + | // Get the original record from the db... |
| + | var getRecord = index.get([record.id]); |
| + | var inp_obj; |
| + | |
| + | getRecord.onsuccess = function() { |
| + | console.log( "Record found in database: \n <<"); |
| + | console.log( getRecord.result ); |
| + | console.log( ">>"); |
| + | |
| + | // Essential recordAdd |
| + | if ( sqitch === "aggressive push" ) { |
| + | inp_obj = record; |
| + | store.put( inp_obj ); |
| + | return inp_obj; |
| + | } else if ( sqitch === "checkin" ) { |
| + | |
| + | if ( getRecord.result != undefined ) { |
| + | console.log("getting from store"); |
| + | inp_obj = getRecord.result; |
| + | } else { |
| + | console.log("overriding whatever in there"); |
| + | inp_obj = record; |
| + | store.put(inp_obj); |
| + | } |
| + | |
| + | } else { |
| + | if ( getRecord.result != undefined ) { |
| + | inp_obj = getRecord.result; |
| + | if ( sqitch === "get record" ) { |
| + | // if found, let's use that from now on |
| + | console.log("Getting record"); |
| + | // let's return it so that our addrecord can be used as a getter as well |
| + | return inp_obj; |
| + | } |
| + | // |
| + | // endof onsuccess |
| + | } else { |
| + | console.log("record not found"); |
| + | if ( sqitch === "update record" ) { |
| + | inp_obj = record; |
| + | } else { |
| + | return undefined; |
| + | } |
| + | } |
| + | // endof resultdefined |
| + | } |
| + | // endofELSE |
| + | if ( sqitch === "update record" ) { // Record Update |
| + | if ( control_1 != undefined ) { |
| + | if ( control_2 != undefined ) { |
| + | if ( control_3 != undefined ) { |
| + | |
| + | if ( Array.isArray( inp_obj[ control_1 ][ control_2 ] ) ) { |
| + | inp_obj[ control_1 ][ control_2 ].push( control_3 ); |
| + | } else { |
| + | inp_obj[ control_1 ][ control_2 ] = control_3; // => "Bob" |
| + | } |
| + | store.put(inp_obj); |
| + | } else { |
| + | |
| + | if ( Array.isArray( inp_obj[ control_1 ] ) ) { |
| + | inp_obj[ control_1 ].push( control_2 ); |
| + | } else { |
| + | inp_obj[ control_1 ] = control_2; |
| + | } |
| + | store.put(inp_obj); |
| + | |
| + | } |
| + | // +3 |
| + | } else { |
| + | store.put(inp_obj); |
| + | return inp_obj[ control_1 ]; |
| + | } |
| + | // +2 |
| + | } else { |
| + | |
| + | return inp_obj; |
| + | |
| + | } |
| + | |
| + | }; |
| + | |
| + | }; |
| + | }; |
| + | }; |
| + | }; |