(function() { var articles = null; var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var per_page = 10; function search_item_selected(item) { }; function show_javascript_widgets() { $('.pagination').show(); $('#search').show(); $('#search input').jsonSuggest(articles, { onSelect: search_item_selected, width: 400 }); }; function webkit_search_tweak() { if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0) { $('#search input').css('paddingTop', 0); } }; function render_article(o) { return '
  • \n\ \n\ ' + (Mojo.escape(Mojo.normalize(o.day))) + '\n\ ' + (Mojo.escape(Mojo.normalize(o.month))) + '\n\ ' + (Mojo.escape(Mojo.normalize(o.year))) + '\n\ \n\

    \n\ ' + (Mojo.escape(Mojo.normalize(o.title))) + '\n\ ' + (Mojo.escape(Mojo.normalize(o.summary))) + '\n\

    \n\
  • '; }; function update_pagination_controls(page) { var older = $('.pagination .older').attr('href', '#' + (page + 1)); var newer = $('.pagination .newer').attr('href', '#' + (page - 1)); // Hide if out of range older.css('visibility', page * per_page >= articles.length ? 'hidden' : 'visible'); newer.css('visibility', page <= 1 ? 'hidden' : 'visible'); }; function articles_loaded(data) { articles = data; jQuery(function() { $(window).bind('hashchange', function(e) { // Get the hash (fragment) as a string, with any leading # removed. Note that // in jQuery 1.4, you should use e.fragment instead of $.param.fragment(). var page; var matches; var page_fragment = e.fragment; if(!page_fragment) { page_fragment = $.param.fragment(); } if(matches = page_fragment.match(/(\d+)$/)) { page = new Number(matches[1]); } else { page = 1; } var container = $('ul.articles'); container.empty(); // Generate the items var i = (page - 1) * per_page; for(; i < page * per_page && i < articles.length; i++) { var article = articles[i]; var date = new Date(Date.parse(article.date)); var article_view = { date: article.date, day: date.getDate(), month: months[date.getMonth()], year: date.getYear() + 1900, path: article.path, title: article.title, summary: article.summary }; var li = render_article(article_view); container.append(li); } update_pagination_controls(page); window.document.title = "All Articles - Page " + page }); // Since the event is only triggered when the hash changes, we need to trigger // the event now, to handle the hash the page may have loaded with. $(window).trigger('hashchange'); show_javascript_widgets(); webkit_search_tweak(); }); }; // Load articles JSON ASAP var path = 'json/articles.json'; if(document.location.pathname.match(/page\/$/)) { path = '../json/articles.json'; } jQuery.getJSON(path, {}, articles_loaded); })();