New Feature: add widget API for Netvibes.

git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@296 b3834d28-1941-0410-a4f8-b48e95affb8f
This commit is contained in:
mensonge 2009-02-23 17:18:48 +00:00
parent 63dc7fee8e
commit 962902de23

234
api/widgetUWA.html Normal file
View file

@ -0,0 +1,234 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:widget="http://www.netvibes.com/ns/">
<head>
<title>SemanticScuttle</title>
<meta name="author" content="Benjamin HKB (inspired by Florent Solt)" />
<meta name="description" content="" />
<meta name="keywords" content="semanticscuttle delicious del.icio.us" />
<meta name="apiVersion" content="1.0" />
<meta name="inline" content="true" />
<meta name="autoRefresh" content="20" />
<meta name="debugMode" content="false" />
<link rel="icon" href="http://semanticscuttle.sourceforge.net/icon.png"/>
<link rel="stylesheet" type="text/css" href="http://www.netvibes.com/themes/uwa/style.css" />
<script type="text/javascript" src="http://www.netvibes.com/js/UWA/load.js.php?env=Standalone"></script>
<widget:preferences>
<preference name="website" label="URL of the SemanticScuttle website" type="text" defaultValue="http://example.com" />
<preference name="websiteTitle" label="Website's title" type="text" defaultValue="Website Name" />
<preference name="account" label="User" type="text" defaultValue="" />
<preference name="tags" label="Tags (optionally separated by +)" type="text" defaultValue="tag1+tag2" />
<preference name="thumb" label="Show thumbnails" type="boolean" defaultValue="true" />
<preference name="limit" type="range" label="Number of items to display" defaultValue="20" step="1" min="1" max="50" />
<preference name="offset" type="hidden" defaultValue="0" />
</widget:preferences>
<style type="text/css">
.container ul {
padding: 0px;
}
.container .clear {
clear: both;
height: 1px;
font-size: 1px;
line-height: 1px;
}
.container li {
background-image: none;
padding: 2px;
clear: both;
margin: 0px;
}
.container li a {
font-weight: bold;
}
.container li em {
display: block;
}
.container li img {
display: block;
float: left;
margin-right: 4px;
margin-bottom: 4px;
}
.container li img.thumb {
width: 60px;
height: 45px;
border: 1px solid #ccc;
}
.container li.cal {
padding-left: 20px;
background-image: url(http://www.netvibes.com/img/icons/time.png);
background-repeat: no-repeat;
background-position: left 1em;
line-height: 16px;
margin-bottom: 0.5em;
padding-top: 1em;
font-size: 1.3em;
border-bottom: 1px dotted #aaa;
}
</style>
<script type="text/javascript">
if (document.location && document.location.hostname == 'mymodules.local') {
UWA.proxies.ajax = 'ajaxProxy.php';
}
widget.months = {
1:_('January'), '2':_('February'), 3:_('March'), 4:_('April'), 5:_('May'), 6:_('June'),
7:_('July'), 8:_('August'), 9:_('September'), 10:_('October'), 11:_('November'), 12:_('December')
}
widget.onLoad = function() {
widget.onRefresh();
}
widget.onRefresh = function() {
widget.setBody( _("Loading ... (if loading is too long, check preferences: URL must be exact, user and tags must exist.)") );
var website = widget.getValue('website');
if(website.charAt(website.length-1) != '/') {
website = website +'/';
}
var websiteTitle = widget.getValue('websiteTitle');
var account = widget.getValue('account');
if(account == undefined || account == '') {
account = 'all';
}
var tags = widget.getValue('tags');
if(tags != undefined && tags != '') {
tags = '/' + tags;
var reg=new RegExp(" ", "g");
tags = tags.replace(reg, "%20");
}
if (website == undefined || website == 'http://example.com/') {
widget.setBody(_("Edit the widget please."));
} else {
//widget.setBody(website + 'rss/' + account + tags);
var title = '<a href="' + website + '">' + websiteTitle +'</a>';
title+= ' / <a href="http://sourceforge.net/projects/semanticscuttle/">'+ 'SemanticScuttle</a>';
widget.setTitle(title);
UWA.Data.getFeed(website + 'rss/' + account + tags, widget.onData);
}
}
widget.onData = function(data) {
widget.items = data.items;
//widget.log(data.items);
widget.display();
}
widget.display = function() {
// Main container
var container = widget.createElement('div');
container.className = 'container';
// Prev date
var prev_date = null;
// Items
var ul = widget.createElement('ul');
var limit = parseInt(widget.getValue('limit'));
var offset = parseInt(widget.getValue('offset'));
for (var i=offset; i<widget.items.length && i<limit+offset; i++) {
var date = new Date(widget.items[i].date)
// Cal
if (prev_date == null ||
date.getMonth() != prev_date.getMonth() ||
date.getDate() != prev_date.getDate() ||
date.getYear() != prev_date.getYear()) {
prev_date = date;
var cal = widget.createElement('li');
cal.className = 'cal';
var relative_to = new Date();
var delta = parseInt((relative_to.getTime() - date.getTime()) / 1000);
if (delta < 24*60*60) {
cal.appendText(_('Today'));
} else if (delta < 48*60*60) {
cal.appendText(_('Yesterday'));
} else {
cal.appendText(date.getDate() + ' ' + widget.months[date.getMonth() + 1])
}
ul.appendChild(cal);
}
// Li
var li = widget.createElement('li');
if (i%2 == 1) li.className = 'even';
if (widget.getValue('thumb') == 'true') {
// Img
var img = widget.createElement('img');
img.src = "http://open.thumbshots.org/image.pxf?url=" + widget.items[i].link.replace(/^(http:\/\/[^\/]+).*$/, '$1');
img.className = 'thumb';
li.appendChild(img);
} else {
var img = widget.createElement('img');
img.src = 'http://semanticscuttle.sourceforge.net/bookmark.gif'
li.appendChild(img);
}
// Title
var title = widget.createElement('a');
title.setContent(widget.items[i].title);
title.href = widget.items[i].link;
if(widget.items[i].content == '') {
widget.items[i].content = _("No description");
}
title.title= widget.items[i].content;
li.appendChild(title);
// // Tags
// console.log(widget.items[i]);
// var tagsText = widget.items[i].subject;
// if (tagsText != null) {
// tags = widget.createElement('em');
// tags.appendText(tagsText.nodeValue);
// li.appendChild(tags);
// }
// Clear
var clear = widget.createElement('div');
clear.className = 'clear';
li.appendChild(clear);
ul.appendChild(li);
}
container.appendChild(ul);
// Pager
var pager = widget.createElement('div');
var pager_ctrl = new UWA.Controls.Pager( {
module: this,
limit: widget.getValue('limit'),
offset: widget.getValue('offset'),
dataArray: widget.items
} );
pager_ctrl.onChange = function(newOffset) {
widget.setValue('offset', newOffset);
widget.display();
}
pager.setContent(pager_ctrl.getContent());
container.appendChild(pager);
widget.setBody(container);
}
</script>
</head>
<body>
</body>
</html>