From 082d5c9fd40ec84cec969b844e0fbff2592512bb Mon Sep 17 00:00:00 2001 From: Florian Staudacher Date: Thu, 9 Feb 2012 20:55:34 +0100 Subject: [PATCH 01/82] initial photo page functionality is back, featuring backbone and handlebars --- app/controllers/photos_controller.rb | 9 ++- public/javascripts/app/collections/photos.js | 12 ++++ public/javascripts/app/models/photo.js | 14 ++++ public/javascripts/app/models/photos.js | 65 +++++++++++++++++++ public/javascripts/app/router.js | 12 +++- .../app/templates/photo.handlebars | 3 + public/javascripts/app/views/photo_view.js | 13 ++++ public/javascripts/app/views/photos_view.js | 56 ++++++++++++++++ 8 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 public/javascripts/app/collections/photos.js create mode 100644 public/javascripts/app/models/photo.js create mode 100644 public/javascripts/app/models/photos.js create mode 100644 public/javascripts/app/templates/photo.handlebars create mode 100644 public/javascripts/app/views/photo_view.js create mode 100644 public/javascripts/app/views/photos_view.js diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index 339848d33..efff2f0cd 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -29,9 +29,12 @@ class PhotosController < ApplicationController @contacts_of_contact_count = 0 end - @posts = current_user.photos_from(@person).paginate(:page => params[:page]) - - render 'people/show' + @posts = current_user.photos_from(@person) + + respond_to do |format| + format.all { render 'people/show' } + format.json{ render_for_api :backbone, :json => @posts, :root => :photos } + end else flash[:error] = I18n.t 'people.show.does_not_exist' diff --git a/public/javascripts/app/collections/photos.js b/public/javascripts/app/collections/photos.js new file mode 100644 index 000000000..40c960b23 --- /dev/null +++ b/public/javascripts/app/collections/photos.js @@ -0,0 +1,12 @@ +app.collections.Photos = Backbone.Collection.extend({ + url : "/photos", + + model: function(attrs, options) { + var modelClass = app.models.Photo + return new modelClass(attrs, options); + }, + + parse: function(resp){ + return resp.photos; + } +}); diff --git a/public/javascripts/app/models/photo.js b/public/javascripts/app/models/photo.js new file mode 100644 index 000000000..05b4a3c1e --- /dev/null +++ b/public/javascripts/app/models/photo.js @@ -0,0 +1,14 @@ +app.models.Photo = Backbone.Model.extend({ + urlRoot : "/photos", + + initialize : function() {}, + + createdAt : function() { + return this.timeOf("created_at"); + }, + + timeOf: function(field) { + return new Date(this.get(field)) /1000; + }, + +}); \ No newline at end of file diff --git a/public/javascripts/app/models/photos.js b/public/javascripts/app/models/photos.js new file mode 100644 index 000000000..d50680e67 --- /dev/null +++ b/public/javascripts/app/models/photos.js @@ -0,0 +1,65 @@ +app.models.Photos = Backbone.Model.extend({ + initialize : function(){ + this.photos = new app.collections.Photos([], this.photoOptions()); + }, + + photoOptions :function(){ + var order = this.sortOrder(); + return { + comparator : function(photo) { return -photo[order](); } + } + }, + + url : function() { + return _.any(this.photos.models) ? this.timeFilteredPath() : this.basePath() + }, + + _fetching : false, + + fetch : function(){ + if(this._fetching) { return false; } + var self = this; + + // we're fetching the collection... there is probably a better way to do this + self._fetching = true; + + this.photos + .fetch({ + add : true, + url : self.url() + }) + .done( + function(resp){ + // we're done fetching... there is probably a better way to handle this + self._fetching = false; + + self.trigger("fetched", self); + + // all loaded? + if(resp.photos && resp.photos.length == 0) { + self.trigger("allPostsLoaded", self); + } + } + ); + + return this; + }, + + basePath : function(){ + return document.location.pathname; + }, + + timeFilteredPath : function(){ + return this.basePath() + "?max_time=" + this.maxTime(); + }, + + maxTime: function(){ + var lastPost = _.last(this.photos.models); + return lastPost[this.sortOrder()]() + }, + + sortOrder : function() { + return "createdAt"; + }, + +}); \ No newline at end of file diff --git a/public/javascripts/app/router.js b/public/javascripts/app/router.js index 2277d6970..08003a583 100644 --- a/public/javascripts/app/router.js +++ b/public/javascripts/app/router.js @@ -7,7 +7,8 @@ app.Router = Backbone.Router.extend({ "liked": "stream", "mentions": "stream", "people/:id": "stream", - "u/:name": "stream", + "people/:id/photos": "photos", + "u/:name": "stream", "followed_tags": "stream", "tags/:name": "stream", "posts/:id": "stream", @@ -15,7 +16,7 @@ app.Router = Backbone.Router.extend({ }, stream : function() { - app.stream = new app.models.Stream() + app.stream = new app.models.Stream(); app.page = new app.views.Stream({model : app.stream}).render(); app.publisher = app.publisher || new app.views.Publisher({collection : app.stream.posts}); @@ -23,6 +24,13 @@ app.Router = Backbone.Router.extend({ $("#main_stream").html(app.page.el); $('#selected_aspect_contacts .content').html(streamFacesView.el); + }, + + photos : function() { + app.photos = new app.models.Photos(); + app.page = new app.views.Photos({model : app.photos}).render(); + + $("#main_stream").html(app.page.el); } }); diff --git a/public/javascripts/app/templates/photo.handlebars b/public/javascripts/app/templates/photo.handlebars new file mode 100644 index 000000000..375d6869e --- /dev/null +++ b/public/javascripts/app/templates/photo.handlebars @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/public/javascripts/app/views/photo_view.js b/public/javascripts/app/views/photo_view.js new file mode 100644 index 000000000..c672863d4 --- /dev/null +++ b/public/javascripts/app/views/photo_view.js @@ -0,0 +1,13 @@ +app.views.Photo = app.views.StreamObject.extend({ + + templateName: "photo", + + className : "photo loaded", + + initialize : function() { + $(this.el).attr("id", this.model.get("guid")); + this.model.bind('remove', this.remove, this); + return this; + } + +}); \ No newline at end of file diff --git a/public/javascripts/app/views/photos_view.js b/public/javascripts/app/views/photos_view.js new file mode 100644 index 000000000..d9161356e --- /dev/null +++ b/public/javascripts/app/views/photos_view.js @@ -0,0 +1,56 @@ +app.views.Photos = Backbone.View.extend({ + + events : {}, + + initialize : function(options) { + this.photos = this.model; + this.collection = this.model.photos; + + this.setupEvents(); + //this.setupLightbox(); ERROR: "imageThumb is undefined" ... + }, + + setupEvents : function(){ + this.photos.bind("fetched", this.removeLoader, this) + this.collection.bind("add", this.addPhoto, this); + }, + + addPhoto : function(photo) { + var photoView = new app.views.Photo({ model: photo }); + + $(this.el)[ + (this.collection.at(0).id == photo.id) + ? "prepend" + : "append" + ](photoView.render().el); + + return this; + }, + + render : function(evt) { + if(evt) {evt.preventDefault(); } + + if(this.model.fetch()) { + this.appendLoader(); + }; + + return this; + }, + + appendLoader: function(){ + $("#paginate").html($("", { + src : "/images/static-loader.png", + "class" : "loader" + })); + }, + + removeLoader: function() { + $("#paginate").empty(); + }, + + setupLightbox : function(){ + this.lightbox = Diaspora.BaseWidget.instantiate("Lightbox"); + $(this.el).delegate("a.photo-link", "click", this.lightbox.lightboxImageClicked); + }, + +}); \ No newline at end of file From cab953848f2ff28854a0339ace23cf615822514b Mon Sep 17 00:00:00 2001 From: Florian Staudacher Date: Thu, 9 Feb 2012 23:12:39 +0100 Subject: [PATCH 02/82] added tests for photos page --- public/javascripts/app/models/photos.js | 4 ++ spec/controllers/photos_controller_spec.rb | 8 ++++ spec/javascripts/app/models/photo_spec.js | 27 +++++++++++ .../javascripts/app/views/photos_view_spec.js | 45 +++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 spec/javascripts/app/models/photo_spec.js create mode 100644 spec/javascripts/app/views/photos_view_spec.js diff --git a/public/javascripts/app/models/photos.js b/public/javascripts/app/models/photos.js index d50680e67..cbffb3de2 100644 --- a/public/javascripts/app/models/photos.js +++ b/public/javascripts/app/models/photos.js @@ -62,4 +62,8 @@ app.models.Photos = Backbone.Model.extend({ return "createdAt"; }, + add : function(models){ + this.photos.add(models) + } + }); \ No newline at end of file diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb index 1d9e5d491..6279723af 100644 --- a/spec/controllers/photos_controller_spec.rb +++ b/spec/controllers/photos_controller_spec.rb @@ -80,6 +80,14 @@ describe PhotosController do assigns[:person].should == bob.person assigns[:posts].should == [@bobs_photo] end + + it "returns json when requested" do + request.env['HTTP_ACCEPT'] = 'application/json' + get :index, :person_id => alice.person.guid.to_s + + response.headers['Content-Type'].should match 'application/json.*' + save_fixture(response.body, "photos_json") + end end describe '#show' do diff --git a/spec/javascripts/app/models/photo_spec.js b/spec/javascripts/app/models/photo_spec.js new file mode 100644 index 000000000..26a8fa661 --- /dev/null +++ b/spec/javascripts/app/models/photo_spec.js @@ -0,0 +1,27 @@ +describe("app.models.Photo", function() { + + beforeEach(function(){ + this.photo = new app.models.Photo(); + }); + + describe("url", function(){ + it("should be /photos when it doesn't have an id", function(){ + expect(new app.models.Photo().url()).toBe("/photos"); + }); + + it("should be /photos/id when it doesn't have an id", function(){ + expect(new app.models.Photo({id: 5}).url()).toBe("/photos/5"); + }); + }); + + describe("createdAt", function() { + it("returns the photo's created_at as an integer", function() { + var date = new Date; + this.photo.set({ created_at: +date * 1000 }); + + expect(typeof this.photo.createdAt()).toEqual("number"); + expect(this.photo.createdAt()).toEqual(+date); + }); + }); + +}); diff --git a/spec/javascripts/app/views/photos_view_spec.js b/spec/javascripts/app/views/photos_view_spec.js new file mode 100644 index 000000000..c96a39df8 --- /dev/null +++ b/spec/javascripts/app/views/photos_view_spec.js @@ -0,0 +1,45 @@ +describe("app.views.Photos", function() { + beforeEach(function() { + loginAs({name: "alice", avatar : {small : "http://avatar.com/photo.jpg"}}); + + this._photos = $.parseJSON(spec.readFixture("photos_json"))["photos"]; + + this.photos = new app.models.Photos(); + this.photos.add(this._photos); + + this.view = new app.views.Photos({model : this.photos}); + + // do this manually because we've moved loadMore into render?? + this.view.render(); + _.each(this.view.collection.models, function(photo) { + this.view.addPhoto(photo); + }, this); + }); + + describe("initialize", function() { + // nothing there yet + }); + + describe("#render", function() { + beforeEach(function() { + this.photo = this.photos.photos.models[0]; + this.photoElement = $(this.view.$("#" + this.photo.get("guid"))); + }); + + context("when rendering a photo message", function() { + it("shows the photo in the content area", function() { + expect(this.photoElement.length).toBeGreaterThan(0); //markdown'ed + }); + }); + }); + + describe("removeLoader", function() { + it("emptys the pagination div when the stream is fetched", function() { + $("#jasmine_content").append($('
OMG
')); + expect($("#paginate").text()).toBe("OMG"); + this.view.photos.trigger("fetched"); + expect($("#paginate")).toBeEmpty(); + }); + }); + +}); From dc01515aacbf9d79788ebe368f1878ab355c3e73 Mon Sep 17 00:00:00 2001 From: Florian Staudacher Date: Sat, 18 Feb 2012 18:59:52 +0100 Subject: [PATCH 03/82] a little too much copy&paste... --- spec/javascripts/app/models/photo_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/javascripts/app/models/photo_spec.js b/spec/javascripts/app/models/photo_spec.js index 26a8fa661..d1ccd8703 100644 --- a/spec/javascripts/app/models/photo_spec.js +++ b/spec/javascripts/app/models/photo_spec.js @@ -9,7 +9,7 @@ describe("app.models.Photo", function() { expect(new app.models.Photo().url()).toBe("/photos"); }); - it("should be /photos/id when it doesn't have an id", function(){ + it("should be /photos/id when it has an id", function(){ expect(new app.models.Photo({id: 5}).url()).toBe("/photos/5"); }); }); From 550ffec0910a519208e9ba898bf8c92abed258e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Chaves=20Fern=C3=A1ndez=20=28Gallaecio=29?= Date: Thu, 26 Jan 2012 22:49:40 +0100 Subject: [PATCH 04/82] Updated devise.gl.yml Galician translation file. --- config/locales/devise/devise.gl.yml | 183 ++++++++++++++++------------ 1 file changed, 105 insertions(+), 78 deletions(-) diff --git a/config/locales/devise/devise.gl.yml b/config/locales/devise/devise.gl.yml index ea64e7176..72d3bf7c8 100644 --- a/config/locales/devise/devise.gl.yml +++ b/config/locales/devise/devise.gl.yml @@ -2,93 +2,120 @@ # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. - - gl: + errors: + messages: + not_found: "non se atopou" + already_confirmed: "xa foi confirmado" + not_locked: "non foi bloqueado" + devise: - confirmations: - confirmed: "Confirmouse a súa conta, e xa está en Diaspora." - new: - resend_confirmation: "Volver enviar as instrucións de confirmación" - send_instructions: "Nuns minutos recibirá un correo electrónico con instrucións para confirmar a súa conta." failure: - inactive: "Aínda non se activou a súa conta." - invalid: "O correo electrónico ou contrasinal son incorrectos." - invalid_token: "A invitación non é válida." - locked: "A súa conta está bloqueada." - timeout: "A súa sesión rematou, volva identificarse para continuar." - unauthenticated: "Ten que identificarse ou rexistrarte para continuar." - unconfirmed: "Ten que confirmar a súa conta para continuar." - invitations: - invitation_token_invalid: "O código de confirmación da invitación non é correcto!" - send_instructions: "Enviouse a invitación." - updated: "O novo contrasinal gardouse correctamente, e xa está identificado con el." - mailer: - confirmation_instructions: - confirm: "Confirmar a conta" - subject: "Instrucións de confirmación" - you_can_confirm: "Pode confirmar a súa conta mediante a seguinte ligazón:" - hello: "Ola, %{email}!" - invitation_instructions: - accept: "Aceptar a invitación" - ignore: "Se non quere aceptar a invitación, non ten máis que ignorar esta mensaxe." - no_account_till: "A súa conta non se creará ata que prema a ligazón anterior e se rexistre." - subject: "Invitáronte a formar parte de Diaspora!" - reset_password_instructions: - change: "Cambiar o contrasinal" - ignore: "Se non foi vostede quen solicitou este cambio, non ten máis que ignorar esta mensaxe." - someone_requested: "Alguén pediu unha ligazón para cambiar o seu contrasinal, pode facelo coa seguinte ligazón:" - subject: "Instrucións para cambiar o contrasinal" - wont_change: "Para cambiar o contrasinal, prema a seguinte ligazón e escolla un novo." - unlock_instructions: - account_locked: "A súa conta bloqueouse por mor do gran número de intentos errados de identificación." - click_to_unlock: "Prema a seguinte ligazón para desbloqueala:" - subject: "Instrucións para desbloquear a conta" - unlock: "Desbloquear a conta" - welcome: "Benvido, %{email}!" + unauthenticated: 'Ten que acceder ou rexistrarse para continuar.' + unconfirmed: 'Ten que confirmar a súa conta para continuar.' + locked: 'A súa conta está bloqueada.' + invalid: 'O correo electrónico ou contrasinal son incorrectos.' + invalid_token: 'O código de autenticación é incorrecto.' + timeout: 'A súa sesión rematou, volva identificarse para continuar.' + inactive: 'Aínda non se activou a súa conta.' + sessions: + new: + login: 'Nome de usuario' + username: 'Nome de usuario' + password: 'Contrasinal' + sign_in: 'Acceder' + remember_me: "Lembrar os datos." + alpha_software: 'Vai empregar software nas súas primeiras etapas de desenvolvemento (“alfa”).' + bugs_and_feedback: 'Queda avisado de que atopará erros. Animámoslle a usar o botón «Informar» —situado na parte dereita de calquera páxina— para informar de calquera erro que atope, por pequeno que pareza. Intentaremos solucionalos canto antes.' + bugs_and_feedback_mobile: 'Queda avisado de que atopará erros. Animámoslle a que nos informe deles para que podamos solucionalos canto antes.' + modern_browsers: 'só é compatíbel con navegadores web modernos.' + signed_in: 'Accedeu correctamente.' + signed_out: 'Saíu correctamente.' passwords: + send_instructions: 'Nuns minutos recibirá un correo electrónico con instrucións para cambiar o contrasinal.' + updated: 'O seu contrasinal cambiouse correctamente, e xa está identificado co novo.' edit: change_password: "Cambiar o contrasinal" new: forgot_password: "Esqueceu o contrasinal?" - no_account: "O enderezo non se corresponde con ningunha conta. Se está a agardar a que lle chegue unha invitación, saiba que facemos todo canto está nas nosas mans para repartilas canto antes." - send_password_instructions: "Recibir instrucións para cambiar o contrasinal" - send_instructions: "Nuns minutos recibirá un correo con instrucións para cambiar o contrasinal." - updated: "O seu contrasinal cambiou correctamente, e xa está identificado con el." - registrations: - destroyed: "A súa conta cancelouse correctamente. Ata outra!" - signed_up: "Rexistrouse correctamente. Envióuselle un correo electrónico de confirmación." - updated: "A súa conta actualizouse correctamente." - sessions: + no_account: 'O enderezo non se corresponde con ningunha conta. Se está a agardar a que lle chegue unha invitación, saiba que facemos todo canto está nas nosas mans para repartilas canto antes.' + send_password_instructions: "Recibir instrucións para cambiar de contrasinal" + confirmations: + send_instructions: 'Nuns minutos recibirá un correo electrónico con instrucións para confirmar a súa conta.' + confirmed: 'Confirmouse a súa conta, e xa está identificado con ela.' new: - alpha_software: "Vai empregar software en fase “alfa”." - bugs_and_feedback: "Queda avisado de que atopará erros. Animámoslle a usar o botón “Informar” que atopará na parte dereita de calquera páxina para informar de calquera erro que atope. Intentaremos solucionalos canto antes." - bugs_and_feedback_mobile: "Queda avisado de que atopará erros. Animámoslle a que nos informe deles para que podamos solucionalos canto antes." - login: "Nome de usuario" - modern_browsers: "só é compatíbel con navegadores web modernos." - password: Contrasinal - remember_me: "Lembrar os datos." - sign_in: Identificarse - username: "Nome de usuario" - signed_in: "Identificouse correctamente." - signed_out: "Saíu correctamente." - shared: - links: - forgot_your_password: "Esqueceu o contrasinal?" - receive_confirmation: "Non recibiu as instrucións de confirmación?" - receive_unlock: "Non recibiu as instrucións de desbloqueo?" - sign_in: Identificarse - sign_up: Rexistrarse - sign_up_closed: "Nestes momentos non poden rexistrarse novas contas." - mail_signup_form: - sign_up_for_an_invite: "Solicitar unha invitación!" + resend_confirmation: "Volver enviar as instrucións de confirmación" + registrations: + signed_up: 'Rexistrouse correctamente. Se así o solicitou, enviaráselle un correo electrónico de confirmación.' + updated: 'A súa conta actualizouse correctamente.' + destroyed: 'A súa conta cancelouse correctamente. Ata outra!' unlocks: + send_instructions: 'Nuns minutos recibirá un correo electrónico con instrucións para desbloquear a súa conta.' + unlocked: 'Desbloqueouse a súa conta, e xa está identificado con ela.' new: resend_unlock: "Volver enviar as instrucións de desbloqueo" - send_instructions: "Nuns minutos recibirá un correo electrónico con instrucións para desbloquear a súa conta." - unlocked: "Desbloqueouse a súa conta." - errors: - messages: - already_confirmed: "xa foi confirmado" - not_found: "non se atopou" - not_locked: "non foi bloqueado" \ No newline at end of file + invitations: + send_instructions: 'Envióuselle unha invitación.' + invitation_token_invalid: 'O código da invitación non é correcto.' + updated: 'Estableceuse o seu contrasinal, e xa está identificado con el.' + mailer: + welcome: "Benvido, %{email}!" + hello: "Ola, %{email}!" + confirmation_instructions: + subject: 'Instrucións de confirmación' + you_can_confirm: "Pode confirmar a súa conta mediante a seguinte ligazón:" + confirm: "Confirmar a conta" + reset_password_instructions: + subject: 'Instrucións para cambiar o contrasinal' + someone_requested: "Alguén (probabelmente vostede) solicitou cambiar de contrasinal. Para facelo, siga a seguinte ligazón:" + change: "Cambiar de contrasinal" + wont_change: "Para cambiar de contrasinal, prema a seguinte ligazón e escolla un novo." + ignore: "Se non foi vostede quen solicitou o cambio, pode ignorar esta mensaxe." + unlock_instructions: + subject: 'Instrucións para desbloquear a conta' + account_locked: "A súa conta bloqueouse por mor do gran número de intentos errados de identificarse con ela." + click_to_unlock: "Siga a seguinte ligazón para desbloqueala:" + unlock: "Desbloquear a conta" + invitation_instructions: + displaying_correctly: "Non se amosa correctamente o enderezo de correo electrónico? %{link}" + view_in: "Velo no navegador web." + finally: "Por fin chegou!" + arrived: "Chegou a rede social que estaba esperando. Cun novo deseño, maior seguridade, e con moita máis diversión, %{strong_diaspora} axudaralle a compartir e explorar a web como nunca antes o fixera." + sign_up_now: "Rexístrese →" + friends_saying: "O que contan os seus contactos…" + more_people: "E hai máis xente esperándoo!" + get_connected: "Conéctese" + get_connected_paragraph: "Un movemento internacional cunha visión en común por unha web mellor, a primeira funcionalidade de %{strong_diaspora} é a comunidade. Coñeza xente, conéctese cos seus amigos, e a pasalo ben!" + be_yourself: "Sexa vostede mesmo" + be_yourself_paragraph: "A Internet tróuxonos formas únicas de expresarnos. %{strong_diaspora} permítelle ser vostede mesmo e compartir como queira, con ou sen o seu nome real." + have_fun: "Páseo ben" + cubbies: "Cubbi.es" + have_fun_paragraph: "%{strong_diaspora} consiste en descubrir persoas e contidos interesantes na rede. %{link}, o primeiro aplicativo %{strong_diaspora}, non é máis que o principio. Coleccione e comparta a web en todo o seu esplendor." + made_by_people: "%{strong_diaspora} está feita por xente que gusta da Internet tanto coma vostede. %{jointeam}, ou %{helpfund}!" + join_team: "Únase a nós" + or: "ou" + help_fund: "axude a manter Diaspora" + unsubscribe: "Siga a ligazón «%{link}» para cancelar a súa subscrición." + here: "aquí" + love: "Amor," + team_diaspora: "Equipo de Diaspora" + email_us: "Para consultas xerais ou axuda coa súa conta en Diaspora, envíenos un correo electrónico a %{email}." + email_address: "questions@joindiaspora.com" + subject: "Invitárono a unirse a Diaspora!" + accept: "Acertar a invitación" + ignore: "Se non quere aceptar a invitación, non ten máis que ignorar esta mensaxe." + no_account_till: "Non se creará a súa conta ata que siga a anterior ligazón e se rexistre." + inviter: + has_invited_you: "%{name}" + have_invited_you: "%{names} invitárono a unirse a Diaspora" + accept_at: "en %{url}, pode aceptar seguindo a seguinte ligazón." + shared: + mail_signup_form: + sign_up_for_an_invite: "Solicitar unha invitación!" + links: + sign_in: 'Acceder' + sign_up: 'Rexistrarse' + sign_up_closed: 'Nestes momentos non poden rexistrarse contas.' + forgot_your_password: 'Esqueceu o contrasinal?' + receive_confirmation: 'Non recibiu as instrucións de confirmación?' + receive_unlock: 'Non recibiu as instrucións de desbloqueo?' \ No newline at end of file From 9b7e3e8f2ded0231ed3cd4297a16652505c63f2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Chaves=20Fern=C3=A1ndez=20=28Gallaecio=29?= Date: Sun, 29 Jan 2012 21:33:09 +0100 Subject: [PATCH 05/82] Some progress on the Galician translation review. --- config/locales/diaspora/gl.yml | 309 ++++++++++++++++++++------------- 1 file changed, 184 insertions(+), 125 deletions(-) diff --git a/config/locales/diaspora/gl.yml b/config/locales/diaspora/gl.yml index 69f7b6fb8..6bcd537f0 100644 --- a/config/locales/diaspora/gl.yml +++ b/config/locales/diaspora/gl.yml @@ -5,135 +5,218 @@ gl: - _applications: Aplicativos - _comments: Comentarios - _contacts: Contactos - _home: Inicio - _photos: Imaxes - _services: Servizos - account: Conta + settings: "Configuración" + profile: "Perfil" + account: "Conta" + privacy: "Intimidade" + privacy_policy: "Política de protección da intimidade" + terms_and_conditions: "Condicións de uso" + _services: "Servizos" + _applications: "Aplicativos" + _photos: "Imaxes" + ok: "Aceptar" + cancel: "Cancelar" + delete: "Eliminar" + hide: "Agochar" + undo: "Desfacer?" + or: "ou" + ago: "Hai %{time}" + username: "Nome de usuario" + email: "correo electrónico" + password: "Contrasinal" + password_confirmation: "Confirmación do contrasinal" + are_you_sure: "Está seguro?" + are_you_sure_delete_account: "Está seguro de que quere pechar a súa conta? Non haberá volta atrás!" + fill_me_out: "Escribir aquí." + back: "Volver" + public: "Público" + limited: "Limitado" + search: "Busca" + find_people: "Atopar xente ou #etiquetas." + _home: "Inicio" + more: "Máis" + next: "Seguinte" + previous: "Anterior" + _comments: "Comentarios" + all_aspects: "Todos os aspectos" + no_results: "Non se atopou nada." + _contacts: "Contactos" + welcome: "Benvido!" + + activerecord: errors: models: - contact: - attributes: - person_id: - taken: "debe ser único entre os contactos deste usuario." - person: - attributes: - diaspora_handle: - taken: "xa está collido." - request: - attributes: - from_id: - taken: "é un duplicado dunha petición anterior." user: attributes: - email: - taken: "xa está collido." person: invalid: "non é correcto." username: taken: "xa está collido." - ago: "Hai %{time}" - all_aspects: "Todos os aspectos" + invalid: "non é correcto. Só se permiten letras do alfabeto latino, números e guións baixos." + email: + taken: "xa está collido." + person: + attributes: + diaspora_handle: + taken: "xa está collido." + contact: + attributes: + person_id: + taken: "debe ser único entre os contactos deste usuario." + request: + attributes: + from_id: + taken: "é un duplicado dunha petición anterior." + reshare: + attributes: + root_guid: + taken: "Moi interesante ten que ser iso para que o compartas outra vez!" + + + error_messages: + helper: + invalid_fields: "Campos incorrectos" + correct_the_following_errors_and_try_again: "Corrixa os seguintes erros e vólvao intentar." + + application: helper: - diaspora_alpha: "DIASPORA* ALFA" unknown_person: "persoa descoñecida" video_title: unknown: "Título de vídeo descoñecido" - are_you_sure: "Está seguro?" + diaspora_alpha: "DIASPORA* ALFA" + + + aspects: + zero: "non hai aspectos" + one: "un aspecto" + two: "dous aspectos" + few: "%{count} aspectos" + many: "%{count} aspectos" + other: "%{count} aspectos" + contacts_visible: "Os contactos deste aspecto poderán verse os uns aos outros." + contacts_not_visible: "Os contactos deste aspecto non poderán verse os uns aos outros." + edit: + make_aspect_list_visible: "Deixar que os contactos deste aspecto vexan a lista de membros?" + remove_aspect: "Eliminar o aspecto" + confirm_remove_aspect: "Está seguro de que quere eliminar este aspecto?" + add_existing: "Engadir un contacto existente" + done: "Feito" + rename: "Renomear" + aspect_list_is_visible: "Os contactos do aspecto poden ver a lista dos membros." + aspect_list_is_not_visible: "Os contactos do aspecto non poden ver a lista dos membros." + update: "Actualizar" + updating: "Actualizando…" + aspect_contacts: + done_editing: "Remataron as modificacións." + show: + edit_aspect: "Modificar o aspecto" + no_posts_message: + start_talking: "De momento ninguén dixo nin “mu”!" + no_contacts_message: + you_should_add_some_more_contacts: "Debería engadir máis contactos!" + try_adding_some_more_contacts: "Pode buscar ou convidar a máis contactos." + or_spotlight: "Ou pode compartir coas %{link}." + community_spotlight: "estrelas da comunidade" + aspect_listings: + select_all: "Escollelos todos" + deselect_all: "Non escoller ningún" + edit_aspect: "Modificar %{name}" + add_an_aspect: "Engadir un novo" + selected_contacts: + view_all_community_spotlight: "Ver a todas as estrelas da comunidade." + view_all_contacts: "Ver todos os contactos" + no_contacts: "Aínda non ten ningún contacto aquí." + manage_your_aspects: "Xestione os seus aspectos." + new: + name: "Nome (só o pode ver vostede)" + create: "Crear" + create: + success: "Creouse o aspecto «%{name}»." + failure: "Non se puido crear o aspecto." + destroy: + success: "Eliminouse «%{name}»." + failure: "Non se pode eliminar «%{name}» porque non está baleiro." + update: + success: "Gardáronse os cambios do aspecto «%{name}»." + failure: "O aspecto «%{name}» tiña un nome longo de máis para gardalo." + move_contact: + failure: "Non funcionou: %{inspect}" + success: "Moveuse a persoa a un novo aspecto." + error: "Houbo un erro ao intentar mover o contacto: %{inspect}" + add_to_aspect: + failure: "Non se puido engadir o contacto ao aspecto." + success: "O contacto engadiuse ao aspecto." + helper: + remove: "Eliminar" + aspect_not_empty: "O aspecto non está baleiro." + are_you_sure: "Está seguro de que quere eliminar o aspecto?" + seed: + family: "Familia" + work: "Traballo" + acquaintances: "Coñecidos" + friends: "Amigos" + index: + donate: "Doar" + keep_us_running: "Contribúe ao mantemento de %{pod} cunha doazón mensual!" + your_aspects: "Aspectos" + no_tags: "Atope unha etiqueta que seguir" + unfollow_tag: "Deixar se seguir #%{tag}" + handle_explanation: "Este é o seu identificador de Diaspora. É coma un enderezo electrónico, pode darllo á xente para que o atopen." + no_contacts: "Non ten contactos." + post_a_message: "Publicar unha mensaxe: " + people_sharing_with_you: "Xente compartindo con vostede" + + welcome_to_diaspora: "Dámosche a benvida a Diaspora, %{name}!" + introduce_yourself: "Esta é a túa onda. Veña, preséntate!" + + new_here: + title: "Dálle a benvida aos novos" + follow: "Segue %{link} e dálle a benvida aos novos usuarios de Diaspora*!" + learn_more: "Informarse" + + help: + need_help: "Necesita axuda?" + here_to_help: "A comunidade de Diaspora ao rescate!" + do_you: "Que foi?" + have_a_question: "Ten unha %{link}?" + tag_question: "dúbida" + find_a_bug: "Atopou un %{link}?" + tag_bug: "erro" + feature_suggestion: "Quere propoñer unha %{link}?" + tag_feature: "funcionalidade" + tutorials_wiki_and_forum: "%{tutorial}, %{wiki}, %{forum}… Recursos de aprendizaxe, manuais e novas, todo da man a comunidade!" + email_feedback: "Ademais, sempre lle quedará mandarnos un %{link}." + cubbies: + heading: "Conectarse a Cubbi.es" + explanation: "Cubbi.es é o primeiro aplicativo en desenvolverse para Diaspora." + learn_more: "Informarse" + diaspora_id: + heading: "Identificador de Diaspora" + content_1: "O seu identificador de Diaspora é:" + content_2: "Déallo a quen queira, e poderán atopalo en Diaspora." + services: + heading: "Conectar servizos" + content: "Pode conectar con Diaspora os seguintes servizos:" + +# Continuar a revisión da tradución por aquí. + + aspect_memberships: destroy: failure: "Non se puido eliminar ao contacto do aspecto." no_membership: "O contacto seleccionado non está neste aspecto." success: "Eliminouse ao contacto do aspecto correctamente." - aspects: - add_to_aspect: - failure: "Non se puido engadir o contacto ao aspecto." - success: "O contacto engadiuse ao aspecto correctamente." - aspect_contacts: - done_editing: "Rematou a edición." - aspect_listings: - add_an_aspect: "Engadir un aspecto" - contacts_not_visible: "Os contactos deste aspecto non se poderán ver entre eles." - contacts_visible: "Os contactos deste aspecto poderanse ver entre eles." - create: - failure: "Non se puido crear o aspecto." - success: "Creouse o aspecto %{name}." - destroy: - failure: "%{name} non pode eliminarse porque non está baleiro." - success: "%{name} eliminouse correctamente." - edit: - add_existing: "Engadir un contacto existente" - aspect_list_is_not_visible: "Os contactos do aspecto non poden ver a lista dos membros." - aspect_list_is_visible: "Os contactos do aspecto poden ver a lista dos membros." - confirm_remove_aspect: "Está seguro de que quere eliminar este aspecto?" - done: Feito - make_aspect_list_visible: "facer visíbel a lista dos aspectos?" - remove_aspect: "Eliminar este aspecto" - rename: Renomear - update: Actualizar - updating: Actualizando… - few: "%{count} aspectos" - helper: - are_you_sure: "Está seguro de que quere eliminar o aspecto?" - aspect_not_empty: "O aspecto non está baleiro." - remove: Eliminar - index: - cubbies: - explanation: "Cubbi.es é o primeiro aplicativo en desenvolverse para Diaspora." - heading: "Conectar Cubbi.es" - learn_more: "Máis información" - diaspora_id: - content_1: "O seu identificador de Diaspora é:" - content_2: "Déallo a quen queira, e poderán atopalo en Diaspora." - heading: "Identificador de Diaspora" - handle_explanation: "Este é o seu enderezo de Diaspora. É coma un enderezo electrónico, pode darllo á xente para que o atopen." - no_contacts: "Non ten contactos." - people_sharing_with_you: "Xente que comparte con vostede" - post_a_message: "Publicar unha mensaxe: " - services: - content: "Pode conectar con Diaspora os seguintes servizos:" - heading: "Conectar servizos" - your_aspects: Aspectos - many: "%{count} aspectos" - move_contact: - error: "Houbo un erro ao intentar mover a contacto: %{inspect}" - failure: "non funcionou %{inspect}" - success: "Moveuse a persoa a un novo aspecto." - new: - create: Crear - name: Nome - no_posts_message: - start_talking: "Ninguén dixo nada. Comeza unha conversa!" - one: "un aspecto" - other: "%{count} aspectos" - seed: - family: Familia - work: Traballo - selected_contacts: - manage_your_aspects: "Xestione os seus aspectos." - no_contacts: "Aínda non ten ningún contacto aquí." - view_all_contacts: "Ver todos os contactos" - show: - edit_aspect: "Modificar o aspecto" - update: - failure: "O aspecto %{name} tiña un nome longo de máis para gardalo." - success: "O aspecto %{name} modificouse correctamente." - zero: "non hai aspectos" authorizations: index: revoke_access: "Revogar o permiso de acceso" - back: Volver bookmarklet: explanation: "Engada a ligazón «%{link}» aos seus marcadores e publique dende calquera páxina." explanation_link_text: "Publicar en Diaspora" heading: "Marcador de publicación" post_something: "Publicar algo en Diaspora" post_success: "Publicado! Pechando…" - cancel: Cancelar comments: few: "Hai %{count} comentarios." many: "Hai %{count} comentarios." @@ -196,15 +279,6 @@ gl: birthday: "%d de %B" birthday_with_year: "%d de %B do %Y" fullmonth_day: "%d de %B" - delete: Eliminar - email: "Correo electrónico" - error_messages: - helper: - correct_the_following_errors_and_try_again: "Corrixa os seguintes erros e vólvao intentar." - invalid_fields: "Campos incorrectos" - fill_me_out: "Escribir aquí." - find_people: "Atopar xente." - hide: Ocultar home: show: already_account: "Xa ten conta?" @@ -270,10 +344,6 @@ gl: one: "Gústalle a unha persoa." other: "Gústalle a %{count} persoas." zero: "A ninguén lle gusta." - limited: Limitado - more: Máis - next: Seguinte - no_results: "Non se atopou nada." notifications: also_commented: few: "%{actors} comentaron tamén a %{post_link} de %{post_author}." @@ -361,10 +431,6 @@ gl: sharing: "comezou a compartir con vostede!" subject: "%{name} comezou a compartir con vostede en Diaspora*" thanks: "Grazas," - ok: Aceptar - or: ou - password: Contrasinal - password_confirmation: "Confirmación do contrasinal" people: add_contact_small: add_contact_from_tag: "Engadir un contacto a partir da etiqueta" @@ -447,8 +513,6 @@ gl: destroy: Eliminar not_found: "Non se deu atopado esa publicación." permalink: "Ligazón permanente" - previous: Anterior - profile: Perfil profiles: edit: allow_search: "Aparecer nas buscas en Diaspora." @@ -469,7 +533,6 @@ gl: update: failed: "Non se puido actualizar o perfil." updated: "Actualizouse o perfil." - public: Público registrations: closed: "Rexistros pechados neste servidor de Diaspora." create: @@ -506,7 +569,6 @@ gl: manage_within: "Administrar os contactos" new_request_to_person: sent: Enviada! - search: Busca services: create: success: "Identificouse correctamente." @@ -529,7 +591,6 @@ gl: remote_friend: invite: Convidar resend: "Volver enviar" - settings: Configuración shared: add_contact: add_new_contact: "Engadir un novo contacto" @@ -624,8 +685,6 @@ gl: typical_userpage: "Unha páxina de usuario típica de cubbi.es" via: "(vía %{link})" what_is_cubbies: "Cubbi.es é o primeiro aplicativo de Diaspora, e a mellor forma de recoller imaxes na rede." - undo: Desfacer? - username: "Nome de usuario" users: destroy: "Bloqueouse a súa conta. Pode levar ata 20 minutos pechala completamente. Grazas por darlle unha oportunidade a Diaspora." edit: From d812502ee4de84ffb2681cfad1664fed5719a322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Chaves=20Fern=C3=A1ndez=20=28Gallaecio=29?= Date: Mon, 30 Jan 2012 08:37:37 +0100 Subject: [PATCH 06/82] Additional progress on the Galician translation. --- config/locales/diaspora/gl.yml | 378 ++++++++++++++++++++------------- 1 file changed, 227 insertions(+), 151 deletions(-) diff --git a/config/locales/diaspora/gl.yml b/config/locales/diaspora/gl.yml index 6bcd537f0..95967c099 100644 --- a/config/locales/diaspora/gl.yml +++ b/config/locales/diaspora/gl.yml @@ -159,7 +159,7 @@ gl: friends: "Amigos" index: donate: "Doar" - keep_us_running: "Contribúe ao mantemento de %{pod} cunha doazón mensual!" + keep_us_running: "Contribúe ao subministro de café para manter os servidores de %{pod} en marcha cunha doazón mensual!" your_aspects: "Aspectos" no_tags: "Atope unha etiqueta que seguir" unfollow_tag: "Deixar se seguir #%{tag}" @@ -200,223 +200,299 @@ gl: heading: "Conectar servizos" content: "Pode conectar con Diaspora os seguintes servizos:" -# Continuar a revisión da tradución por aquí. - + aspect_stream: + stay_updated: "Estea ao día" + stay_updated_explanation: "Na súa onda atopará a todos so seus contactos, etiquetas, e publicacións dalgunhas estrelas da comunidade." aspect_memberships: destroy: + success: "Eliminouse ao contacto do aspecto." failure: "Non se puido eliminar ao contacto do aspecto." no_membership: "O contacto seleccionado non está neste aspecto." - success: "Eliminouse ao contacto do aspecto correctamente." - authorizations: - index: - revoke_access: "Revogar o permiso de acceso" + bookmarklet: - explanation: "Engada a ligazón «%{link}» aos seus marcadores e publique dende calquera páxina." - explanation_link_text: "Publicar en Diaspora" heading: "Marcador de publicación" - post_something: "Publicar algo en Diaspora" post_success: "Publicado! Pechando…" + post_something: "Publicar algo en Diaspora" + explanation: "Engada a ligazón «%{link}» aos seus marcadores e publique desde calquera páxina." + explanation_link_text: "Publicar en Diaspora" + comments: + zero: "Non hai comentarios." + one: "Hai un comentario." + two: "Hai dous comentarios." few: "Hai %{count} comentarios." many: "Hai %{count} comentarios." + other: "Hai %{count} comentarios." new_comment: comment: "Deixar un comentario" - commenting: Comentando… - one: "Hai un comentario." - other: "Hai %{count} comentarios." - zero: "Non hai comentarios." + commenting: "Comentando…" + + reactions: + zero: "Non houbo reaccións." + one: "Houbo unha reacción." + two: "Houbo dúas reaccións." + few: "Houbo %{count} reaccións." + many: "Houbo %{count} reaccións." + other: "Houbo %{count} reaccións." + contacts: + zero: "Non hai contactos." + one: "Hai un contacto." + two: "Hai dous contactos." + few: "Hai %{count} contactos." + many: "Hai %{count} contactos." + other: "Hai %{count} contactos." create: failure: "Non se puido crear o contacto." - few: "Hai %{count} contactos." - index: - add_a_new_aspect: "Engadir un aspecto" - all_contacts: "Todos os contactos" - many_people_are_you_sure: "Está seguro de que quere iniciar unha conversa privada con máis de %{suggested_limit} contactos? Para comunicarse con eles, quizais sexa mellor publicar neste aspecto." - my_contacts: Contactos - no_contacts: "Non hai ningún contacto." - only_sharing_with_me: "Só comparten comigo" - remove_person_from_aspect: "Eliminar a %{person_name} de «%{aspect_name}»" - start_a_conversation: "Iniciar unha conversa" - title: Contactos - your_contacts: Contactos - many: "Hai %{count} contactos." - one: "Hai un contacto." - other: "Hai %{count} contactos." sharing: people_sharing: "Xente que comparte con vostede:" - zero: "Non hai contactos." - conversations: - create: - sent: "Enviouse a mensaxe." - destroy: - success: "Eliminouse a conversa." - helper: - new_messages: - few: "Hai %{count} mensaxes novas." - many: "Hai %{count} mensaxes novas." - one: "Hai unha mensaxe nova." - other: "Hai %{count} mensaxes novas." - zero: "Non hai mensaxes novas." index: - create_a_new_message: "Iniciar unha conversa" - inbox: "Caixa de entrada" + add_to_aspect: "Engadir os contactos a «%{name}»." + start_a_conversation: "Iniciar unha conversa" + add_a_new_aspect: "Engadir un aspecto" + title: "Contactos" + your_contacts: "Contactos" + no_contacts: "Non hai ningún contacto." + check_out: "Bota unha ollada" + my_contacts: "Contactos" + all_contacts: "Todos os contactos" + only_sharing_with_me: "Só eles comparten" + remove_person_from_aspect: "Eliminar a %{person_name} de «%{aspect_name}»" + many_people_are_you_sure: "Está seguro de que quere iniciar unha conversa privada con máis de %{suggested_limit} contactos? Para comunicarse con eles, quizais sexa mellor publicar neste aspecto." + spotlight: + community_spotlight: "Estrelas da comunidade" + + conversations: + index: message_inbox: "Caixa de entrada" new_message: "Nova mensaxe" no_conversation_selected: "Non se escolleu ningunha conversa." + create_a_new_message: "Iniciar unha conversa" no_messages: "Non hai mensaxes." - new: - abandon_changes: "Quere descartar os cambios?" - send: Enviar - subject: Asunto - to: Destinatario + inbox: "Caixa de entrada" show: + reply: "Responder" + replying: "Respondendo…" delete: "Eliminar e bloquear a conversa" - reply: Responder + new: + to: "Destinatario" + subject: "Asunto" + send: "Enviar" + sending: "Enviando…" + abandon_changes: "Quere descartar os cambios?" + helper: + new_messages: + zero: "Non hai mensaxes novas." + one: "Hai unha mensaxe nova." + two: "Hai dúas mensaxes novas." + few: "Hai %{count} mensaxes novas." + many: "Hai %{count} mensaxes novas." + other: "Hai %{count} mensaxes novas." + create: + sent: "Enviouse a mensaxe." + fail: "Mensaxe incorrecta." + new_message: + fail: "Mensaxe incorrecta." + destroy: + success: "Eliminouse a conversa." + date: formats: + fullmonth_day: "%d de %B" birthday: "%d de %B" birthday_with_year: "%d de %B do %Y" - fullmonth_day: "%d de %B" + home: show: - already_account: "Xa ten conta?" - choice: Escolla - choice_explanation: "Diaspora permítelle clasificar os seus contactos en grupos, “aspectos”. Os aspectos permítenlle compartir as súas fotos, historias, bromas e outros contidos exclusivamente coas persoas ás que realmente van destinados." - learn_about_host: "Aprenda como aloxar o seu propio servidor de Diaspora (en inglés)." - login_here: "Identifíquese aquí" - ownership: Propiedade - ownership_explanation: "As súas imaxes son súas, e non deberían deixar de selo para que poida compartilas. Manterá a propiedade de todo canto comparta en Diaspora, con pleno control da súa distribución." share_what_you_want: "Comparta o que queira, con quen queira." - simplicity: Simplicidade - simplicity_explanation: "Diaspora fai de compartir algo claro e sinxelo, e iso aplícase tamén á intimidade. Privada por definición, Diaspora non lle fará percorrer interminables páxinas de configuración e preferencias para manter o seu perfil seguro." tagline_first_half: "Comparta o que queira," tagline_second_half: "con quen queira." + already_account: "Xa ten conta?" + login_here: "Acceda desde aquí" + choice: "Escolla" + choice_explanation: "Diaspora permítelle clasificar os seus contactos en grupos, “aspectos”. Os aspectos permítenlle compartir as súas fotos, anécdotas e bromas exclusivamente coas persoas ás que realmente van dirixidos." + ownership: "Propiedade" + ownership_explanation: "As súas imaxes son súas e de ninguén máis, e non debería ter que renunciar a iso só para poder compartilas. Todo canto comparta en Diaspora seguirá sendo seu, e terá pleno control sobre a súa distribución." + simplicity: "Simplicidade" + simplicity_explanation: "Diaspora fai de compartir algo simple e doado, e iso aplícase tamén á protección da intimidade. Privada por definición, Diaspora non lle fará percorrer interminábeis páxinas de configuración para manter o seu perfil seguro." + learn_about_host: "Infórmese sobre como aloxar o seu propio servidor de Diaspora (en inglés)." + invitations: - check_token: - not_found: "Non se atopou o código da invitación." create: - already_contacts: "Xa está conectado con esta persoa." - already_sent: "Xa invitou a esta persoa." + sent: "Enviáronse invitacións a: " + rejected: "Os seguintes enderezos de correo electrónico deron problemas: " no_more: "Non lle quedan invitacións." + already_sent: "Xa invitou a esta persoa." + already_contacts: "Xa está conectado con esta persoa." own_address: "Non pode enviarse unha invitación a si mesmo." - rejected: "Os seguintes enderezos de correo electrónico deron problemas:" - sent: "Enviáronse invitacións a:" new: - already_invited: "Xa convidou a esta persoa." - aspect: Aspecto - comma_seperated_plz: "Pode engadir varios enderezos de correo, separándoos con comas («,»)." - if_they_accept_info: "Se aceptan, engadiranse ao aspecto ao que os convidou." + language: "Lingua" invite_someone_to_join: "Convide a alguén a unirse a Diaspora!" + if_they_accept_info: "Se aceptan, engadiranse ao aspecto ao que os convidou." + comma_seperated_plz: "Pode engadir varios enderezos de correo, separándoos con comas («,»)." + to: "Destinatario" personal_message: "Mensaxe persoal" - resend: "Volvela convidar" send_an_invitation: "Enviar unha invitación" send_invitation: "Enviar a invitación" - to: Destinatario + aspect: "Aspecto" + already_invited: "Xa convidou a esta persoa." + resend: "Volvela convidar" + check_token: + not_found: "Non se atopou o código da invitación." + edit: + your_account_awaits: "A súa conta espéralle!" + accept_your_invitation: "Aceptar a invitación" + a_facebook_user: "Un usuario de Facebook" + layouts: - application: - powered_by: "CONSTRUÍDO CON DIASPORA*" - public_feed: "Comentarios públicos de %{name}" - toggle: "Ir ao sitio web para móbiles" - whats_new: "Últimos cambios" - your_aspects: Aspectos header: - admin: Administrador - blog: Bitácora + profile: "Perfil" + settings: "Configuración" + logout: "Saír" + blog: "Bitácora" + login: "Acceder" code: "Código fonte" - login: Identificarse - logout: Saír - profile: Perfil - settings: Configuración + admin: "Administrador" view_all: "Velos todos" + recent_notifications: "Últimas notificacións" + application: + powered_by: "DESENVOLTO CON DIASPORA*" + whats_new: "Últimos cambios" + toggle: "Ir á versión para móbiles" + public_feed: "Comentarios públicos de %{name}" + your_aspects: "Aspectos" + back_to_top: "Volver ao principio" + likes: likes: - people_dislike_this: - few: "Desagradoulle a %{count} persoas." - many: "Desagradoulle a %{count} persoas." - one: "Desagradoulle a unha persoa." - other: "Desagradoulle a %{count} persoas." - zero: "A ninguén lle desagrada." people_like_this: + zero: "Non lle gusta a ninguén." + one: "Gústalle a unha persoa." + two: "Gústalle a dúas persoas." few: "Gústalle a %{count} persoas." many: "Gústalle a %{count} persoas." - one: "Gústalle a unha persoa." other: "Gústalle a %{count} persoas." - zero: "A ninguén lle gusta." + people_like_this_comment: + zero: "Non lle gusta a ninguén." + one: "Gústalle a unha persoa." + two: "Gústalle a dúas persoas." + few: "Gústalle a %{count} persoas." + many: "Gústalle a %{count} persoas." + other: "Gústalle a %{count} persoas." + people_dislike_this: + zero: "Non lle desagrada a ninguén." + one: "Desagradoulle a unha persoa." + two: "Desagradoulle a dúas persoas." + few: "Desagradoulle a %{count} persoas." + many: "Desagradoulle a %{count} persoas." + other: "Desagradoulle a %{count} persoas." + notifications: - also_commented: - few: "%{actors} comentaron tamén a %{post_link} de %{post_author}." - many: "%{actors} comentaron tamén a %{post_link} de %{post_author}." - one: "%{actors} comentou tamén a %{post_link} de %{post_author}." - other: "%{actors} comentaron tamén a %{post_link} de %{post_author}." - zero: "%{actors} comentou tamén a %{post_link} de %{post_author}." - also_commented_deleted: - few: "%{actors} comentaron unha publicación eliminada." - many: "%{actors} comentaron unha publicación eliminada." - one: "%{actors} comentou unha publicación eliminada." - other: "%{actors} comentaron unha publicación eliminada." - zero: "%{actors} comentou unha publicación eliminada." + started_sharing: + zero: "%{actors} comezou a compartir con vostede." + one: "%{actors} comezou a compartir con vostede." + two: "%{actors} comezaron a compartir con vostede." + few: "%{actors} comezaron a compartir con vostede." + many: "%{actors} comezaron a compartir con vostede." + other: "%{actors} comezaron a compartir con vostede." + private_message: + zero: "%{actors} lle enviou unha mensaxe." + one: "%{actors} envioulle unha mensaxe." + two: "%{actors} enviáronlle unha mensaxe." + few: "%{actors} enviáronlle unha mensaxe." + many: "%{actors} enviáronlle unha mensaxe." + other: "%{actors} enviáronlle unha mensaxe." comment_on_post: + zero: "%{actors} comentou a súa %{post_link}." + one: "%{actors} comentou a súa %{post_link}." + two: "%{actors} comentaron a súa %{post_link}." few: "%{actors} comentaron a súa %{post_link}." many: "%{actors} comentaron a súa %{post_link}." one: "%{actors} comentou a súa %{post_link}." other: "%{actors} comentaron a súa %{post_link}." - zero: "%{actors} comentou a súa %{post_link}." - helper: - new_notifications: - few: "Hai %{count} notificacións novas." - many: "Hai %{count} notificacións novas." - one: "Hai unha notificación nova." - other: "Hai %{count} notificacións novas." - zero: "Non hai notificacións novas." - index: - and: e - and_others: - few: "e %{count} máis" - many: "e %{count} máis" - one: "e alguén máis" - other: "e %{count} máis" - zero: "e ninguén máis" - mark_all_as_read: "Marcar todas como lidas" - notifications: Notificacións - liked: - few: "A %{actors} gustoulles a súa %{post_link}." - many: "A %{actors} gustoulles a súa %{post_link}." - one: "A %{actors} gustoulle a súa %{post_link}." - other: "A %{actors} gustoulles a súa %{post_link}." - zero: "A %{actors} lle gustou a súa %{post_link}." - liked_post_deleted: - few: "A %{actors} gustoulles a súa publicación eliminada." - many: "A %{actors} gustoulles a súa publicación eliminada." - one: "A %{actors} gustoulle a súa publicación eliminada." - other: "A %{actors} gustoulles a súa publicación eliminada." - zero: "A %{actors} lle gustou a súa publicación eliminada." + also_commented: + zero: "%{actors} comentou tamén a %{post_link} de %{post_author}." + one: "%{actors} comentou tamén a %{post_link} de %{post_author}." + two: "%{actors} comentaron tamén a %{post_link} de %{post_author}." + few: "%{actors} comentaron tamén a %{post_link} de %{post_author}." + many: "%{actors} comentaron tamén a %{post_link} de %{post_author}." + other: "%{actors} comentaron tamén a %{post_link} de %{post_author}." mentioned: + zero: "%{actors} o mencionou nunha %{post_link}." + one: "%{actors} mencionouno nunha %{post_link}." + two: "%{actors} mencionárono nunha %{post_link}." few: "%{actors} mencionárono nunha %{post_link}." many: "%{actors} mencionárono nunha %{post_link}." - one: "%{actors} mencionouno nunha %{post_link}." other: "%{actors} mencionárono nunha %{post_link}." - zero: "%{actors} o mencionou nunha %{post_link}." + liked: + zero: "A %{actors} lle gustou a súa %{post_link}." + one: "A %{actors} gustoulle a súa %{post_link}." + two: "A %{actors} gustoulles a súa %{post_link}." + few: "A %{actors} gustoulles a súa %{post_link}." + many: "A %{actors} gustoulles a súa %{post_link}." + other: "A %{actors} gustoulles a súa %{post_link}." + reshared: + zero: "%{actors} repetiu a súa %{post_link}." + one: "%{actors} repetiu a súa %{post_link}." + two: "%{actors} repetiron a súa %{post_link}." + few: "%{actors} repetiron a súa %{post_link}." + many: "%{actors} repetiron a súa %{post_link}." + other: "%{actors} repetiron a súa %{post_link}." + post: "publicación" + also_commented_deleted: + zero: "%{actors} comentou unha publicación eliminada." + one: "%{actors} comentou unha publicación eliminada." + two: "%{actors} comentaron unha publicación eliminada." + few: "%{actors} comentaron unha publicación eliminada." + many: "%{actors} comentaron unha publicación eliminada." + other: "%{actors} comentaron unha publicación eliminada." + liked_post_deleted: + zero: "A %{actors} lle gustou a súa publicación eliminada." + one: "A %{actors} gustoulle a súa publicación eliminada." + two: "A %{actors} gustoulles a súa publicación eliminada." + few: "A %{actors} gustoulles a súa publicación eliminada." + many: "A %{actors} gustoulles a súa publicación eliminada." + other: "A %{actors} gustoulles a súa publicación eliminada." + reshared_post_deleted: + zero: "%{actors} repetiu a súa publicación eliminada." + one: "%{actors} repetiu a súa publicación eliminada." + two: "%{actors} repetiron a súa publicación eliminada." + few: "%{actors} repetiron a súa publicación eliminada." + many: "%{actors} repetiron a súa publicación eliminada." + other: "%{actors} repetiron a súa publicación eliminada." mentioned_deleted: + zero: "%{actors} o mencionou nunha publicación eliminada." + one: "%{actors} mencionouno nunha publicación eliminada." + two: "%{actors} mencionárono nunha publicación eliminada." few: "%{actors} mencionárono nunha publicación eliminada." many: "%{actors} mencionárono nunha publicación eliminada." - one: "%{actors} mencionouno nunha publicación eliminada." other: "%{actors} mencionárono nunha publicación eliminada." - zero: "%{actors} o mencionou nunha publicación eliminada." - post: publicación - private_message: - few: "%{actors} enviáronlle unha mensaxe." - many: "%{actors} enviáronlle unha mensaxe." - one: "%{actors} envioulle unha mensaxe." - other: "%{actors} enviáronlle unha mensaxe." - zero: "%{actors} lle enviou unha mensaxe." - started_sharing: - few: "%{actors} comezaron a compartir con vostede." - many: "%{actors} comezaron a compartir con vostede." - one: "%{actors} comezou a compartir con vostede." - other: "%{actors} comezaron a compartir con vostede." - zero: "%{actors} comezou a compartir con vostede." + index: + notifications: "Notificacións" + mark_all_as_read: "Marcalas todas como lidas" + and_others: + zero: "e ninguén máis" + one: "e alguén máis" + two: "e dúas persoas máis" + few: "e %{count} máis" + many: "e %{count} máis" + other: "e %{count} máis" + and: 'e' + helper: + new_notifications: + zero: "Non hai notificacións novas." + one: "Hai unha notificación nova." + two: "Hai dúas notificacións novas." + few: "Hai %{count} notificacións novas." + many: "Hai %{count} notificacións novas." + other: "Hai %{count} notificacións novas." + +# Continuar a revisión da tradución por aquí. + + authorizations: + index: + revoke_access: "Revogar o permiso de acceso" notifier: hello: "Ola %{name}!" liked: From 84f5561c771f80a2bd62b3c92790666814b9a2f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Chaves=20Fern=C3=A1ndez=20=28Gallaecio=29?= Date: Mon, 6 Feb 2012 08:33:30 +0100 Subject: [PATCH 07/82] Some progress on Galician translation review. --- config/locales/diaspora/gl.yml | 86 +++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 33 deletions(-) diff --git a/config/locales/diaspora/gl.yml b/config/locales/diaspora/gl.yml index 95967c099..6eb5c28f2 100644 --- a/config/locales/diaspora/gl.yml +++ b/config/locales/diaspora/gl.yml @@ -487,48 +487,64 @@ gl: few: "Hai %{count} notificacións novas." many: "Hai %{count} notificacións novas." other: "Hai %{count} notificacións novas." + notifier: + a_post_you_shared: "unha publicación." + email_sent_by_diaspora: "Este correo electrónico envíao Diaspora. Se non quere volver recibir unha mensaxe coma esta," + click_here: "prema aquí" + hello: "Ola %{name}!" + thanks: "Grazas," + to_change_your_notification_settings: "para cambiar a configuración das notificacións." + single_admin: + subject: "Unha mensaxe sobre a súa conta en Diaspora:" + admin: "O seu administrador en Diaspora" + started_sharing: + subject: "%{name} comezou a compartir con vostede en Diaspora." + sharing: "comezou a compartir con vostede!" + view_profile: "Ver o perfil de %{name}" + comment_on_post: + reply: "Ver ou responder á publicación de %{name}" + mentioned: + subject: "%{name} mencionouno en Diaspora" + mentioned: "mencionouno nunha publicación:" + private_message: + reply_to_or_view: "Ver ou participar na conversa" + liked: + liked: "A %{name} gústalle a súa publicación" + view_post: "Ver a publicación" + reshared: + reshared: "%{name} repetiu a súa publicación" + view_post: "Ver a publicación" + confirm_email: + subject: "Active o seu novo enderezo de correo electrónico, «%{unconfirmed_email}»." + click_link: "Para activar o seu novo enderezo de correo electrónico, «%{unconfirmed_email}», prema a seguinte ligazón:" + people: + zero: "Non hai xente." + one: "Hai unha persoa." + two: "Hai dúas persoas." + few: "Hai %{count} persoas." + many: "Hai %{count} persoas." + other: "Hai %{count} persoas." + person: + pending_request: "Solicitude pendente" + already_connected: "Xa están conectados" + thats_you: "É vostede!" + add_contact: "Engadir un contacto" + index: + results_for: "Resultados para" + no_results: "Así non vai atopar nada…" + couldnt_find_them_send_invite: "Non atopa a quen busca? Envíelle unha invitación:" + no_one_found: "Non se atopou a ninguén." + looking_for: "Busca publicacións coa etiqueta %{tag_link}?" # Continuar a revisión da tradución por aquí. - authorizations: - index: - revoke_access: "Revogar o permiso de acceso" - notifier: - hello: "Ola %{name}!" - liked: - liked: "A %{name} gústalle a seguinte publicación súa:" - mentioned: - mentioned: "mencionouno nunha publicación:" - subject: "%{name} mencionouno en Diaspora*" - single_admin: - admin: "O seu administrador en Diaspora" - subject: "Unha mensaxe sobre a súa conta en Diaspora:" - started_sharing: - sharing: "comezou a compartir con vostede!" - subject: "%{name} comezou a compartir con vostede en Diaspora*" - thanks: "Grazas," - people: add_contact_small: add_contact_from_tag: "Engadir un contacto a partir da etiqueta" aspect_list: edit_membership: "Modificar a pertenza ao aspecto" - few: "Hai %{count} persoas." helper: people_on_pod_are_aware_of: "A xente neste servidor está ao tanto de" results_for: "Resultados para %{params}" - index: - couldnt_find_them_send_invite: "Non atopa a quen busca? Envíalle unha invitación:" - no_one_found: "Non se atoparon resultados." - no_results: "Así non vai atopar nada…" - results_for: "Resultados para" - many: "Hai %{count} persoas." - one: "Hai unha persoa." - other: "Hai %{count} persoas." - person: - add_contact: "Engadir un contacto" - already_connected: "Xa conectado" - pending_request: "Solicitude pendente" - thats_you: "É vostede!" profile_sidebar: bio: Biografía born: Aniversario @@ -552,7 +568,11 @@ gl: to_accept_or_ignore: "Aceptalo ou ignoralo" webfinger: fail: "Non se puido atopar «%{handle}»." - zero: "Non hai xente." + + + authorizations: + index: + revoke_access: "Revogar o permiso de acceso" photos: create: integrity_error: "Non se puido subir a imaxe. Está seguro de que o ficheiro era unha imaxe?" From 0222e4b2ee1abb32c0ad15b8dd86683e7669068d Mon Sep 17 00:00:00 2001 From: Florian Staudacher Date: Tue, 7 Feb 2012 21:47:53 +0100 Subject: [PATCH 08/82] added intentionally failing specs, because dirty input breaks bookmarklet see also #2741 #2751 #2800 --- .../status_messages_controller_spec.rb | 26 +++++++++++++ spec/javascripts/bookmarklet-spec.js | 39 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 spec/javascripts/bookmarklet-spec.js diff --git a/spec/controllers/status_messages_controller_spec.rb b/spec/controllers/status_messages_controller_spec.rb index 466b8fca7..5ab1da2ae 100644 --- a/spec/controllers/status_messages_controller_spec.rb +++ b/spec/controllers/status_messages_controller_spec.rb @@ -16,9 +16,35 @@ describe StatusMessagesController do end describe '#bookmarklet' do + def pass_test_args(text='cute kitty') + get :bookmarklet, {:url => 'https://www.youtube.com/watch?v=0Bmhjf0rKe8', + :title => 'Surprised Kitty', + :notes => text} + end + it 'succeeds' do get :bookmarklet response.should be_success + + #TODO replace response.body with html_for('body') as soon as there is a + save_fixture(response.body, 'empty_bookmarklet') + end + + it 'accepts get params' do + pass_test_args + response.should be_success + + #TODO replace response.body with html_for('body') as soon as there is a + save_fixture(response.body, 'prefilled_bookmarklet') + end + + it 'correctly deals with dirty input' do + test_text = "**love** This is such a\n\n great \"cute kitty\" '''blabla'''" + pass_test_args(test_text) + response.should be_success + + #TODO replace response.body with html_for('body') as soon as there is a + save_fixture(response.body, 'prefilled_bookmarklet_dirty') end end diff --git a/spec/javascripts/bookmarklet-spec.js b/spec/javascripts/bookmarklet-spec.js new file mode 100644 index 000000000..96f5c6da3 --- /dev/null +++ b/spec/javascripts/bookmarklet-spec.js @@ -0,0 +1,39 @@ +/* Copyright (c) 2010-2012, Diaspora Inc. This file is +* licensed under the Affero General Public License version 3 or later. See +* the COPYRIGHT file. +*/ + +describe("bookmarklet", function() { + + describe("base functionality", function(){ + beforeEach( function(){ + spec.loadFixture('empty_bookmarklet'); + }); + + it('verifies the publisher is loaded', function(){ + expect(typeof Publisher === "object").toBeTruthy(); + }); + + it('verifies we are using the bookmarklet', function(){ + expect(Publisher.bookmarklet).toBeTruthy(); + }); + }); + + describe("prefilled bookmarklet", function(){ + it('fills in some text into the publisher', function(){ + spec.loadFixture('prefilled_bookmarklet'); + expect($("#publisher #status_message_fake_text").val() == "").toBeFalsy(); + expect($("#publisher #status_message_text").val() == "").toBeFalsy(); + }); + + it('handles dirty input well', function(){ + spec.loadFixture('prefilled_bookmarklet_dirty'); + expect($("#publisher #status_message_fake_text").val() == "").toBeFalsy(); + expect($("#publisher #status_message_text").val() == "").toBeFalsy(); + }); + }); + + + + +}); \ No newline at end of file From 56d9da6e040a48e673d1d47fac625d9fb4247067 Mon Sep 17 00:00:00 2001 From: Florian Staudacher Date: Thu, 9 Feb 2012 01:01:28 +0100 Subject: [PATCH 09/82] make previously added specs green --- app/views/status_messages/bookmarklet.html.haml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/status_messages/bookmarklet.html.haml b/app/views/status_messages/bookmarklet.html.haml index 7174c931d..a84614c7c 100644 --- a/app/views/status_messages/bookmarklet.html.haml +++ b/app/views/status_messages/bookmarklet.html.haml @@ -21,8 +21,9 @@ }); var contents = "#{params[:title]} - #{params[:url]}"; - if ("#{params[:notes]}".length > 0){ - contents = contents + " - #{params[:notes]}"; + var notes = "#{escape_javascript params[:notes]}"; + if (notes.length > 0){ + contents = contents + " - " + notes; } $("#publisher #status_message_fake_text").val(contents); From 55cb328fe25989ecf3d5f2dd5cae7a64ce4a30f1 Mon Sep 17 00:00:00 2001 From: Diaspora Europe Date: Wed, 8 Feb 2012 18:36:58 +0100 Subject: [PATCH 10/82] tags should be case insensitive --- app/controllers/tags_controller.rb | 2 +- spec/controllers/tags_controller_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 8128c03d2..c5a679393 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -41,7 +41,7 @@ class TagsController < ApplicationController def tag_followed? if @tag_followed.nil? - @tag_followed = TagFollowing.joins(:tag).where(:tags => {:name => params[:name]}, :user_id => current_user.id).exists? + @tag_followed = TagFollowing.joins(:tag).where(:tags => {:name => params[:name].downcase}, :user_id => current_user.id).exists? end @tag_followed end diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb index fcce6b312..b08a8602d 100644 --- a/spec/controllers/tags_controller_spec.rb +++ b/spec/controllers/tags_controller_spec.rb @@ -76,10 +76,10 @@ describe TagsController do sign_in bob @tag = ActsAsTaggableOn::Tag.create!(:name => "partytimeexcellent") @controller.stub(:current_user).and_return(bob) - @controller.stub(:params).and_return({:name => "partytimeexcellent"}) + @controller.stub(:params).and_return({:name => "PARTYTIMEexcellent"}) end - it 'returns true if the following already exists' do + it 'returns true if the following already exists and should be case insensitive' do TagFollowing.create!(:tag => @tag, :user => bob ) @controller.tag_followed?.should be_true end From 92b29d31dbc2fa3b91da10d45093dfa7cadf0d9c Mon Sep 17 00:00:00 2001 From: Diaspora Europe Date: Thu, 9 Feb 2012 14:16:57 +0100 Subject: [PATCH 11/82] added user_is_following method, added 2 model specs --- app/controllers/tags_controller.rb | 5 +---- app/models/tag_following.rb | 5 +++++ spec/models/tag_following_spec.rb | 9 +++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index c5a679393..091e14be8 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -40,10 +40,7 @@ class TagsController < ApplicationController end def tag_followed? - if @tag_followed.nil? - @tag_followed = TagFollowing.joins(:tag).where(:tags => {:name => params[:name].downcase}, :user_id => current_user.id).exists? - end - @tag_followed + TagFollowing.user_is_following?(current_user, params[:name]) end def prep_tags_for_javascript diff --git a/app/models/tag_following.rb b/app/models/tag_following.rb index 6fd07c0ef..8705f185f 100644 --- a/app/models/tag_following.rb +++ b/app/models/tag_following.rb @@ -3,4 +3,9 @@ class TagFollowing < ActiveRecord::Base belongs_to :tag, :class_name => "ActsAsTaggableOn::Tag" validates_uniqueness_of :tag_id, :scope => :user_id + + def self.user_is_following?(user, tagname) + tagname.nil? ? false : joins(:tag).where(:tags => {:name => tagname.downcase}, :user_id => user.id).exists? + end + end diff --git a/spec/models/tag_following_spec.rb b/spec/models/tag_following_spec.rb index 71163c680..a5dada8ac 100644 --- a/spec/models/tag_following_spec.rb +++ b/spec/models/tag_following_spec.rb @@ -13,4 +13,13 @@ describe TagFollowing do it 'allows multiple tag followings for different users' do TagFollowing.new(:tag => @tag, :user => bob).valid?.should be_true end + + it 'user is following a tag' do + TagFollowing.user_is_following?(alice, @tag.name).should be_true + end + + it 'user not following a tag' do + TagFollowing.user_is_following?(bob, @tag.name).should be_false + end + end From 2d29f93e423393985f6b17cfda2de3646cf4a976 Mon Sep 17 00:00:00 2001 From: Florian Staudacher Date: Thu, 9 Feb 2012 15:24:05 +0100 Subject: [PATCH 12/82] fix shifted image button in firefox --- public/stylesheets/sass/application.sass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index 175a950e0..da31cf70b 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -1021,17 +1021,17 @@ label :display inline-block - :padding 0.3em + :padding .3em .3em 3px :cursor pointer img @include opacity(0.4) - + :vertical-align bottom :display inline-block :margin 0 :padding 0 :margin - :bottom -3px + :bottom 1px &:hover :background From 083aae1a2517660bfb5a8083a4829f26381cc2ed Mon Sep 17 00:00:00 2001 From: Maxwell Salzberg Date: Thu, 9 Feb 2012 10:52:53 -0800 Subject: [PATCH 13/82] update participate path in cuke --- features/participate_stream.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/participate_stream.feature b/features/participate_stream.feature index 107984139..47d2213c5 100644 --- a/features/participate_stream.feature +++ b/features/participate_stream.feature @@ -15,7 +15,7 @@ Feature: The participate stream And I pin the post "B- barack obama is your new bicycle" And I wait for 1 second - When I go to the participate stream page + When I go to the participate page Then "B- barack obama is your new bicycle" should be post 1 And "C- barack obama is a square" should be post 2 And "A- I like turtles" should be post 3 From a16a8fc78441bd1b0699903bde7743fa775b8884 Mon Sep 17 00:00:00 2001 From: danielgrippi Date: Wed, 8 Feb 2012 16:27:36 -0800 Subject: [PATCH 14/82] Participate / Explore have been upgraded to top-level status. --- app/views/layouts/main_stream.html.haml | 28 ++--- config/locales/javascript/javascript.en.yml | 6 +- .../app/templates/header.handlebars | 83 ++++++++------ public/stylesheets/sass/application.sass | 102 +++++++++--------- 4 files changed, 115 insertions(+), 104 deletions(-) diff --git a/app/views/layouts/main_stream.html.haml b/app/views/layouts/main_stream.html.haml index 4848825be..56b72dedf 100644 --- a/app/views/layouts/main_stream.html.haml +++ b/app/views/layouts/main_stream.html.haml @@ -29,6 +29,16 @@ = link_to current_user.first_name, local_or_remote_person_path(current_user.person) .section + %ul.left_nav + %li + = link_to t("streams.participate.title"), participate_path, :class => 'home_selector', :rel => 'backbone' + + %ul.left_nav.sub + %li + = link_to t('streams.mentions.title'), mentioned_stream_path, :class => 'home_selector', :rel => 'backbone' + + %br + %ul.left_nav %li = link_to t("streams.multi.title"), explore_path, :class => 'home_selector', :rel => 'backbone' @@ -38,24 +48,6 @@ #followed_tags_listing = render 'tags/followed_tags_listings' - %br - %ul.left_nav - %li - = link_to t("streams.participate.title"), participate_path, :class => 'home_selector', :rel => 'backbone' - - %ul.left_nav.sub - %li - = link_to t('streams.like_stream.title'), liked_stream_path, :class => 'home_selector', :rel => 'backbone' - %ul.left_nav.sub - %li - = link_to t('streams.comment_stream.title'), commented_stream_path, :class => 'home_selector', :rel => 'backbone' - - - %ul.left_nav.sub - %li - = link_to t('streams.mentions.title'), mentioned_stream_path, :class => 'home_selector', :rel => 'backbone' - - .span-13.append-1 diff --git a/config/locales/javascript/javascript.en.yml b/config/locales/javascript/javascript.en.yml index 776fad527..f934a1268 100644 --- a/config/locales/javascript/javascript.en.yml +++ b/config/locales/javascript/javascript.en.yml @@ -24,6 +24,10 @@ en: months: "%d months" year: "about a year" years: "%d years" + + participate: "Participate" + explore: "Explore" + videos: watch: "Watch this video on <%= provider %>" unknown: "Unknown video type" @@ -117,7 +121,7 @@ en: notifications: "Notifications" messages: "Messages" - search: "Find people or #tags" + search: "Search" recent_notifications: "Recent Notifications" mark_all_as_read: "Mark all as read" diff --git a/public/javascripts/app/templates/header.handlebars b/public/javascripts/app/templates/header.handlebars index 614b80034..3cf6860c7 100644 --- a/public/javascripts/app/templates/header.handlebars +++ b/public/javascripts/app/templates/header.handlebars @@ -1,22 +1,25 @@
- + + - + + + + {{t "participate"}} + + + + + + {{t "explore"}} + + + + + +
+
+ + +

+ {{t "header.recent_notifications"}} +

+
+ +
+
+ Ajax-loader +
+
+
-
-
- - -

- {{t "header.recent_notifications"}} -

-
- -
-
- Ajax-loader -
-
-
@@ -93,6 +98,14 @@
  • {{t "header.log_out"}}
  • + + + {{/unless}} -
    +
    {{#if current_user}} -