From 4a37d4dc8abb91d836c4b343557a10d6fba8b978 Mon Sep 17 00:00:00 2001 From: Wesley Moore Date: Thu, 1 Jul 2010 13:20:59 +1000 Subject: [PATCH] Remove cruft from app js work on simple search --- layouts/_article.html | 2 +- layouts/articles.html | 20 +----- output/js/application.js | 144 ++++++++++++--------------------------- 3 files changed, 46 insertions(+), 120 deletions(-) diff --git a/layouts/_article.html b/layouts/_article.html index 093d6c8..6595527 100644 --- a/layouts/_article.html +++ b/layouts/_article.html @@ -1,5 +1,5 @@ <% post_date = WezM::Helpers.parse_post_date(@article) %> -
  • +
  • <%= post_date.day %> <%= post_date.strftime('%b') %> diff --git a/layouts/articles.html b/layouts/articles.html index 7325518..38a6194 100644 --- a/layouts/articles.html +++ b/layouts/articles.html @@ -2,24 +2,6 @@ <%= render '_head' %> - - <%= render '_header' %> @@ -49,7 +31,7 @@
  • diff --git a/output/js/application.js b/output/js/application.js index a0c5a83..710391f 100644 --- a/output/js/application.js +++ b/output/js/application.js @@ -1,105 +1,49 @@ -var WezM = { - articles: undefined, - _months: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], - per_page: 10, - showJavascriptWidgets: function() { - //$('.pagination').show(); - $('#search').show(); - // $('#search input').jsonSuggest(this.articles, { - // onSelect: this._searchItemSelected, - // width: '400px' - // }); - if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0) { // TODO: This is too generic (iPhone) - $('#search input').css('paddingTop', 0); - } - }, - _searchItemSelected: function(article) { - document.location.href = article.path; - }, - _renderArticle: function(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.normalize(o.summary)) + '\n\ -

    \n\ -
  • '; - }, - _updatePaginationControls: function(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 * this.per_page >= this.articles.length ? 'hidden' : 'visible'); - newer.css('visibility', page <= 1 ? 'hidden' : 'visible'); - }, - loadArticles: function(callback) { - if(!this.articles) { - var path = 'articles.json'; - if(document.location.pathname.match(/page\/$/)) { - path = '../articles.json'; - } - jQuery.getJSON(path, {}, function(data) { - WezM.articles = data; - if(callback) callback(); - }); - } - else if(callback) { - callback(); - } - }, - hashChanged: 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) * this.per_page; - for(; i < page * this.per_page && i < this.articles.length; i++) { - var article = this.articles[i]; - var date = new Date(Date.parse(article.date)); - var article_view = { - date: article.date, - day: date.getDate(), - month: this._months[date.getMonth()], - year: date.getYear() + 1900, - path: article.path, - title: article.title, - summary: article.extra - }; - var li = this._renderArticle(article_view); - container.append(li); - } - - this._updatePaginationControls(page); - window.document.title = "All Articles - Page " + page; // TODO: Make this title better - // Scroll to top of page - if(window.scrollTo) { - window.scrollTo(0,0); - } - } -} - jQuery(function() { $('body > header span').click(function() { $('#menu').slideToggle('normal'); }) + + /*** Article Search ***/ + function reset_search() { + console.log("restoring items"); + $('#articles li').css({height: 'auto', opacity: 1.0}); + } + + function refresh_search(e) { + var input = $(this); + var value = input.val() || ""; + + var q = value.toLowerCase(); + //if (e.which == 32 || (65 <= e.which && e.which <= 65 + 25) || (97 <= e.which && e.which <= 97 + 25)) + // if(e.which >= 32) { + // q += String.fromCharCode(e.which).toLowerCase(); + // } + + console.log('q: ' + q); + + if(q == "") { + reset_search(); + return; + } + + $('#articles li').filter(function(i) { + var article = $(this); + return article.text().toLowerCase().indexOf(q) < 0; + }).animate({height: 0, opacity: 0}, {queue: false, duration: 500}); + } + $('#search').show(); + //.keypress(refresh_search) + $('#search input') + .bind("search", refresh_search); + // .bind("click", refresh_search) + // .bind("cut", refresh_search) + // .bind("paste", refresh_search); }); + +/* Setup search + +If onsearch is supported use that +else if oninput is used then use that +else setup a poller to poll the value of the search box while it has focus. Stop polling when the field loses focus + +*/ \ No newline at end of file