Phill Sparks

hTodo User Script

/**
 * Adds hTodo support to the operator toolbar
 * 
 * @author Phill Sparks <me@phills.me.uk>
 * @version 1.1, 2010-01-11
 * @see http://microformats.org/wiki/htodo
 * @see http://www.kaply.com/weblog/operator/
 */

function hTodo(node) {
	if (node) {
		Microformats.parser.newMicroformat(this, node, 'hTodo');
	}
}

hTodo.prototype.toString = function() {
	return this.summary;
}

var hTodo_definition = {
	mfVersion: 0.8,
	description: 'Tasks',
	mfObject: hTodo,
	className: 'vtodo',
	required: ['summary'],
	properties: {
		'attach': {
			plural: true,
			datatype: 'anyURI'
		},
		'category': {
			plural: true,
			datatype: 'microformat',
			microformat: 'tag',
			microformat_property: 'tag'
		},
		'class': {
			values: ['public', 'private', 'confidential']
		},
		'completed': {
			datatype: 'dateTime'
		},
		'description': {
			datatype: 'HTML'
		},
		'dtstart': {
			datatype: 'dateTime'
		},
		'dtstamp': {
			datatype: 'dateTime'
		},
		'due': {
			datatype: 'dateTime'
		},
		'duration': {
		},
		'geo': {
			datatype: 'microformat',
			microformat: 'geo'
		},
		'last-modified': {
			datatype: 'dateTime'
		},
		'location': {
			datatype: 'microformat',
			microformat: 'hCard'
		},
		'organizer': {
			datatype: 'microformat',
			microformat: 'hCard'
		},
		'percent-completed': {
			/* datatype: 'int', min: 0, max: 100 */
		},
		'priority': {
			/* datatype: 'int', min: 0, max: 9 */
		},
		'summary': {},
		'status': {
			values: ['active', 'in-process', 'completed', 'cancelled']
		},
		'uid': {
			datatype: 'anyURI'
		},
		'url': {
			datatype: 'anyURI'
		},

		/* Borrow this from the hCalendar_definition */
		'rrule': hCalendar_definition.properties.rrule
	}
};

Microformats.add('hTodo', hTodo_definition);

/* Firefox Bookmark */
var hTodo_firefox_bookmark = {
	scope: {
		semantic: {
			'hTodo' : 'url',
		}
	},
	doAction: function(semanticObject, semanticObjectType) {
		if (semanticObjectType == 'hTodo') {
			name = semanticObject['summary'];
			url = semanticObject['url'];
			SemanticActions.firefox_bookmark.bookmark(name, url);
			return true;
		}
	}
};

SemanticActions.add('firefox_bookmark', hTodo_firefox_bookmark);

/* Delicious Bookmark (v5) */
var hTodo_delicious_bookmark = {
	scope: {
		semantic: {
			'hTodo' : 'url',
		}
	},
	doAction: function(semanticObject, semanticObjectType) {
		if (semanticObjectType == "hTodo") {
			return hTodo_delicious_bookmark.bookmark(semanticObject.url, semanticObject.summary, semanticObject.description);
		}
		return false;
	},
	/* Improved delicious bookmarking */
	bookmark: function(link, title, notes) {
		var url = 'http://delicious.com/save?v=5&url=' + encodeURIComponent(link);
		
		if (typeof title != 'undefined')
			url += '&title=' + encodeURIComponent(title);
		if (typeof notes != 'undefined')
			url += '&notes=' + encodeURIComponent(notes);
		
		if (window.open(url + '&noui=1&jump=doclose','deliciousuiv5','location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'))
			return true;
		else
			return url + '&jump=yes';
		
	}
};

SemanticActions.add('delicious_bookmark', hTodo_delicious_bookmark);

/* Google / Yahoo Search */
var hTodo_search = {
	scope: {
		semantic: {
			"hTodo" : "summary"
		}
	}
};

SemanticActions.add('google_search', hTodo_search);
SemanticActions.add('yahoo_search', hTodo_search);


/* Goto URL (User Script) */
var hTodo_goto = {
	scope: {
		semantic: {
			'hTodo': 'url'
		}
	}
};

SemanticActions.add('goto_url', hTodo_goto);

Created by Phill Sparks on 29th May 2009. Last updated on 13th July 2010.