initial checkin from subversion

This commit is contained in:
Tretter
2017-02-07 20:09:53 +00:00
commit 5fa02f875b
26 changed files with 4907 additions and 0 deletions

298
datahandler.js Normal file
View File

@@ -0,0 +1,298 @@
var DataHandlerJSRevision="$Revision: 69 $".split(' ')[1]
function changedEntryDataHandler(response) {
var allEntries=response.Entries;
var maxModified=0;
if (allEntries != null) {
db.transaction(["Entry"]).then( // transaction has three callbacks in the .then function:
function(){ // Transaction Complete
if (maxModified > 0) {
db.objectStore("maxModified").put({objectId:"Entry",value:maxModified});
}
$("#lstEntries").listview("refresh");
console.log("Transaction complete [ changedEntryDataHandler ]" );
check4Changes();
},
function(){ // Transaction Aborted
$("#lstEntries").listview("refresh");
console.log("Transaction aborted! [ changedEntryDataHandler ]" );
},
function(t){ // Transaction in Progress
for (i=0;i<allEntries.length;i++){
var theEntry=allEntries[i];
// this has to be it's own function so that theEntry resolves to the right value also in the callback events!
function singleEntryInsert(theEntry){
t.objectStore("Entry").index("Description").getKey(theEntry.Description).done( function (result,event) {
if (null==result) {
if (theEntry.Status != "d") {// if item doesn't exist then add it.
t.objectStore("Entry").add({"Description":theEntry.Description, "shopGlobalId":theEntry.shopGlobalId }).done( function(result,event){
if (getActiveShopGlobalId()==theEntry.shopGlobalId) {
addEntryToUi(result,theEntry.Description);
}
if (Number(theEntry.Modified) > Number(maxModified)) {
maxModified=theEntry.Modified;
}
console.log("[ changedEntryDataHandler ] Added Entry from Server : " , theEntry);
}).fail( function (result, event){
console.log("Failed Inserting List Item: " , result , event )
});
} else {
console.log("[ changedEntryDataHandler ] Entry from Server : " , theEntry, " didn't exist on the client, therefore doing nothing");
if (Number(theEntry.Modified) > Number(maxModified)) {
maxModified=theEntry.Modified;
}
}
} else {
if (theEntry.Status=="d") {
t.objectStore("Entry").delete(result).done(function (result,event){
if (Number(theEntry.Modified) > Number(maxModified)) {
maxModified=theEntry.Modified;
}
});
deleteEntryFromUi(result);
console.log("Deleted Entry:" , theEntry.Description , " Key:" , result)
} else {
// shop updated
t.objectStore("Entry").put({"Description":theEntry.Description, "shopGlobalId":theEntry.ShopGlobalId }).done( function(result,event){
if (Number(theEntry.Modified) > Number(maxModified)) {
maxModified=theEntry.Modified;
}
console.log("[ changedEntryDataHandler ] changed Entry from Server : " , theEntry );
}).fail( function (result, event){
console.log("Failed changing Entry List Item: " , result , event )
});
}
}
});
}
singleEntryInsert(theEntry);
}
}
);
} else {
deleteQitem(response);
console.log("[ changedEntryDataHandler ] - No New Entries." );
}
}
function brandBrowser(sShoppingListName) {
sGShoppingListName=sShoppingListName;
sGBrowserId=generateUUID();
addToQ("BrandBrowser",sGShoppingListName);
db.objectStore("Config").add({Id:"ShoppingListName",value:sGShoppingListName});
db.objectStore("Config").add({Id:"BrowserId",value:sGBrowserId});
db.objectStore("maxModified").add({objectId:"Entry",value:0});
db.objectStore("maxModified").add({objectId:"Shop",value:0});
// Actually - that's not it: it's only for new shopping lists and not if a member is added...
//db.objectStore("Shop").add({ShopName:"ShopName(Click to change)"});
$("#pnlBranding").hide();
setMode("Entries");
loadAndShowShops();
window.setTimeout(check4Changes,1000);
}
function unbrandBrowser() {
db.deleteDatabase("Shoppinglist").done(function(){
window.location.reload()
});
}
function addNewEntry(sEntry){
var shopGlobalId=getActiveShopGlobalId();
if (shopGlobalId== null) {
shopGlobalId=generateUUID();
shopChangeHandler(shopGlobalId,"Default");
}
db.objectStore("Entry").add({"Description":sEntry,"shopGlobalId":shopGlobalId }).done( function(result,event){
addToQ("SendEntry",result);
addEntryToUi(result,sEntry);
$("#lstEntries").listview("refresh");
}).fail( function (result, event){
console.log("Failed Inserting List Item: " , result, event )
});
}
function deleteEntry(sKey) {
db.objectStore("Entry").get(Number(sKey)).done( function(result,event){
addToQ("DeleteEntry",result);
db.objectStore("Entry").delete(Number(sKey)).done( function(result,event){
deleteEntryFromUi(sKey)
}).fail( function (result, event){
console.log("[deleteEntry] Failed deleting List Item: " , result , event )
});
}).fail( function (result, event){
console.log("[deleteEntry] Failed retrieving List Item Details: " , result , event )
});
}
function shopDeletion(shopGlobalId){
db.objectStore("Shop").delete(shopGlobalId)
.done(function(){
addToQ("ShopDeletion",shopGlobalId);
$("#pnlShops>ul>li>a.ui-btn-active").remove();
loadAndShowShops(null).done(function(){
setMode("Entries");
});
});
}
function shopChangeHandler(shopGlobalId,shopName){
db.objectStore("Shop").put({"GlobalId":shopGlobalId, "Description":shopName})
.done(function(result){
console.log("[shopChangeHandler] - created new Shop with UUID " , shopGlobalId , " and Description " , shopName , " resulting in key " , result );
addToQ("SendShop",shopGlobalId);
loadAndShowShops(shopGlobalId).done(function(){
setMode("Entries");
});
})
.fail(function (result,event){
console.log("[shopChangeHandler] - error creating new Shop: " , result , event )
});
}
function check4Changes(){
var ojAllModi=new Object();
ojAllModi.maxModified=new Object();
db.transaction(["maxModified"]).then( // transaction has three callbacks in the .then function:
function() { // transaction complete
callServerFunction("SendChangedData",ojAllModi,changedDataTypeDispatcher,
function(){
// on error wait 5 sec.
window.setTimeout(check4Changes,5000);
}
);
},
function(){ // Transaction Aborted
console.log("Transaction aborted! [ check4Changes ]" );
},
function(t){ // Transaction in Progress
t.objectStore("maxModified").each(function(result){
if (result != null) {
console.log("[Check4Changes] - maxModified " , result);
ojAllModi.maxModified[result.key]=result.value.value;
}
});
}
);
}
function changedDataTypeDispatcher(response){
console.log("[changedDataTypeDispatcher] Detected type: " , response.ChangeType);
if (response.ChangeType=="Entry") {
changedEntryDataHandler(response)
}
if (response.ChangeType=="Shop") {
changedShopDataHandler(response)
}
if (response.ChangeType=="None"){
check4Changes();
}
}
function changedShopDataHandler(response){
var allShops=response.Shops;
var maxModified=0;
if (allShops != null) {
db.transaction(["Shop"]).then( // transaction has three callbacks in the .then function:
function(){ // Transaction Complete
if (maxModified > 0) {
db.objectStore("maxModified").put({objectId:"Shop",value:maxModified})
.done(function(result){
console.log("updated modified to " + maxModified + " [ changedShopDataHandler ]" );
})
.fail(function(result,event){
console.log("[changeShopDataHandler] Failed to update modified: " , result ,event );
});
}
loadAndShowShops();
console.log("[changeShopDataHandler] Transaction complete" );
check4Changes();
},
function(){ // Transaction Aborted
console.log("Transaction aborted! [ changedShopDataHandler ]" );
},
function(t){ // Transaction in Progress
for (i=0;i<allShops.length;i++){
var theShop=allShops[i];
// this has to be it's own function so that theShop resolves to the right value also in the callback events!
function singleShopInsert(theShop){
t.objectStore("Shop").get(theShop.GlobalId).done( function (result,event) {
if (null==result) {
if (theShop.Status != "d") {// if item doesn't exist then add it.
t.objectStore("Shop").add({"Description":theShop.Description, "GlobalId":theShop.GlobalId}).done( function(result,event){
if (Number(theShop.Modified) > Number(maxModified)) {
maxModified=theShop.Modified;
}
console.log("[ changedShopDataHandler ] Added Shop from Server : " . theShop);
}).fail( function (result, event){
console.log("Failed Inserting List Item: " , result , event )
});
} else {
// yes, looks a bit doubled but has to be as the other 2 are transaction success dependant...
if (Number(theShop.Modified) > Number(maxModified)) {
maxModified=theShop.Modified;
}
}
} else {
if (theShop.Status=="d") {
t.objectStore("Shop").delete(result.GlobalId).done(function (result,event){
if (Number(theShop.Modified) > Number(maxModified)) {
maxModified=theShop.Modified;
}
});
console.log("Deleted Shop:" , theShop )
} else {
// shop updated
t.objectStore("Shop").put({"Description":theShop.Description, "GlobalId":theShop.GlobalId }).done( function(result,event){
if (Number(theShop.Modified) > Number(maxModified)) {
maxModified=theShop.Modified;
}
console.log("[ changedShopDataHandler ] changed Shop from Server : " , theShop );
}).fail( function (result, event){
console.log("[ changedShopDataHandler ] Failed changing Shop Item: " , result,event );
});
}
}
});
}
singleShopInsert(theShop);
}
}
);
} else {
deleteQitem(response);
console.log("[ changedShopDataHandler ] - No New Shops." );
}
}