blob: 61fc72fc42ceddbad4c7311755822a4e5554d710 [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.atom.widget.FeedViewer"]){
dojo._hasResource["dojox.atom.widget.FeedViewer"]=true;
dojo.provide("dojox.atom.widget.FeedViewer");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dijit._Container");
dojo.require("dojox.atom.io.Connection");
dojo.requireLocalization("dojox.atom.widget","FeedViewerEntry",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
dojo.experimental("dojox.atom.widget.FeedViewer");
dojo.declare("dojox.atom.widget.FeedViewer",[dijit._Widget,dijit._Templated,dijit._Container],{feedViewerTableBody:null,feedViewerTable:null,entrySelectionTopic:"",url:"",xmethod:false,localSaveOnly:false,templateString:dojo.cache("dojox.atom","widget/templates/FeedViewer.html","<div class=\"feedViewerContainer\" dojoAttachPoint=\"feedViewerContainerNode\">\n\t<table cellspacing=\"0\" cellpadding=\"0\" class=\"feedViewerTable\">\n\t\t<tbody dojoAttachPoint=\"feedViewerTableBody\" class=\"feedViewerTableBody\">\n\t\t</tbody>\n\t</table>\n</div>\n"),_feed:null,_currentSelection:null,_includeFilters:null,alertsEnabled:false,postCreate:function(){
this._includeFilters=[];
if(this.entrySelectionTopic!==""){
this._subscriptions=[dojo.subscribe(this.entrySelectionTopic,this,"_handleEvent")];
}
this.atomIO=new dojox.atom.io.Connection();
this.childWidgets=[];
},startup:function(){
this.containerNode=this.feedViewerTableBody;
var _1=this.getDescendants();
for(var i in _1){
var _2=_1[i];
if(_2&&_2.isFilter){
this._includeFilters.push(new dojox.atom.widget.FeedViewer.CategoryIncludeFilter(_2.scheme,_2.term,_2.label));
_2.destroy();
}
}
if(this.url!==""){
this.setFeedFromUrl(this.url);
}
},clear:function(){
this.destroyDescendants();
},setFeedFromUrl:function(_3){
if(_3!==""){
if(this._isRelativeURL(_3)){
var _4="";
if(_3.charAt(0)!=="/"){
_4=this._calculateBaseURL(window.location.href,true);
}else{
_4=this._calculateBaseURL(window.location.href,false);
}
this.url=_4+_3;
}
this.atomIO.getFeed(_3,dojo.hitch(this,this.setFeed));
}
},setFeed:function(_5){
this._feed=_5;
this.clear();
var _6=function(a,b){
var _7=this._displayDateForEntry(a);
var _8=this._displayDateForEntry(b);
if(_7>_8){
return -1;
}
if(_7<_8){
return 1;
}
return 0;
};
var _9=function(_a){
var _b=_a.split(",");
_b.pop();
return _b.join(",");
};
var _c=_5.entries.sort(dojo.hitch(this,_6));
if(_5){
var _d=null;
for(var i=0;i<_c.length;i++){
var _e=_c[i];
if(this._isFilterAccepted(_e)){
var _f=this._displayDateForEntry(_e);
var _10="";
if(_f!==null){
_10=_9(_f.toLocaleString());
if(_10===""){
_10=""+(_f.getMonth()+1)+"/"+_f.getDate()+"/"+_f.getFullYear();
}
}
if((_d===null)||(_d!=_10)){
this.appendGrouping(_10);
_d=_10;
}
this.appendEntry(_e);
}
}
}
},_displayDateForEntry:function(_11){
if(_11.updated){
return _11.updated;
}
if(_11.modified){
return _11.modified;
}
if(_11.issued){
return _11.issued;
}
return new Date();
},appendGrouping:function(_12){
var _13=new dojox.atom.widget.FeedViewerGrouping({});
_13.setText(_12);
this.addChild(_13);
this.childWidgets.push(_13);
},appendEntry:function(_14){
var _15=new dojox.atom.widget.FeedViewerEntry({"xmethod":this.xmethod});
_15.setTitle(_14.title.value);
_15.setTime(this._displayDateForEntry(_14).toLocaleTimeString());
_15.entrySelectionTopic=this.entrySelectionTopic;
_15.feed=this;
this.addChild(_15);
this.childWidgets.push(_15);
this.connect(_15,"onClick","_rowSelected");
_14.domNode=_15.entryNode;
_14._entryWidget=_15;
_15.entry=_14;
},deleteEntry:function(_16){
if(!this.localSaveOnly){
this.atomIO.deleteEntry(_16.entry,dojo.hitch(this,this._removeEntry,_16),null,this.xmethod);
}else{
this._removeEntry(_16,true);
}
dojo.publish(this.entrySelectionTopic,[{action:"delete",source:this,entry:_16.entry}]);
},_removeEntry:function(_17,_18){
if(_18){
var idx=dojo.indexOf(this.childWidgets,_17);
var _19=this.childWidgets[idx-1];
var _1a=this.childWidgets[idx+1];
if(_19.declaredClass==="dojox.atom.widget.FeedViewerGrouping"&&(_1a===undefined||_1a.declaredClass==="dojox.atom.widget.FeedViewerGrouping")){
_19.destroy();
}
_17.destroy();
}else{
}
},_rowSelected:function(evt){
var _1b=evt.target;
while(_1b){
if(_1b.attributes){
var _1c=_1b.attributes.getNamedItem("widgetid");
if(_1c&&_1c.value.indexOf("FeedViewerEntry")!=-1){
break;
}
}
_1b=_1b.parentNode;
}
for(var i=0;i<this._feed.entries.length;i++){
var _1d=this._feed.entries[i];
if((_1b===_1d.domNode)&&(this._currentSelection!==_1d)){
dojo.addClass(_1d.domNode,"feedViewerEntrySelected");
dojo.removeClass(_1d._entryWidget.timeNode,"feedViewerEntryUpdated");
dojo.addClass(_1d._entryWidget.timeNode,"feedViewerEntryUpdatedSelected");
this.onEntrySelected(_1d);
if(this.entrySelectionTopic!==""){
dojo.publish(this.entrySelectionTopic,[{action:"set",source:this,feed:this._feed,entry:_1d}]);
}
if(this._isEditable(_1d)){
_1d._entryWidget.enableDelete();
}
this._deselectCurrentSelection();
this._currentSelection=_1d;
break;
}else{
if((_1b===_1d.domNode)&&(this._currentSelection===_1d)){
dojo.publish(this.entrySelectionTopic,[{action:"delete",source:this,entry:_1d}]);
this._deselectCurrentSelection();
break;
}
}
}
},_deselectCurrentSelection:function(){
if(this._currentSelection){
dojo.addClass(this._currentSelection._entryWidget.timeNode,"feedViewerEntryUpdated");
dojo.removeClass(this._currentSelection.domNode,"feedViewerEntrySelected");
dojo.removeClass(this._currentSelection._entryWidget.timeNode,"feedViewerEntryUpdatedSelected");
this._currentSelection._entryWidget.disableDelete();
this._currentSelection=null;
}
},_isEditable:function(_1e){
var _1f=false;
if(_1e&&_1e!==null&&_1e.links&&_1e.links!==null){
for(var x in _1e.links){
if(_1e.links[x].rel&&_1e.links[x].rel=="edit"){
_1f=true;
break;
}
}
}
return _1f;
},onEntrySelected:function(_20){
},_isRelativeURL:function(url){
var _21=function(url){
var _22=false;
if(url.indexOf("file://")===0){
_22=true;
}
return _22;
};
var _23=function(url){
var _24=false;
if(url.indexOf("http://")===0){
_24=true;
}
return _24;
};
var _25=false;
if(url!==null){
if(!_21(url)&&!_23(url)){
_25=true;
}
}
return _25;
},_calculateBaseURL:function(_26,_27){
var _28=null;
if(_26!==null){
var _29=_26.indexOf("?");
if(_29!=-1){
_26=_26.substring(0,_29);
}
if(_27){
_29=_26.lastIndexOf("/");
if((_29>0)&&(_29<_26.length)&&(_29!==(_26.length-1))){
_28=_26.substring(0,(_29+1));
}else{
_28=_26;
}
}else{
_29=_26.indexOf("://");
if(_29>0){
_29=_29+3;
var _2a=_26.substring(0,_29);
var _2b=_26.substring(_29,_26.length);
_29=_2b.indexOf("/");
if((_29<_2b.length)&&(_29>0)){
_28=_2a+_2b.substring(0,_29);
}else{
_28=_2a+_2b;
}
}
}
}
return _28;
},_isFilterAccepted:function(_2c){
var _2d=false;
if(this._includeFilters&&(this._includeFilters.length>0)){
for(var i=0;i<this._includeFilters.length;i++){
var _2e=this._includeFilters[i];
if(_2e.match(_2c)){
_2d=true;
break;
}
}
}else{
_2d=true;
}
return _2d;
},addCategoryIncludeFilter:function(_2f){
if(_2f){
var _30=_2f.scheme;
var _31=_2f.term;
var _32=_2f.label;
var _33=true;
if(!_30){
_30=null;
}
if(!_31){
_30=null;
}
if(!_32){
_30=null;
}
if(this._includeFilters&&this._includeFilters.length>0){
for(var i=0;i<this._includeFilters.length;i++){
var _34=this._includeFilters[i];
if((_34.term===_31)&&(_34.scheme===_30)&&(_34.label===_32)){
_33=false;
break;
}
}
}
if(_33){
this._includeFilters.push(dojox.atom.widget.FeedViewer.CategoryIncludeFilter(_30,_31,_32));
}
}
},removeCategoryIncludeFilter:function(_35){
if(_35){
var _36=_35.scheme;
var _37=_35.term;
var _38=_35.label;
if(!_36){
_36=null;
}
if(!_37){
_36=null;
}
if(!_38){
_36=null;
}
var _39=[];
if(this._includeFilters&&this._includeFilters.length>0){
for(var i=0;i<this._includeFilters.length;i++){
var _3a=this._includeFilters[i];
if(!((_3a.term===_37)&&(_3a.scheme===_36)&&(_3a.label===_38))){
_39.push(_3a);
}
}
this._includeFilters=_39;
}
}
},_handleEvent:function(_3b){
if(_3b.source!=this){
if(_3b.action=="update"&&_3b.entry){
var evt=_3b;
if(!this.localSaveOnly){
this.atomIO.updateEntry(evt.entry,dojo.hitch(evt.source,evt.callback),null,true);
}
this._currentSelection._entryWidget.setTime(this._displayDateForEntry(evt.entry).toLocaleTimeString());
this._currentSelection._entryWidget.setTitle(evt.entry.title.value);
}else{
if(_3b.action=="post"&&_3b.entry){
if(!this.localSaveOnly){
this.atomIO.addEntry(_3b.entry,this.url,dojo.hitch(this,this._addEntry));
}else{
this._addEntry(_3b.entry);
}
}
}
}
},_addEntry:function(_3c){
this._feed.addEntry(_3c);
this.setFeed(this._feed);
dojo.publish(this.entrySelectionTopic,[{action:"set",source:this,feed:this._feed,entry:_3c}]);
},destroy:function(){
this.clear();
dojo.forEach(this._subscriptions,dojo.unsubscribe);
}});
dojo.declare("dojox.atom.widget.FeedViewerEntry",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.atom","widget/templates/FeedViewerEntry.html","<tr class=\"feedViewerEntry\" dojoAttachPoint=\"entryNode\" dojoAttachEvent=\"onclick:onClick\">\n <td class=\"feedViewerEntryUpdated\" dojoAttachPoint=\"timeNode\">\n </td>\n <td>\n <table border=\"0\" width=\"100%\" dojoAttachPoint=\"titleRow\">\n <tr padding=\"0\" border=\"0\">\n <td class=\"feedViewerEntryTitle\" dojoAttachPoint=\"titleNode\">\n </td>\n <td class=\"feedViewerEntryDelete\" align=\"right\">\n <span dojoAttachPoint=\"deleteButton\" dojoAttachEvent=\"onclick:deleteEntry\" class=\"feedViewerDeleteButton\" style=\"display:none;\">[delete]</span>\n </td>\n <tr>\n </table>\n </td>\n</tr>\n"),entryNode:null,timeNode:null,deleteButton:null,entry:null,feed:null,postCreate:function(){
var _3d=dojo.i18n.getLocalization("dojox.atom.widget","FeedViewerEntry");
this.deleteButton.innerHTML=_3d.deleteButton;
},setTitle:function(_3e){
if(this.titleNode.lastChild){
this.titleNode.removeChild(this.titleNode.lastChild);
}
var _3f=document.createElement("div");
_3f.innerHTML=_3e;
this.titleNode.appendChild(_3f);
},setTime:function(_40){
if(this.timeNode.lastChild){
this.timeNode.removeChild(this.timeNode.lastChild);
}
var _41=document.createTextNode(_40);
this.timeNode.appendChild(_41);
},enableDelete:function(){
if(this.deleteButton!==null){
this.deleteButton.style.display="inline";
}
},disableDelete:function(){
if(this.deleteButton!==null){
this.deleteButton.style.display="none";
}
},deleteEntry:function(_42){
_42.preventDefault();
_42.stopPropagation();
this.feed.deleteEntry(this);
},onClick:function(e){
}});
dojo.declare("dojox.atom.widget.FeedViewerGrouping",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.atom","widget/templates/FeedViewerGrouping.html","<tr dojoAttachPoint=\"groupingNode\" class=\"feedViewerGrouping\">\n\t<td colspan=\"2\" dojoAttachPoint=\"titleNode\" class=\"feedViewerGroupingTitle\">\n\t</td>\n</tr>\n"),groupingNode:null,titleNode:null,setText:function(_43){
if(this.titleNode.lastChild){
this.titleNode.removeChild(this.titleNode.lastChild);
}
var _44=document.createTextNode(_43);
this.titleNode.appendChild(_44);
}});
dojo.declare("dojox.atom.widget.AtomEntryCategoryFilter",[dijit._Widget,dijit._Templated],{scheme:"",term:"",label:"",isFilter:true});
dojo.declare("dojox.atom.widget.FeedViewer.CategoryIncludeFilter",null,{constructor:function(_45,_46,_47){
this.scheme=_45;
this.term=_46;
this.label=_47;
},match:function(_48){
var _49=false;
if(_48!==null){
var _4a=_48.categories;
if(_4a!==null){
for(var i=0;i<_4a.length;i++){
var _4b=_4a[i];
if(this.scheme!==""){
if(this.scheme!==_4b.scheme){
break;
}
}
if(this.term!==""){
if(this.term!==_4b.term){
break;
}
}
if(this.label!==""){
if(this.label!==_4b.label){
break;
}
}
_49=true;
}
}
}
return _49;
}});
}