From OpenSocial Directory
| Thumbnail
|
|
|
|
|
| Screenshot
|
|
|
|
Image:Example.jpg==Reviews==
Add a Review
Template:TimesShare Reviews
[edit] Comments
View Code
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="TimesShare" directory_title="TimesShare" description="Read, share and collect news and features from NYTimes.com" thumbnail="http://code.nytimes.com/xml/google/gadget/timesshare/images/app_logo.png" screenshot="http://code.nytimes.com/xml/google/gadget/timesshare/images/app_screenshot.png" author_photo="http://code.nytimes.com/xml/google/gadget/timesshare/images/app_author.png" author="Michael Donohoe" author_email="donohoe+timesshare@gmail.com" author_affiliation="The New York Times" author_link="http://open.nytimes.com" author_location="New York City, NY" author_aboutme="From Ireland. Live in NYC.">
<Locale lang="en" country="us" />
<Require feature="opensocial-0.5" />
<Require feature="dynamic-height" />
<Require feature="tabs" />
</ModulePrefs>
<UserPref name="numFavorites" display_name="Number of Headlines" default_value="10" datatype="enum">
<EnumValue value="1" display_value="1" />
<EnumValue value="3" display_value="3" />
<EnumValue value="5" display_value="5" />
<EnumValue value="10" display_value="10" />
<EnumValue value="0" display_value="All" />
</UserPref>
<UserPref name="numSuggested" display_name="Number of Suggestions for each Friend" default_value="3" datatype="enum">
<EnumValue value="1" display_value="1" />
<EnumValue value="3" display_value="3" />
<EnumValue value="5" display_value="5" />
<EnumValue value="0" display_value="All" />
</UserPref>
<UserPref name="numResults" display_name="Limit results to" default_value="0" datatype="enum">
<EnumValue value="1" display_value="1" />
<EnumValue value="3" display_value="3" />
<EnumValue value="5" display_value="5" />
<EnumValue value="10" display_value="10" />
<EnumValue value="0" display_value="All" />
</UserPref>
<Content type="html">
<![CDATA[
<link rel="stylesheet" type="text/css" href="http://code.nytimes.com/xml/google/gadget/timesshare/css/style.css" />
<link rel="stylesheet" type="text/css" href="http://code.nytimes.com/xml/google/gadget/timesshare/css/orkut.css" />
<script type="text/javascript">
var console = console || {};
console.log = console.log || function(msg) {};
</script>
<script type="text/javascript">
var NYTS_Application = {
"Tabs": [
{ "id": "tab0", "title": "Favorites", "method": "tabFavorites()", "description": "__OWNER__ most recently saved articles." },
{ "id": "tab1", "title": "Suggested", "method": "tabSuggested()", "description": "The newest suggestions from __OWNER__ Friends."},
{ "id": "tab2", "title": "Browse", "method": "tabBrowse()", "description": "The latest news and breaking stories." }
]
};
var NYTS_Feed_Default = {
"Options" : [
{ "title": "Homepage", "url": "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml" },
{ "title": "Most E-mailed Articles", "url": "http://www.nytimes.com/services/xml/rss/nyt/pop_top.xml" },
{ "title": "Multimedia", "url": "http://www.nytimes.com/services/xml/rss/nyt/pop_top.xml" },
{ "title": "Dining and Wine", "url": "http://www.nytimes.com/services/xml/rss/nyt/DiningandWine.xml" },
{ "title": "Week in Review", "url": "http://www.nytimes.com/services/xml/rss/nyt/WeekinReview.xml" }
]
};
var NYTS_Text = {
"Message" : [
{ "name": "empty", "msg": "" },
{ "name": "oops", "msg": "Oops! There was a problem retrieving Orkut data. Click <a href='javascript:void(0)' onClick='initialize()'>here</a> to retry." },
{ "name": "noarticles", "msg": "Looks like no articles have been added yet." },
{ "name": "nosuggested", "msg": "Your freinds haven't made any suggestions yet." },
{ "name": "loading", "msg": "Loading…<img src='http://code.nytimes.com/xml/google/gadget/timesshare/images/loading.gif' border='0'/>" },
{ "name": "errsuggested","msg": "There was an error getting __OWNER__ Friends suggestions. Click <a href='javascript:void(0)' onClick='tabSuggested()'>here</a> to retry." },
{ "name": "errarticles", "msg": "There was an error getting __OWNER__ articles. Click <a href='javascript:void(0)' onClick='tabFavorites()'>here</a> to retry." },
{ "name": "errfeeds", "msg": "There was an error loading article feeds. Click <a href='javascript:void(0)' onClick='tabBrowse()'>here</a> to retry." },
{ "name": "errsave", "msg": "Sorry - there was a problem saving. Try again in a moment." }
]
};
var NYTS_Favorites = { "Article": [] };
var NYTS_Suggested = { "Article": [] };
var NYTS_Prefs = new _IG_Prefs(__MODULE_ID__);
var numFavorites = NYTS_Prefs.getInt("numFavorite");
var numSuggested = NYTS_Prefs.getInt("numSuggested");
var numResults = NYTS_Prefs.getInt("numResults");
var orkut_server_url = "http://sandbox.orkut.com";
var host_server_url = "http://code.6ix.us";
var app_home_url = "http://code.nytimes.com/xml/google/gadget/timesshare/";
var owner = null;
var owner_data = null;
var owner_friends = null;
var owner_friends_data = null;
var viewer = null;
var viewer_data = null;
var viewer_friends = null;
var viewer_friends_data = null;
var isLoaded = false;
var currentID = false;
var loadedFavorites = false;
var loadedSuggestions = false;
var tabsLoaded = false;
var activeTabDiv;
_IG_RegisterOnloadHandler(initialize);
_IG_AdjustIFrameHeight();
// === Initialize ==================================================
function initialize() {
// Update status
showMessage("loading")
// Load basic Viewer and Owner info
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest("OWNER"), "owner");
req.add(req.newFetchPersonRequest("VIEWER"), "viewer");
req.send(setup);
// Check that data loaded
setTimeout('checkIfLoaded()',25000);
}
function setup(data) {
// Return any value from Viewer Data given a key
if(data.hadError()) {
showMessage("oops");
return false;
}
if(typeof(data)!="undefined") {
owner = !data.get("owner").getError() ? data.get("owner").getData() : null;
viewer = !data.get("viewer").getError() ? data.get("viewer").getData() : null;
// Populate full feed list
feedInit();
// Create Tabs
tabInit();
} else {
showMessage("oops");
}
}
// In the event of a problem loading Orkurt api related stuff
function checkIfLoaded() {
if(!isLoaded) {
showMessage("oops");
}
_IG_AdjustIFrameHeight();
}
// === FEEDS =======================================================
/*
RSS FEEDS
Populate master feed list in drop-down
*/
function feedInit() {
feedList = _gel("feeds");
console.log("Loading feed list...");
_IG_FetchXmlContent("http://www.nytimes.com/services/xml/rss/nyt/index.opml",
function (xmlDoc) {
// In case of error loading or pasing feed list
function basicList(){
// Error - popluate with some default feeds in the case we can't access the OPML
for (var a = 0; a < NYTS_Feed_Default.length; a++) {
var title = NYTS_Feed_Default.Options[a].title;
var url = NYTS_Feed_Default.Options[a].url;
feedList.options[feedList.length] = new Option(title, url);
}
}
if (xmlDoc == '') {
// Error - popluate with some default feeds in the case we can't access the OPML
basicList();
} else {
var newsItems = xmlDoc.getElementsByTagName("outline");
var itemName;
var itemLink;
var itemTotal = newsItems.length;
if (parseInt(itemTotal)==0) {
// Error - popluate with some default feeds in the case we can't access the OPML
basicList();
} else {
listHTML = "";
// Add Homepage Feed so it is on top
var title = NYTS_Feed_Default.Options[0].title;
var url = NYTS_Feed_Default.Options[0].url;
feedList.options[feedList.length] = new Option(title, url);
for (var a = 0; a < itemTotal; a++) {
for (var b = 0; b < newsItems[a].childNodes.length; b++) {
var n = newsItems[a].childNodes.item(b);
var nn = n.nodeName.split(":");
var base = nn[nn.length-1];
if(base=="outline") {
var title = n.getAttribute("title");
var url = n.getAttribute("xmlUrl");
if ((title.length>0) && (!title.match("The New York Times")) ) {
if (title.match("NYT")) {
title = title.substring(6, title.length);
}
title = title.replace("New York Times ", "");
title = title.replace("- Technology - ", "");
var newOption = new Option(title, url);
feedList.options[feedList.length] = new Option(title, url);
}
}
} // End For b
} // End For a
// Set default (Homepage as first option)
feedList.options.selectedIndex=0;
_gel("feedListDropDown").style.display = "block";
} // End If xmlDoc
} // End If
}, { }
);
}
/*
Switch Feeds
*/
function feedSwitch() {
var feedList = _gel("feeds");
var feedTitle = feedList.options[feedList.selectedIndex].text;
var feedURL = feedList.options[feedList. selectedIndex].value;
// Switch to Browse tab view
_gel("feedListTitle").innerHTML = "<h3>" + feedTitle + "</h3>";
tabs.setSelectedTab(2);
tabLeftImage();
// Update articles
feedLoad(feedURL, "tab2");
}
/*
** Get NYT articles from RSS
*/
function feedLoad(feed, divID) {
var htmlArt = "";
var rssFile = "";
console.log("Feed will output to: " + divID);
_IG_FetchXmlContent(feed,
function (xmlDoc) {
// If the response was blank, try again later
if (xmlDoc == '') {
setTimeout('feedLoad()', 2000); // WILL NEED ARGUMENTS
} else {
var newsItems = xmlDoc.getElementsByTagName("item");
var newsNode;
var itemHeadline;
var itemLink;
var itemSummary;
var itemTotal = newsItems.length;
// Limit depending on gadget settings
if ((itemTotal > numResults) && (numResults > 0)) {
itemTotal = numResults;
}
if (parseInt(itemTotal)==0) {
htmlArt += "<div class='summary error'>"
htmlArt += "Sorry - there is a problem loading feed, or it is unavailable.<br>";
htmlArt += "Now would be a good time to panic.</div>";
} else {
for (var a = 0; a < itemTotal; a++) {
for (var b = 0; b < newsItems[a].childNodes.length; b++) {
newsNode = newsItems[a].childNodes[b];
switch (newsNode.nodeName) {
case "title" : itemHeadline = newsNode.firstChild.nodeValue; break;
case "link" : itemLink = newsNode.firstChild.nodeValue; break;
case "description" : itemSummary = newsNode.firstChild.nodeValue; break;
default : // Nothing
}
}
htmlArt += articleDisplay(itemHeadline, itemLink, itemSummary);
} // End For
} // End If xmlDoc
} // End If
_gel(divID).innerHTML = htmlArt;
_IG_AdjustIFrameHeight();
articleTools(divID);
},
{ refreshInterval: (60 * 30) }
);
}
// === TABS =====================================================
/*
** Tab: Setup
*/
function tabInit() {
if(!tabsLoaded) {
tabs = new _IG_Tabs();
var tabClass = "tablib_extension_left_notselected";
var tabParent = _gel('content');
for (var t = 0; t < NYTS_Application.Tabs.length; t++) {
// Setup tab
var tabID = NYTS_Application.Tabs[t].id;
var tabTitle = NYTS_Application.Tabs[t].title;
var tabMethod = NYTS_Application.Tabs[t].method;
var tabDesc = NYTS_Application.Tabs[t].description;
tabClass = (t==0) ? "tablib_extension_left_selected" : "tablib_extension_left_notselected";
tabs.addTab('<span class="' +tabClass+ '" id="span' +tabID+ '"></span>' + tabTitle, tabID, tabSwitch);
}
// Update global
tabsLoaded = true;
// Move the tabs left to follow Orkut convention
tabs.alignTabs('left', 2);
}
}
/*
** Tab: Switch between tabs
*/
function tabSwitch() {
tabLeftImage();
var tabArray = tabs.getTabs();
var tabSelected = tabs.getSelectedTab().getIndex();
var tabDesc = NYTS_Application.Tabs[tabSelected].description;
var tabFunction = NYTS_Application.Tabs[tabSelected].method;
var tabExecute = eval(tabFunction);
showMessage(tabDesc);
}
function tabLeftImage() {
var tabArray = tabs.getTabs();
for (x in tabArray) {
var tabID = NYTS_Application.Tabs[x].id;
if (tabs.getSelectedTab().getIndex() == x) {
_gel("span" + tabID).className = 'tablib_extension_left_selected';
if(_gel(tabID)) { _gel(tabID).style.display = 'block'; }
} else if (x != "peek") {
_gel("span" + tabID).className = 'tablib_extension_left_notselected';
if(_gel(tabID)) { _gel(tabID).style.display = 'none'; }
}
} // End For
}
/*
** TAB : Favorites
*/
function tabFavorites() {
activeTabDiv = "tab0";
// Some basic caching
if(!loadedFavorites) {
loadFavorites();
}
}
/*
TAB : Suggested
*/
function tabSuggested() {
activeTabDiv = "tab1";
loadSuggestions();
}
/*
TAB : Browse
*/
function tabBrowse() {
activeTabDiv = "tab2";
feedLoad("http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml", activeTabDiv);
}
// ==== Article Building =======================================
/*
Display HTML for an article entry
- also tries to add to articleList
*/
function articleDisplay(headline, link, summary, timestamp) {
var id = generateUniqueID(link);
var html = "";
var color = (activeTabDiv=="tab0") ? "green" : "blue";
html += "<div class='crnr_" + color + "_box'>";
html += " <div class='crnr_" + color + "_top'><div></div></div>";
html += " <div id='article_" + id + "' class='crnr_" + color + "_content'>";
html += "<div class='title'>";
html += "<a id='link_" + id + "' href='" + link + "' target='_blank'>" + headline + "</a>";
html += "<span id='tools_" + id + "' class='tools' display='float:right;'></span>";
if(activeTabDiv=="tab0" || activeTabDiv=="tab1") {
html += "<span id='time_" + id + "' class='time'>" + formatDate(new Date(timestamp)) + "</span>";
}
html += "</div>";
html += "<div id='summary_" + id + "' class='summary'>" + summary + "</div>";
html += " </div>";
html += "<div class='crnr_" + color + "_bottom'><div></div></div>";
html += "</div>";
return html;
}
/*
** Iterate through all articles on a given tab and add appropiate Tools
** - This varies depending on whether the user is Owner or Viewer
** - May differ dependning on which tab is active
*/
function articleTools(tabID) {
if(_gel(tabID)) {
var elmDIV = document.getElementsByTagName( 'span' );
// var divClass;
// var divID;
var articleID;
for (var d = 0; d < elmDIV.length; d++ ) {
var toolHTML = "";
var divClass = elmDIV[d].className;
var divID = elmDIV[d].id;
if (divClass == "tools") {
var artID = divID.substring(6, divID.length );
var artHTML = "";
if(artID.length>0) {
//var buttonFn = "addSuggestion(\"" + artID + "\")";
var buttonText = "Suggest";
var buttonTitle = "Suggest to Friends";
if (viewer.isOwner()) {
// buttonFn = "addArticle(\"" + artID + "\")";
buttonText = "Save";
buttonTitle = "Add to Favorites";
}
artHTML += "<a id='btn_" +artID+ "' href='javascript:void(0);' class='button' title='" +buttonTitle+ "' onClick='addArticle(\"" + artID + "\")'>";
artHTML += "<img src='http://code.nytimes.com/xml/google/gadget/timesshare/images/button/cross.png' border='0' alt='" + buttonText + "'>";
artHTML += "</a> ";
}
elmDIV[d].innerHTML = artHTML;
}
} // End for
} // End If
}
// ==== Article : Favorites : Load ===============================================
function loadFavorites() {
console.log("Start loading Favorites...");
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest("OWNER"), "owner");
req.add(req.newFetchPersonAppDataRequest("OWNER", "NYTS_Favorites"), "owner_data");
req.add(req.newFetchPersonRequest("VIEWER"), "viewer");
req.add(req.newFetchPersonAppDataRequest("VIEWER", "NYTS_Favorites"), "viewer_data");
req.send(loadResponse);
}
function loadResponse(data) {
var value = getData(data, "NYTS_Favorites")
if(value) {
// Success. It is safe to update global var
NYTS_Favorites = eval("(" + value + ")");
var favHTML = "";
var favNumResults = NYTS_Favorites.Article.length;
if(favNumResults == 0) {
// No articles added yet
showMessage("noarticles");
} else {
// Limit depending on gadget settings
if ((favNumResults > numFavorites) && (numFavorites > 0)) {
favNumResults = numFavorites;
}
// Go from last to first
for (var m = favNumResults-1; m>=0; m--) {
var article = NYTS_Favorites.Article[m];
favHTML += articleDisplay(article.headline, article.link, article.summary, article.timestamp);
}
_gel(activeTabDiv).innerHTML = favHTML;
}
}
_IG_AdjustIFrameHeight();
}
function getData(data, key) {
// Return any value from Viewer Data given a key
console.log("DATA: ", data);
if(data.hadError()) {
showMessage("oops")
return false;
}
// Mark gadget as loaded - whether articles are found at this point or not.
isLoaded = true;
try {
var owner = !data.get("owner").getError() ? data.get("owner").getData() : null;
var owner_data = !data.get("owner_data").getError() ? data.get("owner_data").getData()[owner.getId()] : null;
var viewer = !data.get("viewer").getError() ? data.get("viewer").getData() : null;
if(typeof(owner_data[key])!="undefined") {
console.log("Retrived data. Key: '" +key+ "', Value: ", owner_data[key]);
return owner_data[key];
} else {
console.log("No articles have been added to Favorites");
showMessage("noarticles");
}
} catch(err) {
// Catch exceptions for when key has never been set
// which results in the "has no properties" error message.
showMessage("noarticles");
console.log('No value found. Error name :'+err.name+' Error message :'+err.message);
}
return false;
}
// ==== Article : Favorites/Suggest : Save ===============================================
function addArticle(id) {
var articleExists = false;
currentID = false;
console.log("Trying to save article : " + id);
if(_gel("article_" + id)) {
// Get article info from page
var summary = _gel("summary_" + id).innerHTML;
var headline = _gel("link_" + id).innerHTML;
var link = _gel("link_" + id).href;
var timestamp = getTimeStamp("ms");
currentID = id;
console.log("Headline: " + headline + ", TS: " + timestamp);
var NYTS_Holder;
var New_Article = { 'id' : id, 'headline' : headline, 'summary' : summary , 'link' : link, 'timestamp': timestamp };
// Determine whether we are SUggesting or adding to Favorites
if(viewer.isOwner()) {
// Add to your Favorites
NYTS_Holder = NYTS_Favorites;
} else {
// Suggest
NYTS_Holder = NYTS_Suggested;
}
// Check if article already in list (applies for both Suggested and Favorites)
for (var m = 0; m < NYTS_Holder.Article.length; m++) {
if(NYTS_Holder.Article[m].id == id) {
articleExists = true;
break;
}
}
if(!articleExists) {
// Save
console.log("Adding article...");
NYTS_Holder.Article.push(New_Article);
var req = opensocial.newDataRequest();
if(viewer.isOwner()) {
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "NYTS_Favorites", NYTS_Holder), "status");
} else {
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "NYTS_Suggested", NYTS_Holder), "status");
}
req.send(addArticleResponse);
}
}
}
function addArticleResponse(data) {
try {
var error = data.get("status").hadError();
if (error) {
showMessage("errsave");
console.log("Error saving. data: ", data);
} else {
console.log("Article was saved", data);
if(currentID) {
_gel("tools_" + currentID).innerHTML = "Saved";
}
}
} catch (err) {
showMessage("errsave");
console.log('Error saving. Error name :'+err.name+' Error message :'+err.message);
}
}
// ==== Article : Suggestion : Load ===============================================
function loadSuggestions(){
console.log("Starting to load Friend suggestions");
var req = opensocial.newDataRequest();
//req.add(req.newFetchPeopleRequest('VIEWER_FRIENDS'), 'viewer_friends');
//req.add(req.newFetchPersonAppDataRequest('VIEWER_FRIENDS', 'NYTS_Suggested'), 'viewer_friends_data');
req.add(req.newFetchPeopleRequest('OWNER_FRIENDS'), 'owner_friends');
req.add(req.newFetchPersonAppDataRequest('OWNER_FRIENDS', 'NYTS_Suggested'), 'owner_friends_data');
req.send(responseSuggestions);
}
function responseSuggestions(data) {
var value = getSuggestions(data, 'NYTS_Suggested')
//if(value) {
// _gel("viewer_value").value = value;
//}
_IG_AdjustIFrameHeight();
}
function getSuggestions(data, key) {
// Return any value from Viewer Data given a key
if(data.hadError()) {
showMessage("errsuggested");
console.log("Error loading data. Try again.");
return false;
}
try {
//var viewer_friends = !data.get("viewer_friends").getError() ? data.get("viewer_friends").getData() : null;
var owner_friends = !data.get("owner_friends").getError() ? data.get("owner_friends").getData() : null;
console.log(owner_friends);
// Render Friends and any App data
var sugHTML = "";
var navFriendHTML = "";
navFriendHTML += " <div class='crnr_yellow_box'> ";
navFriendHTML += " <div class='crnr_yellow_top'><div></div></div>";
navFriendHTML += " <div class='crnr_yellow_content'>";
owner_friends.each(function(person) {
var person_name = person.getDisplayName();
var person_id = person.getId();
var owner_friends_data = !data.get("owner_friends_data").getError() ? data.get("owner_friends_data").getData()[person_id] : null;
console.log("person_name: " + person_name + " (" + person_id + ")");
if(typeof(owner_friends_data)!="undefined") {
NYTS_Holder = eval("(" + owner_friends_data[key] + ")");
console.log(NYTS_Holder);
var sugNumResults = NYTS_Holder.Article.length;
if(sugNumResults == 0) {
// No articles suggested by that friend
console.log(person_name + " has made no suggestions");
// Add thumbnail and link to Friend Nav bar
navFriendHTML += showThumbnail("tiny", "faded", "anchor", person);
} else {
// Add thumbnail and link to Friend Nav bar
navFriendHTML += showThumbnail("tiny", "normal", "anchor", person);
// Limit depending on gadget settings
if ((sugNumResults > numSuggested) && (numSuggested > 0)) {
sugNumResults = numSuggested;
}
sugHTML += "<span id='anchor_" + person_id + "' class='suggester'>" + person_name + " suggests:</span>";
// Go from last to first
for (var m = NYTS_Holder.Article.length-1; m>=0; m--) {
var article = NYTS_Holder.Article[m];
sugHTML += articleDisplay(article.headline, article.link, article.summary, article.timestamp);
console.log(article.headline);
}
}
} else {
console.log("Caught undefined...");
navFriendHTML += showThumbnail("tiny", "faded", "anchor", person);
}
});
navFriendHTML += " </div>";
navFriendHTML += "<div class='crnr_yellow_bottom'><div></div></div>";
navFriendHTML += "</div>";
_gel(activeTabDiv).innerHTML = navFriendHTML + sugHTML;
return true;
} catch(err) {
// Catch exceptions for when key has never been set
// which results in the "has no properties" error message.
var msg = "No value found. Key '" +key+ "' does not exist.";
console.log('No value found. Error name :'+err.name+' Error message :'+err.message);
}
return false;
}
// ==== Helper Functions ===============================================
/*
Show user thumbnail
INPUT:
size - tiny, small, medium
status - faded, full
link - anchor, profile
person - Person object
*/
function showThumbnail(size, status, linkType, person) {
var pHTML = "";
var pname = person.getDisplayName();
var pid = person.getId();
var plink = (linkType=="anchor") ? "#anchor_" + pid : person.getField(opensocial.Person.Field.PROFILE_URL);
var pthumb = person.getField(opensocial.Person.Field.THUMBNAIL_URL);
var pthumbRestraints = "";
if(size=="medium") {
pthumb.replace("small", "medium");
} else if (size=="tiny") {
// Not recommended, but its an option
pthumbRestraints = " width='32' height='32' ";
}
if (pthumb == null || pthumb == "" || pthumb.indexOf('null') != -1) {
pthumb = orkut_server_url + "/img/i_nophoto64.gif";
}
pHTML += "<span class='friendthumbnail'>";
if(status=="faded") {
pHTML += "<img class='faded' src='" + pthumb + "'" + pthumbRestraints + "/>";
//pHTML += "<span class='friendthumbnailtitle'>" + pname + "</span>";
} else {
pHTML += "<a href='" + plink + "' title='Go to suggestions'><img class='thumbnail' src='" + pthumb + "'" + pthumbRestraints + "/></a>";
//pHTML += "<span class='friendthumbnailtitle'><a href='" + plink + "' title='Go to suggestions'>" + pname + "</a></span>";
}
pHTML += "</span>";
return pHTML;
}
/*
** Generate unique ID from a URL
** - It should check against nytimes.com domain
** - Assumes all URLs include ".html" and not anything else (.htm, .php etc)
** - If path contains alternate domain it will check against .com .net or .org
** - Cannot guarantee will work for non-nyt urls
*/
function generateUniqueID(url) {
var checkAgainst = "nytimes.com";
var idString = url.substring((url.indexOf(checkAgainst)+(checkAgainst.length+1)),(url.indexOf(".html")));
idString = idString.replace(/\//g, "_");
idString = idString.replace(/-/g, "_");
return(idString);
}
function getTimeStamp(version) {
var d = new Date();
var hours = d.getHours();
var minutes = d.getMinutes();
var date = d.getDate();
var month = d.getMonth()+1;
var year = d.getFullYear();
var ms = d.getTime();
var utc = d.getTimezoneOffset() * 60000;
if(minutes<10) { minutes = "0"+minutes }
switch(version) {
case "long":
return (hours + ':' + minutes + ' ' + month + '-' + date + '-' + year);
break;
case "small":
return (hours + ':' + minutes);
break;
default:
return (ms + utc);
break;
}
}
function formatDate(d) {
// Returns format such as: Thur, Nov 8th, 2007
// If date<24 hrs, starts with time: 14:52
var dDay = d.getDay();
var dDate = d.getDate();
var dMonth = d.getMonth();
var dYear = d.getFullYear();
var dMSec = d.getTime();
var dHours = d.getHours();
var dMin = d.getMinutes();
var day = "";
var month = "";
var time = "";
var t = new Date();
var tMSec = t.getTime();
var tHours = t.getHours();
var tMin = t.getMinutes();
var introText = (activeTabDiv=="tab0") ? "Added " : "Suggested ";
if(dMSec > (tMSec-43200000)) {
// Less than 12 hours ago
var n = new Date(tMSec-dMSec);
var nHours = n.getHours();
var nMin = n.getMinutes();
var textHour = (nHours>1)? "hrs " : "hr ";
return (introText + nHours + textHour + nMin + " min ago");
}
if(dDay == 0){
day = "Sun, ";
} else if(dDay == 1){
day = "Mon, ";
} else if(dDay == 2){
day = "Tue, ";
} else if(dDay == 3){
day = "Wed, ";
} else if(dDay == 4){
day = "Thur, ";
} else if(dDay == 5){
day = "Fri, ";
} else if(dDay == 6){
day = "Sat, ";
}
if(dMonth == 0){
month = "Jan ";
} else if(dMonth == 1) {
month = "Feb ";
} else if(dMonth == 2) {
month = "Mar ";
} else if(dMonth == 3) {
month = "April ";
} else if(dMonth == 4) {
month = "May ";
} else if(dMonth == 5) {
month = "June ";
} else if(dMonth == 6) {
month = "July ";
} else if(dMonth == 7) {
month = "Aug ";
} else if(dMonth == 8) {
month = "Sept ";
} else if(dMonth == 9) {
month = "Oct ";
} else if(dMonth == 10){
month = "Nov ";
} else if(dMonth == 11){
month = "Dec ";
}
// Return full date: Suggested on Thur, Nov 8th, 2007
return(introText + "on " + time + day + month + dDate + ", " + dYear);
}
function showMessage(name) {
console.log("Message type: " + name);
var msgFound = false;
var msgDestination = _gel("feedListTitle");
for (var e = 0; e < NYTS_Text.Message.length; e++) {
if(NYTS_Text.Message[e].name==name) {
msgDestination.innerHTML = showMessageInContext(NYTS_Text.Message[e].msg);
msgFound = true;
break;
}
}
if(!msgFound){
msgDestination.innerHTML = showMessageInContext(name);
}
}
/*
Display a Message in a given context (viewer versus owner)
*/
function showMessageInContext(msg) {
// Some user specific text to any description... currently just one
// Find: __OWNER__ Replace: Your or Owner-Name
try {
if (viewer.isOwner()) {
msg = msg.replace("__OWNER__", "your");
} else {
msg = msg.replace("__OWNER__", owner.getDisplayName()+"'s");
}
// Ensure uppercase if at beginning of string.
var firstChar = msg.substr(0,1).toUpperCase();
msg = firstChar + msg.substr(1,msg.length);
} catch(err) {
// nothing
}
return msg;
}
</script>
<div id="logo_nyt" style="position: absolute; top:3px; right:2px"><a href="http://www.nytimes.com" title="The New York Times"><img src="http://code.nytimes.com/xml/google/gadget/timesshare/images/logo.png" alt="Go to NYTimes.com" border="0"/></a></div>
<div id="feedlist">
<div id="feedListTitle" style="position: absolute; top:30px; left:2px; height:25px; padding-top: 10px; padding-left: 5px;"> </div>
<span id="feedListDropDown" style="display: none; position: absolute; top:30px; right:2px">
Go to :
<select id="feeds" name="feeds" onChange="feedSwitch();"></select>
<a href="javascript:void(0)" onclick="feedSwitch()"><img src="http://graphics8.nytimes.com/images/global/buttons/go.gif" alt="Go" border="0"/></a>
</span>
</div>
<div id="content" style="min-height:300px;">
<div id="tab0"></div>
<div id="tab1"></div>
<div id="tab2"></div>
</div>
]]>
</Content>
</Module>
Page Rating
Rating: 3.0/5 (2 votes cast)