/*--------------------------------------------------------------------------------
Famax PRO v6.2 by Jake H. from CodeHandling
https://codecanyon.net/item/famax-facebook-fan-page-on-your-website/10287995?ref=codehandling
---------------------------------------------------------------------------------*/
/*------------------------------------------------------------------
[Table of contents]
1. Famax Settings
2. DOM Initialization
3. Options Initialization
4. Source Validation
5. Getters
5.1 Page Details
5.2 Page Posts
5.3 Page Videos
5.4 Page Photos
6. Setters
6.1 Post Objects
6.2 Photo Objects
6.3 Video Setters
7. Display List
8. Item Display Mechanisms
8. Sorting Handlers
9. Tab Handlers
9. Popup Button Handler
10.Load More Handler
12.Famax Display Handler
11.Resize Handler
12.Utility Functions
13.Facebook Login
14.Famax Main Function
-------------------------------------------------------------------*/
(function($) {
"use strict";
var settings = {
appId:'852602131447787',
accessToken: 'EAAJTO0BbbJUBAHSW6a0dfzb7Nx5BADMHk3OlaQFEBFDlTmenOSAMes2JZAjaEDy0YGa2NZBbhZAicjCznslFkwTlQcjlRnZCpz9kOOWekXw4dYxzJaPRoXvuy9vgKVf0k2VHaFQBxpbmcU9tyCYkkzmIqcfapY8ZD',
fanPageLinkForHeader:'http://www.facebook.com/adidas',
tabs:[
{
name:"Posts",
type:"facebook-page-posts",
link:"https://www.facebook.com/adidas",
},
{
name:"Photos",
type:"facebook-page-photos",
link:"http://www.facebook.com/adidas"
},
{
name:"Videos",
type:"facebook-page-videos",
link:"http://www.facebook.com/adidas"
},
{
name:"Album Pics",
type:"facebook-album-photos",
link:"https://www.facebook.com/pg/adidas/photos/?tab=album&album_id=191308754225385"
},
],
defaultTab:"Posts",
itemDisplayMode:"popup",
maxResults:12,
defaultSortOrder:"recent-first",
famaxDisplayMode:"grid",
dateFormat:"relative",
famaxBackgroundColor :"#ECEFF1",
itemBackgroundColor :"#fbfbfb",
headerBackgroundColor :"rgb(244, 67, 54)",
titleColor :"rgb(97, 93, 93)",
likesColor :"#6f6f6f",
controlsTextColor :"black",
titleFontFamily :"Roboto Condensed",
generalFontFamily :"Roboto Condensed",
titleFontSize :"1",
titleFontWeight :"normal",
likesDateFontSize :"0.85",
baseFontSize :"16px",
responsiveBreakpoints :[600,1200,2000,2500],
loadMoreText :" Show me more posts..",
ctaText :" Check out our store!",
ctaLink :"http://www.adidas.co.in/heretocreate",
postList :[],
popupAlignTop :true,
aspectRatio :360/640,
nextPageToken :null,
clearListOnDisplay :true,
channelIdForSearch :null,
searchFlag :false,
famaxLoggedInUser : {
name :null,
id :null,
picture :null,
token :null,
}
},
init = function($famaxPro) {
var facebookWrapperStart = "
"
var facebookWrapperEnd = "
"
var listWrapperStart = "";
var listWrapperEnd = "
";
var pageHeader = ""
var listHeader = "
";
//var inlineContainer = "";
var listContainer = "";
var loadMoreButton = ""+settings.loadMoreText+"
";
var ctaButton = "";
var calloutContainer = "";
var albumNavigationName = "";
var popupContainer = "";
if(settings.ctaLink!=null) {
ctaButton = ""+settings.ctaText+"
";
}
$famaxPro.append(facebookWrapperStart+pageHeader+listWrapperStart+listHeader+albumNavigationName+listContainer+loadMoreButton+ctaButton+listWrapperEnd+facebookWrapperEnd+popupContainer);
showLoader($famaxPro);
},
doOptions = function($famaxPro){
var customCSS = "";
var headerBackgroundColor,lightheaderBackgroundColor;
clearSettings();
//settings.minimumViewsPerDayForTrendingVideos = parseInt(settings.minimumViewsPerDayForTrendingVideos,10);
//set date format
if(settings.dateFormat=="relative") {
convertDate = convertToRelativeDate;
} else if(settings.dateFormat=="specific") {
convertDate = convertToSpecificDate;
}
//set view - grid|list|double-list
handleFamaxDisplay($famaxPro);
//Famax Background Color
customCSS += ".facebook-pro {background-color: "+settings.famaxBackgroundColor+";}";
customCSS += ".fp-load-more-button:hover {background: linear-gradient(to right,"+settings.famaxBackgroundColor+","+settings.itemBackgroundColor+" 30%);}"
//Item Background Color
customCSS += ".fp-list-title select, .fp-item, .fp-load-more-button, .fp-channel-search {background-color: "+settings.itemBackgroundColor+";}"
//Likes Color
customCSS += ".fp-view-string{color: "+settings.likesColor+";}";
//Header Color
customCSS += ".fp-grid .fp-view-bucket-seen {color: "+settings.headerBackgroundColor+"; background-color:inherit;}";
customCSS += ".fp-loader {border-color: "+settings.headerBackgroundColor+";}";
customCSS += ".fp-load-more-button{box-shadow: 0 0px 2px rgba(0,0,0,.2), -0.2em 0px 0px 0px "+settings.headerBackgroundColor+";}";
customCSS += ".fp-list-title select{box-shadow: 0 1px 2px rgba(0,0,0,.2), -0.2em 0px 0px 0px "+settings.headerBackgroundColor+";}";
customCSS += ".fp-header,.fp-cta-button,.fp-showing-album-name{background-color:"+settings.headerBackgroundColor+"; color:"+settings.headerTextColor+";}";
customCSS += ".fp-title a, .fp-popup-title a, .fp-comment span{color:"+settings.headerBackgroundColor+"; }";
customCSS += ".fp-popup-button:hover, .fp-add-comment-button:hover, .fp-post-like-button:hover, .fp-view-string {background-color: "+settings.headerBackgroundColor+"; box-shadow: 0px 0px 0px 1px "+settings.headerBackgroundColor+";}";
//Title color
customCSS += ".fp-title, .fp-views-per-day {color: "+settings.titleColor+";}";
customCSS += ".fp-date-bucket{color: "+settings.titleColor+";}";
//customCSS += ".fp-tab-container{box-shadow: -0.2em 0px 0px 0px "+settings.likesColor+";}";
customCSS += ".fp-selected-tab:after{background-color:"+settings.titleColor+";}";
customCSS += ".fp-item, .fp-loader {color:"+settings.titleColor+";}";
//Controls Text Color
customCSS += ".fp-list-title select, .fp-load-more-button, .fp-channel-search {color:"+settings.controlsTextColor+";}";
customCSS += ".fp-tab-container{color: "+settings.controlsTextColor+";}";
headerBackgroundColor = settings.headerBackgroundColor;
if(headerBackgroundColor.indexOf("rgb")!=-1) {
//convert rgb format to rgba format
lightheaderBackgroundColor = headerBackgroundColor.substring(0,headerBackgroundColor.length-1) + ",0.5)";
lightheaderBackgroundColor = lightheaderBackgroundColor.replace("rgb","rgba");
customCSS += ".fp-views-per-day{border-color: "+lightheaderBackgroundColor+";}";
customCSS += ".fp-load-more-button:hover {background: linear-gradient(to right,"+lightheaderBackgroundColor+","+settings.itemBackgroundColor+" 20%);}"
}
//font size styles
customCSS += ".fp-title {font-size:"+settings.titleFontSize+"em !important; font-weight:"+settings.titleFontWeight+" !important;}";
customCSS += ".fp-date-bucket,.fp-count-string,.fp-view-string {font-size:"+settings.likesDateFontSize+"em !important;}";
customCSS += ".famax-pro,.mfp-container{font-size: "+settings.baseFontSize+";}";
//font-family
customCSS += ".fp-item,.fp-callout,.fp-offer{font-family:"+settings.generalFontFamily+";}";
customCSS += ".fp-title,.fp-offer-title,.fp-callout-title {font-family:"+settings.titleFontFamily+";}";
//hiding options
if(settings.hideHeader) {
customCSS += " .fp-header {display:none;}";
}
if(settings.hideTabs) {
customCSS += " .fp-tab-container {display:none;}";
}
if(settings.hideSorting) {
customCSS += " #fp-sort-order {display:none;}";
}
if(settings.hideLoadingMechanism) {
customCSS += " .fp-load-more-button, .fp-previous-button, .fp-next-button{display:none;}";
customCSS += " .fp-cta-button{width:100%;}";
}
if(settings.hideCtaButton) {
customCSS += " .fp-cta-button{display:none;}";
customCSS += " .fp-load-more-button {width: 100%;} .fp-previous-button, .fp-next-button {width: 48.5%;}";
}
if(settings.hidePopupDetails) {
customCSS += ".fp-popup-details {display:none;}";
settings.popupAlignTop = false;
}
if(settings.hideThumbnailLikesCommentsDate) {
customCSS += ".fp-separator-for-grid, .fp-likes, .fp-comments, .fp-date-bucket {display: none !important;}";
settings.popupAlignTop = false;
}
if(settings.hidePageAboutInfo) {
customCSS += ".fp-about-info, .fp-website {display:none;}";
}
//popup image max height
try{
var maxHeight = $(window.top).height()*0.85;
customCSS += ".mfp-img{max-height:"+maxHeight+"px !important;}";
} catch(e){
//must be in an iframe..
}
//remove styles if already existing
$(".facebook-added-styles").remove();
//add new styles
$("body").append("");
},
clearSettings = function(){
settings.postList = [];
settings.nextPageToken = null;
settings.clearListOnDisplay = true;
settings.searchFlag = false;
},
initHeader = function($famaxPro){
var identifierJSON;
identifierJSON = sanitizeLink("facebook-page-posts",settings.fanPageLinkForHeader);
if(identifierJSON.identifier=="error") {
alert("\n\nFacebook Page Link should be of the format: \nhttp://www.facebook.com/adidas \n\nPlease contact us via comments to get your page link in this format :)");
return;
}
getPageDetails(identifierJSON.identifier,null,$famaxPro);
},
displayHeader = function(pageDetails,$famaxPro){
var pageId = pageDetails.id;
var pageName = pageDetails.name;
var pageLikes = pageDetails.likes;
var pageTalkingAbout = pageDetails.talking_about_count;
var pageBackgroundImage;
if(null!=pageDetails.cover) {
pageBackgroundImage = pageDetails.cover.source;
} else {
pageBackgroundImage="";
}
var pageLink = "https://www.facebook.com/"+pageId;
var pageThumbnail = pageDetails.picture.data.url;
var pageAbout = pageDetails.about;
var pageWebsite = pageDetails.website;
var $facebookHeader = $famaxPro.find(".fp-header");
var pageThumbnailHTML = "";
var pageLikeBoxHTML = "";
var pageDetailsHTML = "";
var aboutDetails = ""+pageAbout+"
";
var pageWebsite = "";
$facebookHeader.append("");
if(settings.showCoverImage) {
$famaxPro.find(".fp-header").css("background-image","url("+pageBackgroundImage+")");
}
settings.fanPageId = pageId;
},
createTabs = function($famaxPro) {
var identifierJSON,source,name,link,selected,channelId,channelUser,playlistId,tabId;
var $facebookTabContainer = $famaxPro.find(".fp-tab-container");
for(var i=0; i"+name+"");
if(source=="facebook-page-posts" || source=="facebook-page-photos" || source=="facebook-page-videos" || source=="facebook-page-albums") {
//update the tab with page id
getPageDetails(identifierJSON.identifier,tabId,$famaxPro);
} else if(source=="facebook-album-photos") {
//select if default
if(settings.defaultTab==name) {
$famaxPro.find("#"+tabId).click();
}
} else if(source=="") {
}
} //for loop on tabs ends
},
sanitizeLink = function(source,link) {
var sanityIndex,pageUser,albumId;
var identifierJSON = {
identifier :"",
identifierType :""
};
//remove trailing slashes
link = link.replace(/\/$/, "");
if(source=="facebook-page-posts" || source=="facebook-page-photos" || source=="facebook-page-videos" || source=="facebook-page-albums") {
//remove "/?nr" from the end of URL
link = link.replace(/\/\?.*/,"");
sanityIndex = link.lastIndexOf("/");
if(sanityIndex==-1) {
identifierJSON.identifier = "error";
alert("\n\nFacebook Page Link should be of the format: \nhttp://www.facebook.com/adidas \n\nPlease contact us via comments to get your page link in this format :)");
} else {
pageUser = link.substring(sanityIndex+1);
//remove "." from the page name
pageUser = pageUser.replace(/\./g,"");
//keep only the last "-part" from the page name
if(pageUser.indexOf("-")!=-1) {
pageUser = pageUser.substring(pageUser.lastIndexOf("-")+1);
}
identifierJSON.identifierType = "facebook-page-user";
identifierJSON.identifier = pageUser;
}
} else if(source=="facebook-album-photos") {
sanityIndex = link.indexOf("album_id=");
if(sanityIndex==-1) {
identifierJSON.identifier = "error";
alert("\n\nFacebook Album Link should be of the format: \nhttps://www.facebook.com/pg/adidas/photos/?tab=album&album_id=1067342993288619 \n\n");
} else {
albumId = link.substring(sanityIndex+9);
identifierJSON.identifierType = "facebook-album-useid";
identifierJSON.identifier = albumId;
}
} else if(source=="") {
}
return identifierJSON;
},
getPageDetails = function(pageName,tabId,$famaxPro) {
var apiURL = "https://graph.facebook.com/v2.8/"+pageName+"?access_token="+settings.accessToken+"&fields=talking_about_count,cover,likes,name,picture,about,website";
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
if(null==tabId) {
displayHeader(response,$famaxPro);
} else {
updateTabs(tabId,response,$famaxPro);
}
},
error: function(html) {
alert("Could not load Page Details..");
}
});
},
getPagePosts = function(pageId,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8/"+pageId+"/posts?limit="+settings.maxResults+"&access_token="+settings.accessToken+"&fields=type,message,message_tags,object_id,picture,full_picture,name,story,link,from,comments.limit(1).summary(true),likes.limit(1).summary(true),shares,created_time";
if(settings.nextPageToken!=null) {
apiURL = settings.nextPageToken;
}
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
postArray = createPostObjects(response.data,$famaxPro);
handleNextPageToken(response.paging,$famaxPro);
displayItems(postArray,$famaxPro);
videoDisplayMechanism($famaxPro);
},
error: function(html) {
}
});
},
getPagePhotos = function(pageId,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8/"+pageId+"/photos/uploaded?limit="+settings.maxResults+"&access_token="+settings.accessToken+"&fields=type,object_id,picture,images,name,name_tags,story,link,from,comments.limit(1).summary(true),likes.limit(1).summary(true),shares,created_time,album";
if(settings.nextPageToken!=null) {
apiURL = settings.nextPageToken;
}
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
postArray = createPhotoObjects(response.data,$famaxPro);
handleNextPageToken(response.paging,$famaxPro);
displayItems(postArray,$famaxPro);
videoDisplayMechanism($famaxPro);
},
error: function(html) {
}
});
},
getPageAlbums = function(pageId,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8/"+pageId+"/albums?limit="+settings.maxResults+"&access_token="+settings.accessToken+"&fields=cover_photo,description,photo_count,picture,images,name,name_tags,link,from,comments.limit(1).summary(true),likes.limit(1).summary(true),shares,created_time";
if(settings.nextPageToken!=null) {
apiURL = settings.nextPageToken;
}
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
createAlbumObjects(response.data,$famaxPro);
},
error: function(html) {
}
});
},
/*
gatherAlbumCoverPhotos = function(albumArray,$famaxPro) {
var coverId, coverIdArray = [];
for(var i=0;i<=albumArray.length;i++) {
coverId = albumArray[i].cover_photo.id;
coverIdArray.push(coverId);
}
getAlbumCoverPhotos(coverIdArray,$famaxPro);
},
*/
getAlbumCoverPhotos = function(coverIdArray,processesPostArray,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8?ids="+coverIdArray+"&access_token="+settings.accessToken+"&fields=images";
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
postArray = addCoverImagesToAlbums(response,processesPostArray,$famaxPro);
displayAlbums(postArray,$famaxPro);
registerAlbumNavigation($famaxPro);
},
error: function(html) {
}
});
},
getPageVideos = function(pageId,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8/"+pageId+"/videos?limit="+settings.maxResults+"&access_token="+settings.accessToken+"&fields=object_id,picture,permalink_url,thumbnails,description,link,from,comments.limit(1).summary(true),likes.limit(1).summary(true),shares,created_time";
if(settings.nextPageToken!=null) {
apiURL = settings.nextPageToken;
}
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
postArray = createVideoObjects(response.data,$famaxPro);
handleNextPageToken(response.paging,$famaxPro);
displayItems(postArray,$famaxPro);
videoDisplayMechanism($famaxPro);
},
error: function(html) {
}
});
},
getAlbumPhotos = function(albumId,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8/"+albumId+"/photos?limit="+settings.maxResults+"&access_token="+settings.accessToken+"&fields=type,object_id,picture,images,name,name_tags,story,link,from,comments.limit(1).summary(true),likes.limit(1).summary(true),shares,created_time,album";
if(settings.nextPageToken!=null) {
apiURL = settings.nextPageToken;
}
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
postArray = createPhotoObjects(response.data,$famaxPro);
handleNextPageToken(response.paging,$famaxPro);
displayItems(postArray,$famaxPro);
videoDisplayMechanism($famaxPro);
},
error: function(html) {
}
});
},
getPostLikes = function(postId,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8/"+postId+"/likes?access_token="+settings.accessToken+"&limit=6&fields=name,pic_square";
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
displayPostLikes(response.data,$famaxPro);
},
error: function(html) {
}
});
},
getPostComments = function(postId,$famaxPro) {
var apiURL, postArray;
apiURL = "https://graph.facebook.com/v2.8/"+postId+"/comments?access_token="+settings.accessToken+"&limit=6&fields=from,message";
$.ajax({
url: apiURL,
type: "GET",
async: true,
cache: true,
dataType: 'json',
success: function(response) {
displayPostComments(response.data,$famaxPro);
},
error: function(html) {
}
});
},
handleNextPageToken = function(token,$famaxPro) {
if(token!=null) {
token = token.next;
settings.nextPageToken = token;
$famaxPro.find(".fp-load-more-button").html(settings.loadMoreText).removeClass("fp-loading");
} else {
$famaxPro.find('.fp-load-more-button').html("All Done");
}
},
createPostObjects = function(postArray,$famaxPro) {
var processesPostArray = [];
var proSnippet;
for(var i=0; i";
commentStringHTML = "";
dateboxHTML = ""+date+"
";
itemboxHTML = ""+"
"+likeStringHTML+commentStringHTML+dateboxHTML+"
";
containerHTML += ""+itemboxHTML+"
";
}
$facebookContainer.append(containerHTML);
},
displayAlbums = function(postArray,$famaxPro) {
var viewboxHTML, dateboxHTML, trendBoxHTML, itemboxHTML, playIconHTML, countDisplayHTML, countStringHTML, sortOrder, containerHTML="";
var image, likes, comments, viewsPerDay, message, date, link, id, popupLink, popupClass, type, photoCount;
var sortOrder = $famaxPro.find("#fp-sort-order").val();
var $facebookContainer = $famaxPro.find(".fp-item-container");
var list = postArray;
//list = settings.postList
if(sortOrder=="popular-first") {
list.sort(popularFirstComparator);
} else if(sortOrder=="recent-first") {
list.sort(latestFirstComparator);
}
if(settings.clearListOnDisplay) {
clearList($famaxPro);
}
for(var count=0; count";
countDisplayHTML = "";
dateboxHTML = ""+date+"
";
itemboxHTML = ""+"
"+countStringHTML+dateboxHTML+"
";
containerHTML += ""+itemboxHTML+"
";
}
$facebookContainer.append(containerHTML);
},
displayPopupData = function($baseElement,$famaxPro) {
var popupTitleHTML,popupDescriptionHTML,popupMoreHTML,postLikesHTML,postCommentsHTML,postAddCommentHTML,facebookShareHTML,facebookLikeHTML,facebookCommentHTML,googleShareHTML,twitterShareHTML,addLikeButton;
var postId, title, likes, description, link, encodedLink;
var $popupBox,$photoLink;
setTimeout(function(){
$popupBox = $("#fp-popup-details");
$photoLink = $(".fp-photo-link");
postId = $baseElement.attr("id");
title = $baseElement.find(".fp-title").html();
likes = $baseElement.find(".fp-view-string span").html();
//description = $baseElement.find(".yl-description").html();
link = $baseElement.find(".fp-focus").data("link");
encodedLink = encodeURIComponent(link);
addLikeButton = "
";
popupTitleHTML = "";
postLikesHTML = ""+likes+"
likes
"+addLikeButton+"
";
postAddCommentHTML = "";
postCommentsHTML = "";
/*
facebookLikeHTML = "";
facebookShareHTML = "";
facebookCommentHTML = "";
*/
facebookShareHTML = "";
twitterShareHTML = "";
googleShareHTML = "";
//
$popupBox.empty();
$popupBox.append(""+popupTitleHTML+postLikesHTML+postAddCommentHTML+postCommentsHTML+"
"+""+facebookShareHTML+twitterShareHTML+googleShareHTML+"
");
getPostLikes(postId);
getPostComments(postId);
if($popupBox.width()<500) {
$("body").addClass("fp-simple-popup");
} else {
$("body").removeClass("fp-simple-popup");
}
if($photoLink!=null) {
$photoLink.html("").unwrap().wrap("");
}
}, 100);
},
displayPostLikes = function(likeArray, $famaxPro) {
for(var i=0; i");
}
},
displayPostComments = function(commentArray, $famaxPro) {
var userImage;
for(var i=0; i