<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-6628515104974449767</atom:id><lastBuildDate>Sun, 08 Jun 2025 12:12:03 +0000</lastBuildDate><category>JavaScript</category><category>SharePoint</category><category>Visualization</category><category>Web Services</category><category>Silverlight</category><category>.net</category><category>About me</category><category>JQuery</category><category>Open Source</category><category>Tutorial</category><title>Herve 2.0</title><description>Random thoughts on SharePoint, Silverlight, Ajax, Web Services, Social Networking, Consumer Technologies... I know... too much...</description><link>http://herve20.blogspot.com/</link><managingEditor>noreply@blogger.com (Anonymous)</managingEditor><generator>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><language>en-us</language><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-7660079992852993260</guid><pubDate>Sun, 23 Nov 2014 23:40:00 +0000</pubDate><atom:updated>2014-11-23T18:40:00.122-05:00</atom:updated><title>Hating yourself again for forgetting to pick-up your kids on your way home? Tell Dr. Siri...</title><description>I use Siri pretty much every day to stop me from slapping my forehead every time I forget something (which used to be all the time).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxf1-oqRdvnmGVqMpIupHnIdB2pyq4sKl5peTtqyi4u2BX2eFWMLdus758HcwBaBKmaU45lFNmfXbGi150VKg' class='b-hbp-video b-uploaded' frameborder='0'&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://herve20.blogspot.com/2014/11/hating-yourself-again-for-forgetting-to.html</link><thr:total>0</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-3884943937523299822</guid><pubDate>Fri, 26 Apr 2013 22:00:00 +0000</pubDate><atom:updated>2013-04-26T18:33:28.666-04:00</atom:updated><title>A "Smart Drop-Down" for SharePoint</title><description>&lt;span style="color: #999999;"&gt;&lt;i&gt;     &lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c1f86c1d-2f1c-4ba6-bbd0-9fade94d4d95" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="color: #999999;"&gt;&lt;i&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Sharepoint" rel="tag"&gt;Sharepoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/jquery" rel="tag"&gt;jquery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/csom" rel="tag"&gt;csom&lt;/a&gt;,&lt;a href="http://technorati.com/tags/select" rel="tag"&gt;select&lt;/a&gt;,&lt;a href="http://technorati.com/tags/search" rel="tag"&gt;search&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #999999;"&gt;&lt;i&gt; This article is about providing a super smart drop-down, that helps users quickly find and access your key content, even if you have hundred of pages to offer. Technology involved: SharePoint list; Client Side Object Model (CSOM), JQuery.&lt;/i&gt;&lt;/span&gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;&lt;span style="color: #f79646;"&gt;If the content hosted on your site cannot easily be found and accessed by users, then let's face it: you have wasted your time and your company's money&lt;/span&gt;&lt;/h4&gt;Making your content findable is not easy though, and you only have 3 technical solutions:   &lt;br /&gt;
&lt;br /&gt;
1) Your enterprise&lt;b&gt; search engine&lt;/b&gt; kind of works, but half of your users are not happy with it (mmmmh... is it because you never bothered thinking of / testing what keywords your occasional visitors may try to use?...)   &lt;br /&gt;
2) &lt;b&gt;Navigation menus&lt;/b&gt; are great, but you don't own the navigation tree from the top down, so unless the visitor is already "close" to your site (say they are visiting a related parent site), they can't navigate their way down to your content.   &lt;br /&gt;
3) Once they have finally reached your site, most site owners offer a "&lt;b&gt;quick links" drop-down box&lt;/b&gt; to help visitors find popular content. Problem is, past 5 items or so, the drop-down becomes unusable because it takes too much time to read.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;       &lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0omHI9EIkU1slIu70ZrPegL3cz2kbo6jSRybkVpSxMhPOGg7sY7UqxzPpni5bsINjUzuqPHDN4lMHOjK3RdKduCANbz7LU5g9ui2BZ26ynGwP54YqHrgZwIAZTUS2wowu1TIP7ARGPrk/s1600-h/Before2.jpg"&gt;&lt;img alt="Before" border="0" height="146" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg16ddpy9UuwsKqh7g7rVwde7g5QR-Can8H75tCznKBZVwei2VWcnzJq8zqqDRWnO32NEk9gW3CD4XHMafuSuUtq2c9xWK-kLgvy2cvHs9d1mRdxWcyMsHS6xlvYKQwpydmJbKYolAwEDQ/?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Before" width="244" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;
&lt;tr&gt;       &lt;td class="tr-caption" style="text-align: center;"&gt;Figure 1&lt;/td&gt;     &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
This is your typical "quick links" drop-down. It works just fine, but only if you have a handful of items to offer.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;       &lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzGp0IFSj_SqJfSXeloCiu_KAXuIAScW-nFzQRtXBeGDVv1B92VUmtcRx36-0u7NfuZSpKCHXFnSrmOWD4_v7LLBNbRIOE_yo_9HOGXF81DsNQqwOVh2MIHPqrwykbirAFf5ZskvjiQVI/s1600-h/After3.jpg"&gt;&lt;img alt="After" border="0" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifmstKzP2Mhizc1uPQ_Q46M1LnoVtplEsgj9mnlE-yFoASE4XU7RDZhyphenhyphenD7d6OPXSD7k3a7K6x5E2E4FckbfcQULO0RJ9WP99e_BVvrlRc0gZlTFUVO824nqRLJ8t3MwQZ4CmIyLWfcMY8/?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="After" width="252" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;
&lt;tr&gt;       &lt;td class="tr-caption" style="text-align: center;"&gt;Figure 2&lt;/td&gt;     &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Our "Smart Drop-Down" offers many advantages:   &lt;br /&gt;
- group items by categories (see Figure 2, where we are using Recommended", "Most popular" and "Others" categories)   &lt;br /&gt;
- use html for each items, or even for the categories   &lt;br /&gt;
- users can type keywords, and the list reduces in real time (type-ahead). So it doesn't matter if you have hundreds of items!   &lt;br /&gt;
- each items can have synonyms. So users can use other keywords than the ones displayed in the list. For example the last item ("iPad Getting Started") can be found even if user types "help" (see Figure 3)   &lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;       &lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLfnaYvlDQTu7SdKk35iyEXL9cyAXpFS6RjJkbcjIRXbbbQsBo3PpOf9GYSqJHyVAScpFruw8Rw2pDzTU88n5eqzJrfMxk6T1AeMsrd4IhN3Jxzv22g6-FMZI6899ySx8bZf-kIWz0Azc/s1600-h/Synonyms3.jpg"&gt;&lt;img alt="Synonyms" border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgem_XplzAJBDX5c81UmQi2ySizWWRKpfrz8YcNxMXDeF9sroLdI1gxICeQXWL9U_nC4Er1gXhO0jpa0DR6vvKW1i0hakQbYiYzjLGQMvmxPgNy5iSXg68hpQ0bHNkdikiclKMrW-XTtd8/?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Synonyms" width="302" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;
&lt;tr&gt;       &lt;td class="tr-caption" style="text-align: center;"&gt;Figure 3&lt;/td&gt;     &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;&lt;span style="color: #f79646;"&gt;How did we do it?&lt;/span&gt;&lt;/h4&gt;Most of the logic relies on &lt;a href="https://github.com/ivaynberg"&gt;Igor Vaynberg&lt;/a&gt;'s code &lt;a href="http://ivaynberg.github.io/select2/"&gt;SELECT2&lt;/a&gt;, an excellent JavaScript library which transforms a regular HTML SELECT drop-down into a cool type-ahead drop-down.     &lt;br /&gt;
All the drop-down items are placed in a SharePoint list. The same list contains the synonyms that users may think of using. See below for the details about this list.     &lt;br /&gt;
That's pretty much it! The code attached below simply loads the SELECT2 library and CSS, loads the list items using Client Side Object Model (CSOM) and performs a few formatting operations to take care of the categories and the synonyms.     &lt;br /&gt;
&lt;em&gt;&lt;span style="color: #666666;"&gt;A quick note about CSOM: if you read my previous posts, I was (still am) a big fan of SP_API library which is using standard SOAP operations to query SharePoint list web services. But I'm using CSOM more often, as it shows better performance and allows for more operations not available through web services.&lt;/span&gt;&lt;/em&gt;     &lt;br /&gt;
Let’s start with the list. Name your list “&lt;em&gt;Quick Links&lt;/em&gt;” and add the following columns:&lt;br /&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMoQCXtfXRzvcBYtPfFv7hadoQyWzV8E-uMELWMcaW14LEgvOissGoGBK-GOQPx75oriJK2zs0vgNlyPcfPEyq1AwJqYXOwhOEPNpY6_myjwnp44XkHof4Sq0togBx31yYO3AHPRSKja0/s1600-h/List_Columns%25255B1%25255D.jpg"&gt;&lt;img alt="List_Columns" border="0" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1w8Tk4Ap7g-4_dugNFVMgCVbK5-aBFu02f09HRQtcwKRfiMVe9YSegAWUVj7lQk9om_4YGMxIPugAQK9XUgGDnE5Bn53SxZyQuh0k_VUyth_Vy8aCVOsMMtOMWLQau46nnqxEeb3l1cw/?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="List_Columns" width="488" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;table border="0" cellpadding="2" cellspacing="0" style="width: 400px;"&gt;&lt;tbody&gt;
&lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;Column Category:&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ3BC_yumyOhKOdl1cUvexPXeCs7RZpOFxjE50bjHY2HXNEw7tVFyBehRJaLpevkvlmLQHzRnAFfju5op5UkXWiARNxDMT9LZUlNOINJmU3UEwovjJiafQJ1vd0oEebPt12QOlR9_rVQk/s1600-h/Column_Category5.jpg"&gt;&lt;img alt="Column_Category" border="0" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibNtdSESC_0OC0zdHh2vyUglU-l_xsCIaPTLMQtsYYCFlKZsyuQsaEU0fYwIGjkTugYcwROtTlvyiz5V6lNrsvhfpzsM23Qqa9fane-sIxMqY5p60dMilPMhOxQIz5CpdnFMqVDhw5Xm8/?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Column_Category" width="174" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&lt;strong&gt;Column Synonyms&lt;/strong&gt;:&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBkRoRJ0u_DDiOqINPcgFoHnIw5atGUpGxEX0CcKs1yysv_qElCne7SakRHqC9fGgMVOP8KAXJTSMJRWK_Y7PVLGGqLAyb4zHBa_56QzRzvSrWxTebbx_OkK9cvuyRVLzeWuK7p0P-To4/s1600-h/Column_Synonyms%25255B1%25255D.jpg"&gt;&lt;img alt="Column_Synonyms" border="0" height="389" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4OibtONMHovzVWahNdPznkTlgUr6M7TWiV1T6bZ99BsEii7rGrEEA3KEmrV1k8MS0zaFqYMjXJorKbRd__n2RGCeneiOxhECWubv3isjzI5mLnRkw7JGr8pXS3SHw6_9OQeMWIPTFEo/?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Column_Synonyms" width="177" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;pre class="prettyprint  lang-*"&gt;&amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link href=&amp;quot;select2.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; /&amp;gt;
&amp;lt;script src=&amp;quot;select2.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;style&amp;gt;
.select2-result-label {
 font-size: 12px;
 padding-top: 0px;
 padding-bottom: 0px;
}
.select2-match {
 font-weight: bold;
 text-decoration: none !important;
}
&amp;lt;/style&amp;gt;

&amp;lt;!-- SELECT DROPDOWN PLACEHOLDER --&amp;gt;
&amp;lt;div id=&amp;quot;smartDropDownContainer&amp;quot;  style=&amp;quot;MARGIN: 15px; padding:15px;BORDER-COLLAPSE: collapse;background-color:  #13709D&amp;quot;&amp;gt;
 &amp;lt;select id=&amp;quot;idSmartDropDown&amp;quot; class=&amp;quot;combobox input-large&amp;quot; name=&amp;quot;normal&amp;quot; style=&amp;quot;WIDTH: 240px;&amp;quot; onchange=&amp;quot;smartGoTo(this);&amp;quot;&amp;gt;
 &amp;lt;option&amp;gt;
 &amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&amp;lt;/div&amp;gt;

 &amp;lt;script&amp;gt;
// *** ******************************************************** ***
// *** RETRIEVE LIST ITEMS USING SHAREPOINT CLIENT OBJECT MODEL ***
// *** ******************************************************** ***

// *** Settings
var siteUrl = '/departments/TGSNew/workspaces/TGSIAATT'; // the url of the site containing the list
var listTitle = &amp;quot;Quick Links&amp;quot;;
var camlQuery = &amp;quot;&amp;quot;;  // if empty string, then we use &amp;quot;SP.CamlQuery.createAllItemsQuery()&amp;quot;
var useCategories = true; // use &amp;quot;Category&amp;quot; column of the list to group items together
var displayNumberForCategories = true;  // Category names start with a &amp;quot;number&amp;quot; for ordering (exmaple: &amp;quot;5 - Most Popular&amp;quot;). This setting indicates if the number must be displayed.

// *** Change the values if you are not using these names for your columns
var columnTitle = &amp;quot;Title&amp;quot;;
var columnURL = &amp;quot;URL&amp;quot;;
var columnSynonyms = &amp;quot;Synonyms&amp;quot;;
var columnCategory = &amp;quot;Category&amp;quot;;

// *** Other global variables (do not change)
var listItems;
// ---&amp;gt; EVERYTHING STARTS HERE:
ExecuteOrDelayUntilScriptLoaded(retrieveAllListProperties, &amp;quot;sp.js&amp;quot;);

// *** Retrieves items from &amp;quot;listTitle&amp;quot;
function retrieveAllListProperties() {
var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    var myList = oWebsite.get_lists().getByTitle(listTitle);
    camlQuery = '&amp;lt;View&amp;gt;&amp;lt;Query&amp;gt;&amp;lt;Where&amp;gt;&amp;lt;IsNotNull&amp;gt;&amp;lt;FieldRef Name=&amp;quot;' + columnURL + '&amp;quot; /&amp;gt;&amp;lt;/IsNotNull&amp;gt;&amp;lt;/Where&amp;gt;';
    camlQuery += '&amp;lt;OrderBy&amp;gt;&amp;lt;FieldRef Name=&amp;quot;' + columnCategory + '&amp;quot; Ascending=&amp;quot;True&amp;quot; /&amp;gt;&amp;lt;/OrderBy&amp;gt;&amp;lt;/Query&amp;gt;&amp;lt;/View&amp;gt;';
    if (camlQuery==&amp;quot;&amp;quot;) {
    query  = SP.CamlQuery.createAllItemsQuery();
     } else {
    query  = new SP.CamlQuery();
query .set_viewXml(camlQuery);
     }

 listItems = myList.getItems(query );
 
    clientContext.load(listItems);
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuickLinksQuerySucceeded), Function.createDelegate(this, this.onQuickLinksQueryFailed));
}

// *** This function is called asynchronously if the request is successfull
function onQuickLinksQuerySucceeded(sender, args) {
    var listInfo = '';
    var listEnumerator = listItems.getEnumerator();
// Loop through all the items in the list
var previousGroup =&amp;quot;&amp;quot;;
var currentGroup =&amp;quot;&amp;quot;;
var firstGroup = true;
var selectHTML=&amp;quot;&amp;quot;;
    while (listEnumerator.moveNext()) {
        var oneItem = listEnumerator.get_current();
var strDisplay = oneItem.get_item(columnTitle);
var syn = oneItem.get_item(columnSynonyms);
currentGroup = oneItem.get_item(columnCategory);
if (!displayNumberForCategories) currentGroup = startStringAfter(currentGroup, &amp;quot;.&amp;quot;);
if (previousGroup!=currentGroup) {

if (!firstGroup) selectHTML+=&amp;quot;&amp;lt;/optgroup&amp;gt;&amp;quot;;
selectHTML += &amp;quot;&amp;lt;optgroup label='&amp;quot; + currentGroup + &amp;quot;' data-HTMLVersion='&amp;quot; + escape(currentGroup) + &amp;quot;'&amp;gt;&amp;quot;;
previousGroup = currentGroup;
firstGroup = false;
}

selectHTML += &amp;quot;&amp;lt;OPTION data-synonyms='&amp;quot;+ escape(syn) +&amp;quot;' data-HTMLVersion='&amp;quot; + escape(strDisplay) + &amp;quot;' value='&amp;quot; + escape(oneItem.get_item(columnURL).get_url()) + &amp;quot;'&amp;gt;&amp;quot; + strDisplay + &amp;quot;&amp;lt;/OPTION&amp;gt;&amp;quot;;

   
    }  // end while (listEnumerator.moveNext())
    if (!firstGroup) selectHTML+=&amp;quot;&amp;lt;/optgroup&amp;gt;&amp;quot;; 
    $(&amp;quot;#idSmartDropDown&amp;quot;).append(selectHTML);
    
    // This line calls the code to transform the SELECT into the Smart Dropdown
$('#idSmartDropDown').select2({
 placeholder: &amp;quot;Select or type something&amp;quot;,
 allowClear: true,
     matcher: function(term, text, opt) {
    // consider also the synonyms for matching results
        return text.toUpperCase().indexOf(term.toUpperCase())&amp;gt;=0
            || unescape(opt.attr(&amp;quot;data-synonyms&amp;quot;)).toUpperCase().indexOf(term.toUpperCase())&amp;gt;=0;
    },
    formatResult: function(item) { 
    // Display HTML version (stored as an attribute), instead of actual value
    return unescape(item.element[0].getAttribute('data-HTMLVersion')); 
     }
});      
}

function smartGoTo(selectedObj) {
 var idx = selectedObj.selectedIndex;
 var mySelection = selectedObj.options[idx].value;
 window.location = unescape(mySelection);
}

// This function strips a string from the left part of a given character
function startStringAfter(myString, searchForCharacter) {
 // The separating character is typically in the first 3 characters
 var idx = myString.substring(0,3).indexOf(searchForCharacter);
 var sReturn = myString;
 if (idx!= -1) sReturn = myString.substring(idx+1);
 return sReturn;
}
function onQuickLinksQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}


&amp;lt;/script&amp;gt;




&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Finally, you will need to download and store locally on your SharePoint site these 2 files:&lt;br /&gt;
&lt;br /&gt;
- &lt;a href="https://docs.google.com/file/d/0ByquPxwftR29SDh6NnBpYmVLWjA/edit?usp=sharing"&gt;Select2.css&lt;/a&gt;&lt;br /&gt;
- &lt;a href="https://docs.google.com/file/d/0ByquPxwftR29ZnoxRU1tZGdFNEU/edit?usp=sharing"&gt;Select2.js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Herve</description><link>http://herve20.blogspot.com/2013/04/a-smart-drop-down-for-sharepoint.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg16ddpy9UuwsKqh7g7rVwde7g5QR-Can8H75tCznKBZVwei2VWcnzJq8zqqDRWnO32NEk9gW3CD4XHMafuSuUtq2c9xWK-kLgvy2cvHs9d1mRdxWcyMsHS6xlvYKQwpydmJbKYolAwEDQ/s72-c?imgmax=800" width="72"/><thr:total>0</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-7040638646715505354</guid><pubDate>Sat, 28 Apr 2012 02:01:00 +0000</pubDate><atom:updated>2012-04-27T22:01:26.202-04:00</atom:updated><title>How to inspect the web traffic coming from your iPad or iPhone</title><description>&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
A few things have been bugging me on my iPad for a while:&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Some web pages (including some of our SharePoint sites) don’t load or don’t load completely on Safari when connecting through our corporate wifi, or through VPN&lt;/li&gt;
&lt;li&gt;&amp;nbsp;I’m just plain curious to understand how some apps like the &lt;a href="http://itunes.apple.com/us/app/imf-news-and-data/id394403891?mt=8"&gt;IMF Data app&lt;/a&gt; get their data, so I may be able to leverage the same information on my own apps&lt;/li&gt;
&lt;li&gt;And then I just want to understand what some apps are doing with my data: do they send it &amp;nbsp;to their servers? Is it encrypted?&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Of course if we were talking about a PC, I would just use my good old friend &lt;a href="http://www.fiddler2.com/fiddler2/version.asp"&gt;Fiddler 2&lt;/a&gt;, a tool that has saved me hundreds of hours of debugging time over the years. But I’m not on a PC… &lt;b&gt;Or am I?!&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Turns out, you &lt;b&gt;can &lt;/b&gt;use Fiddler 2 on your PC to monitor your iThing traffic! And it’s really simple. Just follow these steps:&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMUAGnpFsHieZzRbL2RLNhV841gj6ak188Oc6esb-C1dFDdNGFAuEmCtrW6lh8KkFfmNmkDRye6zaZiNRiQLnUkJDMSRw6f-OnNVFtTl0rBFZPmGYinHTpZxX_-lWRtZh4mkhrvszNgCo/s1600/SC-CMD.PNG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMUAGnpFsHieZzRbL2RLNhV841gj6ak188Oc6esb-C1dFDdNGFAuEmCtrW6lh8KkFfmNmkDRye6zaZiNRiQLnUkJDMSRw6f-OnNVFtTl0rBFZPmGYinHTpZxX_-lWRtZh4mkhrvszNgCo/s320/SC-CMD.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;Make sure both your PC and you iPhone or iPad &lt;b&gt;are on the same wifi&lt;/b&gt;. Be aware, some secure wifi, often corporate wifi, won’t allow the communication of your iPad with a PC, so you may have to do this from home&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Find your PC IP address&lt;/b&gt;. Just open a Command window, and type IPConfig (Figure 1).&lt;/li&gt;
&lt;li&gt;Now go to your iPad, Settings -&amp;gt; Wi-Fi -&amp;gt;Select the same wifi connection used on your PC and tap the blue arrow.&lt;/li&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuF7GU3F__GrjAeX91b8uYvAf0GCseevV-TftYg8XKfa-2X9-o_71e3DEZiQEqMVDfm_Lolo_HdZRTCpDxyOenAFMbGx939EcTRofJRkKQ5O3b-2wzTUiSwLPt_Xybacxf2pZPJJ6wBDc/s1600/SC-iPad.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuF7GU3F__GrjAeX91b8uYvAf0GCseevV-TftYg8XKfa-2X9-o_71e3DEZiQEqMVDfm_Lolo_HdZRTCpDxyOenAFMbGx939EcTRofJRkKQ5O3b-2wzTUiSwLPt_Xybacxf2pZPJJ6wBDc/s320/SC-iPad.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;li&gt;Go at the bottom, tap “Manual”, and enter the IP address in the “Server” field. Type &lt;b&gt;8888 &lt;/b&gt;for the “Port” field (Figure 2)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="MsoNormal"&gt;
Your iPad is ready. Now all that you need to do is Open Fiddler 2 and configure it.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
5. Open Fiddler 2. Go to Tools -&amp;gt; Fiddler Options -&amp;gt; Tab Connections -&amp;gt; Check the box “&lt;b&gt;Allow remote computers to connect&lt;/b&gt;”&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRCiZwZOyBjNEVCYb_sxwhipRuHfvie544aOMWfCb04ZG5ZnkISEjzca0ZQ0rmGYrjTo7Ki1rMcjLoyrGSwd9IYR8mV3dIdhkk4JUY0NaRwSwcys1CNaOJK4mxHf2DOkw62a6qR_r00MI/s1600/SC-Fiddler2b.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRCiZwZOyBjNEVCYb_sxwhipRuHfvie544aOMWfCb04ZG5ZnkISEjzca0ZQ0rmGYrjTo7Ki1rMcjLoyrGSwd9IYR8mV3dIdhkk4JUY0NaRwSwcys1CNaOJK4mxHf2DOkw62a6qR_r00MI/s400/SC-Fiddler2b.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
And voila! All you ipad or iPhone traffic should now display on your PC (Figure 3). Make sure you shut down on your PC any app that might generate some HTTP noise.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Have fun discovering what your iThing is up to!&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://herve20.blogspot.com/2012/04/how-to-inspect-web-traffic-coming-from.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMUAGnpFsHieZzRbL2RLNhV841gj6ak188Oc6esb-C1dFDdNGFAuEmCtrW6lh8KkFfmNmkDRye6zaZiNRiQLnUkJDMSRw6f-OnNVFtTl0rBFZPmGYinHTpZxX_-lWRtZh4mkhrvszNgCo/s72-c/SC-CMD.PNG" width="72"/><thr:total>0</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-86540371829733337</guid><pubDate>Sat, 20 Feb 2010 17:50:00 +0000</pubDate><atom:updated>2010-02-20T12:50:36.685-05:00</atom:updated><title>Silly me…</title><description>&lt;p&gt;I’ve started this blog a few months ago, and just realized 3 days ago why I was getting no comment on my posts: the comments section was not working! Duh! I’ve fixed that, apologies if you’ve been frustrated in the past attending the leave a comment. Try again now.&lt;/p&gt;  </description><link>http://herve20.blogspot.com/2010/02/silly-me.html</link><thr:total>2</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-4809925124633491607</guid><pubDate>Thu, 11 Feb 2010 17:39:00 +0000</pubDate><atom:updated>2010-02-13T12:52:10.491-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">Visualization</category><category domain="http://www.blogger.com/atom/ns#">Web Services</category><title>Visualize your SharePoint Calendar with a Dynamic Timeline</title><description>&lt;span style="color: orange;"&gt;[Update Feb 2010: see &lt;/span&gt;&lt;a href="http://herve20.blogspot.com/2010/02/visualize-whats-new-on-sharepoint-site.html"&gt;&lt;span style="color: orange;"&gt;new blog post&lt;/span&gt;&lt;/a&gt;&lt;span style="color: orange;"&gt; for&amp;nbsp; more advanced version]&lt;/span&gt;&lt;br /&gt;
I’m a lazy developer. I hate reinventing the wheel. Worse, I like stealing other people’s wheels! I guess that’s why I love JavaScript so much: no need to have access to any server, I can embed my script into this very blog (or into a Content Editor Web Part if I’m using SharePoint). I can point to a JavaScript library other geniuses have invented, and use their fancy functions against some of the enterprise data accessible through XML (RSS, Web services, REST, etc.), and voila! I can impress my boss in just an hour of work! In future articles, I’m going to show a few examples of amazing things you can do in JavaScript and enterprise data.&lt;br /&gt;
Starting with this example. Here I’m going to show how to visualize a SharePoint calendar with the &lt;a href="http://www.simile-widgets.org/timeline/"&gt;SIMILE Timeline widget&lt;/a&gt;.&lt;br /&gt;
&amp;nbsp;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSXSVmsECrQQOL1zXELt0_E9vzaDAhobOJ_htf5uDwifEuTDDC5djMVZdgUR18eFzx-cchD1DRcqQfu0y21OWUu66dR73usQBFRqAFIQq124jstE2gDNxyUfr1XViYENner6IyQOKwvYM/s1600-h/Timeline%5B7%5D.jpg"&gt;&lt;img alt="Timeline" border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuutIGwhNsWtj-_etmcz7qnMU8f6_3_jKh4QConJkuGsRP9vWn0wOW3qbUarviEDxbkwipA4uazXzgMGjFnMKbyV1q7iWOcby8qxt13z03DGU13SFolYkStx39tp94YO221JMtvN2jdu8/?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="Timeline" width="584" /&gt;&lt;/a&gt; &lt;br /&gt;
This is what we’re going to use:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.simile-widgets.org/timeline/"&gt;SIMILE Timeline widget&lt;/a&gt; for the visualization. &lt;/li&gt;
&lt;li&gt;Darren’s &lt;a href="http://darrenjohnstone.net/2008/07/22/examples-for-the-sharepoint-and-office-live-javascript-api/"&gt;SharePoint JavaScript API&lt;/a&gt; to access any SharePoint data. Any SharePoint list or document library data &lt;a href="http://www.developer.com/tech/article.php/3104621/SharePoint-and-Web-Services"&gt;can be accessed through a web service&lt;/a&gt;, so Darren’s API makes accessing SharePoint data really easy (you can also use JQuery as I will show in future articles, although I like this one better). You will soon find yourself using this API in many scripts, so to improve its availability I suggest you copy Darren’s JavaScript files on your production server. &lt;/li&gt;
&lt;li&gt;And finally SharePoint calendar data itself. As I said, the events details are accessible in JavaScript through the calendar web service. To make life easier, all you need to provide is the RSS feed associated to your calendar (see bottom of the script). The feed URL contains both the path of your calendar and its list ID, which is all we need to access the web service. &lt;/li&gt;
&lt;/ul&gt;So there you have it. Modify just the few lines where you see “myserver” (i.e. line 7, 8 9 and bottom of the script), insert the script into a Content Editor Web Part, and enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #fbfbfb; border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; border-right: #cecece 1px solid; border-top: #cecece 1px solid; min-height: 40px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 650px;"&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&amp;lt;script language="&lt;span style="color: darkred;"&gt;javascript&lt;/span&gt;" type="&lt;span style="color: darkred;"&gt;text/javascript&lt;/span&gt;"&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; Timeline_urlPrefix = "&lt;span style="color: darkred;"&gt;http://simile.mit.edu/timeline/api/&lt;/span&gt;";
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// Include these javascript files only if not loaded already by another web part&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// In portals like a SharePoint page, you never know what script might already be loaded by the master page or other web parts&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;includeJSScript("&lt;span style="color: darkred;"&gt;http://simile.mit.edu/timeline/api/timeline-api.js&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;includeJSScript("&lt;span style="color: darkred;"&gt;http://myserver/js/spapi/spapi_core.js&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;includeJSScript("&lt;span style="color: darkred;"&gt;http://myserver/js/spapi/spapi_types.js&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;includeJSScript("&lt;span style="color: darkred;"&gt;http://myserver/js/spapi/spapi_lists.js&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; includeJSScript(p_file) {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// before we insert this script, we need to check if it already exists&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; bAlreadyExists = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; scripts = &lt;span style="color: blue;"&gt;document&lt;/span&gt;.getElementsByTagName('script');
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; scripts.&lt;span style="color: blue;"&gt;length&lt;/span&gt;; i++) {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (scripts[i].src == p_file) {
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;//scripts[i] is the one&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;bAlreadyExists = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;break&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (!bAlreadyExists) {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; v_script = &lt;span style="color: blue;"&gt;document&lt;/span&gt;.createElement('script');
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;v_script.type = 'text/javascript';
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;v_script.src = p_file;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;document&lt;/span&gt;.getElementsByTagName('head')[0].appendChild(v_script);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// Call the web service associated to the calendar to extract its items&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; getCalendarListItems() 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;{ 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; lists = &lt;span style="color: blue;"&gt;new&lt;/span&gt; SPAPI_Lists(ExtractWebSiteURL(MyList_RSS_Url)); 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; items = lists.getListItems(ExtractListID(MyList_RSS_Url),'',"&lt;span style="color: darkred;"&gt;&amp;lt;Query&amp;gt;&amp;lt;OrderBy&amp;gt;&amp;lt;FieldRef Name='EventDate' /&amp;gt;&amp;lt;/OrderBy&amp;gt;&amp;lt;/Query&amp;gt;&lt;/span&gt;",'',100); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (items.&lt;span style="color: blue;"&gt;status&lt;/span&gt; == 200) 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;{ 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; rows = items.responseXML.getElementsByTagName("&lt;span style="color: darkred;"&gt;z:row&lt;/span&gt;");        
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; rows; 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;} 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;else&lt;/span&gt; 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;{ 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;; 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;} 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;} 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; resizeTimerID = &lt;span style="color: blue;"&gt;null&lt;/span&gt;; 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; formatDateString(strDate) 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;{ 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; yearStr = strDate.substr(0, 4); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; monthStr = strDate.substr(5, 2); 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; dayStr = strDate.substr(8, 2);        
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; monthStr + "&lt;span style="color: darkred;"&gt;/&lt;/span&gt;" + dayStr + "&lt;span style="color: darkred;"&gt;/&lt;/span&gt;" + yearStr + "&lt;span style="color: darkred;"&gt; &lt;/span&gt;" + strDate.substr(11); 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;} 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// This is one of the most important functions. Once the calendar events are retrieved, &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// we loop through them and add them to the timeline&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; main() 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;{ 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; items = getCalendarListItems(); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (items == &lt;span style="color: blue;"&gt;null&lt;/span&gt;) 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;{ 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;document&lt;/span&gt;.getElementById("&lt;span style="color: darkred;"&gt;my-timeline&lt;/span&gt;").innerHTML = "&lt;span style="color: darkred;"&gt;Cannot get items from list &amp;lt;i&amp;gt;&lt;/span&gt;" + ExtractWebSiteURL(MyList_RSS_Url) + "&lt;span style="color: darkred;"&gt;/&lt;/span&gt;" + ExtractListID(MyList_RSS_Url) + "&lt;span style="color: darkred;"&gt;&amp;lt;i&amp;gt;&lt;/span&gt;"; 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;; 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;} 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; eventSource = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Timeline.DefaultEventSource(); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// for each event returned by the calednar web service, we create a timeline event&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; items.&lt;span style="color: blue;"&gt;length&lt;/span&gt;; ++i) 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;{ 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; ows_EventDate = formatDateString(items[i].getAttribute("&lt;span style="color: darkred;"&gt;ows_EventDate&lt;/span&gt;")); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; ows_EndDate = formatDateString(items[i].getAttribute("&lt;span style="color: darkred;"&gt;ows_EndDate&lt;/span&gt;")); 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; ows_Title = items[i].getAttribute("&lt;span style="color: darkred;"&gt;ows_Title&lt;/span&gt;"); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; ows_Location = items[i].getAttribute("&lt;span style="color: darkred;"&gt;ows_Location&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; eventDate = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;Date&lt;/span&gt;(ows_EventDate); 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; endDate = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;Date&lt;/span&gt;(ows_EndDate); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; event = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Timeline.DefaultEventSource.Event( 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;eventDate, &lt;span style="color: green;"&gt;//start &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;endDate, &lt;span style="color: green;"&gt;//end &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;eventDate, &lt;span style="color: green;"&gt;//latestStart &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;endDate , &lt;span style="color: green;"&gt;//earliestEnd &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;true&lt;/span&gt;, &lt;span style="color: green;"&gt;//instant (use FALSE if events are longer than a few hours of duration&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;ows_Title, &lt;span style="color: green;"&gt;//text &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;"&lt;span style="color: darkred;"&gt;&amp;lt;strong&amp;gt;Where? &amp;lt;/strong&amp;gt;&lt;/span&gt;" + ows_Location + "&lt;span style="color: darkred;"&gt;&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;When? &amp;lt;/strong&amp;gt;&lt;/span&gt;"  &lt;span style="color: green;"&gt;//description that appears in a bubble when user clicks on the event&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;); 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;eventSource.add(event); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;} 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// This is where we define 3 timelines. Advanced users can play with these parameters to use different timeline or timeline behaviors&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// See http://code.google.com/p/simile-widgets/wiki/Timeline for more information&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; theme = Timeline.ClassicTheme.create(); &lt;span style="color: green;"&gt;// create the theme    &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;theme.event.bubble.width = 300;   &lt;span style="color: green;"&gt;// modify this bubble size to fit your needs   &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;theme.event.bubble.height = 170;    
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; bandInfos = [ 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;Timeline.createBandInfo({ 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;trackGap:       0.5, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;width:          "&lt;span style="color: darkred;"&gt;60%&lt;/span&gt;", 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;intervalUnit:   Timeline.DateTime.WEEK, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;intervalPixels: 100, 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;timeZone : 8, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;eventSource: eventSource, theme:theme 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}), 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;Timeline.createBandInfo({ 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;showEventText:  &lt;span style="color: blue;"&gt;false&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;trackHeight:    0.5, 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;trackGap:       0.2, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;width:          "&lt;span style="color: darkred;"&gt;25%&lt;/span&gt;", 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;intervalUnit:   Timeline.DateTime.MONTH, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;intervalPixels: 150, 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;timeZone : 8, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;eventSource: eventSource 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}), 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;Timeline.createBandInfo({ 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;showEventText:  &lt;span style="color: blue;"&gt;false&lt;/span&gt;, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;trackHeight:    0.5, 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;trackGap:       0.2, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;width:          "&lt;span style="color: darkred;"&gt;15%&lt;/span&gt;", 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;intervalUnit:   Timeline.DateTime.YEAR, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;intervalPixels: 400, 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;timeZone : 8, 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;eventSource: eventSource 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}) 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;]; 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;bandInfos[1].syncWith = 0; 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;bandInfos[2].highlight = &lt;span style="color: blue;"&gt;true&lt;/span&gt;; 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;bandInfos[2].syncWith = 1; 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; timeLine = Timeline.create(&lt;span style="color: blue;"&gt;document&lt;/span&gt;.getElementById("&lt;span style="color: darkred;"&gt;my-timeline&lt;/span&gt;"), bandInfos); 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;} 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; ExtractWebSiteURL(sUrl) {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; index = sUrl.toLowerCase().indexOf("&lt;span style="color: darkred;"&gt;_layouts&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; MyCurrentPath = "&lt;span style="color: darkred;"&gt;&lt;/span&gt;";
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (index != -1) {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;MyCurrentPath = sUrl.substring(0, index);
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;MyCurrentPath = MyCurrentPath.substring(0,MyCurrentPath.lastIndexOf('/'));
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;else&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; MyCurrentPath 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; ExtractListID(sUrl) {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; index = sUrl.toLowerCase().indexOf("&lt;span style="color: darkred;"&gt;_layouts&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; DestinationListID = "&lt;span style="color: darkred;"&gt;&lt;/span&gt;";
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (index != -1) {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;DestinationListID = &lt;span style="color: blue;"&gt;unescape&lt;/span&gt;(sUrl.substring(index + 28, sUrl.&lt;span style="color: blue;"&gt;length&lt;/span&gt;));
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;else&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; DestinationListID 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// _spBodyOnLoadFunctionNames.push is a SharePoint function that insures that the script will be run only AFTER the page has been loaded&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;_spBodyOnLoadFunctionNames.push("&lt;span style="color: darkred;"&gt;main&lt;/span&gt;"); 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// ******************** Settings ******************** &lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;span style="color: green;"&gt;// URl of the RSS associated to your calendarvar&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;MyList_RSS_Url = "&lt;span style="color: darkred;"&gt;http://myserver/mysite/_layouts/listfeed.aspx?List=%7B3186664F%2D626C%2D4925%2D896B%2D53517E1D0244%7D&lt;/span&gt;"; 
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&amp;lt;!-- Feel free to modify the following parameters: height, border, font --&amp;gt;
&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&amp;lt;div id="&lt;span style="color: darkred;"&gt;my-timeline&lt;/span&gt;" style="&lt;span style="color: darkred;"&gt;height: 120px; border: 1px solid #aaa; font-size: 9pt&lt;/span&gt;"&amp;gt;&amp;lt;/div&amp;gt;  
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: white; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; font-family: consolas,'Courier New',courier,monospace; font-size: 11px; margin: 0em; width: 100%;"&gt;&lt;/pre&gt;&lt;/pre&gt;</description><link>http://herve20.blogspot.com/2009/11/visualize-your-sharepoint-calendar-with.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuutIGwhNsWtj-_etmcz7qnMU8f6_3_jKh4QConJkuGsRP9vWn0wOW3qbUarviEDxbkwipA4uazXzgMGjFnMKbyV1q7iWOcby8qxt13z03DGU13SFolYkStx39tp94YO221JMtvN2jdu8/s72-c?imgmax=800" width="72"/><thr:total>38</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-1143137882529578061</guid><pubDate>Thu, 11 Feb 2010 17:22:00 +0000</pubDate><atom:updated>2010-02-16T15:05:17.492-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">Visualization</category><title>Visualize What’s New on a SharePoint Site with SIMILE Timeline</title><description>&amp;nbsp;It’s often frustrating to connect to a SharePoint site and spend a few minutes looking around to see if anything new has been added or modified on this site. “&lt;em&gt;But that’s why lists and documents libraries have RSS feeds and email notifications&lt;/em&gt;”, you’ll reply. True, if you’re an IT person (which you are, if you’re reading this blog), or one of the few “power users”. But I’m talking about the majority of users, who don’t use RSS feeds and email notifications. Don’t blame them; blame Microsoft who’s done a poor job exposing RSS and email notification features (and don’t expect SharePoint 2010 to fix this issue). The net result is that most of the content you add on your web site will probably go unnoticed.&amp;nbsp; &lt;br /&gt;
&lt;h3&gt;&lt;strong&gt;Enters SharePoint Activities Timeline (SAT, for short)&lt;/strong&gt;&lt;/h3&gt;When dropped on any web site, this JavaScript code (i.e. client side, i.e. nothing to deploy on the server, i.e. not need to negotiate with IT…) will enable site owners to select what lists and document libraries of any site of their choosing will be visualized (in other words: you can visualize on site A, on which you need read/write access, the activity of site B, on which you only need read access). Visitors can then interact with a timeline that shows all activities on the entire site. The timeline is based on MIT’s &lt;a href="http://www.simile-widgets.org/timeline/"&gt;SIMILE Timeline widget&lt;/a&gt;. Here’s an example of the result:&lt;br /&gt;
&lt;div align="center"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWKFuQ0KqYI_uXej3Jqht4SooIo_Kg-Jq7FnFc1gCR0gZqALZDDfK2vLx2aKIU8WXhQ2kGX3ZpfdUuNMGelaywwyl_m1P_GdFcz5-6jGfV2aDhnlScYxgoTlxw1uEuMi-ZP3zAVpbOhIo/s1600-h/SAT1%5B5%5D.jpg"&gt;&lt;img alt="SAT1" border="0" height="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmFqsph9_kD-7NoFIFQ2ggXvMzy1CEtJ3UUNDMtGizxLWhWjOPTPXoe35vzR_nQ0hHVre7jIEbLt2ex5Kzai0Z8jOiPdG1rRb65-begIRo34QJeS7BELsq6SSIjFLtHhW7XY3Fow9tpg/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SAT1" width="575" /&gt;&lt;/a&gt; &lt;/div&gt;The immediate value of this visualization tool is that it displays all new items of selected lists and document libraries of a given site. Users can drag one of the 3 timelines (by day, by month, by year) to quickly browse past and future items.&lt;br /&gt;
But wait, there’s more!&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Clicking on an item displays more details. As you’ll see later in this article, you even have the control of what is being displayed in the callout. A few handy links are available: link to the item itself; subscribe via RSS or email to the related list. &lt;/li&gt;
&lt;/ul&gt;&lt;div align="center"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLjrGR9olqCw0CxAs3qIsBfLmzJ3b3GkGKPBKU_UEpHJR-NpudXEIMFJT2snBx2HQaGrnnezNHvNJ2sacE9PaNO5A8lLlpeGERKIFWQJ2KAPeF5KC1hspjPOF9ImSP2MkWvu84jD4ks84/s1600-h/SAT2%5B4%5D.jpg"&gt;&lt;img alt="SAT2" border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1aKR1YXGXpeuYqKNgWhfZK_6nDFZF2lrPrF_FY3JJoue1XXVh917x6BuYxC0NTSf_643pqcG3d72etHg-vEuDIv6kIzItwxl2CjeBNnychWSQ-xztEDASmPnlF3cWEbv1aXhQFxrGB_E/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SAT2" width="319" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;ul&gt;&lt;li&gt;Making RSS and email subscription features more visible will lead to better dissemination and usage of your content. Site Activity Timeline offers a collapsible panel, which gives access to the selected lists and document libraries RSS and email subscription links. Clicking on “Stay Connected” expends and collapses the panel. &lt;/li&gt;
&lt;/ul&gt;&lt;div align="center"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSUEDNtLoMtME_1xOBgE2TyO-4tPnERi4Go_nhkFL-mi3pe2hShBcpKKFhmRVJqpDccHHSpzx15Xpcl0RP21iQPAFJF9UxK7cf4B2W-gEUneNbTzucSTdlc8hailn3uZdu9Hl3Yx_650c/s1600-h/SAT3a%5B3%5D.jpg"&gt;&lt;img alt="SAT3a" border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig1SP-buyQbgCeQ4_1cOZu3Ak8M9cOUwS19xptDfS74eIeKVo04VHNSTX1ZZpSKAV46p0Pkw7JsmCUGBUXGq_2FyCmnLo16dyQv2XOtFXmyQTDVsOrV0ecYdILfy-I-DiGi5PVDPHIJ1Y/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SAT3a" width="569" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;div align="center"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjQdBHzWsIPqqA14H_Y51_mLwBBkweuHyVKOzTq-rpSoMO-wqQxWqSaLxwx8ScXzvalFKn-_-R5ScBQLqQaiH9Hi3Q9RKxQaMRMZFhM1FTw3AGdCgX_3XDJ9-tmciu9AJ4aBHzGxjVGVE/s1600-h/SAT3b%5B3%5D.jpg"&gt;&lt;img alt="SAT3b" border="0" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi57vPr3IR_7xuFUOnf_OGOh2nM5DXGvTSyrMe552wyxO5NoKn4hX7gzzddlD0mFk4aPApeKlPwBynoMUpa98TS5iXFgUM6Y1fXJ5jIKNFwQgk6BHFHwRDKDFQQTLPUXR2C1PHrcEpbWuc/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SAT3b" width="578" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;ul&gt;&lt;li&gt;The person who adds the JavaScript to the SharePoint site will see another collapsible menu, which gives access to the options of the Site Activity Timeline: &lt;/li&gt;
&lt;/ul&gt;&lt;div align="center"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigARNAe5KUxw3dpnqpaUMPsiXS_KqdOJUjZGGnP9gOWWeyu92GxRcnIPiG2hTPbBJQ1poygTBBDgJ7hob6Tz8vuUgxvg1p19T7fEZyUCqm2FTXu5yRxevbexWOdXgafd2a3EGm6p8Uwb4/s1600-h/SAT4%5B2%5D.jpg"&gt;&lt;img alt="SAT4" border="0" height="43" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXKMdF-NKc1D6xLSfCa3quBqv8V4rfWRLUw5I6RH0CsHDo4mOAGhQ8AWrFrf8xLTp7e_Fpg_-rH2-wqVOaZgHu9cQPT38mGc7f6jXcphbPKqD-nj95bjJ19C5p0ikwjSaQcugWklhXgLM/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SAT4" width="165" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;div align="left"&gt;This person will always see that menu on the site. Other users will not. Notice that the name of the person who can modify the settings can be manually changed in the settings list (see settings list creation in “step 1” below).&lt;/div&gt;&lt;ul&gt;&lt;li&gt;When opened, the settings panel shows all the existing lists and document libraries of the target site. &lt;/li&gt;
&lt;/ul&gt;&lt;div align="center"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3BQolnp64RrzXQRqEzg7A7AU4VJejhVplHB6JD1PClWV0CkIMBgkmvKkeWKk1FHkK5e3MF5dV1kiKBo8Ncq9GiIwL3VJhxSvmv4hA23ThYSvHLClHU9Jp43jqMhKM5NyxFXQYCBH4VcE/s1600-h/SAT5%5B6%5D.jpg"&gt;&lt;img alt="SAT5" border="0" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9DdH-oJpUX7SCnH61_yuSbb5xAnEYa_lNaF5SBTVfnUQhbhvA21qTfALT4uz0nQ2G7jsynt6_WiMuSV0yzPqq8rFxH7dYQexeRXj50OJ1d2OVYCHNehFF_ziMLyi6TVKOzDjuSRE3r84/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SAT5" width="556" /&gt;&lt;/a&gt; &lt;/div&gt;The first column is for selecting which of the targeted site lists/document libraries should appear in the Site Activity Timeline. &lt;br /&gt;
The start/end date columns set what fields should be used for positioning the item on the timeline. Be careful to only select date fields that always have a value. For example, if you selected an Announcement list, remember that the “expiration date” is not a mandatory field so it doesn’t always have a value. An error message will appear below the timeline if such a problem occurs.&lt;br /&gt;
The “Select body of bubble” column configures what fields will be displayed when an item is clicked (see screen shot #2 above).&lt;br /&gt;
Finally, the last column defines whether then item will be represented by the proposed icon, or by a blue bar as shown below. Notice that document libraries will always try to use the document type related icons (Word, Excel, PowerPoint, PDF, etc.). The bar is typically more useful for calendar and task lists.&lt;br /&gt;
&lt;div align="center"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9D8GLrQOo1i_GqolxjBG9u9_LIcwrwD4aaWLErYn6lGxfXry9oLIUFOwQuLp6LCXxVvxeO2C15lhN-fOIkR1a4Z_pziJdyuCYbGIZHcHvROlfEAAGtf1-pbN8Aa_PBGZJyXweWkk2Jxs/s1600-h/SAT7%5B3%5D.jpg"&gt;&lt;img alt="SAT7" border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfZJ6PQQKNiFhtiL6z2UXq2xan2_AaySOSz1dNwVFTBBCymVXDyzKT4KqR2gbzrBEGI4IR79ncfzTYPYHmV9ucJYv6YwUtU67VQ2hn8chKC9r33lBBOcvQpNSm0FqoHAQKhagL714Kb-8/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SAT7" width="517" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;h3&gt;&lt;/h3&gt;&lt;h3&gt;&lt;strong&gt;How Can I add SAT to a SharePoint Site?&lt;/strong&gt;&lt;/h3&gt;&lt;br /&gt;
&lt;h5&gt;Create a SharePoint list to host your settings&lt;/h5&gt;1) Create a new custom list on SharePoint, and &lt;strong&gt;make sure everyone has read/write access to it&lt;/strong&gt;. This list is used by JavaScript to save the Timeline settings. Here’s how the list should be configured (click for larger version).&lt;br /&gt;
&lt;table border="0" cellpadding="2" cellspacing="0" style="width: 612px;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td valign="top" width="316"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFJqBevXKx18J3Ohu1r4toOIaE0IfdEEqFS1x-F_4dHEgdOBG_1KMESBl-oGAaXUUSxOgJPpXI35071kRiL1ZMVOLmHIqaqQiQpgsMBsgOmOC99mKm-8iRVdEN6faVCBEam3qap9Qb2dA/s1600-h/SATsetting1%5B2%5D.jpg"&gt;&lt;img alt="SATsetting1" border="0" height="63" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZJtcUSxLNKgSZyE7NzQfnFKDphZr_sv5_mP-xVe593ptPvHvv65Bucfy3mmcdrr0fWlVajoAcHku9zb1i708e2GxAMb8bF0XG63XitbFpwLcF3OKpi3sMH6yryLvUd5LXGZdw2PjHoGE/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SATsetting1" width="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="294"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwZ2brWBSl8rzTZK7K4qtd3jlam6prnT9ykKGBrL8nmVNCTcPcw-mRmRA9pi7iP2UjaLHyN6Xrfl4FOVWcGY-rFAVyoAW2v-LXn9FShcnr2SOAYoOVItBqr8a6mJuCBSMl6tD5R05dC0A/s1600-h/SATsetting2%5B2%5D.jpg"&gt;&lt;img alt="SATsetting2" border="0" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvvq8NXGgb_5Moq8LAVxdx1-8Q-Ab3u32Dly5m3ChjvPkHQ36avzsCOrT5wCBwk6YR7z8un5ZQTaUt8bYEKtFUQX_TPSmUXgmMBU2lLhpcffft5X164Sg42Nl2hVOamq226i1q__pImNc/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SATsetting2" width="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td valign="top" width="316"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv2gu8274Dabv026cmjqBdN-Rszl4Kax-4IC_agOpHGTgNAJrNkbRGMl5Rzvs6hFXkA0wMBCDnza4tblRVZ_Q2FMMDYUEnmZl-GXzIfkKqUvvARJffYaeY1_kIsFzwZbmptOgoaLdGG5M/s1600-h/SATsetting3%5B2%5D.jpg"&gt;&lt;img alt="SATsetting3" border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ6ZwbG_JjmLUGIbCjAOfrx3E4jGdazlDnF1_DGf1TJlpcT53NQ2_LnvEB5utREeBe777BOQuWBRC3KaIZ4vfTWyyvCCTdaMnL17IgaBkjoJix4TqCWQcN6s9koGiCKUh3gWe3XTdJyj4/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SATsetting3" width="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="294"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2w5_4iugpQqJg-PERJdE1lwW1MT82X65DQuICIrgUokDY25_gArqboDUtTE3-TRAf6S8uG_vkQeMdoefu6I6Td4w86DLnraqAm7ynoU_5SS8p_2tJ1mJeE8RE0mSvlZIpOTUcYzGRgQ4/s1600-h/SATsetting4%5B2%5D.jpg"&gt;&lt;img alt="SATsetting4" border="0" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg08UDFjfmMBP4UWilCbwzLv1RljJl-ky5ctq_Jl74RWosBpmsJm82dmI153ZH2dMGgAH4Ai6c3Q_sfrOt8wlTYQLZA62z9cwT5QOZp5AZJc5iyi393A5mm-BcvTvl47RXQrzLTuwlIho/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="SATsetting4" width="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
2) Copy the related RSS link somewhere, we’ll need it in step 4.&lt;br /&gt;
&lt;h5&gt;Modify JavaScript to fit your needs&lt;/h5&gt;3) Open the JavaScript source in your favorite text editor:&lt;br /&gt;
&lt;div align="center"&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://cid-4b4456f418bc36f2.skydrive.live.com/embedicon.aspx/Blog%20Files/SiteActivityTimeline.html" style="background-color: #fcfcfc; height: 115px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;/div&gt;4) Replace any reference to “http://MyServer” with your own urls (double check you have replaced all of them, it’s important)&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;
5) Replace last variable of the script with the url of the site you want to monitor.&lt;br /&gt;
&lt;h5&gt;Add the modified script to your site&lt;/h5&gt;6) Edit your SharePoint page and add a &lt;strong&gt;Content Editor Web Part&lt;/strong&gt;&lt;br /&gt;
7) Click “Source Code” to open an empty text box&lt;br /&gt;
8) Copy and paste your modified script.&lt;br /&gt;
&lt;h5&gt;What should I do if nothing appears?&lt;/h5&gt;In case you run into some issues, there are a few things you can do:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Verify your settings list has read/write rights for everyone&lt;/li&gt;
&lt;li&gt;Verify all the urls you’re using in the script(links to timeline-api.js; spapi_core.js; spapi_types.js; spapi_lists.js; SPAPI_dspsts.js; SPAPI_UserProfile.js; your targeted site and settings RSS link)&lt;/li&gt;
&lt;li&gt;Refresh your page (SIMILE Timeline can sometime time out, that’s why we recommend you save the timeline-api.js script on your own server)&lt;/li&gt;
&lt;li&gt;Look inside the script, a few lines containing a “Trace” function call have been commented. Comment them out to display more information.&lt;/li&gt;
&lt;li&gt;Verify that &lt;strong&gt;_spBodyOnLoadFunctionNames.push &lt;/strong&gt;does what it’s supposed to do, by adding a simple “Alert” function at the very beginning of the “getAllLists” function.&lt;/li&gt;
&lt;li&gt;Throw me a comment to this post to see if I can help out.&lt;/li&gt;
&lt;/ul&gt;</description><link>http://herve20.blogspot.com/2010/02/visualize-whats-new-on-sharepoint-site.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmFqsph9_kD-7NoFIFQ2ggXvMzy1CEtJ3UUNDMtGizxLWhWjOPTPXoe35vzR_nQ0hHVre7jIEbLt2ex5Kzai0Z8jOiPdG1rRb65-begIRo34QJeS7BELsq6SSIjFLtHhW7XY3Fow9tpg/s72-c?imgmax=800" width="72"/><thr:total>16</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-8339167191084267877</guid><pubDate>Sun, 27 Dec 2009 13:58:00 +0000</pubDate><atom:updated>2009-12-27T09:12:21.396-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">Web Services</category><title>SharePoint People Search Autocomplete</title><description>&lt;p&gt;Back in July, Jan Tielens demonstrated &lt;a href="http://weblogs.asp.net/jan/archive/2009/07/02/sharepoint-search-as-you-type-with-jquery.aspx" target="_blank"&gt;how to write an autocomplete&lt;/a&gt; mechanism for SharePoint search. Muhimbi then proposed a greatly enhanced &lt;a href="http://www.muhimbi.com/blog/2009_07_01_archive.html" target="_blank"&gt;version 2&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;In our version, we have enhanced the code just a little to enable the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;paging&lt;/strong&gt;: you can display results &lt;em&gt;n&lt;/em&gt; at a time, and offer a link to go to the next page &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq855yiWQHm9ppzeyzdfOq1f06IrsMLgGeqiStl1yJl98sIdksXrb_HncN7C69rcVEkAVbd7E5sSKLGATakrSjqIfj6saw7b0Oo6vEu_81fI4GxTJLys6jQGBoQF4d-4FR5rcS9-ysNE4/s1600-h/Next%5B3%5D.jpg"&gt;&lt;img title="Next" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="61" alt="Next" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ4Ow_jdl4wJPvtjFfsS42_gEABqhk7LP0hR0jFr-16n8LFvvEzXG_L16gqMEInDWaSocY95KrzAapxovn1doALHO08xWZ7NiwaJafFBUTc-ht3nJsyZzCXTaCEN3B-lYFuPJRFZnV8DY/?imgmax=800" width="118" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;sorting&lt;/strong&gt;: allow users to refresh results by alphabetical order, by department, etc. (you can add your own sorting criteria) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrUFEujojrY5crUtmPMSGg74d9t6k2Z-bgOuwZWHKWe8JdpI1lNivEQzM7sOVJaad4JVcMEOiIRN3At_nHAQYmB6rSCQ5M7BvueNgWg0l3yAu8AWplzAXdwLhDvtqkwOpH62YwoDwsRWs/s1600-h/SortBy%5B3%5D.jpg"&gt;&lt;img title="SortBy" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="72" alt="SortBy" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAhLGraHx01VtdC3orHk4kM3rTQdr3RuD-CNfGbIRmLwHXZHAgW-yrkGl-5yVMbUSYunZq6lQ1eZuU9V77Se5t43K8KvGygfr0xbt5uN0dkvCp5OGSYvMvVYkRRDR-iRIo_fpgOOnTvMQ/?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;search across all people metadata&lt;/strong&gt;:&amp;#160; let people either search on name, skills, office number, phone number, or any other indexed metadata you include in the search query &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhALPpKSC6uJHWXKv8-QWzH5wIAAKV8ds36KdEtnjHues3sM4WL7rJeP0cq0lg98eXg-cutxQeda8gpgBl5owQjWrPTJNbnqAI5u2oPufsJoEoeBUogHupenB-gUMQrr0aJSar_nlqeoWo/s1600-h/Terms%5B3%5D.jpg"&gt;&lt;img title="Terms" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="61" alt="Terms" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQY4m5_JNRrwXNFirMt5vFsgHEPuDZprVpvGKtcTG4OvKZKZv3afxVtvJhZmDGiad7ZQO75NV_6aGo7Y-8eq8AjnrPyT_CV9zYFQZ3TI4Cjajh4O1JQTgUTEKE1tWiluTWW72fOH5Rq7s/?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Rich formatted results&lt;/strong&gt;: display picture, presence awareness (Office Communicator) and links to internal or external systems (Yammer, Skype, Facebook, etc.) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_29yhGHNpjJMExH3t697MrNRBkY3ghJCqjrrL9EUBuHTx1aSvEg6PInJhbjT5say3jJ2AczY-VW1m50A-Yas5bYdSGxWuth4GdoHtxrxOUYCB4v3zK-U5kQGCwK8lwwd2AYr7Q1Z7LRE/s1600-h/RichResult%5B3%5D.jpg"&gt;&lt;img title="RichResult" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="185" alt="RichResult" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjMW9srrRF7TB57OWpyK5fKeiDNLqHB_5cJrpIhYtSa78d6phSz0T8L3Qa8t8df2Noy5h8_0JtgmpxINDLof8ZA7-r_7lGMyIvWLGl2ORlMF_RCVSafBayYYshMRF5ElWLPO_OuqfuN4U/?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Refine search results&lt;/strong&gt;: allow users to click on any metadata on the autocomplete search to drill down into specific criteria &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_iLtScNK47o5lVPzB5Mr13oxznqMMThDtETnP3JGqA0-zWKUoDPtRqU5F7mtkqko0Lyt9zzOfWRNZtvbNoBIDq9oa_eiR64-WD6f1BpYyAt9WjL3Kt1fgNNXnbnH26adfuC-xZbbOPNU/s1600-h/drilldown%5B6%5D.jpg"&gt;&lt;img title="drilldown" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="137" alt="drilldown" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT8NUxG38JoaNkCjjD3ZvtVm4tlMpb-GMrkpfQIA-ZKFy7WogD68H6GX0qaBPvK3zzlPgGH4YmoLO-7MYxVnB7HUJ0vYDz9WwR_jmlw4m5YsSMOWeDrvQELVGl4Ck_hneUX0l_F03PaQ4/?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Example of the final result:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgq59jMv7LVtnKhyC4SifgKmX67zI8YAIdlH1s6k-9oES0CzofU8rA7g1ROJNjZ1PMIkMpxZuEVu3zJbc4sRoyHe_P9Dzk2o6IdIN137527YsqICmMKq3dt-7NA_7BXwECkpzcq_HT4Wk/s1600-h/PeopleAutocomplete%5B4%5D.jpg"&gt;&lt;img title="PeopleAutocomplete" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="283" alt="PeopleAutocomplete" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeeAwyuMVb430reapQZQHHqfj0Ok_ZBKNIP5wUZ7xOFx4Q58NxxckJUpvlxB3xC-dbWwFx2KomoqamHYpRHxsYkT40U3-jfa7EpXST7xhtGn3hOwJP1VKhs9saf3amQKshstjelsMF9pw/?imgmax=800" width="307" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To implement this version of the people search autocomplete, copy the code below, modify it as you need (mandatory: modify the server name), and paste it on a Content Editor web part.&lt;/p&gt; &lt;iframe title="Preview" scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:98px;height:115px;padding:0;background-color:#fcfcfc;" src="http://cid-4b4456f418bc36f2.skydrive.live.com/embedicon.aspx/Blog%20Files%20-%20Autocomplete"&gt;&lt;/iframe&gt;  </description><link>http://herve20.blogspot.com/2009/12/sharepoint-people-search-autocomplete.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ4Ow_jdl4wJPvtjFfsS42_gEABqhk7LP0hR0jFr-16n8LFvvEzXG_L16gqMEInDWaSocY95KrzAapxovn1doALHO08xWZ7NiwaJafFBUTc-ht3nJsyZzCXTaCEN3B-lYFuPJRFZnV8DY/s72-c?imgmax=800" width="72"/><thr:total>5</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-1149281847786594933</guid><pubDate>Sat, 12 Dec 2009 22:41:00 +0000</pubDate><atom:updated>2009-12-12T17:43:07.101-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><category domain="http://www.blogger.com/atom/ns#">Visualization</category><title>Using Photoshop to Design your own Theme for ICE</title><description>&lt;p&gt;In a &lt;a href="http://herve20.blogspot.com/2009/11/visualization-on-ice.html"&gt;previous post&lt;/a&gt;, I’ve introduced a new open source, Silverlight-based visualization framework called &lt;strong&gt;&lt;a href="http://icedotnet.codeplex.com/"&gt;ICE&lt;/a&gt;&lt;/strong&gt; (Information Connections Engine). Since some people had difficulties creating their own style, I created this short video which not only details how to modify the &lt;a href="http://icedotnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32335#DownloadId=81677"&gt;icon library&lt;/a&gt;, but shows how to do so using Photoshop and Microsoft Blend 3.&lt;/p&gt; &lt;object width="640" height="421"&gt; &lt;param name="movie" value="http://content.screencast.com/users/HerveT/folders/Tutorials/media/3eb0c7a2-f5e4-42dd-a011-c9cfa728c714/ICE%20Tutorial%208%20-%20Using%20Blend%20and%20Photoshop_controller.swf"&gt;&lt;/param&gt; &lt;param name="quality" value="high"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt; &lt;param name="flashVars" value="containerwidth=640&amp;amp;containerheight=421&amp;amp;showstartscreen=true&amp;amp;showendscreen=true&amp;amp;loop=false&amp;amp;autostart=false&amp;amp;color=000000,000000&amp;amp;thumbscale=45&amp;amp;content=http://content.screencast.com/users/HerveT/folders/Tutorials/media/3eb0c7a2-f5e4-42dd-a011-c9cfa728c714/ICE%20Tutorial%208%20-%20Using%20Blend%20and%20Photoshop.mp4"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt; &lt;param name="scale" value="showall"&gt;&lt;/param&gt; &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt; &lt;param name="base" value="http://content.screencast.com/users/HerveT/folders/Tutorials/media/3eb0c7a2-f5e4-42dd-a011-c9cfa728c714/"&gt;&lt;/param&gt;  &lt;embed src="http://content.screencast.com/users/HerveT/folders/Tutorials/media/3eb0c7a2-f5e4-42dd-a011-c9cfa728c714/ICE%20Tutorial%208%20-%20Using%20Blend%20and%20Photoshop_controller.swf" quality="high" bgcolor="#FFFFFF" width="640" height="421" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="containerwidth=640&amp;containerheight=421&amp;showstartscreen=true&amp;showendscreen=true&amp;loop=false&amp;autostart=false&amp;color=000000,000000&amp;thumbscale=45&amp;content=http://content.screencast.com/users/HerveT/folders/Tutorials/media/3eb0c7a2-f5e4-42dd-a011-c9cfa728c714/ICE%20Tutorial%208%20-%20Using%20Blend%20and%20Photoshop.mp4" allowFullScreen="true" base="http://content.screencast.com/users/HerveT/folders/Tutorials/media/3eb0c7a2-f5e4-42dd-a011-c9cfa728c714/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;  </description><link>http://herve20.blogspot.com/2009/12/using-photoshop-to-design-your-own-them.html</link><thr:total>0</thr:total><author>noreply@blogger.com (Herve Tourpe)</author><enclosure length="408851" type="application/x-shockwave-flash" url="http://content.screencast.com/users/HerveT/folders/Tutorials/media/3eb0c7a2-f5e4-42dd-a011-c9cfa728c714/ICE%20Tutorial%208%20-%20Using%20Blend%20and%20Photoshop_controller.swf"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-1224592238839584907</guid><pubDate>Thu, 10 Dec 2009 15:53:00 +0000</pubDate><atom:updated>2010-02-20T12:00:45.567-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">SharePoint</category><category domain="http://www.blogger.com/atom/ns#">Web Services</category><title>Using SharePoint Search Web Service to Surface Blog Posts or other Content Type</title><description>One of the most powerful though untapped features of &lt;strong&gt;SharePoint search&lt;/strong&gt; is its &lt;strong&gt;web service&lt;/strong&gt;. SharePoint search web&amp;nbsp;service url looks like this: http://Sp_Server/_vti_bin/search.asmx. JavaScript aficionadi like myself get excited when they hear about web services, because we immediately start thinking of the rich functionalities we can then easily add to any HTML page, or to SharePoint with a Content Editor Web Part (by far my favorite web part). Why the excitement? Mainly for 2 reasons:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Contrary to other data interaction mechanisms like ODBC, BDC, etc., web services are self-describing. All you need to know about methods, inputs and outputs is in the WSDL file (check &lt;a href="http://sp_server/_vti_bin/search.asmx?wsdl"&gt;http://Sp_Server/_vti_bin/search.asmx?wsdl&lt;/a&gt;). No need to contact the developer or database administrator for a password or parameters type. &lt;/li&gt;
&lt;li&gt;Armed with Ajax (remember, Ajax is just JavaScript, nothing to brag about or to fear), and, say, a Content Editor Web Part (or just a basic HTML page), you don’t even need to have access rights to any server to get this functionality on your site. Everything is done on the client side. &lt;/li&gt;
&lt;/ul&gt;So let’s see how we can use SharePoint search web service &lt;strong&gt;to search only from a certain content type on your site&lt;/strong&gt;, like blog posts, wikis, threaded discussions, documents, pictures, etc. (see basic list of available content types &lt;a href="http://leivo.officeisp.net/sharepoint/Dokumendid/ContentTypes.htm" target="_blank"&gt;here&lt;/a&gt;). Since the web service returns some XML, it’s up to you to decide how and where to display the results. In this example, the result of the code below looks like this:&lt;br /&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvc8VRwNiNeqF6CWdv6IpqA0ScD4RSZdkAD_MHx0MCGRBOZGOBdYaPWeYulmt3HMfpPjH4Hi_RxM6dL5WZ1wlTdZhUvk7Cw20_isnhtdloPaEZGrS-4P6Nyo-4DudFFC75ebkzH0fpgOA/s1600-h/capture5.jpg"&gt;&lt;img alt="capture" border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhExUg2oCe2qsoa7xr4sVAF0istfrEIizvaK2eypAKgDvrZCZSVu6vq9XVlJWUuudhO4cnRWlqLvTF9tvgSJt6MAvReNLB2GPFwcrH44enqoM2noBAW6aA-gEQZrMDjhcOdZUv7oGAmBGc/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="capture" width="229" /&gt;&lt;/a&gt; &lt;br /&gt;
&amp;nbsp;&lt;strong&gt;Generate the query&lt;/strong&gt;&lt;br /&gt;
In theory, you’d need to study a little bit how to build a &lt;a href="http://msdn.microsoft.com/en-us/library/ms451565.aspx" target="_blank"&gt;QueryPacket&lt;/a&gt;, or learn about the &lt;a href="http://msdn.microsoft.com/en-us/library/ms443580.aspx" target="_blank"&gt;SQL Search language&lt;/a&gt;. In reality, you don’t have to study anything at all, thanks to query generators like &lt;a href="http://sharepointsearchserv.codeplex.com/" target="_blank"&gt;SharePoint Search Service Tool&lt;/a&gt; or &lt;a href="http://www.codeplex.com/MOSSSearchCoder" target="_blank"&gt;Search Coder&lt;/a&gt;. I often use both, since they have complementary functionalities. So it shouldn’t take you too long to come up with the following query. Notice that “&lt;span style="color: #ff8000;"&gt;AND (CONTAINS (ContentType,'"post"'))&lt;/span&gt;” is the trick to filter by content type.&lt;br /&gt;
&lt;div id="codeSnippetWrapper"&gt;&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;QueryPacket&lt;/span&gt; &lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="urn:Microsoft.Search.Query"&lt;/span&gt; &lt;span style="color: red;"&gt;Revision&lt;/span&gt;&lt;span style="color: blue;"&gt;="1000"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Query&lt;/span&gt; &lt;span style="color: red;"&gt;domain&lt;/span&gt;&lt;span style="color: blue;"&gt;="QDomain"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;SupportedFormats&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Format&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;urn:Microsoft.Search.Response.Document.Document&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Format&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;SupportedFormats&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Context&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;QueryText&lt;/span&gt; &lt;span style="color: red;"&gt;language&lt;/span&gt;&lt;span style="color: blue;"&gt;="en-US"&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="MSSQLFT"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;[CDATA[ 
SELECT Title, Rank, Size, Description, Write, Path, 
PersonalSpace, Author, Title, Path, Created, 
CreatedBy, PictureURL, Account, EmployeeID 
FROM portal..scope()  
WHERE FREETEXT(DefaultProperties, '&lt;em&gt;&lt;span style="color: teal;"&gt;My search terms&lt;/span&gt;&lt;/em&gt;') 
AND  ( ("SCOPE" = 'All Sites') )  &lt;span style="color: #ff8000;"&gt;&lt;strong&gt;AND (CONTAINS (ContentType,'"post"'))&lt;/strong&gt;&lt;/span&gt; 
ORDER BY "Rank" Desc, "Created" Desc" 
]]&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;QueryText&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Context&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;

&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Range&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;StartAt&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;StartAt&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Count&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;10&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Count&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Range&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;EnableStemming&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;EnableStemming&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;TrimDuplicates&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;TrimDuplicates&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IgnoreAllNoiseQuery&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IgnoreAllNoiseQuery&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ImplicitAndBehavior&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ImplicitAndBehavior&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IncludeRelevanceResults&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IncludeRelevanceResults&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IncludeSpecialTermResults&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IncludeSpecialTermResults&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IncludeHighConfidenceResults&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IncludeHighConfidenceResults&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Query&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;QueryPacket&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Call the Web Service&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a &lt;a href="http://herve20.blogspot.com/2009/11/visualize-your-sharepoint-calendar-with.html" target="_blank"&gt;previous blog&lt;/a&gt;, I’ve showed how to use &lt;a href="http://darrenjohnstone.net/2008/07/22/examples-for-the-sharepoint-and-office-live-javascript-api/" target="_blank"&gt;Darren’s JavaScript library&lt;/a&gt; to interact with SharePoint web services. I could have done the same here, especially since he developed a &lt;a href="http://darrenjohnstone.net/2008/07/22/examples-for-the-sharepoint-and-office-live-javascript-api/#topic-14" target="_blank"&gt;library specifically for search&lt;/a&gt;, but I chose to use &lt;a href="http://www.west-wind.com/presentations/jquery/" target="_blank"&gt;JQuery&lt;/a&gt; instead. Why? No reason, I just like to explore different technologies ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;strong&gt;Final Result&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So now all you have to do is copy the&amp;nbsp; code below, change the server name and paste the code into a Content Editor Web Part (or any other HTML page). Notice that while this example is about filtering by content type, the same technique can be used to filter by scope and any metadata you wish. In fact, you’ll quickly realize that this search web service is way more powerful than SharePoint Content Query Web Part, as search doesn’t care about site collection boundaries and has access to a wide variety of filters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;&lt;br /&gt;
&lt;pre id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&amp;lt;script language=&lt;span style="color: #006080;"&gt;"javascript"&lt;/span&gt;&amp;gt;
&lt;span style="color: green;"&gt;// _spBodyOnLoadFunctionNames.push is a SharePoint OOTB function &lt;/span&gt;
&lt;span style="color: green;"&gt;// that ensures the function is called only after the DOM has been loaded&lt;/span&gt;
_spBodyOnLoadFunctionNames.push(&lt;span style="color: #006080;"&gt;"DisplayBlogSearchResults"&lt;/span&gt;);

&lt;span style="color: green;"&gt;// Change these parameters as needed&lt;/span&gt;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; maxResultsToDisplayBlogs = 5;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; webSite = “&lt;span style="color: #006080;"&gt;&lt;a href="http://url.of.site/"&gt;http://url.of.site/&lt;/a&gt;”&lt;/span&gt;;

&lt;span style="color: blue;"&gt;function&lt;/span&gt; DisplayBlogSearchResults() {

&lt;span style="color: green;"&gt;// the search terms is passed in the query string (e.g., blogsearch?k=tax+reform)&lt;/span&gt;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; query = unescape(querySt(&lt;span style="color: #006080;"&gt;"k"&lt;/span&gt;));    

&lt;span style="color: blue;"&gt;var&lt;/span&gt; queryXML = 
&lt;span style="color: #006080;"&gt;"&amp;lt;QueryPacket xmlns=\"urn:Microsoft.Search.Query\" Revision=\"1000\"&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"    &amp;lt;Query domain=\"QDomain\"&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"        &amp;lt;SupportedFormats&amp;gt;&amp;lt;Format&amp;gt;urn:Microsoft.Search.Response.Document.Document"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;" &amp;lt;/Format&amp;gt;&amp;lt;/SupportedFormats&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"        &amp;lt;Context&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"     &amp;lt;QueryText language=\"en-US\" type=\"MSSQLFT\"&amp;gt;&amp;lt;![CDATA[ "&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"SELECT Title, Rank, Size, Description, Write, Path, PersonalSpace, "&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"Author, Title, Path, Created, CreatedBy, "&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;" PictureURL, Account, EmployeeID FROM "&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;" portal..scope() "&lt;/span&gt; + 
&lt;span style="color: green;"&gt;//" WHERE CONTAINS ('\"" + query + "\"') " +&lt;/span&gt;
&lt;span style="color: #006080;"&gt;" WHERE FREETEXT(DefaultProperties, '"&lt;/span&gt; + query + &lt;span style="color: #006080;"&gt;"') "&lt;/span&gt; +
&lt;span style="color: #006080;"&gt;" AND  ( (\"SCOPE\" = 'All Sites') )  AND (CONTAINS (ContentType,'\"post\"'))"&lt;/span&gt; +
&lt;span style="color: #006080;"&gt;" ORDER BY \"Rank\" Desc, \"Created\" Desc"&lt;/span&gt;  +
&lt;span style="color: #006080;"&gt;" ]]&amp;gt;"&lt;/span&gt; +
&lt;span style="color: #006080;"&gt;"      &amp;lt;/QueryText&amp;gt;"&lt;/span&gt; +
&lt;span style="color: #006080;"&gt;"        &amp;lt;/Context&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"        &amp;lt;Range&amp;gt;&amp;lt;StartAt&amp;gt;1&amp;lt;/StartAt&amp;gt;&amp;lt;Count&amp;gt;"&lt;/span&gt; + 
maxResultsToDisplayBlogs + &lt;span style="color: #006080;"&gt;"&amp;lt;/Count&amp;gt;&amp;lt;/Range&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"        &amp;lt;EnableStemming&amp;gt;true&amp;lt;/EnableStemming&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;TrimDuplicates&amp;gt;true&amp;lt;/TrimDuplicates&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;IgnoreAllNoiseQuery&amp;gt;true&amp;lt;/IgnoreAllNoiseQuery&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;ImplicitAndBehavior&amp;gt;true&amp;lt;/ImplicitAndBehavior&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;IncludeRelevanceResults&amp;gt;true&amp;lt;/IncludeRelevanceResults&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;IncludeSpecialTermResults&amp;gt;true&amp;lt;/IncludeSpecialTermResults&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;IncludeHighConfidenceResults&amp;gt;true&amp;lt;/IncludeHighConfidenceResults&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;/Query&amp;gt;&amp;lt;/QueryPacket&amp;gt;"&lt;/span&gt;;

&lt;span style="color: blue;"&gt;var&lt;/span&gt; soapEnv =
&lt;span style="color: #006080;"&gt;"&amp;lt;soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "&lt;/span&gt; +
&lt;span style="color: #006080;"&gt;"xmlns:xsd='http://www.w3.org/2001/XMLSchema' "&lt;/span&gt; +
&lt;span style="color: #006080;"&gt;"xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;" &amp;lt;soap:Body&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;QueryEx xmlns='http://microsoft.com/webservices/OfficeServer/QueryService'&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"     &amp;lt;queryXml&amp;gt;"&lt;/span&gt; + escapeHTML(queryXML) + &lt;span style="color: #006080;"&gt;"&amp;lt;/queryXml&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"   &amp;lt;/QueryEx&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;" &amp;lt;/soap:Body&amp;gt;"&lt;/span&gt;+
&lt;span style="color: #006080;"&gt;"&amp;lt;/soap:Envelope&amp;gt;"&lt;/span&gt;;

$.ajax({
url: webSite +&lt;span style="color: #006080;"&gt;"/_vti_bin/search.asmx"&lt;/span&gt;,
type: &lt;span style="color: #006080;"&gt;"POST"&lt;/span&gt;,
dataType: &lt;span style="color: #006080;"&gt;"xml"&lt;/span&gt;,
data: soapEnv,
complete: processResult,
contentType: &lt;span style="color: #006080;"&gt;"text/xml; charset=\"utf-8\""&lt;/span&gt;
});          


}

&lt;span style="color: green;"&gt;// processResult is called async. when the web service returns something&lt;/span&gt;
&lt;span style="color: blue;"&gt;function&lt;/span&gt; processResult(xData, status) {

&lt;span style="color: blue;"&gt;var&lt;/span&gt; TotalResults = 0;                
&lt;span style="color: blue;"&gt;var&lt;/span&gt; xmlDoc = xData.responseXML;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; docs = xmlDoc.selectNodes(&lt;span style="color: #006080;"&gt;"//RelevantResults"&lt;/span&gt;);
&lt;span style="color: green;"&gt;// Total Results returned &lt;/span&gt;
&lt;span style="color: green;"&gt;// (should be equal or less than &amp;lt;Count&amp;gt; parameter of search query)&lt;/span&gt;
TotalResults = docs.length;

&lt;span style="color: green;"&gt;// Total available results (while the query only returns&lt;/span&gt;
&lt;span style="color: green;"&gt;// the first &amp;lt;Count&amp;gt; results, there might be more available)&lt;/span&gt;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; TotalAvailable = 0;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; docTotalAvailable  = xmlDoc.selectNodes(&lt;span style="color: #006080;"&gt;"//xs:element[@name='RelevantResults']"&lt;/span&gt;);
&lt;span style="color: blue;"&gt;if&lt;/span&gt; (docTotalAvailable.length != 0) {
TotalAvailable = docTotalAvailable[0].getAttribute(&lt;span style="color: #006080;"&gt;"msprop:TotalRows"&lt;/span&gt;); 
}

&lt;span style="color: blue;"&gt;var&lt;/span&gt; strDisplay=&lt;span style="color: #006080;"&gt;""&lt;/span&gt;;
&lt;span style="color: blue;"&gt;if&lt;/span&gt; (TotalResults &amp;gt;0) {
strDisplay = &lt;span style="color: #006080;"&gt;"&amp;lt;table width='100%' style='BORDER: #8ebbf5 1px solid'&amp;gt;&amp;lt;tr&amp;gt;"&lt;/span&gt;;
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;td&amp;gt;&amp;lt;img src='http://atgdev-intranet.imf.org/_layouts/images/buddychat.jpg' "&lt;/span&gt;;
strDisplay += &lt;span style="color: #006080;"&gt;"style='float:left;vertical-align:middle'/&amp;gt;"&lt;/span&gt;; 
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;span style='font-size:12px'&amp;gt;"&lt;/span&gt;; 
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;strong&amp;gt;You may also be interested by these "&lt;/span&gt; + TotalResults 
strDisplay += &lt;span style="color: #006080;"&gt;" blogs:&amp;lt;/strong&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;"&lt;/span&gt;;
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;/tr&amp;gt;"&lt;/span&gt;;
}

&lt;span style="color: blue;"&gt;for&lt;/span&gt;(&lt;span style="color: blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; TotalResults ; i++){
&lt;span style="color: blue;"&gt;var&lt;/span&gt; title = docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"TITLE"&lt;/span&gt;) != &lt;span style="color: blue;"&gt;null&lt;/span&gt; ? docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"TITLE"&lt;/span&gt;).text : &lt;span style="color: #006080;"&gt;"TITLE not found"&lt;/span&gt;;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; path = docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"PATH"&lt;/span&gt;) != &lt;span style="color: blue;"&gt;null&lt;/span&gt; ? docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"PATH"&lt;/span&gt;).text : &lt;span style="color: #006080;"&gt;"PATH not found"&lt;/span&gt;;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; creationDate = docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"CREATED"&lt;/span&gt;) != &lt;span style="color: blue;"&gt;null&lt;/span&gt; ? docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"CREATED"&lt;/span&gt;).text : &lt;span style="color: #006080;"&gt;"CREATED not found"&lt;/span&gt;;
&lt;span style="color: blue;"&gt;var&lt;/span&gt; author = docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"AUTHOR"&lt;/span&gt;) != &lt;span style="color: blue;"&gt;null&lt;/span&gt; ? docs[i].selectSingleNode(&lt;span style="color: #006080;"&gt;"AUTHOR"&lt;/span&gt;).text : &lt;span style="color: #006080;"&gt;"PATH not found"&lt;/span&gt;;

strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;"&lt;/span&gt;;
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;img src='/_layouts/images/bullet.gif' style='vertical-align:middle' /&amp;gt;&amp;amp;nbsp;"&lt;/span&gt;;
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;a href='"&lt;/span&gt; + path + &lt;span style="color: #006080;"&gt;"'&amp;gt;"&lt;/span&gt; + title + &lt;span style="color: #006080;"&gt;"&amp;lt;/a&amp;gt;"&lt;/span&gt;;
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;div style='color:#dbdbdb;text-align:right'&amp;gt;written on "&lt;/span&gt; + formatDateString(creationDate)
strDisplay += &lt;span style="color: #006080;"&gt;" by &amp;lt;span style='color:#545454'&amp;gt;"&lt;/span&gt; + author + &lt;span style="color: #006080;"&gt;"&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;"&lt;/span&gt;;
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;;

}
&lt;span style="color: green;"&gt;// Verify if we have displayed the total available or not&lt;/span&gt;
&lt;span style="color: blue;"&gt;if&lt;/span&gt; (TotalAvailable &amp;gt; TotalResults) {
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;tr style='text-align:right'&amp;gt;&amp;lt;td&amp;gt;&amp;lt;a href=''&amp;gt;&amp;lt;br /&amp;gt;See all "&lt;/span&gt; + TotalAvailable + &lt;span style="color: #006080;"&gt;" results...&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;
} 
&lt;span style="color: blue;"&gt;if&lt;/span&gt; (TotalResults &amp;gt;0) {
strDisplay += &lt;span style="color: #006080;"&gt;"&amp;lt;/table&amp;gt;"&lt;/span&gt;;
}

&lt;span style="color: green;"&gt;// Display result is specific DIV (id=idBlogSearchResults). Could be located anywhere in your page.&lt;/span&gt;
$(&lt;span style="color: #006080;"&gt;"#idBlogSearchResults"&lt;/span&gt;).html(strDisplay);

}

&lt;span style="color: blue;"&gt;function&lt;/span&gt; querySt(ji) {
hu = window.location.search.substring(1);
gy = hu.split(&lt;span style="color: #006080;"&gt;"&amp;amp;"&lt;/span&gt;);
&lt;span style="color: blue;"&gt;for&lt;/span&gt; (i=0;i&amp;lt;gy.length;i++) {
ft = gy[i].split(&lt;span style="color: #006080;"&gt;"="&lt;/span&gt;);
&lt;span style="color: blue;"&gt;if&lt;/span&gt; (ft[0] == ji)  &lt;span style="color: blue;"&gt;return&lt;/span&gt; ft[1];
}
}

&lt;span style="color: blue;"&gt;function&lt;/span&gt; escapeHTML (str) {
&lt;span style="color: blue;"&gt;return&lt;/span&gt; str.replace(/&amp;amp;/g,&lt;span style="color: #006080;"&gt;'&amp;amp;amp;'&lt;/span&gt;).replace(/&amp;lt;/g,&lt;span style="color: #006080;"&gt;'&amp;amp;lt;'&lt;/span&gt;).replace(/&amp;gt;/g,&lt;span style="color: #006080;"&gt;'&amp;amp;gt;'&lt;/span&gt;);
}

&lt;span style="color: blue;"&gt;function&lt;/span&gt; unescapeHTML (str) {
&lt;span style="color: blue;"&gt;return&lt;/span&gt; str.replace(/&amp;amp;lt;/g,&lt;span style="color: #006080;"&gt;'&amp;lt;'&lt;/span&gt;).replace(/&amp;amp;gt;/g,&lt;span style="color: #006080;"&gt;'&amp;gt;'&lt;/span&gt;);
}

&lt;span style="color: blue;"&gt;function&lt;/span&gt; formatDateString(strDate) {
&lt;span style="color: blue;"&gt;var&lt;/span&gt; yearStr = strDate.substr(0, 4);     
&lt;span style="color: blue;"&gt;var&lt;/span&gt; monthStr = strDate.substr(5, 2);     
&lt;span style="color: blue;"&gt;var&lt;/span&gt; dayStr = strDate.substr(8, 2);           
&lt;span style="color: blue;"&gt;return&lt;/span&gt; monthStr + &lt;span style="color: #006080;"&gt;"/"&lt;/span&gt; + dayStr + &lt;span style="color: #006080;"&gt;"/"&lt;/span&gt; + yearStr; 
} 

&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Have fun!</description><link>http://herve20.blogspot.com/2009/12/using-sharepoint-search-web-service-to.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhExUg2oCe2qsoa7xr4sVAF0istfrEIizvaK2eypAKgDvrZCZSVu6vq9XVlJWUuudhO4cnRWlqLvTF9tvgSJt6MAvReNLB2GPFwcrH44enqoM2noBAW6aA-gEQZrMDjhcOdZUv7oGAmBGc/s72-c?imgmax=800" width="72"/><thr:total>4</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-4218029874505022511</guid><pubDate>Sat, 21 Nov 2009 16:37:00 +0000</pubDate><atom:updated>2009-11-21T11:37:23.043-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">Open Source</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">Visualization</category><title>Visualization On ICE</title><description>&lt;p&gt;&lt;a href="http://icedotnet.codeplex.com"&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="3882464062_fdfd24ec43_m_d[1]" border="0" alt="3882464062_fdfd24ec43_m_d[1]" align="left" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivcRQcAuN1_BaiWWZskfUvfOk5na1KiRV5PquHntsEXTtyoMW-47uw6IQVWZUhmAeAPy-pP4Q7rIVAFkSe9n5yaSo5ajVwKIWdXHDaHXdas_A2hk6W2LCzWBO3f0Ls0RiRicpedNPBPSA/?imgmax=800" width="154" height="161" /&gt;&lt;/a&gt;Our little “&lt;strong&gt;&lt;a href="http://icedotnet.codeplex.com"&gt;ICE&lt;/a&gt;&lt;/strong&gt;” open source project (“Information Connections Engine”) is growing in popularity! ICE is a visualization framework based on &lt;strong&gt;Silverlight&lt;/strong&gt;, which allows any .net developer to visualize any sort of data and their connections in just a few hours of work. It’s free, it’s fun, it’s easy. &lt;/p&gt;  &lt;p&gt;Check out this 3 min teaser to have an idea of what ICE is capable of:&lt;/p&gt;  &lt;div style="text-align: center"&gt;&lt;object width="500" height="389"&gt; &lt;param name="movie" value="http://content.screencast.com/users/HerveT/folders/Demos/media/f610fddb-479f-4a48-a80f-422accc2e2aa/ICE%203%20min%20Teaser_controller.swf"&gt;&lt;/param&gt; &lt;param name="quality" value="high"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt; &lt;param name="flashVars" value="containerwidth=640&amp;amp;containerheight=498&amp;amp;showstartscreen=true&amp;amp;showendscreen=true&amp;amp;loop=false&amp;amp;autostart=false&amp;amp;color=000000,000000&amp;amp;thumbscale=45&amp;amp;content=http://content.screencast.com/users/HerveT/folders/Demos/media/f610fddb-479f-4a48-a80f-422accc2e2aa/ICE%203%20min%20Teaser.mp4"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt; &lt;param name="scale" value="showall"&gt;&lt;/param&gt; &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt; &lt;param name="base" value="http://content.screencast.com/users/HerveT/folders/Demos/media/f610fddb-479f-4a48-a80f-422accc2e2aa/"&gt;&lt;/param&gt;  &lt;embed src="http://content.screencast.com/users/HerveT/folders/Demos/media/f610fddb-479f-4a48-a80f-422accc2e2aa/ICE%203%20min%20Teaser_controller.swf" quality="high" bgcolor="#FFFFFF" width="500" height="389" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="containerwidth=500&amp;containerheight=389&amp;showstartscreen=true&amp;showendscreen=true&amp;loop=false&amp;autostart=false&amp;color=000000,000000&amp;thumbscale=45&amp;content=http://content.screencast.com/users/HerveT/folders/Demos/media/f610fddb-479f-4a48-a80f-422accc2e2aa/ICE%203%20min%20Teaser.mp4" allowFullScreen="true" base="http://content.screencast.com/users/HerveT/folders/Demos/media/f610fddb-479f-4a48-a80f-422accc2e2aa/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;/div&gt;  &lt;p&gt;There’s a &lt;a href="http://icedotnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32335#DownloadId=81701"&gt;complete step by step tutorial&lt;/a&gt; that should get you started real fast with your first “application on ICE”.&lt;/p&gt;  &lt;p&gt;What’s most amazing about such a flexible and easy to use tool is to watch what developers are doing with it. The mathematical models and countless configuration options, along with the possibility to use XAML to visualize and animate nodes and links according to your own creativity, result in applications we had never anticipated. I’m pretty sure someone will create a little game using ICE soon…. anyone?&lt;/p&gt;  </description><link>http://herve20.blogspot.com/2009/11/visualization-on-ice.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivcRQcAuN1_BaiWWZskfUvfOk5na1KiRV5PquHntsEXTtyoMW-47uw6IQVWZUhmAeAPy-pP4Q7rIVAFkSe9n5yaSo5ajVwKIWdXHDaHXdas_A2hk6W2LCzWBO3f0Ls0RiRicpedNPBPSA/s72-c?imgmax=800" width="72"/><thr:total>1</thr:total><author>noreply@blogger.com (Herve Tourpe)</author><enclosure length="408822" type="application/x-shockwave-flash" url="http://content.screencast.com/users/HerveT/folders/Demos/media/f610fddb-479f-4a48-a80f-422accc2e2aa/ICE%203%20min%20Teaser_controller.swf"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6628515104974449767.post-411648297927726264</guid><pubDate>Sat, 21 Nov 2009 02:22:00 +0000</pubDate><atom:updated>2009-11-21T08:15:03.916-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">About me</category><title>Getting Started…</title><description>&lt;img align="left" alt="Herve" border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUYfRzM5Z_DFQ_GDaeDStQJ3iNzZvIViUtVP6cfWB8m6wYveJAlqzfT4jvAXZodLeWI_Tjr7aF9oe5rn3eIbxZ_O81oCKNPhtJajOGeFXePr6LXWMlfoeecwEbeFPI-TCahwLj8zb_lJo/?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin: 0px 10px 0px 0px;" title="Herve" width="143" /&gt;So here we are, I’m finally giving in to my friends' and also my inner voice request to start my own blog. I know I won't have the time to write too often. I know that my interests in technology are so broad and so diverse that I might have difficulties capturing a specific audience (who else is equally interested by the impact on productivity of social networking in the enterprise and by how optimizing an AJAX call to a SOAP Web Service?). But it doesn't matter. This blog will at least satisfy my old frustration of having so much of my work or thoughts undocumented or even unchallenged. &lt;br /&gt;
&lt;br /&gt;
So there you have it. Off the top of my head, I think you're most likely to read about SharePoint, web services, .Net, Silverlight, and Ajax technologies. And also high level views on social computing, enterprise mashup ecosystems, mobility, visualization technologies and cloud computing. And whatever else crosses my mind, after all it's MY blog! &lt;br /&gt;
Ah, one last point: don't fool yourself, you will never read this blog again unless you &lt;a href="http://feeds.feedburner.com/Herve20"&gt;subscribe to the RSS feed&lt;/a&gt;, or unless you use the email subscription on the right column. There's simply no other way to stay connected to a blog.</description><link>http://herve20.blogspot.com/2009/11/getting-started.html</link><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUYfRzM5Z_DFQ_GDaeDStQJ3iNzZvIViUtVP6cfWB8m6wYveJAlqzfT4jvAXZodLeWI_Tjr7aF9oe5rn3eIbxZ_O81oCKNPhtJajOGeFXePr6LXWMlfoeecwEbeFPI-TCahwLj8zb_lJo/s72-c?imgmax=800" width="72"/><thr:total>0</thr:total><author>noreply@blogger.com (Herve Tourpe)</author></item></channel></rss>