Search code examples
jqueryfacebookfacebook-wall

If field is empty or filled in JSON/jQuery don't show


I'm creating a Facebook wall page, and i don't want the events showing in my feed.

An event has these fields in JSON:

  • message
  • story
  • icon
  • actions
  • type

A message has:

  • message
  • picture
  • link

So the difference is with an event it add's a field story. Now i want to filter out these posts, but how can you say 'If the field story is filled in, don't show the post'

I'm not very experienced in javascript as you can see. I used this tutorial: click

(function($){

    $.fn.facebookWall = function(options){

        options = options || {};

        if(!options.id){
            throw new Error('You need to provide an user/page id!');
        }

        if(!options.access_token){
            throw new Error('You need to provide an access token!');
        }

        // Default options of the plugin:

        options = $.extend({
            limit: 15   // You can also pass a custom limit as a parameter.
        },options);

        // Putting together the Facebook Graph API URLs:

        var graphUSER = 'https://graph.facebook.com/'+options.id+'/?fields=name,picture&access_token='+options.access_token+'&callback=?',
            graphPOSTS = 'https://graph.facebook.com/'+options.id+'/posts/?access_token='+options.access_token+'&callback=?&date_format=U&limit='+options.limit;

        var wall = this;

        $.when($.getJSON(graphUSER),$.getJSON(graphPOSTS)).done(function(user,posts){

            // user[0] contains information about the user (name and picture);
            // posts[0].data is an array with wall posts;

            var fb = {
                user : user[0],
                posts : []
            };

            $.each(posts[0].data,function(){

                // We only show links and statuses from the posts feed:


                if ((this.story == '') || !this.message){
                    return true;
                }


                // Copying the user avatar to each post, so it is
                // easier to generate the templates:
                this.from.picture = fb.user.picture;

                // Converting the created_time (a UNIX timestamp) to
                // a relative time offset (e.g. 5 minutes ago):
                this.created_time = relativeTime(this.created_time*1000);

                // Converting URL strings to actual hyperlinks:
                this.message = urlHyperlinks(this.message);

                fb.posts.push(this);
            });

            // Rendering the templates:
            $('#headingTpl').tmpl(fb.user).appendTo(wall);

            // Creating an unordered list for the posts:
            var ul = $('<ul>').appendTo(wall);

            // Generating the feed template and appending:
            $('#feedTpl').tmpl(fb.posts).appendTo(ul);
        });

        return this;

    };

    // Helper functions:

    function urlHyperlinks(str){
        return str.replace(/\b((http|https):\/\/\S+)/g,'<a href="$1" target="_blank">$1</a>');
    }

    function relativeTime(time){

        // Adapted from James Herdman's http://bit.ly/e5Jnxe

        var period = new Date(time);
        var delta = new Date() - period;

        if (delta <= 10000) {   // Less than 10 seconds ago
            return 'Zo net ';
        }

        var units = null;

        var conversions = {
            millisecond: 1,     // ms -> ms
            seconden: 1000,     // ms -> sec
            minuten: 60,            // sec -> min
            uur: 60,            // min -> hour
            dag: 24,            // hour -> day
            maand: 30,          // day -> month (roughly)
            jaar: 12            // month -> year
        };

        for (var key in conversions) {
            if (delta < conversions[key]) {
                break;
            }
            else {
                units = key;
                delta = delta / conversions[key];
            }
        }

        // Pluralize if necessary:

        delta = Math.floor(delta);
        if (delta !== 1) { units += 'en'; }
        return [delta, units, "geleden"].join(' ');

    }

})(jQuery);

Solution

  • You want to check if story is defined in the array, to do this you use the typeof function.

    if (typeof this.story == 'undefined')