leimnud.Package.Public({ info :{ Class :"maborak", File :"module.rss.js", Name :"rss", Type :"module", Version :"0.2" }, content :function(){ this.make=function(options) { options = options || {}; this.modes = ["remote","local"]; this.options = { mode:(this.modes.inArray((options.mode || "remote"))?options.mode:"local") }; this.options = (this.options.mode=="remote" || options.openFeed)?{ rpc :"json", mode :"remote", fileJson:this.parent.info.base+"data/maborak.module.rss.feeds.json", proxy :this.parent.info.base+"server/maborak.module.rss.php" }:{ mode :"local", rpc :"xmlhttp", proxy :"server/maborak.module.rss.php", fileJson :"data/maborak.module.rss.feeds.json" }.concatMaborak(this.options); this.options = this.options.concatMaborak({ fromObject:false, theme :"gray", multiple :true, Default :0, target :document.body, toolbar :true, saveDataIn:"json", /*Support: cookie,json*/ cookieFeed:"maborak.module.rss.feeds", width :250, inline :false, title :"Rss Reader", feed :[] }).concatMaborak(options || {}).concatMaborak({ multiple :((this.options.openFeed)?false:true) }); this.options.target=this.setTarget(); this.driverRPC = ["xmlhttp","json"]; this.options.rpc = (this.driverRPC.inArray(this.options.rpc))?this.options.rpc:"xmlhttp"; this.elements={ interface:{}, rootItems:[], items:[] }; var tg = new DOM('div',{ className:"module_rss_container___"+this.options.theme },{width:this.options.width}); this.options.feed = (!this.options.feed.isArray)?[this.options.feed]:this.options.feed; $(this.options.target).append(tg); this.options.target = tg; if(this.options.saveDataIn=="cookie") { this.options.feed = this.options.feed.concat((this.parent.cookie.get(this.options.cookieFeed) || "[]").parseJSON()); return this.beforeLoad(); } else if(this.options.saveDataIn=="json") { this.message("Loading feeds......"); if(this.options.openFeed) { this.options.feed = [ {url:this.options.openFeed,proxy:true} ]; this.clearMessage(); return this.beforeLoad(); } else { var r = new this.parent.module.rpc[this.options.rpc]({ method :"GET", // debug :true, url :this.options.fileJson }); r.callback=function(rpc) { try{ var ed = rpc[this.options.rpc].responseText.parseJSON(); var f = ed.feeds || []; } catch(e) { var ed = {category:["General"],feeds:[]}; var f = ed.feeds; } this.categoryArray=(ed.category && ed.category.isArray && ed.category.length>0)?ed.category:["General"]; this.options.feed = this.options.feed.concat(f || []); this.clearMessage(); return this.beforeLoad(); }.extend(this); r.make(); } } }; this.setTarget=function() { if(this.options.inline===true) { var rnd ="rss_"+new Date().getTime(); document.write("
"); return $(rnd); } else { return this.options.target; } }; this.beforeLoad=function() { if(this.options.fromObject) { this.show(this.options.fromObject); } else { this.renderHeader(); this.load(this.options.Default); } return true; }; this.reload=function() { this.load(this.current); return false; }; this.load=function(feedIndex) { this.lock(); this.clear(); if(this.options.feed.length===0){ this.message("No se registraron Feeds."); return false; } this.clearMessage(); this.message("Loading...."); this.current = feedIndex; var feed= this.options.feed[feedIndex]; var url = (this.options.mode=="local" && feed.proxy===true)?this.options.proxy || feed.url:feed.url; var rpc = new this.parent.module.rpc[this.options.rpc]({ url : url, method : ((this.options.mode=="local")?"POST":"GET"), args : ((feed.proxy && this.options.mode==='local')?"action=proxy&url="+encodeURIComponent(feed.url):"") }); rpc.callback = function(rpc) { this.clearMessage(); this.feedArray = this.feedXmlToObject(rpc[this.options.rpc].responseXML); this.renderItems(this.feedArray); this.unlock(); }.extend(this); rpc.make(); }; this.feedXmlToObject=function(DOMDocument) { var p = DOMDocument; var atom = this.tag(p,'feed',0); var rss = this.tag(p,'rss',0); var rdf = this.tag(p,'RDF',0); this.type = ((rss || rdf) && !atom)?"rss":((atom && !rss)?"atom":"error"); var channel = (this.type=='atom')?atom:this.tag(rss,'channel',0); var f = { title : (this.tag(channel,'title',0,true) || '').escapeHTML(), description : (this.tag(channel,'description',0,true) || '').stripScript(), language : (this.tag(channel,'language',0,true) || 'en').escapeHTML(), generator : (this.tag(channel,'generator',0,true) || 'text').escapeHTML(), lastBuildDate : this.tag(channel,'lastBuildDate',0,true) || new Date(), author : (this.tag(channel,'author',0,true) || '').escapeHTML(), email : (this.tag(channel,'email',0,true) || '').escapeHTML(), item : [] }; var items = this.tag((rdf)?rdf:channel,(this.type=='rss')?'item':'entry'); for(var i=0;iPublished date: "+feedItem.pubDate}), description = new DOM('div',{className:"module_rss_itemDescription___"+this.options.theme,innerHTML:feedItem.description || "
"}), hr = new DOM('hr' ,{className:"module_rss_itemHr___"+this.options.theme}), content = new DOM('div',{className:"module_rss_itemContent___"+this.options.theme,innerHTML:feedItem.content || "
"}), link = new DOM('div',{className:"module_rss_itemLink___"+this.options.theme}).append( new button("Save").disable(), new button("Read",function(evt,button,i){ var ln = (this.parent.browser.isIE)?button:i; var link = this.feedArray.item[ln].link; window.open(link); }.extend(this,i),false,{title:"Read more"}), new button("Send",this.send.args(i)) ) ); var header,title,buttons,item; this.options.target.appendChild(item = new DOM('div',{ className:"module_rss_item___"+this.options.theme+" "+(((i+1)==Obj.item.length)?"module_rss_itemLast___"+this.options.theme:"") }).append( header = new DOM('div',{ className:"module_rss_itemHeader___"+this.options.theme, title :"Published date: "+feedItem.pubDate, onmouseover:function(){ this.className=this.className+" module_rss_itemOver"; }, onmouseout:function() { this.className=this.className.split(" ")[0]; } }).append( title = new DOM('div',{ className:"module_rss_itemTitle___"+this.options.theme+((feedItem.readed)?" module_rss_itemReaded___"+this.options.theme:""), innerHTML:(i+1)+".- "+feedItem.title }), buttons = new DOM('div',{className:"module_rss_itemButtons___"+this.options.theme}).append( ) ), container ) ); //console.info((itemPubDate.clientHeight)+":"+(content.clientHeight)+":"+(description.clientHeight)+":"+(link.clientHeight)); var contentHeight = ((itemPubDate.clientHeight)+(description.clientHeight)+(hr.clientHeight)+(content.clientHeight)+(link.clientHeight)); this.parent.dom.setStyle(container,{ display:"none", overflow:((contentHeight>3)?"auto":"hidden") }); contentHeight = (contentHeight>300)?300:contentHeight; header.onmouseup=function(evt,data) { data = (this.parent.browser.isIE)?evt:data; return this.show(data.index); }.extend(this,{index:i}); this.elements.rootItems.push(item); this.elements.items.push({ title :title, container :container, height :contentHeight }); } }; this.show=function(item) { if(this.inprogress){return false;} this.inprogress=true; data = this.elements.items[item]; var title = data.title; var container = data.container; var visible = (container.style.display=="none")?false:true; if(!visible) { container.setStyle({ height:1, display:"" }); this.setReaded(item); title.setStyle({fontWeight:"bold"}); new this.parent.module.fx.algorithm().make({ duration : 500, begin : container.clientHeight, transition : "sineInOut", end : data.height, onTransition: function(fx){ this.parent.dom.setStyle(container,{ height:fx.result }); }.extend(this), onFinish:function(fx) { this.parent.dom.setStyle(container,{ height:fx.end }); this.inprogress=false; }.extend(this) }); } else { new this.parent.module.fx.algorithm().make({ duration : 500, begin : container.clientHeight, transition : "sineOut", end : 4, onTransition: function(fx){ this.parent.dom.setStyle(container,{ height:fx.result }); }.extend(this), onFinish:function(fx) { this.parent.dom.setStyle(container,{ height:fx.end, display:"none" }); this.parent.dom.setStyle(title,{ fontWeight:"normal" }); this.inprogress=false; }.extend(this) }); } return false; }; this.lock=function() { if(this.options.multiple) { this.elements.feedSelector.disabled=true; } if(this.options.toolbar) { this.elements.interface.details.disable(); this.elements.interface.reload.disable(); } }; this.unlock=function() { if(this.options.multiple) { this.elements.feedSelector.disabled=false; } if(this.options.toolbar) { this.elements.interface.details.enable(); this.elements.interface.reload.enable(); } }; this.showDetails=function() { var myPanel=new leimnud.module.panel(); myPanel.options={ size:{w:300,h:370}, position:{x:0,y:0,center:true}, title:"", theme:"processmaker", control:{ resize:false }, fx:{ modal:true, opacity:false }, statusBar:false }; myPanel.setStyle={ content:{padding:2,background:"transparent",borderWidth:0} }; myPanel.make(); var gridCity = new leimnud.module.grid(); gridCity.make({ target :myPanel.elements.content, theme :"gray", search :false, title :"Feed: "+(this.options.feed[this.current].title || this.options.feed[this.current].url), noPaginator:true, data :{ column:[ { title:"Properties", type:"text", width:"40%", style:{ fontWeight:"bold" }, styleValues:{ textAlign:"right", border:"1px solid #AAA" } }, { title : "Value", type : "text", style:{ fontWeight:"bold" },styleValues:{ border:"1px solid #AAA" }, width : "60%" } ], rows:[ { data:[{value:"Items"},{value:this.feedArray.item.length}] }, {data:[{value:"Title"},{value:this.feedArray.title || ""}]}, {data:[{value:"Description"},{value:this.feedArray.description || ""}]}, {data:[{value:"Author"},{value:this.feedArray.author || ""}]}, {data:[{value:"Email"},{value:this.feedArray.email || ""}]}, {data:[{value:"Language"},{value:this.feedArray.language || ""}]}, {data:[{value:"Generator"},{value:this.feedArray.generator || ""}]}, {data:[{value:"Last update"},{value:this.feedArray.lastUpdate || ""}]}, {data:[{value:"Feed url"},{value:"URL" || ""}]} ] } }); }; this.addFeed=function(obj) { var index = this.options.feed.length; if(this.options.saveDataIn=="cookie") { var added = (this.parent.cookie.get(this.options.cookieFeed) || "[]").parseJSON(); added.push(obj); this.parent.cookie.set(this.options.cookieFeed,added.toJSONString()); } else if(this.options.saveDataIn=="json") { this.elements.interface.add.disable(); var ojs = encodeURIComponent(obj.toJSONString()); //console.info(ojs); var r = new this.parent.module.rpc[this.options.rpc]({ method :"POST", url :this.options.proxy, args :"action=add&data="+ojs }); r.callback=function(rpc){ try { var result = rpc[this.options.rpc].responseText.parseJSON(); } catch(e) { var result = {ok:"Error read/write json"}; } if(result.ok!=="ok") { new this.parent.module.app.alert().make({label:""+this.options.fileJson+"
"+result}); } this.elements.interface.add.enable(); }.extend(this); r.make(); } this.options.feed.push(obj); var fls = this.elements.feedSelector.options; fls[fls.length] = new Option((fls.length+1)+".- "+(obj.title),index,true); /* this.elements.feedSelector.append( new Option(obj.title,index,true) );*/ this.load(index); }; this.send=function(evt,b,index) { index = (this.parent.browser.isIE)?b:index; new this.parent.module.app.prompt().make({ label:"Email address:", action:function(value) { var f = this.feedArray.item[index]; var c = f.content || ""+f.description || ""; var l = f.link; var ft= this.feedArray.title; var r = new this.parent.module.rpc[this.options.rpc]({ url :this.options.proxy, method :((this.options.mode=="remote")?"GET":"POST"), args :"action=sendmail&to="+value.trim()+"&subject="+encodeURIComponent(f.title)+"&content="+encodeURIComponent(c)+"&link="+encodeURIComponent(l)+"&feed="+encodeURIComponent(ft) }); r.callback=function(){ /*new this.parent.module.app.alert().make({label:"Success"});*/ }.extend(this); r.make(); }.extend(this) }); }; this.open=function() { var myPanel=new leimnud.module.panel(); myPanel.options={ size:{w:330,h:155}, position:{x:0,y:0,center:true}, title:"Add New feed", theme:"processmaker", statusBarButtons:[ {value:"Test Feed"}, {value:"Add Feed"}, {value:"Reset"}, {value:"Cancel"} ], control:{ resize:false }, fx:{ modal:true, opacity:false }, statusBar:true }; myPanel.setStyle={ content:{padding:10,background:"transparent",borderWidth:0,overflow:"hidden"} }; myPanel.make(); var table = $dce("table"); myPanel.addContent(table); table.className="app_grid_table___"+this.options.theme; var url,title,probe; $(table).append( new DOM('tbody').append( new DOM('tr').append( new DOM('td',{innerHTML:"Url:"},{width:"25%",textAlign:"right"}), new DOM('td',false,{width:"75%",padding:1}).append( url = new input(false,{width:"100%"}) ) ), new DOM('tr').append( new DOM('td',{innerHTML:"Title:"},{textAlign:"right"}), new DOM('td',false,{padding:1}).append( title = new input(false,{width:"100%"}) ) ), new DOM('tr').append( new DOM('td',{innerHTML:"Category:"},{textAlign:"right"}), new DOM('td',false,{padding:1}).append( category = new this.parent.module.dom.select({ data :this.categoryArray.toSelect().concat([{value:"new",text:"--- New category ---"}]), properties:{onchange:function(){ //alert(category.options[category.selectedIndex].value) if(category.selected().value==="new") { new leimnud.module.app.prompt().make({ label:"Category name:", action:function(val) { //category.clear(); this.categoryArray.push(val); category.addOption({ text :val, value :this.categoryArray.length, key :(category.options.length-1), selected:true }); }.extend(this), cancel:function() { category.selectedIndex=0; } }); } else { } }.extend(this)}, style:{marginLeft:2} }) ) ), new DOM('tr').append( probe = new DOM('td',{innerHTML:"",colSpan:2},{textAlign:"center",padding:1}) ) ) ); var but0 = myPanel.elements.statusBarButtons[0]; var but1 = myPanel.elements.statusBarButtons[1]; var but2 = myPanel.elements.statusBarButtons[2]; url.focus(); myPanel.elements.statusBarButtons[3].onmouseup=myPanel.remove; but1.disable(); but0.onmouseup=function() { var t = encodeURIComponent(url.value.trim()); if(!t){return false;} but0.disable(); var rpc = new this.parent.module.rpc[this.options.rpc]({ url : ((this.options.mode==='local')?this.options.proxy:url.value.trim()), // debug : true, method : ((this.options.mode==='local')?"POST":"GET"), args : ((this.options.mode==='local')?"action=proxy&url="+encodeURIComponent(url.value.trim()):"") }); probe.innerHTML="Loading feed............."; rpc.callback = function(rpc) { probe.innerHTML="Validating............."; var xml = rpc[this.options.rpc].responseXML; var atom = this.tag(xml,'feed',0); var rss = this.tag(xml,'rss',0); var rdf = this.tag(xml,'RDF',0); but0.enable(); if(atom || rss || rdf) { url.disable(); title.disable(); but0.disable(); var tp = (rss)?"RSS":((rdf)?"RDF":"ATOM"); probe.innerHTML="Feed "+tp+" valid"; but1.enable(); } else { but1.disable(); probe.innerHTML="Feed invalid"; } }.extend(this); rpc.make(); return false; }.extend(this); but1.onmouseup=function() { var u = url.value.trim(); var t = title.value.trim() || u; this.addFeed({ url :u, title :t, proxy :true }); myPanel.remove(); return false; }.extend(this); but2.onmouseup=function() { title.enable(); url.enable(); but0.enable(); but1.disable(); return false; }.extend(this); return false; }; this.tag=function(DOM,tag,node,value) { try { var o = DOM.getElementsByTagName(tag); return (typeof node==='number')?((value)?o[node].firstChild.nodeValue:o[node]):o; } catch(e) { return false; } }; this.expand(this); } });