diff --git a/config/assets.yml b/config/assets.yml index 4f32378f3..0e791557b 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -29,11 +29,11 @@ javascripts: - public/javascripts/widgets/alert.js - public/javascripts/widgets/embedder.js - public/javascripts/widgets/timeago.js + - public/javascripts/widgets/infinite-scroll.js - public/javascripts/widgets/directionDetector.js - public/javascripts/view.js - public/javascripts/stream.js - public/javascripts/search.js - - public/javascripts/infinite-scroll.js mobile: - public/javascripts/vendor/jquery152.min.js - public/javascripts/custom-mobile-scripting.js @@ -41,7 +41,7 @@ javascripts: - public/javascripts/vendor/jquery.infinitescroll.min.js - public/javascripts/diaspora.js - public/javascripts/widgets/i18n.js - - public/javascripts/infinite-scroll.js + - public/javascripts/widgets/infinite-scroll.js - public/javascripts/rails.js mailchimp: - public/javascripts/vendor/mailchimp/jquery.form.js diff --git a/config/locales/javascript/javascript.en.yml b/config/locales/javascript/javascript.en.yml index dc52cfc2b..9e0a6eafd 100644 --- a/config/locales/javascript/javascript.en.yml +++ b/config/locales/javascript/javascript.en.yml @@ -31,4 +31,5 @@ en: cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)" publisher: at_least_one_aspect: "You must publish to at least one aspect" - + infinite_scroll: + no_more: "No more posts." diff --git a/public/javascripts/infinite-scroll.js b/public/javascripts/infinite-scroll.js deleted file mode 100644 index fb6b341fa..000000000 --- a/public/javascripts/infinite-scroll.js +++ /dev/null @@ -1,38 +0,0 @@ -var InfiniteScroll = { - options: { - navSelector : "#pagination", - // selector for the paged navigation (it will be hidden) - nextSelector : ".paginate", - // selector for the NEXT link (to page 2) - itemSelector : ".stream_element", - // selector for all items you'll retrieve - pathParse : function( pathStr, nextPage ){ - var newPath = pathStr.replace("?", "?only_posts=true&"); - var last_time = $('#main_stream .stream_element').last().find('.time').attr('integer'); - return newPath.replace( /max_time=\d+/, 'max_time=' + last_time); - }, - bufferPx: 500, - debug: false, - donetext: "no more.", - loadingText: "", - loadingImg: '/images/ajax-loader.gif' - }, - postScrollCallback: function(){ - for (var callback in InfiniteScroll.postScrollCallbacks){ - InfiniteScroll.postScrollCallbacks[callback](); - } - }, - postScrollCallbacks: [], - initialize: function(){ - Diaspora.widgets.subscribe("stream/reloaded", InfiniteScroll.initialize); - $('#main_stream').infinitescroll(InfiniteScroll.options, InfiniteScroll.postScrollCallback); - }, - postScroll: function( callback ){ - InfiniteScroll.postScrollCallbacks.push(callback); - } -}; - -$(document).ready(function() { - InfiniteScroll.initialize(); -}); - diff --git a/public/javascripts/view.js b/public/javascripts/view.js index 47cc08724..dfbfcf6a4 100644 --- a/public/javascripts/view.js +++ b/public/javascripts/view.js @@ -18,7 +18,8 @@ var View = { $(document).bind('afterReveal.facebox', function() { jQuery("#facebox label").inFieldLabels(); }); - InfiniteScroll.postScroll(function(){ + + Diaspora.widgets.subscribe("stream/scrolled", function() { $('#main_stream .comments label').inFieldLabels(); }); diff --git a/public/javascripts/widgets/directionDetector.js b/public/javascripts/widgets/directionDetector.js index e4817ece0..257b5cee7 100644 --- a/public/javascripts/widgets/directionDetector.js +++ b/public/javascripts/widgets/directionDetector.js @@ -8,7 +8,8 @@ Diaspora.widgets.add("directionDetector", function() { this.start = function() { Diaspora.widgets.directionDetector.updateBinds(); - InfiniteScroll.postScroll(function() { + + Diaspora.widgets.subscribe("stream/scrolled", function() { Diaspora.widgets.directionDetector.updateBinds(); }); }; diff --git a/public/javascripts/widgets/infinite-scroll.js b/public/javascripts/widgets/infinite-scroll.js new file mode 100644 index 000000000..ad731647e --- /dev/null +++ b/public/javascripts/widgets/infinite-scroll.js @@ -0,0 +1,35 @@ +/* Copyright (c) 2010, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + +(function() { + var InfiniteScroll = function() { + this.options = { + navSelector : "#pagination", + nextSelector : ".paginate", + itemSelector : ".stream_element", + pathParse : function( pathStr, nextPage ){ + var newPath = pathStr.replace("?", "?only_posts=true&"); + var last_time = $('#main_stream .stream_element').last().find('.time').attr('integer'); + return newPath.replace( /max_time=\d+/, 'max_time=' + last_time); + }, + bufferPx: 500, + debug: false, + donetext: Diaspora.widgets.i18n.t("infinite_scroll.no_more"), + loadingText: "", + loadingImg: '/images/ajax-loader.gif' + }; + + this.start = function() { + Diaspora.widgets.subscribe("stream/reloaded", InfiniteScroll.initialize); + + $('#main_stream').infinitescroll(this.options, function() { + Diaspora.widgets.publish("stream/scrolled"); + }); + }; + }; + + Diaspora.widgets.add("infinitescroll", InfiniteScroll) +})(); + diff --git a/public/javascripts/widgets/timeago.js b/public/javascripts/widgets/timeago.js index cc19dcd07..42568fe81 100644 --- a/public/javascripts/widgets/timeago.js +++ b/public/javascripts/widgets/timeago.js @@ -5,32 +5,17 @@ Diaspora.widgets.add("timeago", function() { this.selector = "abbr.timeago"; - this.not_done = true; this.start = function() { - - this.not_done = false; - InfiniteScroll.postScroll(function(){ - Diaspora.widgets.timeago.updateTimeAgo(); - }); + Diaspora.widgets.subscribe("stream/scrolled", this.updateTimeAgo); - if(Diaspora.widgets.i18n.language === "en") { - return; + if(Diaspora.widgets.i18n.language !== "en") { + $.each($.timeago.settings.strings, function(index, element) { + $.timeago.settings.strings[index] = Diaspora.widgets.i18n.t("timeago." + index); + }); } - - $.each($.timeago.settings.strings, function(index, element) { - $.timeago.settings.strings[index] = Diaspora.widgets.i18n.t("timeago." + index); - }); - - - Diaspora.widgets.timeago.updateTimeAgo("abbr"); }; this.updateTimeAgo = function(selector) { - - if(this.not_done === true){ - this.not_done = false; - Diaspora.widgets.timeago.start(); - } - $(selector || this.selector).timeago(); + $((typeof selector === "string") ? selector : Diaspora.widgets.timeago.selector).timeago(); }; }); diff --git a/spec/javascripts/widget-i18n-spec.js b/spec/javascripts/widgets/i18n-spec.js similarity index 100% rename from spec/javascripts/widget-i18n-spec.js rename to spec/javascripts/widgets/i18n-spec.js