/*! * imagesLoaded PACKAGED v4.1.1 * JavaScript is all like "You images are done yet or what?" * MIT License */ !function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,e),n+=s?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}(window,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){var e=[];if(Array.isArray(t))e=t;else if("number"==typeof t.length)for(var i=0;ie;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function o(){if(!c){c=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s.isBoxSizeOuter=r=200==t(o.width),i.removeChild(e)}}function s(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var s=n(e);if("none"==s.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var c=a.isBorderBox="border-box"==s.boxSizing,d=0;u>d;d++){var f=h[d],l=s[f],p=parseFloat(l);a[f]=isNaN(p)?0:p}var g=a.paddingLeft+a.paddingRight,m=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,x=a.borderTopWidth+a.borderBottomWidth,b=c&&r,E=t(s.width);E!==!1&&(a.width=E+(b?0:g+_));var T=t(s.height);return T!==!1&&(a.height=T+(b?0:m+x)),a.innerWidth=a.width-(g+_),a.innerHeight=a.height-(m+x),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var r,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,c=!1;return s}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}(this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var s=this._onceEvents&&this._onceEvents[t];o;){var r=s&&s[o];r&&(this.off(t,o),delete s[o]),o.apply(this,e),n+=r?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i=t.x+e&&this.y+this.height>=t.y+i},e.overlaps=function(t){var e=this.x+this.width,i=this.y+this.height,n=t.x+t.width,o=t.y+t.height;return this.xt.x&&this.yt.y},e.getMaximalFreeRects=function(e){if(!this.overlaps(e))return!1;var i,n=[],o=this.x+this.width,s=this.y+this.height,r=e.x+e.width,a=e.y+e.height;return this.yr&&(i=new t({x:r,y:this.y,width:o-r,height:this.height}),n.push(i)),s>a&&(i=new t({x:this.x,y:a,width:this.width,height:s-a}),n.push(i)),this.x=t.width&&this.height>=t.height},t}),function(t,e){if("function"==typeof define&&define.amd)define("packery/js/packer",["./rect"],e);else if("object"==typeof module&&module.exports)module.exports=e(require("./rect"));else{var i=t.Packery=t.Packery||{};i.Packer=e(i.Rect)}}(window,function(t){"use strict";function e(t,e,i){this.width=t||0,this.height=e||0,this.sortDirection=i||"downwardLeftToRight",this.reset()}var i=e.prototype;i.reset=function(){this.spaces=[];var e=new t({x:0,y:0,width:this.width,height:this.height});this.spaces.push(e),this.sorter=n[this.sortDirection]||n.downwardLeftToRight},i.pack=function(t){for(var e=0;e=t.x+t.width&&i.height>=t.height-.01;if(n){t.y=i.y,this.placed(t);break}}},i.rowPack=function(t){for(var e=0;e=t.y+t.height&&i.width>=t.width-.01;if(n){t.x=i.x,this.placed(t);break}}},i.placeInSpace=function(t,e){t.x=e.x,t.y=e.y,this.placed(t)},i.placed=function(t){for(var e=[],i=0;ii&&1>n;return o?void this.goTo(t,e):void a.apply(this,arguments)},s.enablePlacing=function(){this.removeTransitionStyles(),this.isTransitioning&&n&&(this.element.style[n]="none"),this.isTransitioning=!1,this.getSize(),this.layout._setRectSize(this.element,this.rect),this.isPlacing=!0},s.disablePlacing=function(){this.isPlacing=!1},s.removeElem=function(){this.element.parentNode.removeChild(this.element),this.layout.packer.addSpace(this.rect),this.emitEvent("remove",[this])},s.showDropPlaceholder=function(){var t=this.dropPlaceholder;t||(t=this.dropPlaceholder=document.createElement("div"),t.className="packery-drop-placeholder",t.style.position="absolute"),t.style.width=this.size.width+"px",t.style.height=this.size.height+"px",this.positionDropPlaceholder(),this.layout.element.appendChild(t)},s.positionDropPlaceholder=function(){this.dropPlaceholder.style[n]="translate("+this.rect.x+"px, "+this.rect.y+"px)"},s.hideDropPlaceholder=function(){var t=this.dropPlaceholder.parentNode;t&&t.removeChild(this.dropPlaceholder)},o}),function(t,e){"function"==typeof define&&define.amd?define(["get-size/get-size","outlayer/outlayer","packery/js/rect","packery/js/packer","packery/js/item"],e):"object"==typeof module&&module.exports?module.exports=e(require("get-size"),require("outlayer"),require("./rect"),require("./packer"),require("./item")):t.Packery=e(t.getSize,t.Outlayer,t.Packery.Rect,t.Packery.Packer,t.Packery.Item)}(window,function(t,e,i,n,o){"use strict";function s(t,e){return t.position.y-e.position.y||t.position.x-e.position.x}function r(t,e){return t.position.x-e.position.x||t.position.y-e.position.y}function a(t,e){var i=e.x-t.x,n=e.y-t.y;return Math.sqrt(i*i+n*n)}i.prototype.canFit=function(t){return this.width>=t.width-1&&this.height>=t.height-1};var h=e.create("packery");h.Item=o;var u=h.prototype;u._create=function(){e.prototype._create.call(this),this.packer=new n,this.shiftPacker=new n,this.isEnabled=!0,this.dragItemCount=0;var t=this;this.handleDraggabilly={dragStart:function(){t.itemDragStart(this.element)},dragMove:function(){t.itemDragMove(this.element,this.position.x,this.position.y)},dragEnd:function(){t.itemDragEnd(this.element)}},this.handleUIDraggable={start:function(e,i){i&&t.itemDragStart(e.currentTarget)},drag:function(e,i){i&&t.itemDragMove(e.currentTarget,i.position.left,i.position.top)},stop:function(e,i){i&&t.itemDragEnd(e.currentTarget)}}},u._resetLayout=function(){this.getSize(),this._getMeasurements();var t,e,i;this._getOption("horizontal")?(t=1/0,e=this.size.innerHeight+this.gutter,i="rightwardTopToBottom"):(t=this.size.innerWidth+this.gutter,e=1/0,i="downwardLeftToRight"),this.packer.width=this.shiftPacker.width=t,this.packer.height=this.shiftPacker.height=e,this.packer.sortDirection=this.shiftPacker.sortDirection=i,this.packer.reset(),this.maxY=0,this.maxX=0},u._getMeasurements=function(){this._getMeasurement("columnWidth","width"),this._getMeasurement("rowHeight","height"),this._getMeasurement("gutter","width")},u._getItemLayoutPosition=function(t){if(this._setRectSize(t.element,t.rect),this.isShifting||this.dragItemCount>0){var e=this._getPackMethod();this.packer[e](t.rect)}else this.packer.pack(t.rect);return this._setMaxXY(t.rect),t.rect},u.shiftLayout=function(){this.isShifting=!0,this.layout(),delete this.isShifting},u._getPackMethod=function(){return this._getOption("horizontal")?"rowPack":"columnPack"},u._setMaxXY=function(t){this.maxX=Math.max(t.x+t.width,this.maxX),this.maxY=Math.max(t.y+t.height,this.maxY)},u._setRectSize=function(e,i){var n=t(e),o=n.outerWidth,s=n.outerHeight;(o||s)&&(o=this._applyGridGutter(o,this.columnWidth),s=this._applyGridGutter(s,this.rowHeight)),i.width=Math.min(o,this.packer.width),i.height=Math.min(s,this.packer.height)},u._applyGridGutter=function(t,e){if(!e)return t+this.gutter;e+=this.gutter;var i=t%e,n=i&&1>i?"round":"ceil";return t=Math[n](t/e)*e},u._getContainerSize=function(){return this._getOption("horizontal")?{width:this.maxX-this.gutter}:{height:this.maxY-this.gutter}},u._manageStamp=function(t){var e,n=this.getItem(t);if(n&&n.isPlacing)e=n.rect;else{var o=this._getElementOffset(t);e=new i({x:this._getOption("originLeft")?o.left:o.right,y:this._getOption("originTop")?o.top:o.bottom})}this._setRectSize(t,e),this.packer.placed(e),this._setMaxXY(e)},u.sortItemsByPosition=function(){var t=this._getOption("horizontal")?r:s;this.items.sort(t)},u.fit=function(t,e,i){var n=this.getItem(t);n&&(this.stamp(n.element),n.enablePlacing(),this.updateShiftTargets(n),e=void 0===e?n.rect.x:e,i=void 0===i?n.rect.y:i,this.shift(n,e,i),this._bindFitEvents(n),n.moveTo(n.rect.x,n.rect.y),this.shiftLayout(),this.unstamp(n.element),this.sortItemsByPosition(),n.disablePlacing())},u._bindFitEvents=function(t){function e(){n++,2==n&&i.dispatchEvent("fitComplete",null,[t])}var i=this,n=0;t.once("layout",e),this.once("layoutComplete",e)},u.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&(this.options.shiftPercentResize?this.resizeShiftPercentLayout():this.layout())},u.needsResizeLayout=function(){var e=t(this.element),i=this._getOption("horizontal")?"innerHeight":"innerWidth";return e[i]!=this.size[i]},u.resizeShiftPercentLayout=function(){var e=this._getItemsForLayout(this.items),i=this._getOption("horizontal"),n=i?"y":"x",o=i?"height":"width",s=i?"rowHeight":"columnWidth",r=i?"innerHeight":"innerWidth",a=this[s];if(a=a&&a+this.gutter){this._getMeasurements();var h=this[s]+this.gutter;e.forEach(function(t){var e=Math.round(t.rect[n]/a);t.rect[n]=e*h})}else{var u=t(this.element)[r]+this.gutter,c=this.packer[o];e.forEach(function(t){t.rect[n]=t.rect[n]/c*u})}this.shiftLayout()},u.itemDragStart=function(t){if(this.isEnabled){this.stamp(t);var e=this.getItem(t);e&&(e.enablePlacing(),e.showDropPlaceholder(),this.dragItemCount++,this.updateShiftTargets(e))}},u.updateShiftTargets=function(t){this.shiftPacker.reset(),this._getBoundingRect();var e=this._getOption("originLeft"),n=this._getOption("originTop");this.stamps.forEach(function(t){var o=this.getItem(t);if(!o||!o.isPlacing){var s=this._getElementOffset(t),r=new i({x:e?s.left:s.right,y:n?s.top:s.bottom});this._setRectSize(t,r),this.shiftPacker.placed(r)}},this);var o=this._getOption("horizontal"),s=o?"rowHeight":"columnWidth",r=o?"height":"width";this.shiftTargetKeys=[],this.shiftTargets=[];var a,h=this[s];if(h=h&&h+this.gutter){var u=Math.ceil(t.rect[r]/h),c=Math.floor((this.shiftPacker[r]+this.gutter)/h);a=(c-u)*h;for(var d=0;c>d;d++){var f=o?0:d*h,l=o?d*h:0;this._addShiftTarget(f,l,a)}}else a=this.shiftPacker[r]+this.gutter-t.rect[r],this._addShiftTarget(0,0,a);var p=this._getItemsForLayout(this.items),g=this._getPackMethod();p.forEach(function(t){var e=t.rect;this._setRectSize(t.element,e),this.shiftPacker[g](e),this._addShiftTarget(e.x,e.y,a);var i=o?e.x+e.width:e.x,n=o?e.y:e.y+e.height;if(this._addShiftTarget(i,n,a),h)for(var s=Math.round(e[r]/h),u=1;s>u;u++){var c=o?i:e.x+h*u,d=o?e.y+h*u:n;this._addShiftTarget(c,d,a)}},this)},u._addShiftTarget=function(t,e,i){var n=this._getOption("horizontal")?e:t;if(!(0!==n&&n>i)){var o=t+","+e,s=-1!=this.shiftTargetKeys.indexOf(o);s||(this.shiftTargetKeys.push(o),this.shiftTargets.push({x:t,y:e}))}},u.shift=function(t,e,i){var n,o=1/0,s={x:e,y:i};this.shiftTargets.forEach(function(t){var e=a(t,s);o>e&&(n=t,o=e)}),t.rect.x=n.x,t.rect.y=n.y};var c=120;u.itemDragMove=function(t,e,i){ function n(){s.shift(o,e,i),o.positionDropPlaceholder(),s.layout()}var o=this.isEnabled&&this.getItem(t);if(o){e-=this.size.paddingLeft,i-=this.size.paddingTop;var s=this,r=new Date;this._itemDragTime&&r-this._itemDragTime0)c?e+=r+s:e-=i+k+l+m;else{e=h[b];if(e<0||e===null)e=a.style[b]||0;e=parseFloat(e)||0,c&&(e+=i+k+r+s+l+m)}return e}function q(b,c,d){b.addEventListener?b.addEventListener(c,d,!1):b.attachEvent&&(b["e"+c+d]=d,b[c+d]=function(){b["e"+c+d](a.event)},b.attachEvent("on"+c,b[c+d]))}function r(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&(a.detachEvent("on"+b,a[b+c]),a[b+c]=null,a["e"+b+c]=null)}function s(a,b){if(!a)return;this.element=a,this.options={};for(var c in s.defaults)this.options[c]=s.defaults[c];for(c in b)this.options[c]=b[c];this._create(),this.build()}"use strict";var c=a.document,d="classList"in c.createElement("div"),f=d?function(a,b){return a.classList.contains(b)}:function(a,b){return e(b).test(a.className)},g=d?function(a,b){a.classList.add(b)}:function(a,b){f(a,b)||(a.className=a.className+" "+b)},h=d?function(a,b){a.classList.remove(b)}:function(a,b){a.className=a.className.replace(e(b)," ")},i=c.defaultView,j=i&&i.getComputedStyle?function(a){return i.getComputedStyle(a,null)}:function(a){return a.currentStyle},k=c.getElementsByTagName("body")[0],l=c.createElement("div"),m=k||c.createElement("body");l.style.marginTop="1%",m.appendChild(l);var n=j(l).marginTop!=="1%";m.removeChild(l);var t=["position","height"];s.defaults={isResizable:!0,gutterWidth:0,isRTL:!1,isFitWidth:!1},s.prototype={_getBricks:function(a){var b;for(var c=0,d=a.length;c 0) fire = false; });*/ if (fire && options.callback) { options.callback(); } } var Utility = { request: function(url, callback) { $.ajax({ url: url, dataType: 'jsonp', success: callback }); }, get_request: function(url, callback) { $.get(url, callback, 'json'); }, wrapLinks: function(string, social_network) { var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; if (social_network === 'google-plus') { string = string.replace(/(@|#)([a-z0-9_]+['])/ig, Utility.wrapGoogleplusTagTemplate); } else { string = string.replace(exp, Utility.wrapLinkTemplate); } return string; }, wrapLinkTemplate: function(string) { return '' + string + '<\/a>'; }, wrapGoogleplusTagTemplate: function(string) { return '' + string + '<\/a>'; }, shorten: function(string) { string = $.trim(string); if (string.length > options.length) { return jQuery.trim(string).substring(0, options.length).split(" ").slice(0, -1).join(" ") + "..."; } else { return string; } }, stripHTML: function(string) { if (typeof string === "undefined" || string === null) { return ''; } return string.replace(/(<([^>]+)>)|nbsp;|\s{2,}|/ig, ""); } }; function SocialFeedPost(social_network, data) { this.content = data; this.content.social_network = social_network; this.content.attachment = (this.content.attachment === undefined) ? '' : this.content.attachment; this.content.time_ago = data.dt_create.fromNow(); this.content.date = data.dt_create.format(options.date_format); this.content.dt_create = this.content.dt_create.valueOf(); this.content.text = Utility.wrapLinks(Utility.shorten(data.message + ' ' + data.description), data.social_network); this.content.moderation_passed = (options.moderation) ? options.moderation(this.content) : true; Feed[social_network].posts.push(this); } SocialFeedPost.prototype = { render: function() { var rendered_html = Feed.template(this.content); var data = this.content; if ($(container).children('[social-feed-id=' + data.id + ']').length !== 0) { return false; } if ($(container).children().length === 0) { $(container).append(rendered_html); } else { var i = 0, insert_index = -1; $.each($(container).children(), function() { if ($(this).attr('dt-create') < data.dt_create) { insert_index = i; return false; } i++; }); $(container).append(rendered_html); if (insert_index >= 0) { insert_index++; var before = $(container).children('div:nth-child(' + insert_index + ')'), current = $(container).children('div:last-child'); $(current).insertBefore(before); } } if (options.media_min_width) { var query = '[social-feed-id=' + data.id + '] img.attachment'; var image = $(query); // preload the image var height, width = ''; var img = new Image(); var imgSrc = image.attr("src"); $(img).load(function() { if (img.width < options.media_min_width) { image.hide(); } // garbage collect img delete img; }).error(function() { // image couldnt be loaded image.hide(); }).attr({ src: imgSrc }); } loaded_post_count++; if (loaded_post_count == posts_to_load_count) { fireCallback(); } } }; var Feed = { template: false, init: function() { Feed.getTemplate(function() { social_networks.forEach(function(network) { if (options[network]) { if ( options[network].accounts ) { //loaded[network] = 0; options[network].accounts.forEach(function(account) { //loaded[network]++; Feed[network].getData(account); }); } else if ( options[network].urls ) { options[network].urls.forEach(function(url) { Feed[network].getData(url); }); } else { Feed[network].getData(); } } }); }); }, getTemplate: function(callback) { if (Feed.template) return callback(); else { if (options.template_html) { Feed.template = doT.template(options.template_html); return callback(); } else { $.get(options.template, function(template_html) { Feed.template = doT.template(template_html); return callback(); }); } } }, twitter: { posts: [], loaded: false, api: 'http://api.tweecool.com/', getData: function(account) { var cb = new Codebird(); cb.setConsumerKey(options.twitter.consumer_key, options.twitter.consumer_secret); // Allow setting your own proxy with Codebird if (options.twitter.proxy !== undefined) { cb.setProxy(options.twitter.proxy); } switch (account[0]) { case '@': var userid = account.substr(1); cb.__call( "statuses_userTimeline", "id=" + userid + "&count=" + options.twitter.limit, Feed.twitter.utility.getPosts, true // this parameter required ); break; case '#': var hashtag = account.substr(1); cb.__call( "search_tweets", "q=" + hashtag + "&count=" + options.twitter.limit, function(reply) { Feed.twitter.utility.getPosts(reply.statuses); }, true // this parameter required ); break; default: } }, utility: { getPosts: function(json) { if (json) { $.each(json, function() { var element = this; var post = new SocialFeedPost('twitter', Feed.twitter.utility.unifyPostData(element)); post.render(); }); } }, unifyPostData: function(element) { var post = {}; if (element.id) { post.id = element.id; //prevent a moment.js console warning due to Twitter's poor date format. post.dt_create = moment(new Date(element.created_at)); post.author_link = 'http://twitter.com/' + element.user.screen_name; post.author_picture = element.user.profile_image_url; post.post_url = post.author_link + '/status/' + element.id_str; post.author_name = element.user.name; post.message = element.text; post.description = ''; post.link = 'http://twitter.com/' + element.user.screen_name + '/status/' + element.id_str; if (options.show_media === true) { if (element.entities.media && element.entities.media.length > 0) { var image_url = element.entities.media[0].media_url; if (image_url) { post.attachment = ''; } } } } return post; } } }, facebook: { posts: [], graph: 'https://graph.facebook.com/', loaded: false, getData: function(account) { var proceed = function(request_url){ Utility.request(request_url, Feed.facebook.utility.getPosts); }; var fields = '?fields=id,from,name,message,created_time,story,description,link'; fields += (options.show_media === true)?',picture,object_id':''; var request_url, limit = '&limit=' + options.facebook.limit, query_extention = '&access_token=' + options.facebook.access_token + '&callback=?'; switch (account[0]) { case '@': var username = account.substr(1); Feed.facebook.utility.getUserId(username, function(userdata) { if (userdata.id !== '') { request_url = Feed.facebook.graph + 'v2.4/' + userdata.id + '/posts'+ fields + limit + query_extention; proceed(request_url); } }); break; case '!': var page = account.substr(1); request_url = Feed.facebook.graph + 'v2.4/' + page + '/feed'+ fields + limit + query_extention; proceed(request_url); break; default: proceed(request_url); } }, utility: { getUserId: function(username, callback) { var query_extention = '&access_token=' + options.facebook.access_token + '&callback=?'; var url = 'https://graph.facebook.com/' + username + '?' + query_extention; var result = ''; $.get(url, callback, 'json'); }, prepareAttachment: function(element) { var image_url = element.picture; if (image_url.indexOf('_b.') !== -1) { //do nothing it is already big } else if (image_url.indexOf('safe_image.php') !== -1) { image_url = Feed.facebook.utility.getExternalImageURL(image_url, 'url'); } else if (image_url.indexOf('app_full_proxy.php') !== -1) { image_url = Feed.facebook.utility.getExternalImageURL(image_url, 'src'); } else if (element.object_id) { image_url = Feed.facebook.graph + element.object_id + '/picture/?type=normal'; } return ''; }, getExternalImageURL: function(image_url, parameter) { image_url = decodeURIComponent(image_url).split(parameter + '=')[1]; if (image_url.indexOf('fbcdn-sphotos') === -1) { return image_url.split('&')[0]; } else { return image_url; } }, getPosts: function(json) { if (json['data']) { json['data'].forEach(function(element) { var post = new SocialFeedPost('facebook', Feed.facebook.utility.unifyPostData(element)); post.render(); }); } }, unifyPostData: function(element) { var post = {}, text = (element.message) ? element.message : element.story; post.id = element.id; post.dt_create = moment(element.created_time); post.author_link = 'http://facebook.com/' + element.from.id; post.author_picture = Feed.facebook.graph + element.from.id + '/picture'; post.author_name = element.from.name; post.name = element.name || ""; post.message = (text) ? text : ''; post.description = (element.description) ? element.description : ''; post.link = (element.link) ? element.link : 'http://facebook.com/' + element.from.id; if (options.show_media === true) { if (element.picture) { var attachment = Feed.facebook.utility.prepareAttachment(element); if (attachment) { post.attachment = attachment; } } } return post; } } }, google: { posts: [], loaded: false, api: 'https://www.googleapis.com/plus/v1/', getData: function(account) { var request_url; switch (account[0]) { case '#': var hashtag = account.substr(1); request_url = Feed.google.api + 'activities?query=' + hashtag + '&key=' + options.google.access_token + '&maxResults=' + options.google.limit; Utility.get_request(request_url, Feed.google.utility.getPosts); break; case '@': var username = account.substr(1); request_url = Feed.google.api + 'people/' + username + '/activities/public?key=' + options.google.access_token + '&maxResults=' + options.google.limit; Utility.get_request(request_url, Feed.google.utility.getPosts); break; default: } }, utility: { getPosts: function(json) { if (json.items) { $.each(json.items, function(i) { var post = new SocialFeedPost('google', Feed.google.utility.unifyPostData(json.items[i])); post.render(); }); } }, unifyPostData: function(element) { var post = {}; post.id = element.id; post.attachment = ''; post.description = ''; post.dt_create = moment(element.published); post.author_link = element.actor.url; post.author_picture = element.actor.image.url; post.author_name = element.actor.displayName; if (options.show_media === true) { if (element.object.attachments) { $.each(element.object.attachments, function() { var image = ''; if (this.fullImage) { image = this.fullImage.url; } else { if (this.objectType === 'album') { if (this.thumbnails && this.thumbnails.length > 0) { if (this.thumbnails[0].image) { image = this.thumbnails[0].image.url; } } } } post.attachment = ''; }); } } post.message = element.title; post.link = element.url; return post; } } }, instagram: { posts: [], api: 'https://api.instagram.com/v1/', loaded: false, accessType: function() { // If we have both the client_id and access_token set in options, // use access_token for authentication. If client_id is not set // then use access_token. If neither are set, log an error to console. if (typeof options.instagram.access_token === 'undefined' && typeof options.instagram.client_id === 'undefined') { console.log('You need to define a client_id or access_token to authenticate with Instagram\'s API.'); return undefined; } if (options.instagram.access_token) { options.instagram.client_id = undefined; } options.instagram.access_type = (typeof options.instagram.client_id === 'undefined' ? 'access_token' : 'client_id'); return options.instagram.access_type; }, getData: function(account) { var url; // API endpoint URL depends on which authentication type we're using. if (this.accessType() !== 'undefined') { var authTokenParams = options.instagram.access_type + '=' + options.instagram[options.instagram.access_type]; } switch (account[0]) { case '@': var username = account.substr(1); url = Feed.instagram.api + 'users/search/?q=' + username + '&' + authTokenParams + '&count=1' + '&callback=?'; Utility.request(url, Feed.instagram.utility.getUsers); break; case '#': var hashtag = account.substr(1); url = Feed.instagram.api + 'tags/' + hashtag + '/media/recent/?' + authTokenParams + '&' + 'count=' + options.instagram.limit + '&callback=?'; Utility.request(url, Feed.instagram.utility.getImages); break; case '&': var id = account.substr(1); url = Feed.instagram.api + 'users/' + id + '/?' + authTokenParams + '&' + 'count=' + options.instagram.limit + '&callback=?'; Utility.request(url, Feed.instagram.utility.getUsers); default: } }, utility: { getImages: function(json) { if (json.data) { json.data.forEach(function(element) { var post = new SocialFeedPost('instagram', Feed.instagram.utility.unifyPostData(element)); post.render(); }); } }, getUsers: function(json) { // API endpoint URL depends on which authentication type we're using. if (options.instagram.access_type !== 'undefined') { var authTokenParams = options.instagram.access_type + '=' + options.instagram[options.instagram.access_type]; } if (!jQuery.isArray(json.data)) json.data = [json.data] json.data.forEach(function(user) { var url = Feed.instagram.api + 'users/' + user.id + '/media/recent/?' + authTokenParams + '&' + 'count=' + options.instagram.limit + '&callback=?'; Utility.request(url, Feed.instagram.utility.getImages); }); }, unifyPostData: function(element) { var post = {}; post.id = element.id; post.dt_create = moment(element.created_time * 1000); post.author_link = 'http://instagram.com/' + element.user.username; post.author_picture = element.user.profile_picture; post.author_name = element.user.full_name || element.user.username; post.message = (element.caption && element.caption) ? element.caption.text : ''; post.description = ''; post.link = element.link; if (options.show_media) { post.attachment = ''; } return post; } } }, vk: { posts: [], loaded: false, base: 'http://vk.com/', api: 'https://api.vk.com/method/', user_json_template: 'https://api.vk.com/method/' + 'users.get?fields=first_name,%20last_name,%20screen_name,%20photo&uid=', group_json_template: 'https://api.vk.com/method/' + 'groups.getById?fields=first_name,%20last_name,%20screen_name,%20photo&gid=', getData: function(account) { var request_url; switch (account[0]) { case '@': var username = account.substr(1); request_url = Feed.vk.api + 'wall.get?owner_id=' + username + '&filter=' + options.vk.source + '&count=' + options.vk.limit + '&callback=?'; Utility.get_request(request_url, Feed.vk.utility.getPosts); break; case '#': var hashtag = account.substr(1); request_url = Feed.vk.api + 'newsfeed.search?q=' + hashtag + '&count=' + options.vk.limit + '&callback=?'; Utility.get_request(request_url, Feed.vk.utility.getPosts); break; default: } }, utility: { getPosts: function(json) { if (json.response) { $.each(json.response, function() { if (this != parseInt(this) && this.post_type === 'post') { var owner_id = (this.owner_id) ? this.owner_id : this.from_id, vk_wall_owner_url = (owner_id > 0) ? (Feed.vk.user_json_template + owner_id + '&callback=?') : (Feed.vk.group_json_template + (-1) * owner_id + '&callback=?'), element = this; Utility.get_request(vk_wall_owner_url, function(wall_owner) { Feed.vk.utility.unifyPostData(wall_owner, element, json); }); } }); } }, unifyPostData: function(wall_owner, element, json) { var post = {}; post.id = element.id; post.dt_create = moment.unix(element.date); post.description = ' '; post.message = Utility.stripHTML(element.text); if (options.show_media) { if (element.attachment) { if (element.attachment.type === 'link') post.attachment = ''; if (element.attachment.type === 'video') post.attachment = ''; if (element.attachment.type === 'photo') post.attachment = ''; } } if (element.from_id > 0) { var vk_user_json = Feed.vk.user_json_template + element.from_id + '&callback=?'; Utility.get_request(vk_user_json, function(user_json) { var vk_post = new SocialFeedPost('vk', Feed.vk.utility.getUser(user_json, post, element, json)); vk_post.render(); }); } else { var vk_group_json = Feed.vk.group_json_template + (-1) * element.from_id + '&callback=?'; Utility.get_request(vk_group_json, function(user_json) { var vk_post = new SocialFeedPost('vk', Feed.vk.utility.getGroup(user_json, post, element, json)); vk_post.render(); }); } }, getUser: function(user_json, post, element, json) { post.author_name = user_json.response[0].first_name + ' ' + user_json.response[0].last_name; post.author_picture = user_json.response[0].photo; post.author_link = Feed.vk.base + user_json.response[0].screen_name; post.link = Feed.vk.base + user_json.response[0].screen_name + '?w=wall' + element.from_id + '_' + element.id; return post; }, getGroup: function(user_json, post, element, json) { post.author_name = user_json.response[0].name; post.author_picture = user_json.response[0].photo; post.author_link = Feed.vk.base + user_json.response[0].screen_name; post.link = Feed.vk.base + user_json.response[0].screen_name + '?w=wall-' + user_json.response[0].gid + '_' + element.id; return post; } } }, blogspot: { loaded: false, getData: function(account) { var url; switch (account[0]) { case '@': var username = account.substr(1); url = 'http://' + username + '.blogspot.com/feeds/posts/default?alt=json-in-script&callback=?'; request(url, getPosts); break; default: } }, utility: { getPosts: function(json) { $.each(json.feed.entry, function() { var post = {}, element = this; post.id = element.id['$t'].replace(/[^a-z0-9]/gi, ''); post.dt_create = moment((element.published['$t'])); post.author_link = element.author[0]['uri']['$t']; post.author_picture = 'http:' + element.author[0]['gd$image']['src']; post.author_name = element.author[0]['name']['$t']; post.message = element.title['$t'] + '

' + stripHTML(element.content['$t']); post.description = ''; post.link = element.link.pop().href; if (options.show_media) { if (element['media$thumbnail']) { post.attachment = ''; } } post.render(); }); } } }, pinterest: { posts: [], loaded: false, apiv1: 'https://api.pinterest.com/v1/', getData: function(account) { var request_url, limit = 'limit=' + options.pinterest.limit, fields = 'fields=id,created_at,link,note,creator(url,first_name,last_name,image),image', query_extention = fields + '&access_token=' + options.pinterest.access_token + '&' + limit + '&callback=?'; switch (account[0]) { case '@': var username = account.substr(1); if (username === 'me') { request_url = Feed.pinterest.apiv1 + 'me/pins/?' + query_extention; } else { request_url = Feed.pinterest.apiv1 + 'boards/' + username + '/pins?' + query_extention; } break; default: } Utility.request(request_url, Feed.pinterest.utility.getPosts); }, utility: { getPosts: function(json) { json.data.forEach(function(element) { var post = new SocialFeedPost('pinterest', Feed.pinterest.utility.unifyPostData(element)); post.render(); }); }, unifyPostData: function(element){ var post = {}; post.id = element.id; post.dt_create= moment(element.created_at); post.author_link = element.creator.url; post.author_picture = element.creator.image['60x60' ].url; post.author_name = element.creator.first_name + element.creator.last_name; post.message = element.note; post.description = ''; post.social_network = 'pinterest'; post.link = element.link ? element.link : 'https://www.pinterest.com/pin/' + element.id; if (options.show_media) { post.attachment = ''; } return post; } } }, rss : { posts: [], loaded: false, api : 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0', getData: function(url) { var limit = '&num='+ options.rss.limit, request_url = Feed.rss.api + limit + '&q=' + encodeURIComponent(url); Utility.request(request_url, Feed.rss.utility.getPosts); }, utility: { getPosts: function(json) { $.each(json.responseData.feed.entries, function(index, element) { var post = new SocialFeedPost('rss', Feed.rss.utility.unifyPostData(index, element)); post.render(); }); }, unifyPostData: function(index, element){ var post = {}; post.id = index; post.dt_create= moment(element.publishedDate, 'ddd, DD MMM YYYY HH:mm:ss ZZ', 'en'); post.author_link = ''; post.author_picture = ''; post.author_name = element.author; post.message = Utility.stripHTML(element.title); post.description = Utility.stripHTML(element.content); post.social_network = 'rss'; post.link = element.link; if (options.show_media && element.mediaGroups ) { post.attachment = ''; } return post; } } } }; //make the plugin chainable return this.each(function() { // Initialization Feed.init(); if (options.update_period) { setInterval(function() { return Feed.init(); }, options.update_period); } }) }; })(jQuery);