blob: 37e9d3cbd659c3a696078703f2eaf25b1308541b [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.widget.FeedPortlet"]){
dojo._hasResource["dojox.widget.FeedPortlet"]=true;
dojo.provide("dojox.widget.FeedPortlet");
dojo.require("dojox.widget.Portlet");
dojo.require("dijit.Tooltip");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.Button");
dojo.require("dojox.data.GoogleFeedStore");
dojo.declare("dojox.widget.FeedPortlet",dojox.widget.Portlet,{local:false,maxResults:5,url:"",openNew:true,showFeedTitle:true,postCreate:function(){
this.inherited(arguments);
if(this.local&&!dojox.data.AtomReadStore){
throw Error(this.declaredClass+": To use local feeds, you must include dojox.data.AtomReadStore on the page.");
}
},onFeedError:function(){
this.containerNode.innerHTML="Error accessing the feed.";
},addChild:function(_1){
this.inherited(arguments);
var _2=_1.attr("feedPortletUrl");
if(_2){
this.attr("url",_2);
}
},_getTitle:function(_3){
var t=this.store.getValue(_3,"title");
return this.local?t.text:t;
},_getLink:function(_4){
var l=this.store.getValue(_4,"link");
return this.local?l.href:l;
},_getContent:function(_5){
var c=this.store.getValue(_5,"summary");
if(!c){
return null;
}
if(this.local){
c=c.text;
}
c=c.split("<script").join("<!--").split("</script>").join("-->");
c=c.split("<iframe").join("<!--").split("</iframe>").join("-->");
return c;
},_setUrlAttr:function(_6){
this.url=_6;
if(this._started){
this.load();
}
},startup:function(){
if(this.started||this._started){
return;
}
this.inherited(arguments);
if(!this.url||this.url==""){
throw new Error(this.id+": A URL must be specified for the feed portlet");
}
if(this.url&&this.url!=""){
this.load();
}
},load:function(){
if(this._resultList){
dojo.destroy(this._resultList);
}
var _7,_8;
if(this.local){
_7=new dojox.data.AtomReadStore({url:this.url});
_8={};
}else{
_7=new dojox.data.GoogleFeedStore();
_8={url:this.url};
}
var _9={query:_8,count:this.maxResults,onComplete:dojo.hitch(this,function(_a){
if(this.showFeedTitle&&_7.getFeedValue){
var _b=this.store.getFeedValue("title");
if(_b){
this.attr("title",_b.text?_b.text:_b);
}
}
this.generateResults(_a);
}),onError:dojo.hitch(this,"onFeedError")};
this.store=_7;
_7.fetch(_9);
},generateResults:function(_c){
var _d=this.store;
var _e;
var ul=this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletList"},this.containerNode);
dojo.forEach(_c,dojo.hitch(this,function(_f){
var li=dojo.create("li",{innerHTML:"<a href=\""+this._getLink(_f)+"\""+(this.openNew?" target=\"_blank\"":"")+">"+this._getTitle(_f)+"</a>"},ul);
dojo.connect(li,"onmouseover",dojo.hitch(this,function(evt){
if(_e){
clearTimeout(_e);
}
_e=setTimeout(dojo.hitch(this,function(){
_e=null;
var _10=this._getContent(_f);
if(!_10){
return;
}
var _11="<div class=\"dojoxFeedPortletPreview\">"+_10+"</div>";
dojo.query("li",ul).forEach(function(_12){
if(_12!=evt.target){
dijit.hideTooltip(_12);
}
});
dijit.showTooltip(_11,li.firstChild);
}),500);
}));
dojo.connect(li,"onmouseout",function(){
if(_e){
clearTimeout(_e);
_e=null;
}
dijit.hideTooltip(li.firstChild);
});
}));
this.resize();
}});
dojo.declare("dojox.widget.ExpandableFeedPortlet",dojox.widget.FeedPortlet,{onlyOpenOne:false,generateResults:function(_13){
var _14=this.store;
var _15="dojoxPortletToggleIcon";
var _16="dojoxPortletItemCollapsed";
var _17="dojoxPortletItemOpen";
var _18;
var ul=this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletExpandableList"},this.containerNode);
dojo.forEach(_13,dojo.hitch(this,dojo.hitch(this,function(_19){
var li=dojo.create("li",{"class":_16},ul);
var _1a=dojo.create("div",{style:"width: 100%;"},li);
var _1b=dojo.create("div",{"class":"dojoxPortletItemSummary",innerHTML:this._getContent(_19)},li);
dojo.create("span",{"class":_15,innerHTML:"<img src='"+dojo.config.baseUrl+"/resources/blank.gif'>"},_1a);
var a=dojo.create("a",{href:this._getLink(_19),innerHTML:this._getTitle(_19)},_1a);
if(this.openNew){
dojo.attr(a,"target","_blank");
}
})));
dojo.connect(ul,"onclick",dojo.hitch(this,function(evt){
if(dojo.hasClass(evt.target,_15)||dojo.hasClass(evt.target.parentNode,_15)){
dojo.stopEvent(evt);
var li=evt.target.parentNode;
while(li.tagName!="LI"){
li=li.parentNode;
}
if(this.onlyOpenOne){
dojo.query("li",ul).filter(function(_1c){
return _1c!=li;
}).removeClass(_17).addClass(_16);
}
var _1d=dojo.hasClass(li,_17);
dojo.toggleClass(li,_17,!_1d);
dojo.toggleClass(li,_16,_1d);
}
}));
}});
dojo.declare("dojox.widget.PortletFeedSettings",dojox.widget.PortletSettings,{"class":"dojoxPortletFeedSettings",urls:null,selectedIndex:0,buildRendering:function(){
if(this.urls&&this.urls.length>0){
var s=dojo.create("select");
if(this.srcNodeRef){
dojo.place(s,this.srcNodeRef,"before");
dojo.destroy(this.srcNodeRef);
}
this.srcNodeRef=s;
dojo.forEach(this.urls,function(url){
dojo.create("option",{value:url.url||url,innerHTML:url.label||url},s);
});
}
if(this.srcNodeRef.tagName=="SELECT"){
this.text=this.srcNodeRef;
var div=dojo.create("div",{},this.srcNodeRef,"before");
div.appendChild(this.text);
this.srcNodeRef=div;
dojo.query("option",this.text).filter("return !item.value;").forEach("item.value = item.innerHTML");
if(!this.text.value){
dojo.attr(s||this.text,"value",this.text.options[this.selectedIndex].value);
}
}
this.inherited(arguments);
},postCreate:function(){
if(!this.text){
var _1e=this.text=new dijit.form.TextBox({});
dojo.create("span",{innerHTML:"Choose Url: "},this.domNode);
this.addChild(_1e);
}
this.addChild(new dijit.form.Button({label:"Load",onClick:dojo.hitch(this,function(){
this.portlet.attr("url",(this.text.tagName=="SELECT")?this.text.value:this.text.attr("value"));
if(this.text.tagName=="SELECT"){
dojo.some(this.text.options,dojo.hitch(this,function(opt,idx){
if(opt.selected){
this.attr("selectedIndex",idx);
return true;
}
return false;
}));
}
this.toggle();
})}));
this.addChild(new dijit.form.Button({label:"Cancel",onClick:dojo.hitch(this,"toggle")}));
this.inherited(arguments);
},startup:function(){
if(this._started){
return;
}
this.inherited(arguments);
if(!this.portlet){
throw Error(this.declaredClass+": A PortletFeedSettings widget cannot exist without a Portlet.");
}
if(this.text.tagName=="SELECT"){
dojo.forEach(this.text.options,dojo.hitch(this,function(opt,_1f){
dojo.attr(opt,"selected",_1f==this.selectedIndex);
}));
}
var url=this.portlet.attr("url");
if(url){
if(this.text.tagName=="SELECT"){
if(!this.urls&&dojo.query("option[value='"+url+"']",this.text).length<1){
dojo.place(dojo.create("option",{value:url,innerHTML:url,selected:"true"}),this.text,"first");
}
}else{
this.text.attr("value",url);
}
}else{
this.portlet.attr("url",this.attr("feedPortletUrl"));
}
},_getFeedPortletUrlAttr:function(){
return this.text.value;
}});
}