<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs author="Naj" author_aboutme="Web development is a hobby for me. I&apos;m also a fine artist." author_email="najart0+feedback@googlemail.com" author_link="http://www.mydepictions.co.uk/" author_photo="http://hosting.gmodules.com/ig/gadgets/file/109548057311228444554/authorpic.png" description="Get the latest top news stories, sports news, business news, Nofolk events and Norwich City Football Club news. The Eastern Daily Press (EDP) newspaper covers the East Anglia Region (Norfolk, north Suffolk and east Cambridgeshire). Updates as new stories are added. Gadget can be edited to suit users own preferences." directory_title="Norfolk News UK - Eastern Daily Press News 24: News, Norfolk Events, Norwich City FC" height="250" screenshot="http://hosting.gmodules.com/ig/gadgets/file/109548057311228444554/feededp.png" scrolling="false" singleton="false" thumbnail="http://hosting.gmodules.com/ig/gadgets/file/109548057311228444554/feededpt.png" title_url="http://widgetweb.co.uk/newstools.html" title="__UP_title__">
  <Require feature="dynamic-height" />
  <Require feature="tabs" />
<Require feature="views" />
</ModulePrefs>
<UserPref datatype="string" default_value="EDP News 24" display_name="Gadget Title" name="title" />
<UserPref datatype="string" default_value="0.7em" display_name="Tab Font Size" name="tabFontSize" />
<UserPref datatype="bool" default_value="true" display_name="Feed Descriptions" name="showFeedDesc" />
<UserPref datatype="string" default_value="http://www.edp24.co.uk/cmlink/edp24_news_1_595700" display_name="Feed 1: URL" name="feed1" />
<UserPref datatype="string" default_value="News" display_name="Feed 1: Title" name="feedTitle1" />
<UserPref datatype="string" default_value="http://www.edp24.co.uk/cmlink/edp24_sport_1_595723" display_name="Feed 2: URL" name="feed2" />
<UserPref datatype="string" default_value="Sport" display_name="Feed 2: Title" name="feedTitle2" />
<UserPref datatype="string" default_value="http://www.edp24.co.uk/cmlink/edp_business_news_1_595540" display_name="Feed 3: URL" name="feed3" />
<UserPref datatype="string" default_value="Business" display_name="Feed 3: Title" name="feedTitle3" />
<UserPref datatype="string" default_value="http://www.edp24.co.uk/cmlink/edp_what_s_on_1_595790" display_name="Feed 4: URL" name="feed4" />
<UserPref datatype="string" default_value="Whats On" display_name="Feed 4: Title" name="feedTitle4" />
<UserPref datatype="string" default_value="http://www.edp24.co.uk/cmlink/edp24_sport_norwich_city_1_595902" display_name="Feed 5: URL" name="feed5" />
<UserPref datatype="string" default_value="Norwich City FC" display_name="Feed 5: Title" name="feedTitle5" />
<UserPref datatype="enum" default_value="3" display_name="# of Entries" name="entries">
  <EnumValue value="3" />
  <EnumValue value="4" />
  <EnumValue value="5" />
  <EnumValue value="6" />
  <EnumValue value="7" />
  <EnumValue value="8" />
  <EnumValue value="9" />
  <EnumValue value="10" />
  <EnumValue value="11" />
  <EnumValue value="12" />
</UserPref>
<UserPref datatype="enum" default_value="-1" display_name="Summaries" name="summaries">
  <EnumValue display_value="none" value="-1" />
  <EnumValue display_value="short" value="100" />
  <EnumValue display_value="medium" value="200" />
  <EnumValue display_value="long" value="300" />
  <EnumValue display_value="longer" value="400" />
  <EnumValue display_value="show all" value="0" />
</UserPref>
<UserPref datatype="bool" default_value="true" display_name="Render HTML" name="renderHtml" />
<UserPref datatype="bool" default_value="true" display_name="Show Timestamp" name="showTimestamp" />
<UserPref datatype="hidden" name="selectedTab" />
<Content type="html">
<![CDATA[
<script type="text/javascript">
function _hesc(str) {   // '<' and '>'   str = str.replace(//g, ">");   // '"' and '   str = str.replace(/"/g, """).replace(/'/g, "'");    return str; }
function _IG_Callback(callbackFunction, parameters) {   var args = arguments;   return function() {     var combinedArgs = Array.prototype.slice.call(arguments);     callbackFunction.apply(null,       combinedArgs.concat(Array.prototype.slice.call(args,1)))   } }
function _IG_FetchFeedAsJSON(url, callback, opt_params) {
  var params = opt_params || {};
  params["CONTENT_TYPE"] = gadgets.io.ContentType.FEED;
  
  gadgets.io.makeRequest(url, function(obj) {
    callback(obj.data);
  }, params);
}
</script>
]]><![CDATA[
<style type="text/css">
  .tablib_table {
    font-size: __UP_tabFontSize__;
  }
  .tablib_selected, .tablib_unselected {
    width: 23%;
  }

  .statusLabel {
    font-size: 0.75em;
    font-style: italic;
    padding-top: 10px;
    text-align: center;
  }
  .feedHeader {
    padding-top: 5px;
    font-size: 0.7em;
  }
  .feedHeader .feedTitle {
    font-weight: bold;
    font-size: 1.1em;
  }
  .feedHeader .feedAuthor {
    font-weight: normal;
    font-size: 0.8em;
    color: #676767;
  }

  .feedList {
    font-size: 0.7em;
    margin: 0px;
    padding: 0px 0px 5px 0px;
    border-bottom: 1px solid #aaaaaa;
  }
  .feedList li {
    margin-top: 5px;
    padding: 3px 3px 0px 3px;
    border-top: 1px solid #aaaaaa;
  }
  .feedList li div.entryTitle a {
    font-weight: bold;
  }
  .feedList li div.entryTimestamp {
    font-size: 0.95em;
    font-style: italic;
    color: #676767;
  }
  </style>

  
<script type="text/javascript">
// Global variables
  var prefs = new gadgets.Prefs(__MODULE_ID__);
  var tabs = new gadgets.TabSet(__MODULE_ID__);

  /**
   * Initialize tabs when page loads.
   * Create tab for each userpref only if userpref is not empty.
   */
  function init() {
    var f1 = _trim(prefs.getString("feed1"));
    var f2 = _trim(prefs.getString("feed2"));
    var f3 = _trim(prefs.getString("feed3"));
    var f4 = _trim(prefs.getString("feed4"));
    var f5 = _trim(prefs.getString("feed5"));
    var ft1 = _trim(prefs.getString("feedTitle1"));
    var ft2 = _trim(prefs.getString("feedTitle2"));
    var ft3 = _trim(prefs.getString("feedTitle3"));
    var ft4 = _trim(prefs.getString("feedTitle4"));
    var ft5 = _trim(prefs.getString("feedTitle5"));
    

    if (f1 != "") {
      tabs.addDynamicTab(((ft1 == "") ? "Feed 1" : ft1), _IG_Callback(callbackTab, f1));
    }
    if (f2 != "") {
      tabs.addDynamicTab(((ft2 == "") ? "Feed 2" : ft2), _IG_Callback(callbackTab, f2));
    }
    if (f3 != "") {
      tabs.addDynamicTab(((ft3 == "") ? "Feed 3" : ft3), _IG_Callback(callbackTab, f3));
    }
    if (f4 != "") {
      tabs.addDynamicTab(((ft4 == "") ? "Feed 4" : ft4), _IG_Callback(callbackTab, f4));
    }
    if (f5 != "") {
      tabs.addDynamicTab(((ft5 == "") ? "Feed 5" : ft5), _IG_Callback(callbackTab, f5));
    }
  };

  /**
   * Fetches an Atom or RSS feed and generates content inside the
   * selected tab's content container.  This function is called whenever
   * a tab is selected.
   */
  function callbackTab(tabId, feedUrl) {
    var showFeedDesc = prefs.getBool("showFeedDesc");
    var summaries = prefs.getInt("summaries");
    var entries = prefs.getInt("entries");
    var renderHtml = prefs.getBool("renderHtml");
    var showTimestamp = prefs.getBool("showTimestamp");
    var container = document.getElementById(tabId);

    // Display loading message before fetching feed.
    container.innerHTML = '<div class="statusLabel">Loading...</div>';

    // Fetch feed and return it as a JSON object.
    // Callback function is defined within local scope.
    _IG_FetchFeedAsJSON(
      feedUrl,
      function(feed) {
        if (typeof feed == "undefined" || typeof feed.Entry == "undefined") {
          container.innerHTML = '<div class="statusLabel">Invalid feed URL:<br>' + feedUrl + '</div>';
        } else {
          // Fetch feed successful.  Generate HTML content from returned JSON object.
          // Create feed header containing title and description.
          var html = new Array();
          html.push('<div class="feedHeader">');
          html.push('<div class="feedTitle">');
          html.push((feed.Link != "") ? '<a target="_top" href="' + _hesc(feed.Link) + '">' + _hesc(feed.Title) + '</a>' : _hesc(feed.Title));
          html.push((feed.Author != "") ? '<span class="feedAuthor"> by ' + _hesc(feed.Author) + '</span>' : "");
          html.push('</div>');
          if (showFeedDesc) {
            html.push('<div class="feedDesc">' + _hesc(feed.Description) + '</div>');
          }
          html.push('</div>');

          // Iterate through each feed entry and generate list of content.
          html.push('<ul class="feedList">');
          for (var n = 0; n < feed.Entry.length; n++) {
            var entry = feed.Entry[n];
            html.push('<li>');
            html.push('<a target="_top" href="' + entry.Link + '"><b>' + _hesc(entry.Title) + '</b></a>');
            if (typeof entry.Summary != "undefined" && entry.Summary != "") {
              var summary = document.createElement("div");
              summary.innerHTML = (summaries == 0) ? entry.Summary : entry.Summary.substr(0, summaries);
              html.push('<div class="entrySummary">');
              html.push((renderHtml ? summary.innerHTML : _hesc(summary.innerHTML)));
              html.push('</div>');
            }
            if (!isNaN(entry.Date) && showTimestamp) {
              html.push('<div class="entryTimestamp">[' + new Date(entry.Date * 1000).toLocaleString() + ']</div>');
            }
            html.push('</li>');
          }
          html.push('</ul>');

          container.innerHTML = html.join("");
        }

        // Resize iframe height to fit content.
        gadgets.window.adjustHeight();
      },
      entries,
      (summaries > -1)
    );
  }

  // Set onload event handler to call init()
  gadgets.util.registerOnLoadHandler(init);
</script>
<p style="font-size: 10px"><img src="http://widgetweb.co.uk/images/cog18.png" width="18" height="18" alt="Visit widgetweb.co.uk" target="_blank" /><a href="http://widgetweb.co.uk/" target="_blank">More Gadgets</a>
</p> 


]]></Content>
<Content type="html" view="canvas">
<![CDATA[
<script type="text/javascript">
function _hesc(str) {   // '<' and '>'   str = str.replace(//g, ">");   // '"' and '   str = str.replace(/"/g, """).replace(/'/g, "'");    return str; }
function _IG_Callback(callbackFunction, parameters) {   var args = arguments;   return function() {     var combinedArgs = Array.prototype.slice.call(arguments);     callbackFunction.apply(null,       combinedArgs.concat(Array.prototype.slice.call(args,1)))   } }
function _IG_FetchFeedAsJSON(url, callback, opt_params) {
  var params = opt_params || {};
  params["CONTENT_TYPE"] = gadgets.io.ContentType.FEED;
  
  gadgets.io.makeRequest(url, function(obj) {
    callback(obj.data);
  }, params);
}
</script>
]]><![CDATA[
<style type="text/css">
  .tablib_table {
    font-size: __UP_tabFontSize__;
  }
  .tablib_selected, .tablib_unselected {
    width: 23%;
  }

  .statusLabel {
    font-size: 0.75em;
    font-style: italic;
    padding-top: 10px;
    text-align: center;
  }
  .feedHeader {
    padding-top: 5px;
    font-size: 0.7em;
  }
  .feedHeader .feedTitle {
    font-weight: bold;
    font-size: 1.1em;
  }
  .feedHeader .feedAuthor {
    font-weight: normal;
    font-size: 0.8em;
    color: #676767;
  }

  .feedList {
    font-size: 0.7em;
    margin: 0px;
    padding: 0px 0px 5px 0px;
    border-bottom: 1px solid #aaaaaa;
  }
  .feedList li {
    margin-top: 5px;
    padding: 3px 3px 0px 3px;
    border-top: 1px solid #aaaaaa;
  }
  .feedList li div.entryTitle a {
    font-weight: bold;
  }
  .feedList li div.entryTimestamp {
    font-size: 0.95em;
    font-style: italic;
    color: #676767;
  }
  </style>

  
<script type="text/javascript">
// Global variables
  var prefs = new gadgets.Prefs(__MODULE_ID__);
  var tabs = new gadgets.TabSet(__MODULE_ID__);

  /**
   * Initialize tabs when page loads.
   * Create tab for each userpref only if userpref is not empty.
   */
  function init() {
    var f1 = _trim(prefs.getString("feed1"));
    var f2 = _trim(prefs.getString("feed2"));
    var f3 = _trim(prefs.getString("feed3"));
    var f4 = _trim(prefs.getString("feed4"));
    var f5 = _trim(prefs.getString("feed5"));
    var ft1 = _trim(prefs.getString("feedTitle1"));
    var ft2 = _trim(prefs.getString("feedTitle2"));
    var ft3 = _trim(prefs.getString("feedTitle3"));
    var ft4 = _trim(prefs.getString("feedTitle4"));
    var ft5 = _trim(prefs.getString("feedTitle5"));
    

    if (f1 != "") {
      tabs.addDynamicTab(((ft1 == "") ? "Feed 1" : ft1), _IG_Callback(callbackTab, f1));
    }
    if (f2 != "") {
      tabs.addDynamicTab(((ft2 == "") ? "Feed 2" : ft2), _IG_Callback(callbackTab, f2));
    }
    if (f3 != "") {
      tabs.addDynamicTab(((ft3 == "") ? "Feed 3" : ft3), _IG_Callback(callbackTab, f3));
    }
    if (f4 != "") {
      tabs.addDynamicTab(((ft4 == "") ? "Feed 4" : ft4), _IG_Callback(callbackTab, f4));
    }
    if (f5 != "") {
      tabs.addDynamicTab(((ft5 == "") ? "Feed 5" : ft5), _IG_Callback(callbackTab, f5));
    }
  };

  /**
   * Fetches an Atom or RSS feed and generates content inside the
   * selected tab's content container.  This function is called whenever
   * a tab is selected.
   */
  function callbackTab(tabId, feedUrl) {
    var showFeedDesc = prefs.getBool("showFeedDesc");
    var summaries = prefs.getInt("summaries");
    var entries = prefs.getInt("entries");
    var renderHtml = prefs.getBool("renderHtml");
    var showTimestamp = prefs.getBool("showTimestamp");
    var container = document.getElementById(tabId);

    // Display loading message before fetching feed.
    container.innerHTML = '<div class="statusLabel">Loading...</div>';

    // Fetch feed and return it as a JSON object.
    // Callback function is defined within local scope.
    _IG_FetchFeedAsJSON(
      feedUrl,
      function(feed) {
        if (typeof feed == "undefined" || typeof feed.Entry == "undefined") {
          container.innerHTML = '<div class="statusLabel">Invalid feed URL:<br>' + feedUrl + '</div>';
        } else {
          // Fetch feed successful.  Generate HTML content from returned JSON object.
          // Create feed header containing title and description.
          var html = new Array();
          html.push('<div class="feedHeader">');
          html.push('<div class="feedTitle">');
          html.push((feed.Link != "") ? '<a target="_top" href="' + _hesc(feed.Link) + '">' + _hesc(feed.Title) + '</a>' : _hesc(feed.Title));
          html.push((feed.Author != "") ? '<span class="feedAuthor"> by ' + _hesc(feed.Author) + '</span>' : "");
          html.push('</div>');
          if (showFeedDesc) {
            html.push('<div class="feedDesc">' + _hesc(feed.Description) + '</div>');
          }
          html.push('</div>');

          // Iterate through each feed entry and generate list of content.
          html.push('<ul class="feedList">');
          for (var n = 0; n < feed.Entry.length; n++) {
            var entry = feed.Entry[n];
            html.push('<li>');
            html.push('<a target="_top" href="' + entry.Link + '"><b>' + _hesc(entry.Title) + '</b></a>');
            if (typeof entry.Summary != "undefined" && entry.Summary != "") {
              var summary = document.createElement("div");
              summary.innerHTML = (summaries == 0) ? entry.Summary : entry.Summary.substr(0, summaries);
              html.push('<div class="entrySummary">');
              html.push((renderHtml ? summary.innerHTML : _hesc(summary.innerHTML)));
              html.push('</div>');
            }
            if (!isNaN(entry.Date) && showTimestamp) {
              html.push('<div class="entryTimestamp">[' + new Date(entry.Date * 1000).toLocaleString() + ']</div>');
            }
            html.push('</li>');
          }
          html.push('</ul>');

          container.innerHTML = html.join("");
        }

        // Resize iframe height to fit content.
        gadgets.window.adjustHeight();
      },
      entries,
      (summaries > -1)
    );
  }

  // Set onload event handler to call init()
  gadgets.util.registerOnLoadHandler(init);
</script>
<p style="font-size: 10px"><img src="http://widgetweb.co.uk/images/cog18.png" width="18" height="18" alt="Visit widgetweb.co.uk" target="_blank" /><a href="http://widgetweb.co.uk/" target="_blank">More Gadgets</a>
</p> 


]]></Content>

</Module>

