Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / widget / FeedPortlet.js

History | View | Annotate | Download (6.73 KB)

1
/*
2
        Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3
        Available via Academic Free License >= 2.1 OR the modified BSD license.
4
        see: http://dojotoolkit.org/license for details
5
*/
6

    
7

    
8
if(!dojo._hasResource["dojox.widget.FeedPortlet"]){
9
dojo._hasResource["dojox.widget.FeedPortlet"]=true;
10
dojo.provide("dojox.widget.FeedPortlet");
11
dojo.require("dojox.widget.Portlet");
12
dojo.require("dijit.Tooltip");
13
dojo.require("dijit.form.TextBox");
14
dojo.require("dijit.form.Button");
15
dojo.require("dojox.data.GoogleFeedStore");
16
dojo.declare("dojox.widget.FeedPortlet",dojox.widget.Portlet,{local:false,maxResults:5,url:"",openNew:true,showFeedTitle:true,postCreate:function(){
17
this.inherited(arguments);
18
if(this.local&&!dojox.data.AtomReadStore){
19
throw Error(this.declaredClass+": To use local feeds, you must include dojox.data.AtomReadStore on the page.");
20
}
21
},onFeedError:function(){
22
this.containerNode.innerHTML="Error accessing the feed.";
23
},addChild:function(_1){
24
this.inherited(arguments);
25
var _2=_1.attr("feedPortletUrl");
26
if(_2){
27
this.set("url",_2);
28
}
29
},_getTitle:function(_3){
30
var t=this.store.getValue(_3,"title");
31
return this.local?t.text:t;
32
},_getLink:function(_4){
33
var l=this.store.getValue(_4,"link");
34
return this.local?l.href:l;
35
},_getContent:function(_5){
36
var c=this.store.getValue(_5,"summary");
37
if(!c){
38
return null;
39
}
40
if(this.local){
41
c=c.text;
42
}
43
c=c.split("<script").join("<!--").split("</script>").join("-->");
44
c=c.split("<iframe").join("<!--").split("</iframe>").join("-->");
45
return c;
46
},_setUrlAttr:function(_6){
47
this.url=_6;
48
if(this._started){
49
this.load();
50
}
51
},startup:function(){
52
if(this.started||this._started){
53
return;
54
}
55
this.inherited(arguments);
56
if(!this.url||this.url==""){
57
throw new Error(this.id+": A URL must be specified for the feed portlet");
58
}
59
if(this.url&&this.url!=""){
60
this.load();
61
}
62
},load:function(){
63
if(this._resultList){
64
dojo.destroy(this._resultList);
65
}
66
var _7,_8;
67
if(this.local){
68
_7=new dojox.data.AtomReadStore({url:this.url});
69
_8={};
70
}else{
71
_7=new dojox.data.GoogleFeedStore();
72
_8={url:this.url};
73
}
74
var _9={query:_8,count:this.maxResults,onComplete:dojo.hitch(this,function(_a){
75
if(this.showFeedTitle&&_7.getFeedValue){
76
var _b=this.store.getFeedValue("title");
77
if(_b){
78
this.set("title",_b.text?_b.text:_b);
79
}
80
}
81
this.generateResults(_a);
82
}),onError:dojo.hitch(this,"onFeedError")};
83
this.store=_7;
84
_7.fetch(_9);
85
},generateResults:function(_c){
86
var _d=this.store;
87
var _e;
88
var ul=(this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletList"},this.containerNode));
89
dojo.forEach(_c,dojo.hitch(this,function(_f){
90
var li=dojo.create("li",{innerHTML:"<a href=\""+this._getLink(_f)+"\""+(this.openNew?" target=\"_blank\"":"")+">"+this._getTitle(_f)+"</a>"},ul);
91
dojo.connect(li,"onmouseover",dojo.hitch(this,function(evt){
92
if(_e){
93
clearTimeout(_e);
94
}
95
_e=setTimeout(dojo.hitch(this,function(){
96
_e=null;
97
var _10=this._getContent(_f);
98
if(!_10){
99
return;
100
}
101
var _11="<div class=\"dojoxFeedPortletPreview\">"+_10+"</div>";
102
dojo.query("li",ul).forEach(function(_12){
103
if(_12!=evt.target){
104
dijit.hideTooltip(_12);
105
}
106
});
107
dijit.showTooltip(_11,li.firstChild,!this.isLeftToRight());
108
}),500);
109
}));
110
dojo.connect(li,"onmouseout",function(){
111
if(_e){
112
clearTimeout(_e);
113
_e=null;
114
}
115
dijit.hideTooltip(li.firstChild);
116
});
117
}));
118
this.resize();
119
}});
120
dojo.declare("dojox.widget.ExpandableFeedPortlet",dojox.widget.FeedPortlet,{onlyOpenOne:false,generateResults:function(_13){
121
var _14=this.store;
122
var _15="dojoxPortletToggleIcon";
123
var _16="dojoxPortletItemCollapsed";
124
var _17="dojoxPortletItemOpen";
125
var _18;
126
var ul=(this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletExpandableList"},this.containerNode));
127
dojo.forEach(_13,dojo.hitch(this,dojo.hitch(this,function(_19){
128
var li=dojo.create("li",{"class":_16},ul);
129
var _1a=dojo.create("div",{style:"width: 100%;"},li);
130
var _1b=dojo.create("div",{"class":"dojoxPortletItemSummary",innerHTML:this._getContent(_19)},li);
131
dojo.create("span",{"class":_15,innerHTML:"<img src='"+dojo.config.baseUrl+"/resources/blank.gif'>"},_1a);
132
var a=dojo.create("a",{href:this._getLink(_19),innerHTML:this._getTitle(_19)},_1a);
133
if(this.openNew){
134
dojo.attr(a,"target","_blank");
135
}
136
})));
137
dojo.connect(ul,"onclick",dojo.hitch(this,function(evt){
138
if(dojo.hasClass(evt.target,_15)||dojo.hasClass(evt.target.parentNode,_15)){
139
dojo.stopEvent(evt);
140
var li=evt.target.parentNode;
141
while(li.tagName!="LI"){
142
li=li.parentNode;
143
}
144
if(this.onlyOpenOne){
145
dojo.query("li",ul).filter(function(_1c){
146
return _1c!=li;
147
}).removeClass(_17).addClass(_16);
148
}
149
var _1d=dojo.hasClass(li,_17);
150
dojo.toggleClass(li,_17,!_1d);
151
dojo.toggleClass(li,_16,_1d);
152
}
153
}));
154
}});
155
dojo.declare("dojox.widget.PortletFeedSettings",dojox.widget.PortletSettings,{"class":"dojoxPortletFeedSettings",urls:null,selectedIndex:0,buildRendering:function(){
156
if(this.urls&&this.urls.length>0){
157
var s=dojo.create("select");
158
if(this.srcNodeRef){
159
dojo.place(s,this.srcNodeRef,"before");
160
dojo.destroy(this.srcNodeRef);
161
}
162
this.srcNodeRef=s;
163
dojo.forEach(this.urls,function(url){
164
dojo.create("option",{value:url.url||url,innerHTML:url.label||url},s);
165
});
166
}
167
if(this.srcNodeRef.tagName=="SELECT"){
168
this.text=this.srcNodeRef;
169
var div=dojo.create("div",{},this.srcNodeRef,"before");
170
div.appendChild(this.text);
171
this.srcNodeRef=div;
172
dojo.query("option",this.text).filter("return !item.value;").forEach("item.value = item.innerHTML");
173
if(!this.text.value){
174
dojo.attr(s||this.text,"value",this.text.options[this.selectedIndex].value);
175
}
176
}
177
this.inherited(arguments);
178
},postCreate:function(){
179
if(!this.text){
180
var _1e=this.text=new dijit.form.TextBox({});
181
dojo.create("span",{innerHTML:"Choose Url: "},this.domNode);
182
this.addChild(_1e);
183
}
184
this.addChild(new dijit.form.Button({label:"Load",onClick:dojo.hitch(this,function(){
185
this.portlet.attr("url",(this.text.tagName=="SELECT")?this.text.value:this.text.attr("value"));
186
if(this.text.tagName=="SELECT"){
187
dojo.some(this.text.options,dojo.hitch(this,function(opt,idx){
188
if(opt.selected){
189
this.set("selectedIndex",idx);
190
return true;
191
}
192
return false;
193
}));
194
}
195
this.toggle();
196
})}));
197
this.addChild(new dijit.form.Button({label:"Cancel",onClick:dojo.hitch(this,"toggle")}));
198
this.inherited(arguments);
199
},startup:function(){
200
if(this._started){
201
return;
202
}
203
this.inherited(arguments);
204
if(!this.portlet){
205
throw Error(this.declaredClass+": A PortletFeedSettings widget cannot exist without a Portlet.");
206
}
207
if(this.text.tagName=="SELECT"){
208
dojo.forEach(this.text.options,dojo.hitch(this,function(opt,_1f){
209
dojo.attr(opt,"selected",_1f==this.selectedIndex);
210
}));
211
}
212
var url=this.portlet.attr("url");
213
if(url){
214
if(this.text.tagName=="SELECT"){
215
if(!this.urls&&dojo.query("option[value='"+url+"']",this.text).length<1){
216
dojo.place(dojo.create("option",{value:url,innerHTML:url,selected:"true"}),this.text,"first");
217
}
218
}else{
219
this.text.attr("value",url);
220
}
221
}else{
222
this.portlet.attr("url",this.get("feedPortletUrl"));
223
}
224
},_getFeedPortletUrlAttr:function(){
225
return this.text.value;
226
}});
227
}