tumblr.js (1678B)
1 var sys = require('sys'); 2 3 var url = { 4 regular: function (post) { return post['@'].url; }, 5 link: function (post) { return post['link-url']; }, 6 photo: function (post) { 7 var tumblelog = post.tumblelog['@'].url.replace(/\/$/, ''), 8 generic = post['photo-url'][0]['#'], 9 link = post['photo-link-url']; 10 if (!link || tumblelog == link.replace(/\/$/, '')) { 11 return generic; 12 }; 13 return link; 14 }, 15 video: function (post) { 16 var link = post['video-source']; 17 return (link.indexOf('http') == 0) ? link : url.regular(post); 18 } 19 }; 20 21 var getUrl = function (post) { 22 switch (post['@'].type) { 23 case 'link': 24 return url.link(post); 25 case 'photo': 26 return url.photo(post); 27 case 'video': 28 return url.video(post); 29 } 30 return url.regular(post); 31 }; 32 33 var title = { 34 none: getUrl, 35 regular: function (post) { 36 var t = post['regular-title']; 37 return (t) ? t : title.none(post); 38 }, 39 link: function (post) { 40 var t = post['link-text']; 41 return (t) ? t : title.none(post); 42 }, 43 conversation: function (post) { 44 var t = post['conversation-title']; 45 return (t) ? t : title.none(post); 46 }, 47 video: function (post) { 48 var t = post['video-title']; 49 return (t) ? t : title.none(post); 50 } 51 }; 52 53 var getTitle = function (post) { 54 switch (post['@'].type) { 55 case 'regular': 56 return title.regular(post); 57 case 'link': 58 return title.link(post); 59 case 'conversation': 60 return title.conversation(post); 61 case 'video': 62 return title.video(post); 63 } 64 return title.none(post); 65 }; 66 67 exports.serialize = function (post) { 68 return { url: getUrl(post), title: getTitle(post) }; 69 };