/* 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]"), aspectLis: aspectNavigation.find("li[data-aspect_id]"), toggleSelector: aspectNavigation.find("a.toggle_selector") }); self.initializeSelectedAspects(); self.calculateToggleText(); self.aspectSelectors.click(self.toggleAspect); self.aspectSelectors.debounce("click", self.performAjax, 250); self.toggleSelector.click(self.toggleAll); }); this.selectedAspects = function() { return self.aspectNavigation.find("li.active[data-aspect_id]").map(function() { return $(this).data('aspect_id') }); }; this.initializeSelectedAspects = function() { self.aspectSelectors.each(function() { guid = $(this).data('guid'); if (guid && location.href.search("a_ids..=" + guid + "(#|&|$)") != -1) $(this).parent().addClass('active'); }); }; this.toggleAspect = function(evt) { evt.preventDefault(); $(this).parent().toggleClass("active"); self.calculateToggleText(); }; this.toggleAll = function(evt) { evt.preventDefault(); if (self.aspectLis.not(".active").length === 0) { self.aspectLis.removeClass("active"); self.abortAjax(); self.fadeIn(); } else { self.aspectLis.addClass("active"); self.performAjax(); } self.calculateToggleText(); }; this.calculateToggleText = function() { if (self.aspectLis.not(".active").length === 0) { self.toggleSelector.text(Diaspora.I18n.t('aspect_navigation.deselect_all')); } else { self.toggleSelector.text(Diaspora.I18n.t('aspect_navigation.select_all')); } }; this.generateURL = function() { var baseURL = location.href.split("?")[0]; // generate new url baseURL = baseURL.replace('#',''); baseURL += '?'; self.aspectLis.each(function() { var aspectLi = $(this); if (aspectLi.hasClass("active")) { baseURL += "a_ids[]=" + aspectLi.data("aspect_id") + "&"; } }); 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); } self.abortAjax(); 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.abortAjax = function() { if (self.jXHR) { self.jXHR.abort(); self.jXHR = null; } }; 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); }; }; })();