function RenderItemTemplate($f, item) {
if ($f == null) {
return;
}
var Id = replaceAll($f.html(), "${Id}", item.Id);
var FirefoxId = replaceAll(Id, "$%7BId%7D", item.Id);
var Title = replaceAll(FirefoxId, "${Title}", item.Title);
var FirefoxTitle = replaceAll(Title, "$%7BTitle%7D", item.Title);
var Description = replaceAll(FirefoxTitle, "${Description}", item.Description);
var FirefoxDescription = replaceAll(Description, "$%7BDescription%7D", item.Description);
var PublishDate = replaceAll(FirefoxDescription, "${PublishDate}", item.Date);
var FirefoxPublishDate = replaceAll(PublishDate, "$%7BPublishDate%7D", item.Date);
var PrettyDate = replaceAll(FirefoxPublishDate, "${PrettyDate}", item.PrettyDate);
var FirefoxPrettyDate = replaceAll(PrettyDate, "$%7BPrettyDate%7D}", item.PrettyDate);
var ItemContent = replaceAll(FirefoxPrettyDate, "${ItemContentPreview}", item.ItemContentPreview);
var FirefoxItemContent = replaceAll(ItemContent, "$%7BItemContentPreview%7D", item.ItemContentPreview);
var SourceLink = replaceAll(FirefoxItemContent, "${SourceLink}", item.SourceLink);
var FirefoxSourceLink = replaceAll(SourceLink, "$%7BSourceLink%7D", item.SourceLink);
var Data = replaceAll(FirefoxSourceLink, "${Data}", item.Data);
var FirefoxData = replaceAll(Data, "$%7BData%7D", item.Data);
var SourceId = replaceAll(FirefoxData, "${SourceId}", item.SourceId);
var FirefoxSourceId = replaceAll(SourceId, "$%7BSourceId%7D", item.SourceId);
var CommentCount = replaceAll(FirefoxSourceId, "${CommentCount}", item.CommentCount);
var FirefoxCommentCount = replaceAll(CommentCount, "$%7BCommentCount%7D", item.CommentCount);
var SourceTypeName = replaceAll(FirefoxCommentCount, "${SourceTypeName}", item.SourceTypeName);
var FirefoxSourceTypeName = replaceAll(SourceTypeName, "$%7BSourceTypeName%7D", item.SourceTypeName);
var SourceTitle = replaceAll(FirefoxSourceTypeName, "${SourceTitle}", item.SourceTitle);
var FirefoxSourceTitle = replaceAll(SourceTitle, "$%7BSourceTitle%7D", item.SourceTitle);
return FirefoxSourceTitle;
}
function replaceAll(OldString, FindString, ReplaceString) {
var SearchIndex = 0;
var NewString = "";
while (OldString.indexOf(FindString, SearchIndex) != -1) {
NewString += OldString.substring(SearchIndex, OldString.indexOf(FindString, SearchIndex));
NewString += ReplaceString;
SearchIndex = (OldString.indexOf(FindString, SearchIndex) + FindString.length);
}
NewString += OldString.substring(SearchIndex, OldString.length);
return NewString;
}
encodeHTML = function(original) {
return EscapeHTML(original).replace(/&/g, '&').replace(//g, '>');
};
encodeHTMLWhiteList = function(original) {
return original.replace(/&/g, '&').replace(//g, '>').replace('\n',' ');
};
decodeHTML = function(original) {
return original.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
};
RenderButtonRollovers = function() {
$(".ro").mouseover(
function() {
if ($(this).attr("src").indexOf("_active") == -1) {
var newSrc = $(this).attr("src").replace("_up.png", "_active.png");
$(this).attr("src", newSrc);
}
}
)
$(".ro").mouseout(
function() {
if ($(this).attr("src").indexOf("_active") != -1) {
var newSrc = $(this).attr("src").replace("_active.png", "_up.png");
$(this).attr("src", newSrc);
}
}
)
}
EscapeHTML = function(original) {
var eHtml = escape(original);
eHtml = eHtml.replace(/\//g, "%2F");
eHtml = eHtml.replace(/\?/g, "%3F");
eHtml = eHtml.replace(/=/g, "%3D");
eHtml = eHtml.replace(/&/g, "%26");
eHtml = eHtml.replace(/@/g, "%40");
return eHtml;
}
AjaxFailure = function(XMLHttpRequest, textStatus, errorThrown) {
debugger
if (textStatus == "timeout") {
alert("Sorry, there was a delay in accessing the site database and the request has timed out. The site may be busy or having problems. If this problem persists, please contact the site administrator.");
}
else {
alert("Sorry, there was an error and the request could not be completed. The site may be busy or having problems. If this problem persists, please contact the site administrator.");
}
};
/*
* jQuery pager plugin
* Version 1.0 (12/22/2008)
* @requires jQuery v1.2.6 or later
*
* Example at: http://jonpauldavies.github.com/PagerDemo.html
*
* Copyright (c) 2008-2009 Jon Paul Davies
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Read the related blog post and contact the author at http://www.j-dee.com
*
* This version is far from perfect and doesn't manage it's own state, therefore contributions are more than welcome!
*
* Usage: .pager({ pagenumber: 1, pagecount: 15, buttonClickCallback: PagerClickTest });
*
* Where pagenumber is the visible page number
* pagecount is the total number of pages to display
* buttonClickCallback is the method to fire when a pager button is clicked.
*
* buttonClickCallback signiture is PagerClickTest = function(pageclickednumber)
* Where pageclickednumber is the number of the page clicked in the control.
*
*/
(function($) {
$.fn.pager = function(options) {
var opts = $.extend({}, $.fn.pager.defaults, options);
return this.each(function() {
// empty out the destination element and then render out the pager with the supplied options
$(this).empty().append(renderpager(parseInt(options.pagenumber), parseInt(options.pagecount), options.buttonClickCallback));
// specify correct cursor activity
$('.pages li').mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; });
});
};
// render and return the pager with the supplied options
function renderpager(pagenumber, pagecount, buttonClickCallback) {
// setup $pager to hold render
var $pager = $('
');
// add in the previous and next buttons
$pager.append(renderButton('first', pagenumber, pagecount, buttonClickCallback)).append(renderButton('prev', pagenumber, pagecount, buttonClickCallback));
// pager currently only handles 10 viewable pages ( could be easily parameterized, maybe in next version ) so handle edge cases
var startPoint = 1;
var endPoint = 9;
if (pagenumber > 4) {
startPoint = pagenumber - 4;
endPoint = pagenumber + 4;
}
if (endPoint > pagecount) {
startPoint = pagecount - 8;
endPoint = pagecount;
}
if (startPoint < 1) {
startPoint = 1;
}
// loop thru visible pages and render buttons
for (var page = startPoint; page <= endPoint; page++) {
var currentButton = $('
' + (page) + '
');
page == pagenumber ? currentButton.addClass('pgCurrent') : currentButton.click(function() { buttonClickCallback(this.firstChild.data); });
currentButton.appendTo($pager);
}
// render in the next and last buttons before returning the whole rendered control back.
$pager.append(renderButton('next', pagenumber, pagecount, buttonClickCallback)).append(renderButton('last', pagenumber, pagecount, buttonClickCallback));
return $pager;
}
// renders and returns a 'specialized' button, ie 'next', 'previous' etc. rather than a page number button
function renderButton(buttonLabel, pagenumber, pagecount, buttonClickCallback) {
var $Button = $('
' + buttonLabel + '
');
var destPage = 1;
// work out destination page for required button type
switch (buttonLabel) {
case "first":
destPage = 1;
break;
case "prev":
destPage = pagenumber - 1;
break;
case "next":
destPage = pagenumber + 1;
break;
case "last":
destPage = pagecount;
break;
}
// disable and 'grey' out buttons if not needed.
if (buttonLabel == "first" || buttonLabel == "prev") {
pagenumber <= 1 ? $Button.addClass('pgEmpty') : $Button.click(function() { buttonClickCallback(destPage); });
}
else {
pagenumber >= pagecount ? $Button.addClass('pgEmpty') : $Button.click(function() { buttonClickCallback(destPage); });
}
return $Button;
}
// pager defaults. hardly worth bothering with in this case but used as placeholder for expansion in the next version
$.fn.pager.defaults = {
pagenumber: 1,
pagecount: 1
};
})(jQuery);
function AjaxManager(parameterObject, serviceMethodName, successCallback, errorCallBack) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout:25000,
url: serviceMethodName,
data: parameterObject,
success: function(msg) { successCallback(msg) },
error: function(XMLHttpRequest, textStatus, errorThrown) { errorCallBack(XMLHttpRequest, textStatus, errorThrown) }
});
}
///
///
var PageSize;
var PageCount;
var PageNumber = 1;
var ItemFilterType = "None";
var ItemFilterArgument = "None";
var TagPage = 1;
var init = true;
$(document).ready(function() { $("body").hide(); LoadTemplate(); });
LoadTemplate = function() {
$("#TemplateDump").load("/Themes/" + ThemeName + "/" + ThemeName + ".template.html", function() { TemplateLoaded(); }).hide();
};
TemplateLoaded = function() {
$('#Stylesheet').attr('href', "/Themes/" + ThemeName + "/" + ThemeName + ".template.css");
$("#TemplateDump").find("#MasterTemplate").appendTo("#TemplateHolder");
PageSize = $("#PageSize").text();
LoadAndRenderTags();
LoadAndRenderChannels();
LoadAndRenderFeatures();
RenderItemTypes();
$("#alertbox").mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; }).hide().click(function() { ChannelResetClick(); });
InitializeSearch();
LoadAndRenderFeedItemPackage();
$.browser.mozilla ? $("body").keypress(checkForEnter) : $("body").keydown(checkForEnter);
};
PagerClick = function(pageclickednumber) {
PageNumber = pageclickednumber;
LoadAndRenderFeedItemPackage();
}
LoadAndRenderFeedItemPackage = function() {
var parameterObject = '{"PageSize":"' + PageSize + '", "PageNumber":"' + PageNumber + '", "ItemFilterType":"' + ItemFilterType + '", "ItemFilterArgument":"' + ItemFilterArgument + '"}';
var method;
init ? method = "/user/ymk/UIService.asmx/GetInitItemsPackage" : method = "/user/ymk/UIService.asmx/GetItemsPackage";
AjaxManager(parameterObject, method, ProcessFeedItemPackage, AjaxFailure);
};
ProcessFeedItemPackage = function(data) {
$("#TemplateItemsHolder").empty().hide();
$('html, body').animate({ scrollTop: 0 }, 'slow');
var feeditempackage = data.d;
if (init) {
if (feeditempackage.Settings.Title.length == 0) {
$("#title").hide();
document.title = "AmpliFeeder";
}
else {
$("#title").html('' + feeditempackage.Settings.Title + '');
document.title = feeditempackage.Settings.Title;
}
if (feeditempackage.Settings.Tagline.length == 0) {
$("#tagline").hide();
}
else {
$("#tagline").html(feeditempackage.Settings.Tagline);
}
if (feeditempackage.Settings.About.length == 0) {
$("#about").hide();
}
else {
$("#about").html(feeditempackage.Settings.About);
var meta = $('meta')[0];
if (meta) {
meta.name = 'description';
meta.content = feeditempackage.Settings.About;
}
}
/*
if (feeditempackage.Settings.CustomCSS.length > 0) {
$("head").append('');
}*/
init = false;
}
PageCount = feeditempackage.PageCount;
$.each(feeditempackage.FeedItems, function(i, item) { ProcessFeedItem(item); });
$("#TemplateItemsHolder").fadeIn(300);
$("#pager").pager({ pagenumber: PageNumber, pagecount: PageCount, buttonClickCallback: PagerClick });
if ($("body").is(":hidden"))
{
$("body").fadeIn(300);
}
if (typeof MasterPageRendered == 'function') { MasterPageRendered(); }
};
ProcessFeedItem = function(item) {
var $f = $("#TemplateDump").find("." + item.SourceTypeName).clone();
if ($f.length == 0) {
$("#TemplateItemsHolder").append(" Cannot find " + item.SourceTypeName + " item template. You may need to create one or get an updated version of this theme ");
}
else {
$("#TemplateItemsHolder").append(RenderItemTemplate($f, item));
}
};
LoadAndRenderFeatures = function() {
$(".Feature").each(function(i,item){ LoadFeature(item)})
}
LoadFeature = function(destination) {
var count = $(destination).find(".itemcount").text();
var type = $(destination).find(".itemtype").text();
var parameterObject = '{"itemtype":"' + type + '", "numberToReturn":"' + count + '"}';
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 25000,
url: "/user/ymk/UIService.asmx/GetFeature",
data: parameterObject,
success: function(msg) { FeatureLoaded(destination, msg) },
error: function(XMLHttpRequest, textStatus, errorThrown) { AjaxFailure(XMLHttpRequest, textStatus, errorThrown) }
});
}
FeatureLoaded = function(destination,data) {
var items = data.d
if (items.count == 0) {
$(destination).hide();
return;
}
var type = $(destination).find(".itemtype").text();
var $f = $("#TemplateDump").find("." + type).clone();
var destparent = $(destination).parent();
destparent.empty();
$.each(items, function(i, item) { RenderFeature(destparent, item, type, $f); });
}
RenderFeature = function(destparent, item, type, $f) {
if ($f.length == 0) {
$(destparent).append(" Cannot find " + type + " feature template. You may need to create one or get an updated version of this theme ");
}
else {
$(destparent).append(RenderItemTemplate($f, item));
}
}
LoadAndRenderTags = function() {
$("#TagList").mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; });
var parameterObject = '{"TagPage":"' + TagPage + '"}';
AjaxManager(parameterObject, "/user/ymk/UIService.asmx/GetTags", RenderTags, AjaxFailure);
};
RenderTags = function(data) {
var items = data.d ;
if (items.count == 0) {
$("#tagtitle").hide();
return;
}
$("#TagList").empty();
$.each(items, function(i, item) { RenderTag(item); });
$("
more...
").click(function() { TagPage = TagPage + 1; LoadAndRenderTags(); }).appendTo($("#TagList"));
};
RenderTag = function(item) {
$("'" + item.Name + "'").click(function() { TagClick(this.id, item.Name); }).append(" ").appendTo($("#TagList"));
};
TagClick = function(id,name) {
$("#alertbox").html("Currently just showing the items that match the tag '" + name + "'. Click here to show all items.").show();
ItemFilterType = "Tag";
ItemFilterArgument = id;
PageNumber = 1;
LoadAndRenderFeedItemPackage();
};
ChannelResetClick = function() {
ItemFilterType = "None";
ItemFilterArgument = "None";
LoadAndRenderFeedItemPackage();
$("#alertbox").hide();
};
InitializeSearch = function() {
$SearchButton = $('search').click(function() { DoSearch(); }).mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; });
$("#Search").append("").append($SearchButton);
};
DoSearch = function() {
ItemFilterType = "Search";
ItemFilterArgument = encodeHTML($("#txtsearch").val());
if (ItemFilterArgument !== "") {
$("#txtsearch").val("");
$("#alertbox").html("Currently just showing the items that match your search for '" + ItemFilterArgument + "'. Click here to show all items.").show();
PageNumber = 1;
LoadAndRenderFeedItemPackage();
}
};
LoadAndRenderChannels = function() {
var parameterObject = '{}';
AjaxManager(parameterObject, "/user/ymk/UIService.asmx/GetActiveSources", RenderChannels, AjaxFailure);
};
RenderChannels = function(data) {
var items = data.d
$.each(items, function(i, item) { RenderChannel(item); });
if (items.length > 1 && $("#channels").length > 0) {
RenderAllChannel();
}
};
RenderChannel = function(item) {
var $f = $("#TemplateDump").find("#ChannelTemplate").html();
if ($f == null) {
return;
}
var Idx = replaceAll($f, "${Id}", item.Id);
var FirefoxIdx = replaceAll(Idx, "$%7BId%7D", item.Id);
var Titlex = replaceAll(FirefoxIdx, "${Title}", item.Title);
var FirefoxTitlex = replaceAll(Titlex, "$%7BTitle%7D", item.Title);
var FeedUrix = replaceAll(FirefoxTitlex, "${FeedUri}", item.FeedUri);
var FirefoxFeedUrix = replaceAll(FeedUrix, "$%7BFeedUri%7D", item.FeedUri);
var SourceTypeNamex = replaceAll(FirefoxFeedUrix, "${SourceTypeName}", item.SourceTypeName);
var FirefoxSourceTypeNamex = replaceAll(SourceTypeNamex, "$%7BSourceTypeName%7D", item.SourceTypeName);
$(FirefoxSourceTypeNamex).mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; }).click(function() { ChannelClick(this.id, item.Title); }).appendTo($('#channels'));
};
RenderAllChannel = function() {
var $f = $("#TemplateDump").find("#ChannelTemplate").html();
if ($f == null) {
return;
}
var Idx = replaceAll($f, "${Id}", "All");
var FirefoxIdx = replaceAll(Idx, "$%7BId%7D", "All");
var Titlex = replaceAll(FirefoxIdx, "${Title}", "");
var FirefoxTitlex = replaceAll(Titlex, "$%7BTitle%7D", "");
var FeedUrix = replaceAll(FirefoxTitlex, "${FeedUri}", "#");
var FirefoxFeedUrix = replaceAll(FeedUrix, "$%7BFeedUri%7D", "#");
var SourceTypeNamex = replaceAll(FirefoxFeedUrix, "${SourceTypeName}", "All");
var FirefoxSourceTypeNamex = replaceAll(SourceTypeNamex, "$%7BSourceTypeName%7D", "All");
$(FirefoxSourceTypeNamex).mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; }).click(function() { ChannelResetClick(); }).appendTo($('#channels'));
};
ChannelClick = function(id,name) {
ItemFilterType = "Source";
ItemFilterArgument = id;
$("#alertbox").html("Currently just showing the items that come from " + name + ". Click here to show all items.").show();
PageNumber = 1;
LoadAndRenderFeedItemPackage();
};
checkForEnter = function(event) {
if (event.keyCode == 13) {
event.preventDefault();
DoSearch();
}
};
RenderItemTypes = function() {
if ($("#pages").length > 0)
{
RenderHomeItemType();
RenderItemType("Bookmark");
RenderItemType("Image");
RenderItemType("Note");
RenderItemType("Video");
RenderItemType("Post");
}
}
RenderItemType = function(sourcetypename) {
var $f = $("#TemplateDump").find("#ItemTypeTemplate").html();
if ($f == null) {
return;
}
var Idx = replaceAll($f, "${Id}", sourcetypename);
var FirefoxIdx = replaceAll(Idx, "$%7BId%7D", sourcetypename);
var Titlex = replaceAll(FirefoxIdx, "${Title}", sourcetypename);
var FirefoxTitlex = replaceAll(Titlex, "$%7BTitle%7D", sourcetypename);
var SourceTypeNamex = replaceAll(FirefoxTitlex, "${SourceTypeName}", sourcetypename);
var FirefoxSourceTypeNamex = replaceAll(SourceTypeNamex, "$%7BSourceTypeName%7D", sourcetypename);
$(FirefoxSourceTypeNamex).mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; }).click(function() { ItemTypeClick(sourcetypename); }).appendTo($('#pages'));
}
RenderHomeItemType = function() {
var $f = $("#TemplateDump").find("#ItemTypeTemplate").html();
if ($f == null) {
return;
}
var Idx = replaceAll($f, "${Id}", "Home");
var FirefoxIdx = replaceAll(Idx, "$%7BId%7D", "Home");
var Titlex = replaceAll(FirefoxIdx, "${Title}", "item");
var FirefoxTitlex = replaceAll(Titlex, "$%7BTitle%7D", "item");
var SourceTypeNamex = replaceAll(FirefoxTitlex, "${SourceTypeName}", "Home");
var FirefoxSourceTypeNamex = replaceAll(SourceTypeNamex, "$%7BSourceTypeName%7D", "Home");
$(FirefoxSourceTypeNamex).mouseover(function() { document.body.style.cursor = "pointer"; }).mouseout(function() { document.body.style.cursor = "auto"; }).click(function() { ChannelResetClick(); }).appendTo($('#pages'));
}
ItemTypeClick = function(sourcetypename) {
ItemFilterType = "ItemType";
ItemFilterArgument = sourcetypename;
$("#alertbox").html("Currently viewing the " + sourcetypename + " page. Click here to show all items.").show();
PageNumber = 1;
LoadAndRenderFeedItemPackage();
}