dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
131 lines (115 loc) • 3.22 kB
JavaScript
define([
"dojo/_base/declare",
"dojo/_base/Deferred",
"dojo/_base/lang",
"dojo/_base/window",
"dojo/_base/xhr",
"./_ExecScriptMixin",
"./ProgressIndicator",
"./lazyLoadUtils"
], function(declare, Deferred, lang, win, xhr, ExecScriptMixin, ProgressIndicator, lazyLoadUtils){
// module:
// dojox/mobile/_ContentPaneMixin
return declare("dojox.mobile._ContentPaneMixin", ExecScriptMixin, {
// summary:
// Mixin for a very simple content pane to embed an HTML fragment.
// description:
// By mixing this class into a widget, the widget can have the ability
// to embed an external HTML fragment and to run the parser.
// href: String
// URL of the content to embed.
href: "",
// lazy: String
// If true, external content specified with the href property is
// not loaded at startup time. It can be loaded by calling load().
lazy: false,
// content: String
// An HTML fragment to embed.
content: "",
// parseOnLoad: Boolean
// If true, runs the parser when the load completes.
parseOnLoad: true,
// prog: Boolean
// If true, shows progress indicator while loading an HTML fragment
// specified by href.
prog: true,
// executeScripts: Boolean
// If true, executes scripts that is found in the content.
executeScripts: true,
constructor: function(){
// summary:
// Creates a new instance of the class.
// tags:
// private
if(this.prog){
this._p = ProgressIndicator.getInstance();
}
},
loadHandler: function(/*String*/response){
// summary:
// A handler called when load completes.
this.set("content", response);
},
errorHandler: function(err){
// summary:
// An error handler called when load fails.
if(this._p){ this._p.stop(); }
},
load: function(){
// summary:
// Loads external content specified with href.
this.lazy = false;
this.set("href", this.href);
},
onLoad: function(){
// summary:
// Stub method to allow the application to connect to the
// loading of external content (see load()).
// Called when parsing is done and the content is ready.
return true;
},
_setHrefAttr: function(/*String*/href){
// tags:
// private
if(this.lazy || !href || href === this._loaded){
this.lazy = false;
return null;
}
var p = this._p;
if(p){
win.body().appendChild(p.domNode);
p.start();
}
this._set("href", href);
this._loaded = href;
return xhr.get({
url: href,
handleAs: "text",
load: lang.hitch(this, "loadHandler"),
error: lang.hitch(this, "errorHandler")
});
},
_setContentAttr: function(/*String|DomNode*/data){
// tags:
// private
this.destroyDescendants();
if(typeof data === "object"){
this.containerNode.appendChild(data);
}else{
if(this.executeScripts){
data = this.execScript(data);
}
this.containerNode.innerHTML = data;
}
if(this.parseOnLoad){
var _this = this;
return Deferred.when(lazyLoadUtils.instantiateLazyWidgets(_this.containerNode), function(){
if(_this._p){ _this._p.stop(); }
return _this.onLoad();
});
}
if(this._p){ this._p.stop(); }
return this.onLoad();
}
});
});