blob: baf19df439b6e15a0759d908bcbce799d8aabbf8 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.off.ui"]){
dojo._hasResource["dojox.off.ui"]=true;
dojo.provide("dojox.off.ui");
dojo.require("dojox.storage.Provider");
dojo.require("dojox.storage.manager");
dojo.require("dojox.storage.GearsStorageProvider");
dojo.mixin(dojox.off.ui,{appName:"setme",autoEmbed:true,autoEmbedID:"dot-widget",runLink:window.location.href,runLinkTitle:"Run Application",learnHowPath:dojo.moduleUrl("dojox","off/resources/learnhow.html"),customLearnHowPath:false,htmlTemplatePath:dojo.moduleUrl("dojox","off/resources/offline-widget.html").uri,cssTemplatePath:dojo.moduleUrl("dojox","off/resources/offline-widget.css").uri,onlineImagePath:dojo.moduleUrl("dojox","off/resources/greenball.png").uri,offlineImagePath:dojo.moduleUrl("dojox","off/resources/redball.png").uri,rollerImagePath:dojo.moduleUrl("dojox","off/resources/roller.gif").uri,checkmarkImagePath:dojo.moduleUrl("dojox","off/resources/checkmark.png").uri,learnHowJSPath:dojo.moduleUrl("dojox","off/resources/learnhow.js").uri,_initialized:false,onLoad:function(){
},_initialize:function(){
if(this._validateAppName(this.appName)==false){
alert("You must set dojox.off.ui.appName; it can only contain "+"letters, numbers, and spaces; right now it "+"is incorrectly set to '"+dojox.off.ui.appName+"'");
dojox.off.enabled=false;
return;
}
this.runLinkText="Run "+this.appName;
dojo.connect(dojox.off,"onNetwork",this,"_onNetwork");
dojo.connect(dojox.off.sync,"onSync",this,"_onSync");
dojox.off.files.cache([this.htmlTemplatePath,this.cssTemplatePath,this.onlineImagePath,this.offlineImagePath,this.rollerImagePath,this.checkmarkImagePath]);
if(this.autoEmbed){
this._doAutoEmbed();
}
},_doAutoEmbed:function(){
dojo.xhrGet({url:this.htmlTemplatePath,handleAs:"text",error:function(_1){
dojox.off.enabled=false;
_1=_1.message||_1;
alert("Error loading the Dojo Offline Widget from "+this.htmlTemplatePath+": "+_1);
},load:dojo.hitch(this,this._templateLoaded)});
},_templateLoaded:function(_2){
var _3=dojo.byId(this.autoEmbedID);
if(_3){
_3.innerHTML=_2;
}
this._initImages();
this._updateNetIndicator();
this._initLearnHow();
this._initialized=true;
if(!dojox.off.hasOfflineCache){
this._showNeedsOfflineCache();
return;
}
if(dojox.off.hasOfflineCache&&dojox.off.browserRestart){
this._needsBrowserRestart();
return;
}else{
var _4=dojo.byId("dot-widget-browser-restart");
if(_4){
_4.style.display="none";
}
}
this._updateSyncUI();
this._initMainEvtHandlers();
this._setOfflineEnabled(dojox.off.enabled);
this._onNetwork(dojox.off.isOnline?"online":"offline");
this._testNet();
},_testNet:function(){
dojox.off.goOnline(dojo.hitch(this,function(_5){
this._onNetwork(_5?"online":"offline");
this.onLoad();
}));
},_updateNetIndicator:function(){
var _6=dojo.byId("dot-widget-network-indicator-online");
var _7=dojo.byId("dot-widget-network-indicator-offline");
var _8=dojo.byId("dot-widget-title-text");
if(_6&&_7){
if(dojox.off.isOnline==true){
_6.style.display="inline";
_7.style.display="none";
}else{
_6.style.display="none";
_7.style.display="inline";
}
}
if(_8){
if(dojox.off.isOnline){
_8.innerHTML="Online";
}else{
_8.innerHTML="Offline";
}
}
},_initLearnHow:function(){
var _9=dojo.byId("dot-widget-learn-how-link");
if(!_9){
return;
}
if(!this.customLearnHowPath){
var _a=dojo.config.baseRelativePath;
this.learnHowPath+="?appName="+encodeURIComponent(this.appName)+"&hasOfflineCache="+dojox.off.hasOfflineCache+"&runLink="+encodeURIComponent(this.runLink)+"&runLinkText="+encodeURIComponent(this.runLinkText)+"&baseRelativePath="+encodeURIComponent(_a);
dojox.off.files.cache(this.learnHowJSPath);
dojox.off.files.cache(this.learnHowPath);
}
_9.setAttribute("href",this.learnHowPath);
var _b=dojo.byId("dot-widget-learn-how-app-name");
if(!_b){
return;
}
_b.innerHTML="";
_b.appendChild(document.createTextNode(this.appName));
},_validateAppName:function(_c){
if(!_c){
return false;
}
return (/^[a-z0-9 ]*$/i.test(_c));
},_updateSyncUI:function(){
var _d=dojo.byId("dot-roller");
var _e=dojo.byId("dot-success-checkmark");
var _f=dojo.byId("dot-sync-messages");
var _10=dojo.byId("dot-sync-details");
var _11=dojo.byId("dot-sync-cancel");
if(dojox.off.sync.isSyncing){
this._clearSyncMessage();
if(_d){
_d.style.display="inline";
}
if(_e){
_e.style.display="none";
}
if(_f){
dojo.removeClass(_f,"dot-sync-error");
}
if(_10){
_10.style.display="none";
}
if(_11){
_11.style.display="inline";
}
}else{
if(_d){
_d.style.display="none";
}
if(_11){
_11.style.display="none";
}
if(_f){
dojo.removeClass(_f,"dot-sync-error");
}
}
},_setSyncMessage:function(_12){
var _13=dojo.byId("dot-sync-messages");
if(_13){
while(_13.firstChild){
_13.removeChild(_13.firstChild);
}
_13.appendChild(document.createTextNode(_12));
}
},_clearSyncMessage:function(){
this._setSyncMessage("");
},_initImages:function(){
var _14=dojo.byId("dot-widget-network-indicator-online");
if(_14){
_14.setAttribute("src",this.onlineImagePath);
}
var _15=dojo.byId("dot-widget-network-indicator-offline");
if(_15){
_15.setAttribute("src",this.offlineImagePath);
}
var _16=dojo.byId("dot-roller");
if(_16){
_16.setAttribute("src",this.rollerImagePath);
}
var _17=dojo.byId("dot-success-checkmark");
if(_17){
_17.setAttribute("src",this.checkmarkImagePath);
}
},_showDetails:function(evt){
evt.preventDefault();
evt.stopPropagation();
if(!dojox.off.sync.details.length){
return;
}
var _19="";
_19+="<html><head><title>Sync Details</title><head><body>";
_19+="<h1>Sync Details</h1>\n";
_19+="<ul>\n";
for(var i=0;i<dojox.off.sync.details.length;i++){
_19+="<li>";
_19+=dojox.off.sync.details[i];
_19+="</li>";
}
_19+="</ul>\n";
_19+="<a href='javascript:window.close()' "+"style='text-align: right; padding-right: 2em;'>"+"Close Window"+"</a>\n";
_19+="</body></html>";
var _1b="height=400,width=600,resizable=true,"+"scrollbars=true,toolbar=no,menubar=no,"+"location=no,directories=no,dependent=yes";
var _1c=window.open("","SyncDetails",_1b);
if(!_1c){
alert("Please allow popup windows for this domain; can't display sync details window");
return;
}
_1c.document.open();
_1c.document.write(_19);
_1c.document.close();
if(_1c.focus){
_1c.focus();
}
},_cancel:function(evt){
evt.preventDefault();
evt.stopPropagation();
dojox.off.sync.cancel();
},_needsBrowserRestart:function(){
var _1e=dojo.byId("dot-widget-browser-restart");
if(_1e){
dojo.addClass(_1e,"dot-needs-browser-restart");
}
var _1f=dojo.byId("dot-widget-browser-restart-app-name");
if(_1f){
_1f.innerHTML="";
_1f.appendChild(document.createTextNode(this.appName));
}
var _20=dojo.byId("dot-sync-status");
if(_20){
_20.style.display="none";
}
},_showNeedsOfflineCache:function(){
var _21=dojo.byId("dot-widget-container");
if(_21){
dojo.addClass(_21,"dot-needs-offline-cache");
}
},_hideNeedsOfflineCache:function(){
var _22=dojo.byId("dot-widget-container");
if(_22){
dojo.removeClass(_22,"dot-needs-offline-cache");
}
},_initMainEvtHandlers:function(){
var _23=dojo.byId("dot-sync-details-button");
if(_23){
dojo.connect(_23,"onclick",this,this._showDetails);
}
var _24=dojo.byId("dot-sync-cancel-button");
if(_24){
dojo.connect(_24,"onclick",this,this._cancel);
}
},_setOfflineEnabled:function(_25){
var _26=[];
_26.push(dojo.byId("dot-sync-status"));
for(var i=0;i<_26.length;i++){
if(_26[i]){
_26[i].style.visibility=(_25?"visible":"hidden");
}
}
},_syncFinished:function(){
this._updateSyncUI();
var _28=dojo.byId("dot-success-checkmark");
var _29=dojo.byId("dot-sync-details");
if(dojox.off.sync.successful==true){
this._setSyncMessage("Sync Successful");
if(_28){
_28.style.display="inline";
}
}else{
if(dojox.off.sync.cancelled==true){
this._setSyncMessage("Sync Cancelled");
if(_28){
_28.style.display="none";
}
}else{
this._setSyncMessage("Sync Error");
var _2a=dojo.byId("dot-sync-messages");
if(_2a){
dojo.addClass(_2a,"dot-sync-error");
}
if(_28){
_28.style.display="none";
}
}
}
if(dojox.off.sync.details.length&&_29){
_29.style.display="inline";
}
},_onFrameworkEvent:function(_2b,_2c){
if(_2b=="save"){
if(_2c.status==dojox.storage.FAILED&&!_2c.isCoreSave){
alert("Please increase the amount of local storage available "+"to this application");
if(dojox.storage.hasSettingsUI()){
dojox.storage.showSettingsUI();
}
}
}else{
if(_2b=="coreOperationFailed"){
if(!this._userInformed){
alert("This application will not work if Google Gears is not allowed to run");
this._userInformed=true;
}
}else{
if(_2b=="offlineCacheInstalled"){
this._hideNeedsOfflineCache();
if(dojox.off.hasOfflineCache==true&&dojox.off.browserRestart==true){
this._needsBrowserRestart();
return;
}else{
var _2d=dojo.byId("dot-widget-browser-restart");
if(_2d){
_2d.style.display="none";
}
}
this._updateSyncUI();
this._initMainEvtHandlers();
this._setOfflineEnabled(dojox.off.enabled);
this._testNet();
}
}
}
},_onSync:function(_2e){
switch(_2e){
case "start":
this._updateSyncUI();
break;
case "refreshFiles":
this._setSyncMessage("Downloading UI...");
break;
case "upload":
this._setSyncMessage("Uploading new data...");
break;
case "download":
this._setSyncMessage("Downloading new data...");
break;
case "finished":
this._syncFinished();
break;
case "cancel":
this._setSyncMessage("Canceling Sync...");
break;
default:
dojo.warn("Programming error: "+"Unknown sync type in dojox.off.ui: "+_2e);
break;
}
},_onNetwork:function(_2f){
if(!this._initialized){
return;
}
this._updateNetIndicator();
if(_2f=="offline"){
this._setSyncMessage("You are working offline");
var _30=dojo.byId("dot-sync-details");
if(_30){
_30.style.display="none";
}
this._updateSyncUI();
}else{
if(dojox.off.sync.autoSync){
if(dojo.isAIR){
window.setTimeout(function(){
dojox.off.sync.synchronize();
},1000);
}else{
window.setTimeout(dojox._scopeName+".off.sync.synchronize()",1000);
}
}
}
}});
dojo.connect(dojox.off,"onFrameworkEvent",dojox.off.ui,"_onFrameworkEvent");
dojo.connect(dojox.off,"onLoad",dojox.off.ui,dojox.off.ui._initialize);
}