diff --git a/config/assets.yml b/config/assets.yml
index b290a4fed..b3c819a50 100644
--- a/config/assets.yml
+++ b/config/assets.yml
@@ -62,7 +62,6 @@ javascripts:
- public/javascripts/friend-finder.js
home:
- public/javascripts/publisher.js
- - public/javascripts/aspect-filters.js
- public/javascripts/aspect-edit-pane.js
- public/javascripts/fileuploader-custom.js
people:
diff --git a/public/javascripts/aspect-filters.js b/public/javascripts/aspect-filters.js
deleted file mode 100644
index 536ba7da6..000000000
--- a/public/javascripts/aspect-filters.js
+++ /dev/null
@@ -1,173 +0,0 @@
-/* Copyright (c) 2010, Diaspora Inc. This file is
- * licensed under the Affero General Public License version 3 or later. See
- * the COPYRIGHT file.
- */
-
-var AspectFilters = {
- selectedGUIDS: [],
- activeRequest: null,
- initialize: function(){
- AspectFilters.initializeSelectedGUIDS();
- AspectFilters.interceptAspectLinks();
- AspectFilters.interceptAspectNavLinks();
- },
- initializeSelectedGUIDS: function(){
- $("#aspect_nav .aspect_selector").each(function(){
- var button = $(this),
- guid = button.attr('data-guid');
-
- if(guid && location.href.search("a_ids..="+guid+"(#|&|$)") != -1){
- button.parent().addClass('active');
- AspectFilters.selectedGUIDS.push(guid);
- $("#aspect_nav li.all_aspects").removeClass('active');
- }
- });
- },
- interceptAspectLinks: function(){
- $("a.hard_aspect_link").live("click", AspectFilters.aspectLinkClicked);
- },
- aspectLinkClicked: function(e){
- var link = $(this);
- e.preventDefault();
- if( !link.hasClass('aspect_selector') ){
- AspectFilters.switchToAspect(link);
- }
-
- // remove focus
- this.blur();
-
- $('html, body').animate({scrollTop:0}, 'fast');
- },
- switchToAspect: function(aspectLi){
- var guid = aspectLi.attr('data-guid');
-
- // select correct aspect in filter list & deselect others
- $("#aspect_nav li.active").removeClass('active');
- aspectLi.addClass('active');
-
- AspectFilters.fadeOut();
-
- AspectFilters.performAjax( aspectLi.attr('href'));
- },
- interceptAspectNavLinks: function(){
- $("#aspect_nav a.aspect_selector").click(function(e){
- e.preventDefault();
-
- // loading animation
- AspectFilters.fadeOut();
-
- // filtering //////////////////////
- var $this = $(this),
- listElement = $this.parent(),
- guid = $this.attr('data-guid'),
- homeListElement = $("#aspect_nav li.all_aspects");
-
- if( listElement.hasClass('active') ){
- // remove filter
- var idx = AspectFilters.selectedGUIDS.indexOf( guid );
- if( idx != -1 ){
- AspectFilters.selectedGUIDS.splice(idx,1);
- }
- listElement.removeClass('active');
-
- if(AspectFilters.selectedGUIDS.length === 0){
- homeListElement.addClass('active');
- }
-
- } else {
- // append filter
- if(AspectFilters.selectedGUIDS.indexOf( guid == 1)){
- AspectFilters.selectedGUIDS.push( guid );
- }
- listElement.addClass('active');
-
- homeListElement.removeClass('active');
- }
-
- AspectFilters.performAjax(AspectFilters.generateURL());
- });
- },
- generateURL: function(){
- var baseURL = location.href.split("?")[0];
-
- // generate new url
- baseURL = baseURL.replace('#','');
- baseURL += '?';
- for(i=0; i < AspectFilters.selectedGUIDS.length; i++){
- baseURL += 'a_ids[]='+ AspectFilters.selectedGUIDS[i] +'&';
- }
-
- if(!$("#publisher").hasClass("closed")) {
- // open publisher
- baseURL += "op=true";
- } else {
- // slice last '&'
- baseURL = baseURL.slice(0,baseURL.length-1);
- }
- return baseURL;
- },
- performAjax: function(newURL) {
- var post = $("#publisher textarea").val(),
- photos = {};
-
- //pass photos
- $('#photodropzone img').each(function(){
- var img = $(this);
- var guid = img.attr('data-id');
- var url = img.attr('src');
- photos[guid] = url;
- });
-
- // set url
- // some browsers (Firefox for example) don't support pushState
- if (typeof(history.pushState) == 'function') {
- history.pushState(null, document.title, newURL);
- }
-
- try {
- AspectFilters.activeRequest.abort();
- } catch(e) {} finally {
- AspectFilters.activeRequest = null;
- }
- AspectFilters.activeRequest = $.ajax({
- url : newURL,
- dataType : 'script',
- success : function(data){
- // fill in publisher
- // (not cached because this element changes)
-
- var textarea = $("#publisher textarea");
- var photozone = $('#photodropzone');
-
- if( post !== "" ) {
- textarea.val(post);
- textarea.focus();
- }
-
- var photos_html = "";
- for(var key in photos){
- $("#publisher textarea").addClass("with_attachments");
- photos_html = photos_html + "
" + ("
") + "";
- }
-
- // reinit listeners on stream
- photozone.html(photos_html);
- Diaspora.page.publish("stream/reloaded");
-
- // fade contents back in
- AspectFilters.fadeIn();
- }
- });
- },
- fadeIn: function(){
- $("#aspect_stream_container").fadeTo(100, 1);
- $("#aspect_contact_pictures").fadeTo(100, 1);
- },
- fadeOut: function(){
- $("#aspect_stream_container").fadeTo(100, 0.4);
- $("#aspect_contact_pictures").fadeTo(100, 0.4);
- }
-}
-$(document).ready(function(){
- AspectFilters.initialize();
-});
diff --git a/public/javascripts/pages/aspects-index.js b/public/javascripts/pages/aspects-index.js
index 898db0372..071f6e4d5 100644
--- a/public/javascripts/pages/aspects-index.js
+++ b/public/javascripts/pages/aspects-index.js
@@ -2,6 +2,7 @@ Diaspora.Pages.AspectsIndex = function() {
var self = this;
this.subscribe("page/ready", function(evt, document) {
+ self.aspectNavigation = self.instantiate("AspectNavigation", document.find("ul#aspect_nav"));
self.stream = self.instantiate("Stream", document.find("#aspect_stream_container"));
self.infiniteScroll = self.instantiate("InfiniteScroll");
});
diff --git a/public/javascripts/publisher.js b/public/javascripts/publisher.js
index aa08b783c..b2c229c29 100644
--- a/public/javascripts/publisher.js
+++ b/public/javascripts/publisher.js
@@ -375,11 +375,11 @@ var Publisher = {
}
},
onSuccess: function(data, json, xhr){
- if(Publisher.bookmarklet == false){
- var isPostVisible = AspectFilters.selectedGUIDS.length == 0;
+ if (Publisher.bookmarklet == false) {
+ var isPostVisible = Diaspora.page.aspectNavigation.selectedAspects().length == 0;
var postedTo = Publisher.selectedAspectIds();
- $.each(AspectFilters.selectedGUIDS, function(index, value){
- if(postedTo.indexOf(parseInt(value))>-1)
+ $.each(Diaspora.page.aspectNavigation.selectedAspects(), function(index, value) {
+ if (postedTo.indexOf(parseInt(value)) > -1)
isPostVisible = true;
});
diff --git a/public/javascripts/widgets/aspect-navigation.js b/public/javascripts/widgets/aspect-navigation.js
new file mode 100644
index 000000000..99d057301
--- /dev/null
+++ b/public/javascripts/widgets/aspect-navigation.js
@@ -0,0 +1,122 @@
+/* Copyright (c) 2010, Diaspora Inc. This file is
+ * licensed under the Affero General Public License version 3 or later. See
+ * the COPYRIGHT file.
+ */
+
+(function() {
+ Diaspora.Widgets.AspectNavigation = function() {
+ var self = this;
+
+ this.subscribe("widget/ready", function(evt, aspectNavigation) {
+ $.extend(self, {
+ aspectNavigation: aspectNavigation,
+ aspectSelectors: aspectNavigation.find("a.aspect_selector[data-guid]"),
+ homeSelector: aspectNavigation.find("a.home_selector"),
+ });
+
+ self.aspectSelectors.click(self.toggleSelection);
+ self.aspectSelectors.debounce("click", self.performAjax, 250);
+ self.homeSelector.click(self.selectAll);
+ });
+
+ this.selectedAspects = function() {
+ return self.aspectNavigation.find("li.active[data-aspect_id]").map(function() { return $(this).data('aspect_id') });
+ };
+
+ this.toggleSelection = function(evt) {
+ evt.preventDefault();
+
+ $(this).parent().toggleClass("active");
+ };
+
+ this.selectAll = function(evt) {
+ evt.preventDefault();
+
+ var aspectLis = self.aspectSelectors.parent();
+
+ if (aspectLis.not(".active").length === 0) {
+ aspectLis.removeClass("active");
+
+ } else {
+ aspectLis.addClass("active");
+ self.performAjax();
+ }
+ };
+
+ this.generateURL = function() {
+ var baseURL = location.href.split("?")[0];
+
+ // generate new url
+ baseURL = baseURL.replace('#','');
+ baseURL += '?';
+
+ self.aspectSelectors.each(function() {
+ var aspectSelector = $(this);
+ if(aspectSelector.parent().hasClass("active")) {
+ baseURL += "a_ids[]=" + aspectSelector.data("guid") + "&";
+ }
+ });
+
+ if(!$("#publisher").hasClass("closed")) {
+ // open publisher
+ baseURL += "op=true";
+ } else {
+ // slice last '&'
+ baseURL = baseURL.slice(0,baseURL.length-1);
+ }
+ return baseURL;
+ };
+
+ this.performAjax = function() {
+ var post = $("#publisher textarea").val(),
+ newURL = self.generateURL(),
+ photos = {};
+
+ //pass photos
+ $('#photodropzone img').each(function() {
+ var img = $(this);
+ photos[img.attr("data-id")] = img.attr("src");
+ });
+
+ if (typeof(history.pushState) == 'function') {
+ history.pushState(null, document.title, newURL);
+ }
+
+ if(self.jXHR) {
+ self.jXHR.abort();
+ self.jXHR = null;
+ }
+
+ self.fadeOut();
+ self.jXHR = $.getScript(newURL, function(data) {
+ var textarea = $("#publisher textarea"),
+ photozone = $("#photodropzone");
+
+ if( post !== "" ) {
+ textarea.val(post).focus();
+ }
+
+ $.each(photos, function(GUID, URL) {
+ photozone.append([
+ '',
+ '
',
+ ''
+ ].join(""));
+ });
+
+ self.globalPublish("stream/reloaded");
+ self.fadeIn();
+ });
+ };
+
+ this.fadeOut = function() {
+ $("#aspect_stream_container").fadeTo(100, 0.4);
+ $("#selected_aspect_contacts").fadeTo(100, 0.4);
+ };
+
+ this.fadeIn = function() {
+ $("#aspect_stream_container").fadeTo(100, 1);
+ $("#selected_aspect_contacts").fadeTo(100, 1);
+ };
+ };
+})();
diff --git a/spec/javascripts/aspect-filters-spec.js b/spec/javascripts/aspect-filters-spec.js
deleted file mode 100644
index 89bed4ced..000000000
--- a/spec/javascripts/aspect-filters-spec.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Copyright (c) 2010, Diaspora Inc. This file is
-* licensed under the Affero General Public License version 3 or later. See
-* the COPYRIGHT file.
-*/
-
-describe('AspectFilters', function(){
- it('initializes selectedGUIDS', function(){
- expect(AspectFilters.selectedGUIDS).toEqual([]);
- });
- it('initializes activeRequest', function(){
- expect(AspectFilters.activeRequest).toEqual(null);
- });
-});
diff --git a/spec/javascripts/support/jasmine.yml b/spec/javascripts/support/jasmine.yml
index a26934412..bc3844754 100644
--- a/spec/javascripts/support/jasmine.yml
+++ b/spec/javascripts/support/jasmine.yml
@@ -40,7 +40,6 @@ src_files:
- public/javascripts/stream.js
- public/javascripts/validation.js
- public/javascripts/rails.js
- - public/javascripts/aspect-filters.js
- public/javascripts/aspects-dropdown.js
- public/javascripts/content-updater.js
- public/javascripts/tag-followings.js