POC: StackExchange API: $.getStackExchangeQuestions

Test wrapper for getting (default: latest) questions.

by Adam Patridge

HTML

<a id="more-questions" href="#">Get more</a>
<ul id="results"></ul>
<script type="text/x-jquery-tmpl" id="resultTemplate">
    {{#each $data}}
    <li data-question-id="{{=question_id}}">
        <p>{{=title}}</p>
    </li>
    {{/each}}
</script>
<script type="text/javascript" src="http://dl.dropbox.com/u/6593594/cdn/JSLINQ.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://jquery-jsonp.googlecode.com/files/jquery.jsonp-2.1.4.min.js"></script>
<script type="text/javascript" src="https://raw.github.com/BorisMoore/jsrender/master/jsrender.js"></script>
<script type="text/javascript" src="http://dl.dropbox.com/u/6593594/cdn/uri.js"></script>

JavaScript

/***Let JSLint know what the expected global variables are***/
/*global jQuery, $, google, JSLINQ, clearTimeout, setTimeout */

(function ($) {
    "use strict";
    var apiHost = "api.stackexchange.com";
    $.getStackExchangeQuestions = function (options) {
        var opts = $.extend({}, $.getStackExchangeQuestions.defaults, options),
            url = URI("https://" + apiHost + "/2.0/questions/" + (opts.ids || ""));
        // Append all options as querystring parameters.
        $.each(opts, function (i, val) {
            url.addSearch(i, val);
        });
        
        var getNewQuestions = $.ajax({
            dataType: "jsonp",
            url: url
        });
        
        return getNewQuestions;
    };
    $.getStackExchangeQuestions.defaults = {
        pagesize: 50,
        site: "stackoverflow",
        sort: "creation",
        order: "desc"
        //min: lastValueForSort,
        //key: yourApiKey,
        //todate: someTimestamp,
        //fromdate: someTimestamp,
        //ids: "1;2;3",
        //page: x,
    };
}(jQuery));

$(function () {
    "use strict";
    var apiKey = "BFkB32WKyHjbqI9RYU1lKA((",
        mostRecentQuestionTime;

    $("#more-questions").click(function (e) {
        var opts = {
                key: apiKey
            };
        if (mostRecentQuestionTime) {
            opts.fromdate = mostRecentQuestionTime;
        }
        $.getStackExchangeQuestions(opts).done(function (data) {
            var currentQuestionIds = JSLINQ($("#results li")).Select(function (li) {
                    return $(li).data("question-id");
                }),
                orderedData = JSLINQ(data.items).Where(function (question) {
                    return !currentQuestionIds.Any(function (id) {
                        return id === question.question_id;
                    });
                }).OrderByDescending(function (item) {
                    return item.creation_date;
                }),
                result =...