Merge branch 'next-minor'

This commit is contained in:
Jonne Haß
2021-04-18 13:09:11 +02:00
103 changed files with 5181 additions and 5652 deletions

63
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,63 @@
name: CI
on:
push:
branches:
- develop
- next-minor
- main
- master
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ruby:
- 2.6
- 2.5
db:
- mysql
- postgresql
kind:
- cucumber
- other
env:
DB: ${{ matrix.db }}
RAILS_ENV: test
BUNDLE_WITH: ${{ matrix.db }}
BUNDLE_WITHOUT: development
BUNDLE_FROZEN: true
BUNDLE_DISABLE_SHARED_GEMS: true
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- name: Install system dependencies
run: sudo apt-get install -y build-essential curl git gsfonts imagemagick libcurl4-openssl-dev libidn11-dev libmagickwand-dev libssl-dev libxml2-dev libxslt1-dev
- name: Start MySQL
run: sudo systemctl start mysql.service
if: matrix.db == 'mysql'
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Prepare
run: script/ci/prepare.sh
- name: Run tests
run: bin/rake --trace ci:${{ matrix.kind }}
- name: Run Jasmine
run: bin/rake jasmine:ci
timeout-minutes: 2
if: matrix.kind == 'other'

1
.gitignore vendored
View File

@@ -9,6 +9,7 @@ app/views/terms/terms.*
app/assets/images/custom/
# Configuration files
config/diaspora.toml
config/diaspora.yml
config/initializers/secret_token.rb
.bundle

View File

@@ -1,7 +1,8 @@
require: rubocop-rails
AllCops:
TargetRubyVersion: 2.3
TargetRubyVersion: 2.6
NewCops: enable
Exclude:
- "bin/**/*"
- "db/schema.rb"

View File

@@ -1,50 +0,0 @@
language: ruby
rvm:
- 2.6.6
- 2.5.8
env:
- DB=postgresql BUILD_TYPE=cucumber
- DB=mysql BUILD_TYPE=cucumber
- DB=postgresql BUILD_TYPE=other
- DB=mysql BUILD_TYPE=other
sudo: false
cache:
bundler: true
directories:
- app/assets/images
- tmp/cache/assets
addons:
apt:
packages:
- libidn11-dev
- ghostscript
services:
- postgresql
- mysql
branches:
only:
- 'master'
- 'next-minor'
- 'develop'
before_install:
- script/ci/prepare.sh
- mkdir travis-phantomjs
- wget http://cifiles.diasporafoundation.org/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis-phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
- tar -xvf $PWD/travis-phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis-phantomjs
- export PATH=$PWD/travis-phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH
script: "bin/rake --trace ci:travis:${BUILD_TYPE}"
notifications:
irc:
channels:
- secure: YvYkeTAw+5oOl/RaXVwu7JkKGNWPoFosNQRmLvJkBFbWzZ1s5LZD1u3+Qj819bT3lGzJu9pxmJg765IRYrGWmBi4mcAV3dpO6qowVdFTcorf0JsnLw3Kvkga9rrDunsRNr21KTAQqHOO5mKUzw9DtMzd52BiWuZwIj3xcl72gQI=
template:
- "%{repository_slug}#%{commit} (%{branch} - %{commit_subject}): %{message} %{build_url}"

View File

@@ -1,3 +1,22 @@
# 0.7.15.0
## Refactor
* Replaced some `http://` links in the UI with their `https://` counterparts [#8207](https://github.com/diaspora/diaspora/pull/8207)
* Testing: Replaced phantomjs with headless Chrome/Chromium [#8234](https://github.com/diaspora/diaspora/pull/8234)
## Bug fixes
* Update comment counter when weleting a comment in the Single Post View [#7938](https://github.com/diaspora/diaspora/pull/7938)
* Link diaspora only poduptime list [#8174](https://github.com/diaspora/diaspora/pull/8174)
* Delete a user's invitation code during account deletion [#8202](https://github.com/diaspora/diaspora/pull/8202)
* Bump mimemagic [#8231](https://github.com/diaspora/diaspora/pull/8231)
* Removed support for defunct Uni Heidelberg OSM tile server, Mapbox is now required if you want to show maps [#8215](https://github.com/diaspora/diaspora/pull/8215)
* Render only two fractional digits in the posts per user/day admin statistics [#8227](https://github.com/diaspora/diaspora/pull/8227)
* Make aspect dropdowns scrollable [#8213](https://github.com/diaspora/diaspora/pull/8213)
* Fix `Photo#ownserhip_of_status_message` validation [#8214](https://github.com/diaspora/diaspora/pull/8214)
## Features
* Support and recommend TOML as configuration format [#8132](https://github.com/diaspora/diaspora/pull/8132)
# 0.7.14.0
## Refactor

98
Gemfile
View File

@@ -2,16 +2,16 @@
source "https://rubygems.org"
gem "rails", "5.2.4.3"
gem "rails", "5.2.5"
# Legacy Rails features, remove me!
# responders (class level)
gem "responders", "2.4.1"
gem "responders", "3.0.1"
# Appserver
gem "unicorn", "5.5.3", require: false
gem "unicorn-worker-killer", "0.4.4"
gem "unicorn", "6.0.0", require: false
gem "unicorn-worker-killer", "0.4.5"
# Federation
@@ -26,8 +26,8 @@ gem "json-schema", "2.8.1"
# Authentication
gem "devise", "4.7.1"
gem "devise-two-factor", "3.0.3"
gem "devise", "4.7.3"
gem "devise-two-factor", "4.0.0"
gem "devise_lastseenable", "0.0.6"
gem "rqrcode", "1.1.2"
@@ -37,12 +37,12 @@ gem "simple_captcha2", "0.5.0", require: "simple_captcha"
# Background processing
gem "redis", "3.3.5" # Pinned to 3.3.x because of https://github.com/antirez/redis/issues/4272
gem "sidekiq", "5.2.8"
gem "redis", "4.2.5"
gem "sidekiq", "6.2.1"
# Scheduled processing
gem "sidekiq-cron", "1.1.0"
gem "sidekiq-cron", "1.2.0"
# Compression
@@ -50,7 +50,8 @@ gem "uglifier", "4.2.0"
# Configuration
gem "configurate", "0.3.1"
gem "configurate", "0.5.0"
gem "toml-rb", "2.0.1"
# Cross-origin resource sharing
@@ -58,9 +59,9 @@ gem "rack-cors", "1.1.1", require: "rack/cors"
# CSS
gem "autoprefixer-rails", "8.6.5"
gem "autoprefixer-rails", "10.2.4.0"
gem "bootstrap-sass", "3.4.1"
gem "bootstrap-switch-rails", "3.3.3" # 3.3.4 is broken, see https://github.com/Bttstrp/bootstrap-switch/issues/691
gem "bootstrap-switch-rails", "3.3.3" # 3.3.4 and 3.3.5 is broken, see https://github.com/Bttstrp/bootstrap-switch/issues/691
gem "compass-rails", "3.1.0"
gem "sass-rails", "5.0.7"
gem "sprockets-rails", "3.2.1"
@@ -79,7 +80,7 @@ gem "activerecord-import", "1.0.4"
# File uploading
gem "carrierwave", "1.3.1"
gem "carrierwave", "1.3.2"
gem "fog-aws", "3.5.2"
gem "mini_magick", "4.10.1"
@@ -142,9 +143,9 @@ gem "leaflet-rails", "1.6.0"
# Parsing
gem "nokogiri", "1.10.9"
gem "open_graph_reader", "0.7.0" # also update User-Agent in features/support/webmock.rb
gem "redcarpet", "3.5.0"
gem "nokogiri", "1.11.3"
gem "open_graph_reader", "0.7.1" # also update User-Agent in features/support/webmock.rb and open_graph_cache_spec.rb
gem "redcarpet", "3.5.1"
gem "ruby-oembed", "0.12.0"
gem "twitter-text", "1.14.7"
@@ -154,7 +155,7 @@ gem "string-direction", "1.2.2"
# Security Headers
gem "secure_headers", "6.3.0"
gem "secure_headers", "6.3.2"
# Services
@@ -185,12 +186,12 @@ gem "addressable", "2.7.0", require: "addressable/uri"
gem "faraday", "0.15.4"
gem "faraday_middleware", "0.13.1"
gem "faraday-cookie_jar", "0.0.6"
gem "typhoeus", "1.3.1"
gem "typhoeus", "1.4.0"
# Views
gem "gon", "6.3.2"
gem "hamlit", "2.11.0"
gem "hamlit", "2.14.6"
gem "mobile-fu", "1.4.0"
gem "rails-timeago", "2.18.0"
gem "will_paginate", "3.3.0"
@@ -201,7 +202,7 @@ gem "logging-rails", "0.6.0", require: "logging/rails"
# Reading and writing zip files
gem "rubyzip", "1.3.0", require: "zip"
gem "rubyzip", "2.3.0", require: "zip"
# Prevent occasions where minitest is not bundled in
# packaged versions of ruby. See following issues/prs:
@@ -240,77 +241,64 @@ group :production do # we don"t install these on travis to speed up test runs
end
group :development do
# Automatic test runs
gem "guard", "2.16.1", require: false
gem "guard-rspec", "4.7.3", require: false
gem "guard-rubocop", "1.3.0", require: false
gem "rb-fsevent", "0.10.3", require: false
gem "rb-inotify", "0.10.1", require: false
# Linters
gem "haml_lint", "0.35.0", require: false
gem "pronto", "0.10.0", require: false
gem "pronto-eslint", "0.10.0", require: false
gem "pronto-haml", "0.10.0", require: false
gem "pronto-rubocop", "0.10.0", require: false
gem "pronto-scss", "0.10.0", require: false
gem "rubocop", "0.80.1", require: false
gem "rubocop-rails", "2.4.1", require: false
# Preloading environment
gem "spring", "2.1.0"
gem "spring-commands-rspec", "1.0.4"
gem "spring-commands-cucumber", "1.0.1"
gem "haml_lint", "0.37.0", require: false
gem "pronto", "0.11.0", require: false
gem "pronto-eslint", "0.11.0", require: false
gem "pronto-haml", "0.11.0", require: false
gem "pronto-rubocop", "0.11.1", require: false
gem "pronto-scss", "0.11.0", require: false
gem "rubocop", "0.93.1", require: false
gem "rubocop-rails", "2.9.1", require: false
# Debugging
gem "pry"
gem "pry-byebug"
# test coverage
gem "simplecov", "0.16.1", require: false
gem "simplecov", "0.21.2", require: false
gem "turbo_dev_assets", "0.0.2"
gem "listen", "3.5.1"
end
group :test do
# RSpec (unit tests, some integration tests)
gem "fixture_builder", "0.5.2"
gem "fuubar", "2.5.0"
gem "fuubar", "2.5.1"
gem "json-schema-rspec", "0.0.4"
gem "rspec-json_expectations", "~> 2.1"
# Cucumber (integration tests)
gem "capybara", "3.15.0"
gem "database_cleaner", "1.8.3"
gem "poltergeist", "1.18.1"
gem "apparition", "0.6.0"
gem "capybara", "3.35.3"
gem "database_cleaner-active_record", "1.8.0"
gem "cucumber-api-steps", "0.14", require: false
# General helpers
gem "factory_girl_rails", "4.9.0"
gem "shoulda-matchers", "4.0.1"
gem "timecop", "0.9.1"
gem "webmock", "3.8.3", require: false
gem "shoulda-matchers", "4.5.1"
gem "timecop", "0.9.4"
gem "webmock", "3.12.2", require: false
gem "diaspora_federation-test", "0.2.6"
# Coverage
gem "coveralls", "0.8.23", require: false
end
group :development, :test do
# RSpec (unit tests, some integration tests)
gem "rspec-rails", "3.9.1"
gem "rspec-rails", "5.0.1"
# Cucumber (integration tests)
gem "cucumber-rails", "2.0.0", require: false
gem "cucumber-rails", "2.3.0", require: false
# Jasmine (client side application tests (JS))
gem "jasmine", "3.5.1"
gem "chrome_remote", "0.3.0"
gem "jasmine", "3.7.0"
gem "jasmine-jquery-rails", "2.0.3"
gem "rails-assets-jasmine-ajax", "4.0.0", source: "https://gems.diasporafoundation.org"
gem "sinon-rails", "1.15.0"

File diff suppressed because it is too large Load Diff

View File

@@ -1,29 +0,0 @@
# frozen_string_literal: true
guard :rspec, cmd: "bin/spring rspec", all_on_start: false, all_after_pass: false do
watch(/^spec\/.+_spec\.rb$/)
watch(/^lib\/(.+)\.rb$/) {|m| "spec/lib/#{m[1]}_spec.rb" }
watch(/spec\/spec_helper.rb/) { "spec" }
# Rails example
watch(/^spec\/.+_spec\.rb$/)
watch(/^app\/(.+)\.rb$/) {|m| "spec/#{m[1]}_spec.rb" }
watch(/^lib\/(.+)\.rb$/) {|m| "spec/lib/#{m[1]}_spec.rb" }
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) {|m|
["spec/routing/#{m[1]}_routing_spec.rb",
"spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb",
"spec/acceptance/#{m[1]}_spec.rb"]
}
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
watch("spec/spec_helper.rb") { "spec" }
watch("config/routes.rb") { "spec/routing" }
watch("app/controllers/application_controller.rb") { "spec/controllers" }
# Capybara request specs
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) {|m| "spec/requests/#{m[1]}_spec.rb" }
end
guard :rubocop, all_on_start: false, keep_failed: false do
watch(/(?:app|config|db|lib|features|spec)\/.+\.rb$/)
watch(/(config.ru|Gemfile|Guardfile|Rakefile)$/)
end

View File

@@ -1,13 +1,6 @@
# diaspora\*
### A privacy-aware, distributed, open source social network
**master:** [![Build Status master](https://secure.travis-ci.org/diaspora/diaspora.svg?branch=master)](http://travis-ci.org/diaspora/diaspora)
**next-minor:** [![Build Status next-minor](https://secure.travis-ci.org/diaspora/diaspora.svg?branch=next-minor)](http://travis-ci.org/diaspora/diaspora)
[![Coverage Status next-minor](https://coveralls.io/repos/github/diaspora/diaspora/badge.svg?branch=next-minor)](https://coveralls.io/github/diaspora/diaspora?branch=next-minor)|
**develop:** [![Build Status develop](https://secure.travis-ci.org/diaspora/diaspora.svg?branch=develop)](http://travis-ci.org/diaspora/diaspora)
[![Coverage Status develop](https://coveralls.io/repos/github/diaspora/diaspora/badge.svg?branch=develop)](https://coveralls.io/github/diaspora/diaspora?branch=develop) |
[![Code Climate](https://codeclimate.com/github/diaspora/diaspora/badges/gpa.svg)](https://codeclimate.com/github/diaspora/diaspora)
[Project site](https://diasporafoundation.org) |
[Wiki](https://wiki.diasporafoundation.org) |
[Bugtracker](https://github.com/diaspora/diaspora/issues) |
@@ -17,7 +10,7 @@
## Installation
You don't have to install diaspora\* to use the network. There are many servers connected to diaspora\*s network which are open to anyone, and you can create an account on one of these servers. Have a look at our [tips for finding a home](https://wiki.diasporafoundation.org/Choosing_a_pod), or you can just go straight to the [list of open servers](http://podupti.me) to sign up.
You don't have to install diaspora\* to use the network. There are many servers connected to diaspora\*s network which are open to anyone, and you can create an account on one of these servers. Have a look at our [tips for finding a home](https://wiki.diasporafoundation.org/Choosing_a_pod), or you can just go straight to the [list of open servers](https://diaspora.podupti.me) to sign up.
Want to own your data and install diaspora\*? Whether you just want to try it out, want to install it on your server or want to contribute and need a development setup, our [installation guides](https://wiki.diasporafoundation.org/Installation) will get you started!

View File

@@ -1,25 +1,23 @@
(function() {
app.helpers.locations = {
getTiles: function() {
// If the mapbox option is enabled in the diaspora.yml, the mapbox tiles with the podmin's credentials are used.
// If the mapbox option is enabled in the diaspora.toml, the mapbox tiles with the podmin's credentials are used.
if (gon.appConfig.map.mapbox.enabled) {
return L.tileLayer("https://api.mapbox.com/styles/v1/{style}/tiles/256/{z}/{x}/{y}?access_token={accessToken}", {
accessToken: gon.appConfig.map.mapbox.access_token,
style: gon.appConfig.map.mapbox.style,
attribution: "Map data &copy; <a href='http://openstreetmap.org'>OpenStreetMap</a> contributors, " +
"<a href='http://creativecommons.org/licenses/by-sa/2.0/''>CC-BY-SA</a>, " +
"Imagery © <a href='https://www.mapbox.com'>Mapbox</a>",
maxZoom: 18
});
return L.tileLayer(
"https://api.mapbox.com/styles/v1/{style}/tiles/256/{z}/{x}/{y}?access_token={accessToken}",
{
accessToken: gon.appConfig.map.mapbox.access_token,
style: gon.appConfig.map.mapbox.style,
attribution:
"Map data &copy; <a href='https://openstreetmap.org'>OpenStreetMap</a> contributors, " +
"<a href='http://opendatacommons.org/licenses/dbcl/1.0/'>Open Database License, ODbL 1.0</a>, " +
"Imagery © <a href='https://www.mapbox.com'>Mapbox</a>",
maxZoom: 18,
tileSize: 512,
zoomOffset: -1
}
);
}
// maptiles from the Heidelberg University are used by default.
return L.tileLayer("http://korona.geog.uni-heidelberg.de/tiles/roads/x={x}&y={y}&z={z}", {
attribution: "Map data &copy; <a href='http://openstreetmap.org'>OpenStreetMap</a> contributors, " +
"rendering <a href='http://giscience.uni-hd.de/'>" +
"GIScience Research Group @ Heidelberg University</a>",
maxZoom: 18
});
}
};
})();

View File

@@ -85,6 +85,10 @@ app.models.Post.Interactions = Backbone.Model.extend({
});
},
removedComment: function() {
this.set({"comments_count": this.get("comments_count") - 1});
},
reshare : function(){
var interactions = this;

View File

@@ -16,10 +16,8 @@ app.views.AspectMembership = app.views.Base.extend({
},
events: {
"click ul.aspect_membership.dropdown-menu > li.aspect_selector"
: "_clickHandler",
"keypress ul.aspect_membership.dropdown-menu > li.aspect_selector"
: "_clickHandler"
"click ul.aspect-membership.dropdown-menu > li.aspect_selector": "_clickHandler",
"keypress ul.aspect-membership.dropdown-menu > li.aspect_selector": "_clickHandler"
},
initialize: function(opts) {

View File

@@ -135,7 +135,10 @@ app.views.CommentStream = app.views.Base.extend({
},
removeComment: function(comment) {
this.$("#" + comment.get("guid")).closest(".comment.media").remove();
var result = this.$("#" + comment.get("guid")).closest(".comment.media").remove();
if (result.hasClass("deleting")) {
this.model.interactions.removedComment();
}
},
expandComments: function(evt){

View File

@@ -13,9 +13,10 @@ app.views.Help = app.views.StaticContentView.extend({
"click .faq-link-chat": "chat"
},
/* eslint-disable camelcase */
initialize : function() {
this.GETTING_HELP_SUBS = {
getting_started_a: {tutorial_series: this.linkHtml("http://diasporafoundation.org/getting_started/sign_up", Diaspora.I18n.t("getting_started_tutorial"))},
getting_started_a: {tutorial_series: this.linkHtml("https://diasporafoundation.org/getting_started/sign_up", Diaspora.I18n.t("getting_started_tutorial"))},
get_support_a_website: {link: this.linkHtml("https://diasporafoundation.org/", Diaspora.I18n.t("foundation_website"))},
get_support_a_tutorials: {tutorials: this.linkHtml("https://diasporafoundation.org/tutorials", Diaspora.I18n.t("tutorials"))},
get_support_a_wiki: {link: this.linkHtml("https://wiki.diasporafoundation.org/Special:Search", Diaspora.I18n.t("wiki"))},
@@ -28,10 +29,11 @@ app.views.Help = app.views.StaticContentView.extend({
this.POSTS_AND_POSTING_SUBS = {
post_report_a: {community_guidelines: this.linkHtml("https://diasporafoundation.org/community_guidelines", Diaspora.I18n.t("community_guidelines"))},
format_text_a: {
markdown: this.linkHtml("http://diasporafoundation.org/formatting", Diaspora.I18n.t( 'markdown' )),
here: this.linkHtml("http://daringfireball.net/projects/markdown/syntax", Diaspora.I18n.t( 'here' ))
markdown: this.linkHtml("https://diasporafoundation.org/formatting", Diaspora.I18n.t("markdown")),
here: this.linkHtml("https://daringfireball.net/projects/markdown/syntax", Diaspora.I18n.t("here"))
}
};
/* eslint-enable camelcase */
this.TAGS_SUBS = {
filter_tags_a: {

View File

@@ -36,8 +36,9 @@ app.views.SinglePostContent = app.views.Base.extend({
var map = L.map(mapContainer[0]).setView([location.lat, location.lng], 14);
var tiles = app.helpers.locations.getTiles();
tiles.addTo(map);
if (tiles) {
tiles.addTo(map);
}
// put marker on map
L.marker(location).addTo(map);

View File

@@ -21,3 +21,7 @@
}
}
}
.aspect-membership {
max-height: 300px;
overflow: auto;
}

View File

@@ -145,14 +145,6 @@
}
}
#email-form{
padding: 0;
.form-group{
margin-left: 0;
margin-right: 0;
}
}
#birth-date{
text-align: center;
select{

View File

@@ -13,7 +13,7 @@
<span class="caret" />
</button>
<ul class="dropdown-menu aspect_membership pull-right" unselectable="on">
<ul class="dropdown-menu aspect-membership pull-right" unselectable="on">
{{#each aspects}}
<li
{{#if membership}}

View File

@@ -1,5 +1,5 @@
<li class="hoverable">
<a class="selectable toggle_selector" href="#">
<a class="selectable toggle_selector aspect-membership" href="#">
{{ t "aspect_navigation.select_all" }}
</a>
</li>

View File

@@ -5,7 +5,7 @@ module MetaDataHelper
include ActionView::Helpers::TagHelper
def og_prefix
'og: http://ogp.me/ns# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#'
"og: https://ogp.me/ns# article: https://ogp.me/ns/article# profile: https://ogp.me/ns/profile#"
end
def site_url

View File

@@ -68,11 +68,9 @@ class Photo < ApplicationRecord
def ownership_of_status_message
message = StatusMessage.find_by_guid(self.status_message_guid)
if self.status_message_guid && message
self.diaspora_handle == message.diaspora_handle
else
true
end
return unless status_message_guid && message && diaspora_handle != message.diaspora_handle
errors.add(:base, "Photo must have the same owner as status message")
end
def self.diaspora_initialize(params={})

View File

@@ -4,6 +4,8 @@
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
require "attr_encrypted"
class User < ApplicationRecord
include AuthenticationToken
include Connecting

View File

@@ -38,8 +38,8 @@
.row
%p.col-md-12.alert.alert-info.text-center{role: "alert"}
!= t("admins.stats.current_segment",
post_yest: content_tag(:strong, posts[:yesterday] / user_count),
post_day: content_tag(:strong, posts[:day_before] / user_count))
post_yest: content_tag(:strong, "%0.2f" % (posts[:yesterday] / user_count)),
post_day: content_tag(:strong, "%0.2f" % (posts[:day_before] / user_count)))
.row
.col-md-12

View File

@@ -22,7 +22,7 @@
- else
= t("shared.aspect_dropdown.toggle", count: selected_aspects.size)
%span.caret
%ul.dropdown-menu.pull-right{unSelectable: "on"}
%ul.dropdown-menu.aspect-membership.pull-right{unSelectable: "on"}
%li.public.radio{"data-aspect_id" => "public", :class => ("selected" if public_selected?(selected_aspects))}
%a

View File

@@ -15,7 +15,7 @@
= t(".configure_your_pod")
!= t(".configuration_info",
database_path: content_tag(:code, "config/database.yml"),
diaspora_path: content_tag(:code, "config/diaspora.yml"))
diaspora_path: content_tag(:code, "config/diaspora.toml"))
.col-md-4
.landing-info-card

View File

@@ -5,7 +5,7 @@
wiki: link_to(t("registrations.closed.another_pod"), "https://diasporafoundation.org/getting_started/sign_up"))
!= t("registrations.closed.find_pods",
poduptime: link_to("Poduptime", "https://podupti.me/"))
poduptime: link_to("Poduptime", "https://diaspora.podupti.me/"))
!= t("registrations.closed.other_questions",
wiki: link_to("Wiki", "https://wiki.diasporafoundation.org/Choosing_a_pod"))

View File

@@ -68,7 +68,7 @@
tag_path(name: t("shared.publisher.new_user_prefill.newhere"))))
%br
= link_to(t("aspects.index.new_here.learn_more"),
"http://wiki.diasporafoundation.org/Welcoming_Committee")
"https://wiki.diasporafoundation.org/Welcoming_Committee")
.section.collapsed
.title
@@ -99,7 +99,7 @@
faq: link_to(t("_help"), help_path),
tutorial: link_to(t("aspects.index.help.tutorial_link_text"),
"https://diasporafoundation.org/tutorials", target: "_blank"),
wiki: link_to("Wiki", "http://wiki.diasporafoundation.org",
wiki: link_to("Wiki", "https://wiki.diasporafoundation.org",
target: "_blank"),
target: "_blank")

View File

@@ -142,7 +142,9 @@
Source code and materials
%p
This Service runs on a diaspora* social network server. This source code is licensed under an <a href="http://www.gnu.org/licenses/agpl-3.0.html">AGPLv3</a> license which means you are allowed to and even encouraged to take the source code, modify it and use it.
This Service runs on a diaspora* social network server. This source code is licensed under an
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPLv3</a> license which means you are allowed
to and even encouraged to take the source code, modify it and use it.
%p
For full details about the diaspora* server <a href="https://github.com/diaspora/diaspora">see here</a>.

View File

@@ -20,10 +20,11 @@
= form_for "user", url: edit_user_path,
html: {method: :put, class: "form-horizontal col-md-12", id: "email-form"} do |f|
html: {method: :put, class: "form-horizontal", id: "email-form"} do |f|
= f.error_messages
.form-group
= f.text_field :email, value: @user.unconfirmed_email || @user.email, class: "col-md-7 form-control"
.col-sm-12
= f.text_field :email, value: @user.unconfirmed_email || @user.email, class: "form-control"
.clearfix= f.submit t(".change_email"), class: "btn btn-primary pull-right"
- if @user.unconfirmed_email.present?
%div= t(".email_awaiting_confirmation", email: @user.email, unconfirmed_email: @user.unconfirmed_email)

View File

@@ -1,8 +1,3 @@
#!/usr/bin/env ruby
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
require 'bundler/setup'
load Gem.bin_path('cucumber', 'cucumber')

View File

@@ -1,16 +0,0 @@
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'guard' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
Pathname.new(__FILE__).realpath)
require 'rubygems'
require 'bundler/setup'
load Gem.bin_path('guard', 'guard')

View File

@@ -1,9 +1,4 @@
#!/usr/bin/env ruby
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'

View File

@@ -1,9 +1,4 @@
#!/usr/bin/env ruby
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
require_relative '../config/boot'
require 'rake'
Rake.application.run

View File

@@ -1,8 +1,3 @@
#!/usr/bin/env ruby
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
require 'bundler/setup'
load Gem.bin_path('rspec-core', 'rspec')

View File

@@ -1,16 +0,0 @@
#!/usr/bin/env ruby
# This file loads spring without using Bundler, in order to be fast.
# It gets overwritten when you run the `spring binstub` command.
unless defined?(Spring)
require 'rubygems'
require 'bundler'
lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
if spring = lockfile.specs.detect { |spec| spec.name == "spring" }
Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
gem 'spring', spring.version
require 'spring/binstub'
end
end

View File

@@ -5,22 +5,31 @@ require "yaml"
module BundlerHelper
def self.rails_env
@rails_env ||= ENV["RAILS_ENV"] ||
parse_value_from_file("diaspora.yml", "configuration", "server", "rails_environment") ||
parse_value_from_file("defaults.yml", "defaults", "server", "rails_environment")
parse_value_from_toml_file("diaspora.toml", "rails_environment") ||
parse_value_from_yaml_file("diaspora.yml", "configuration", "server", "rails_environment") ||
parse_value_from_yaml_file("defaults.yml", "defaults", "server", "rails_environment")
end
def self.database
@adapter ||= parse_value_from_file("database.yml", rails_env, "adapter")
@adapter ||= parse_value_from_yaml_file("database.yml", rails_env, "adapter")
raise "No database adapter found, please fix your config/database.yml!" unless @adapter
abort "No database adapter found, please fix your config/database.yml!" unless @adapter
@adapter.sub("mysql2", "mysql")
end
private_class_method def self.parse_value_from_file(file, *keys)
private_class_method def self.parse_value_from_yaml_file(file, *keys)
path = File.join(__dir__, file)
return YAML.load_file(path).dig(*keys) if File.file?(path)
YAML.load_file(path).dig(*keys) if File.file?(path)
end
puts "Configuration file #{path} not found, ensure it's present" # rubocop:disable Rails/Output
private_class_method def self.parse_value_from_toml_file(file, key)
path = File.join(__dir__, file)
if File.file?(path)
File.read(path)[/^\s*#{Regexp.escape(key)}\s*=\s*["']([^"']+)["']\s*$/, 1]
elsif !File.file? File.join(__dir__, "diaspora.yml")
warn "WARNING: Configuration file #{path} not found, ensure it's present" # rubocop:disable Rails/Output
end
end
end

View File

@@ -9,7 +9,7 @@ screenshot_opts = "--require features --format pretty"
%>
# 'normal' test runs
default: <%= std_opts %> -r features --tags 'not @nophantomjs'
default: <%= std_opts %> -r features
wip: -r features --tags @wip:3 --wip features
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags 'not @wip and not @screenshots'

View File

@@ -3,7 +3,7 @@ postgresql: &postgresql
host: "localhost"
port: 5432
username: "postgres"
password: ""
password: "postgres"
encoding: unicode
mysql: &mysql
@@ -11,7 +11,7 @@ mysql: &mysql
host: "localhost"
port: 3306
username: "root"
password: ""
password: "root"
# socket: /tmp/mysql.sock
encoding: utf8mb4
collation: utf8mb4_bin
@@ -31,6 +31,7 @@ common: &common
#### CONFIGURE ABOVE #############################
##################################################
# Normally you don't need to touch anything here
combined: &combined

View File

@@ -4,7 +4,7 @@
defaults:
version:
number: "0.7.14.0" # Do not touch unless doing a release, do not backport the version number that's in master
number: "0.7.15.0" # Do not touch unless doing a release, do not backport the version number that's in master
heroku: false
environment:
url: "http://localhost:3000/"

View File

@@ -0,0 +1,698 @@
## Some notes about this file:
## - All comments start with a double #
## - All settings are commented out with a single #
## To change the default settings, you need both to uncomment the lines
## AND, in most cases, to change the value that is given.
## - Take care to keep proper quoting. All " must have a matching " at
## the end of the same line. The same goes for '
## - The values true, false and numbers should have no quote marks.
## Everything else should.
##
## You can set and/or override all these settings through environment variables
## with the following conversion rules:
## - Strip the top level namespace (configuration, production, etc.)
## - Build the path to the setting, for example environment.s3.enable
## - Replace the dots with underscores: environment_s3_enable
## - Convert to upper case: ENVIRONMENT_S3_ENABLE
## - Specify lists/arrays as comma-separated values
##
## - For example, on Heroku:
## heroku config:set SERVICES_TWITTER_KEY=yourkey SERVICES_TWITTER_SECRET=yoursecret
## You need to change or at least review the settings in this section
## in order for your pod to work.
[configuration.environment]
## Set the hostname of the machine you're running Diaspora on, as seen
## from the internet. This should be the URL you want to use to
## access the pod. So if you plan to use a reverse proxy, it should be
## the URL the proxy listens on. DO NOT CHANGE THIS AFTER INITIAL SETUP!
## However changing http to https is okay and has no consequences.
## If you do change the URL, you will have to start again as the URL
## will be hardcoded into the database.
#url = "https://example.org/"
## Set the bundle of certificate authorities (CA) certificates.
## This is specific to your operating system.
## Examples (uncomment the relevant one or add your own):
## For Debian, Ubuntu, Archlinux, Gentoo (package ca-certificates):
#certificate_authorities = "/etc/ssl/certs/ca-certificates.crt"
## For CentOS, Fedora:
#certificate_authorities = "/etc/pki/tls/certs/ca-bundle.crt"
## URL for a remote Redis (default="localhost").
## Don't forget to restrict IP access if you uncomment these!
#redis = "redis://example_host"
#redis = "redis://username:password@host:6379/0"
#redis = "unix:///tmp/redis.sock"
## Require SSL (default=true).
## When set, your pod will force the use of HTTPS in production mode.
## Since OAuth2 requires SSL, Diaspora's future API might not work if
## you're not using SSL. Also there is no guarantee that posting to
## services will be possible if SSL is disabled.
## Do not change this default unless you are sure!
#require_ssl = true
## Single-process mode (default=false).
## If set to true, Diaspora will work with just the appserver (Unicorn by
## default) running. However, this makes it quite slow as intensive jobs
## must be run all the time inside the request cycle. We strongly
## recommended you leave this disabled for production setups.
## Set to true to enable.
#single_process_mode = false
## Set redirect URL for an external image host (Amazon S3 or other).
## If hosting images for your pod on an external server (even your own),
## add its URL here. All requests made to images under /uploads/images
## will be redirected to https://images.example.org/uploads/images/
#image_redirect_url = "https://images.example.org"
## Pubsub server (default="https://pubsubhubbub.appspot.com/"").
## Diaspora is only tested against the default pubsub server.
## You probably don't want to uncomment or change this.
#pubsub_server = "https://pubsubhubbub.appspot.com/"
## Sidekiq - background processing
[configuration.environment.sidekiq]
## Number of parallel threads Sidekiq uses (default=5).
## If you touch this, please set the pool setting in your database.yml
## to a value that's at minimum close to this! You can safely increase
## it to 25 and more on a medium-sized pod. This applies per started
## Sidekiq worker, so if you set it to 25 and start two workers, you'll
## process up to 50 jobs in parallel.
#concurrency = 5
## Number of times a job is retried (default=10).
## There's an exponential effect to this: if you set this too high you
## might get too many jobs building up in the queue.
## Set it to 0 to disable it completely.
#retry = 10
## Lines of backtrace that are stored on failure (default=15).
## Set n to the required value. Set this to false to reduce Redis memory
## usage (and log size) if you're not interested in this data.
#backtrace = 15
## Number of jobs to keep in the dead queue (default=5000).
## Jobs get into the dead queue after they failed and exhausted all retries.
## Increasing this setting will increase the memory usage of Redis.
## Once gone from the dead queue, a failed job is permanently lost and
## cannot be retried manually.
#dead_jobs_limit = 1000
## Number of seconds a job remains in the dead queue (default=3628800 (six weeks)).
## Jobs get into the dead queue after they failed and exhausted all retries.
## Increasing this setting will increase the memory usage of Redis.
## Once gone from the dead queue, a failed job is permanently lost and
## cannot be retried manually.
#dead_jobs_timeout = 15552000 # 6 months
## Log file for Sidekiq (default="log/sidekiq.log")
#log = "log/sidekiq.log"
## Use Amazon S3 instead of your local filesystem
## to handle uploaded pictures (disabled by default).
[configuration.environment.s3]
#enable = true
#key = "change_me"
#secret = "change_me"
#bucket = "my_photos"
#region = "us-east-1"
## Use max-age header on Amazon S3 resources (default=true).
## When true, this allows locally cached images to be served for up to
## one year. This can improve load speed and save requests to the image
## host. Set to false to revert to browser defaults (usually less than
## one year).
#cache = true
[configuration.environment.assets]
## Serve static assets via the appserver (default=false).
## This is highly discouraged for production use. Let your reverse
## proxy/webserver do it by serving the files under public/ directly.
#serve = false
## Upload your assets to S3 (default=false).
#upload = false
## Specify an asset host. Ensure it does not have a trailing slash (/).
#host = "http://cdn.example.org/diaspora"
## Logger configuration
[configuration.environment.logging]
## Roll the application log on a daily basis (default=true).
#logrotate.enable = true
## The number of days to keep (default=7)
#logrotate.days = 7
## Enables the debug-logging for SQL (default=false)
## This logs every SQL-statement!
#debug.sql = true
## Enables the federation-debug-log (default=false)
## This logs all XMLs that are used for the federation
#debug.federation = true
## Settings affecting how ./script/server behaves.
[configuration.server]
## Where the appserver should listen to (default="unix:tmp/diaspora.sock")
#listen = "unix:tmp/diaspora.sock"
#listen = "unix:/run/diaspora/diaspora.sock"
#listen = "127.0.0.1:3000"
## Set the path for the PID file of the unicorn master process (default=tmp/pids/web.pid)
#pid = "tmp/pids/web.pid"
## Rails environment (default="development").
## The environment in which the server should be started by default.
## Change this to "production" if you wish to run a production environment.
#rails_environment = "production"
## Write unicorn stderr and stdout log.
#stderr_log = "log/unicorn-stderr.log"
#stdout_log = "log/unicorn-stdout.log"
## Number of Unicorn worker processes (default=2).
## Increase this if you have many users.
#unicorn_worker = 2
## Number of seconds before a request is aborted (default=90).
## Increase if you get empty responses, or if large image uploads fail.
## Decrease if you're under heavy load and don't care if some
## requests fail.
#unicorn_timeout = 90
## Embed a Sidekiq worker inside the unicorn process (default=false).
## Useful for minimal Heroku setups.
#embed_sidekiq_worker = false
## Number of Sidekiq worker processes (default=1).
## In most cases it is better to
## increase environment.sidekiq.concurrency instead!
#sidekiq_workers = 1
## Diaspora has an internal XMPP web-client. If you want to enable the chat
## functionality or want to use a custom XMPP server, then you should edit
## the following configuration.
## DEPRECATED: The chat suppport will be removed with Diaspora 0.8.0.0!
[configuration.chat]
## Enable the chat service and all its components.
##
## Please make sure that you followed the Installation-Instructions first:
## https://wiki.diasporafoundation.org/Integration/Chat#Installation.2FUpdate
#enabled = true
## Custom XMPP server configuration goes here.
[configuration.chat.server]
## Use the configuration bridge to prosody (default=true).
## In case you want to run your own server or want to configure
## prosody on your own, you should disable it.
#enabled = false
## Set the directory in which to look for virtual hosts TLS certificates.
#certs = "config/certs"
## XEP-0124 BOSH requests
## The easiest way of avoiding certificate and mixed-content issues
## is to use a proxy, e.g.:
##
## Apache: https://wiki.diasporafoundation.org/Integration/Chat#Apache2
## Nginx: https://wiki.diasporafoundation.org/Integration/Chat#Nginx
##
## If you configured your proxy correctly,
## you should set the proxy option to 'true'
[configuration.chat.server.bosh]
## If you'd like to use a proxy, you should set the proxy
## option to true, otherwise jsxc always tries to
## connect directly to the port specified below.
#proxy = true
## Configure the protocol used to access the BOSH endpoint
#proto = "http"
## Configure the address that prosody should listen on.
#address = "0.0.0.0"
## Configure the BOSH port.
#port = 5280
## Configure the bind endpoint.
#bind = "/http-bind"
## Specify chat server log behaviour here.
[configuration.chat.server.log]
## Log file location.
#info = "log/prosody.log"
## Error log file location.
#error = "log/prosody.err"
## The debug level logs all XML sent and received by the server.
#debug = false
## Displays the location of a post in a map.
## If you enable this setting you use the map tiles of https://www.mapbox.com
## which is reliable. There you have to create an account to get
## an access token which is limited. If you want to get an unlimited account
## you can write an email to team@diasporafoundation.org.
## Please enable mapbox and fill out your access_token.
[configuration.map.mapbox]
#enabled = false
#access_token = "youraccesstoken"
#style = "mapbox/streets-v11"
## Settings potentially affecting the privacy of your users.
[configuration.privacy]
## Include jQuery from jquery.com's CDN (default=false).
## Enabling this can reduce traffic and speed up load time since most
## clients already have this one cached. When set to false (the default),
## the jQuery library will be loaded from your pod's own resources.
#jquery_cdn = false
## Google Analytics (disabled by default).
## Provide a key to enable tracking by Google Analytics.
#google_analytics_key = "yourkey"
## Piwik Tracking (disabled by default).
## Provide a site ID and the host piwik is running on to enable
## tracking through Piwik.
#piwik.enable = true
#piwik.host = "stats.example.org"
#piwik.site_id = 1
## Statistics
## Your pod will report its name, software version and whether
## or not registrations are open via /statistics and NodeInfo.
## Uncomment the options below to enable more statistics.
[configuration.privacy.statistics]
## Local user total and 6 month active counts.
#user_counts = true
## Local post total count.
#post_counts = true
#comment_counts = true
## Use Camo to proxy embedded remote images.
## Do not enable this setting unless you have a working Camo setup. Using
## camo to proxy embedded images will improve the privacy and security of
## your pod's frontend, but it will increase the traffic on your server.
## Check out https://wiki.diasporafoundation.org/Installation/Camo for
## more details and installation instructions.
[configuration.privacy.camo]
## Proxy images embedded via markdown (default=false).
## Embedded images are quite often from non-SSL sites and may cause a
## partial content warning, so this is recommended.
#proxy_markdown_images = true
## Proxy Open Graph thumbnails (default=false).
## Open Graph thumbnails may or may not be encrypted and loaded from
## servers outside the network. Recommended.
#proxy_opengraph_thumbnails = true
## Proxy remote pod's images (default=false).
## Profile pictures and photos from other pods usually are encrypted,
## so enabling this is only useful if you want to avoid HTTP requests to
## third-party servers. This will create a lot of traffic on your camo
## instance. You have been warned.
#proxy_remote_pod_images = true
## Root of your Camo installation
#root = "https://example.com/camo/"
## Shared key of your Camo installation
#key = "example123example456example!"
## General settings
[configuration.settings]
## Pod name (default="diaspora*")
## The pod name displayed in various locations, including the header.
#pod_name = "diaspora*"
## Allow registrations (default=true)
## Set this to false to prevent people from signing up to your pod
## without an invitation. Note that this needs to be set to true
## (or commented out) to enable the first registration (you).
#enable_registrations = true
## Auto-follow on sign-up (default=true)
## Users will automatically follow a specified account on creation.
## Set this to false if you don't want your users to automatically
## follow an account upon creation.
#autofollow_on_join = true
## Auto-follow account (default="hq@pod.diaspora.software")
## The diaspora* HQ account keeps users up to date with news about Diaspora.
## If you set another auto-follow account (for example your podmin account),
## please consider resharing diaspora* HQ's posts for your pod's users!
#autofollow_on_join_user = "hq@pod.diaspora.software"
## Liberapay.com is a free platform which allow donations like patreon
## Set your username to include your Liberapay button
#liberapay_username = "change_me"
## Bitcoin donations
## You can provide a bitcoin address here to allow your users to provide
## donations towards the running of their pod.
#bitcoin_address = "change_me"
## Source code URL
## URL to the source code your pod is currently running.
## If not set your pod will provide a downloadable archive.
#source_url = "https://example.org/username/diaspora"
## Changelog URL
## URL to the changelog of the diaspora-version your pod is currently running.
## If not set an auto-generated url to github is used.
#changelog_url = "https://github.com/diaspora/diaspora/blob/master/Changelog.md"
## Default color theme
## You can change which color theme is displayed when a user is not signed in
## or has not selected any color theme from the available ones. You simply have
## to enter the name of the theme's folder in "app/assets/stylesheets/color_themes/".
## ("original" for the theme in "app/assets/stylesheets/color_themes/original/", for
## example).
#default_color_theme = "original"
## CURL debug (default=false)
## Turn on extra verbose output when sending stuff. Note: you
## don't need to touch this unless explicitly told to.
#typhoeus_verbose = false
## Maximum number of parallel HTTP requests made to other pods (default=20)
## Be careful, raising this setting will heavily increase the memory usage
## of your Sidekiq workers.
#typhoeus_concurrency = 20
## Maximum number of parallel user data export jobs (default=1)
## Be careful, exports of big/old profiles can use a lot of memory, running
## many of them in parallel can be a problem for small servers.
#export_concurrency = 1
## Welcome Message settings
[configuration.settings.welcome_message]
## Welcome Message on registration (default=false)
## Send a message to new users after registration
## to tell them about your pod and how things
## are handled on it.
#enabled = false
## Welcome Message subject (default="Welcome Message")
## The subject of the conversation that is started
## by your welcome message.
#subject = "Welcome Message"
## Welcome Message text (default="Hello %{username}, welcome to diaspora*.")
## The content of your welcome message.
## The placeholder "%{username}" will be replaced by the username
## of the new user.
#text = "Hello %{username}, welcome to diaspora*."
## Invitation settings
[configuration.settings.invitations]
## Enable invitations (default=true)
## Set this to false if you don't want users to be able to send invites.
#open = true
## Number of invitations per invite link (default=25)
## Every user will see such a link if you have enabled
## invitations on your pod.
#count = 25
## Paypal donations (disabled by default)
## You can set details for a Paypal button here to allow donations
## towards running the pod.
## First, enable the function, then set the currency in which you
## wish to receive donations, and **either** a hosted button id
## **or** an encrypted key for an unhosted button.
[configuration.settings.paypal_donations]
#enable = false
## Currency used (USD, EUR...)
#currency = "USD"
## Hosted Paypal button ID
#paypal_hosted_button_id = "change_me"
## OR encrypted key of unhosted button
#paypal_unhosted_button_encrypted = "-----BEGIN PKCS7-----"
## Community spotlight (disabled by default)
## The community spotlight shows new users public posts from people you
## think are interesting in Diaspora's community. To add an account
## to the community spotlight add the "spotlight" role to it.
[configuration.settings.community_spotlight]
#enable = true
## E-mail address to which users can make suggestions about who
## should be in the community spotlight (optional).
#suggest_email = "admin@example.org"
## Captcha settings
[configuration.settings.captcha]
## Enable captcha (default=true)
## Set this to false if you don't want to use captcha for signup process.
#enable = true
## Captcha image size (default="120x20")
#image_size = "120x20"
## Length of captcha text (default=5)(max=12)
#captcha_length = 5
## Captcha image style (default="simply_green")
## Available options for captcha image styles are: "simply_blue",
## "simply_red" "simply_green", "charcoal_grey", "embossed_silver",
## "all_black", "distorted_black", "almost_invisible", "random".
#image_style = "simply_green"
## Captcha image distortion (default="low")
## Sets the level of image distortion used in the captcha.
## Available options are: "low", "medium", "high", "random".
#distortion = "low"
## Terms of Service
## Show a default or customized terms of service for users.
## You can create a custom Terms of Service by placing a template
## as app/views/terms/terms.haml or app/views/terms/terms.erb
## The default terms of service that can be extended is
## at app/views/terms/default.haml
## NOTE! The default terms have not been checked over by a lawyer and
## thus are unlikely to provide full legal protection for all situations
## for a podmin using them. They are also not specific to all countries
## and jurisdictions. If you are unsure, please check with a lawyer.
## We provide these for podmins as some basic rules that podmins
## can communicate to users easily via the diaspora* server software.
## Uncomment to enable this feature.
[configuration.settings.terms]
## First enable it by uncommenting below.
#enable = true
## Important! If you enable the terms, you should always
## set a location under which laws any disputes are governed
## under. For example, country or state/country, depending
## on the country in question.
## If this is not set, the whole paragraph about governing
## laws *is not shown* in the terms page.
#jurisdiction = ""
## Age limit for signups.
## Set a number to activate this setting. This age limit is shown
## in the default ToS document.
#minimum_age = false
## Maintenance
## Various pod maintenance related settings are controlled from here.
[configuration.settings.maintenance]
## Removing old inactive users can be done automatically by background
## processing. The amount of inactivity is set by `after_days`. A warning
## email will be sent to the user and after an additional `warn_days`, the
## account will be automatically closed.
## This maintenance is not enabled by default.
#remove_old_users.enable = true
#remove_old_users.after_days = 730
#remove_old_users.warn_days = 30
#remove_old_users.limit_removals_to_per_day = 100 ## Limit queuing for removal per day.
## Default meta tags
## You can change here the default meta tags content included on the pages of your pod.
## Title will be used for the opengraph og:site_name property while description will be used
## for description and og:description.
[configuration.settings.default_metas]
#title = "diaspora* social network"
#description = "diaspora* is the online social world where you are in control."
## CSP (Content Security Policy) header
## CSP allows limiting origins from where resources are allowed to be loaded. This
## improves security, since it helps to detect and mitigate cross-site scripting
## and data injection attacks. The default policy of diaspora* allows all third
## party domains from services that are included in diaspora*, like OEmbed
## scripts, so you can safely activate it by setting `report_only` to false. If
## you customized diaspora* (edited templates or added own JS), additional work
## may be required. You can test the policy with the `report_uri`. Our default CSP
## does not work with Google analytics or Piwik, because they inject JS code that
## is blocked by CSP.
[configuration.settings.csp]
## Report-Only header (default=false)
## By default diaspora* adds a "Content-Security-Policy" header. If you set
## this to true, the "Content-Security-Policy-Report-Only" header is added instead.
#report_only = true
## CSP report URI
## You can set an URI here, where the user agent reports violations as JSON document via a POST request.
#report_uri = "/csp_violation_reports"
## Posting from Diaspora to external services (all are disabled by default).
[configuration.services]
## OAuth credentials for Twitter
#twitter.enable = true
#twitter.key = "change_me"
#twitter.secret = "change_me"
## OAuth credentials for Tumblr
#tumblr.enable = true
#tumblr.key = "change_me"
#tumblr.secret = "change_me"
## OAuth credentials for Wordpress
#wordpress.enable = true
#wordpress.client_id = "change_me"
#wordpress.secret = "change_me"
## Allow your pod to send emails for notifications, password recovery
## and other purposes (disabled by default).
[configuration.mail]
## First you need to enable it.
#enable = true
## Sender address used in mail sent by Diaspora.
#sender_address = "no-reply@example.org"
## This selects which mailer should be used. Use "smtp" for a smtp
## connection or "sendmail" to use the sendmail binary.
#method = "smtp"
## Ignored if method isn't "smtp".
[configuration.mail.smtp]
## Host and port of the smtp server handling outgoing mail.
## This should match the common name of the certificate sent by
## the SMTP server, if it sends one. (default port=587)
#host = "smtp.example.org"
#port = 587
## Authentication required to send mail (default="plain").
## Use one of "plain", "login" or "cram_md5". Use "none"
## if server does not support authentication.
#authentication = "plain"
## Credentials to log in to the SMTP server.
## May be necessary if authentication is not "none".
#username = "change_me"
#password = "change_me"
## Automatically enable TLS (default=true).
## Leave this commented out if authentication is set to "none".
#starttls_auto = true
## The domain for the HELO command, if needed.
#domain = "smtp.example.org"
## OpenSSL verify mode used when connecting to a SMTP server with TLS (default="peer").
## Set this to "none" if and only if you have a self-signed certificate.
## Possible values: "none", "peer".
#openssl_verify_mode = "none"
## Ignored if method isn't "sendmail".
[configuration.mail.sendmail]
## The path to the sendmail binary (default="/usr/sbin/sendmail")
#location = "/usr/sbin/sendmail"
## Use exim and sendmail (default=false)
#exim_fix = false
## Administrator settings
[configuration.admins]
## Set the admin account.
## This doesn't make the user an admin but is used when a generic
## admin contact is needed, much like the postmaster role in mail
## systems. Set only the username, NOT the full ID.
#account = "podmin"
## E-mail address via which the administrator can be contacted.
#podmin_email = "podmin@example.org"
## Settings related to relays
## Relays are applications that exist to push public posts around to
## pods which want to subscribe to them but would not otherwise
## receive them due to not having direct contact with the remote pods.
##
## See more regarding relays: https://wiki.diasporafoundation.org/Relay_servers_for_public_posts
[configuration.relay]
## Enable this setting to send out public posts from this pod to a relay
#outbound.send = true
## Change default remote relay url used for sending out here
#outbound.url = "https://relay.iliketoast.net/receive/public"
## Enable this to receive public posts from relays
#inbound.subscribe = true
## Scope is either "all" or "tags" (default="tags").
## - "all", means this pod wants to receive all public posts from a relay
## - "tags", means this pod wants only posts tagged with certain tags
#inbound.scope = "tags"
## If scope is "tags", should we include tags that users on this pod follow?
## These are added in addition to "pod_tags", if set.
#inbound.include_user_tags = false
## If scope is "tags", a comma separated list of tags here can be set.
## For example "linux,diaspora", to receive posts related to these tags
#inbound.pod_tags = "linux,diaspora"
## Advanced - ignore unless you know better
## You can override settings defined above if you need
## them to be different in different environments. "configuration"
## in the namespaces above refers to all environments, replace it with a
## specific environment here.
[production]
#environment.redis = "redis://production.example.org:6379"
[production.mail.sendmail]
#location = "/usr/local/bin/sendmail"
[development]
#environment.redis = "redis://dev.example.org:6379"
[development.mail.sendmail]
#location = "/opt/bin/sendmail"

View File

@@ -1,713 +0,0 @@
## Some notes about this file:
## - All comments start with a double #
## - All settings are commented out with a single #
## To change the default settings, you need both to uncomment the lines
## AND, in most cases, to change the value that is given.
## - Take care to keep proper indentation, that is by simply deleting
## the original #, with no additional space before the setting's name.
## - Take care to keep proper quoting. All ' must have a matching ' at
## the end of the same line. The same goes for "
## - Lines containing "## Section" are section headings. Do not edit them!
## - Lists need the space after the -
## - The values true, false and numbers should have no quote marks.
## Single words don't need quote marks, but it doesn't do any harm to have them.
##
## You can set and/or override all these settings through environment variables
## with the following conversion rules:
## - Strip the top level namespace (configuration, production, etc.)
## - Build the path to the setting, for example environment.s3.enable
## - Replace the dots with underscores: environment_s3_enable
## - Convert to upper case: ENVIRONMENT_S3_ENABLE
## - Specify lists/arrays as comma-separated values
##
## - For example, on Heroku:
## heroku config:set SERVICES_TWITTER_KEY=yourkey SERVICES_TWITTER_SECRET=yoursecret
configuration: ## Section
## You need to change or at least review the settings in this section
## in order for your pod to work.
environment: ## Section
## Set the hostname of the machine you're running Diaspora on, as seen
## from the internet. This should be the URL you want to use to
## access the pod. So if you plan to use a reverse proxy, it should be
## the URL the proxy listens on. DO NOT CHANGE THIS AFTER INITIAL SETUP!
## However changing http to https is okay and has no consequences.
## If you do change the URL, you will have to start again as the URL
## will be hardcoded into the database.
#url: "https://example.org/"
## Set the bundle of certificate authorities (CA) certificates.
## This is specific to your operating system.
## Examples (uncomment the relevant one or add your own):
## For Debian, Ubuntu, Archlinux, Gentoo (package ca-certificates):
#certificate_authorities: '/etc/ssl/certs/ca-certificates.crt'
## For CentOS, Fedora:
#certificate_authorities: '/etc/pki/tls/certs/ca-bundle.crt'
## URL for a remote Redis (default=localhost).
## Don't forget to restrict IP access if you uncomment these!
#redis: 'redis://example_host'
#redis: 'redis://username:password@host:6379/0'
#redis: 'unix:///tmp/redis.sock'
## Require SSL (default=true).
## When set, your pod will force the use of HTTPS in production mode.
## Since OAuth2 requires SSL, Diaspora's future API might not work if
## you're not using SSL. Also there is no guarantee that posting to
## services will be possible if SSL is disabled.
## Do not change this default unless you are sure!
#require_ssl: true
## Single-process mode (default=false).
## If set to true, Diaspora will work with just the appserver (Unicorn by
## default) running. However, this makes it quite slow as intensive jobs
## must be run all the time inside the request cycle. We strongly
## recommended you leave this disabled for production setups.
## Set to true to enable.
#single_process_mode: false
## Sidekiq - background processing
sidekiq: ## Section
## Number of parallel threads Sidekiq uses (default=5).
## If you touch this, please set the pool setting in your database.yml
## to a value that's at minimum close to this! You can safely increase
## it to 25 and more on a medium-sized pod. This applies per started
## Sidekiq worker, so if you set it to 25 and start two workers, you'll
## process up to 50 jobs in parallel.
#concurrency: 5
## Number of times a job is retried (default=10).
## There's an exponential effect to this: if you set this too high you
## might get too many jobs building up in the queue.
## Set it to 0 to disable it completely.
#retry: 10
## Lines of backtrace that are stored on failure (default=15).
## Set n to the required value. Set this to false to reduce Redis memory
## usage (and log size) if you're not interested in this data.
#backtrace: 15
## Number of jobs to keep in the dead queue (default=5000).
## Jobs get into the dead queue after they failed and exhausted all retries.
## Increasing this setting will increase the memory usage of Redis.
## Once gone from the dead queue, a failed job is permanently lost and
## cannot be retried manually.
# dead_jobs_limit: 1000
## Number of seconds a job remains in the dead queue (default=3628800 (six weeks)).
## Jobs get into the dead queue after they failed and exhausted all retries.
## Increasing this setting will increase the memory usage of Redis.
## Once gone from the dead queue, a failed job is permanently lost and
## cannot be retried manually.
# dead_jobs_timeout: 15552000 # 6 months
## Log file for Sidekiq (default="log/sidekiq.log")
#log: "log/sidekiq.log"
## Use Amazon S3 instead of your local filesystem
## to handle uploaded pictures (disabled by default).
s3: ## Section
#enable: true
#key: 'change_me'
#secret: 'change_me'
#bucket: 'my_photos'
#region: 'us-east-1'
## Use max-age header on Amazon S3 resources (default=true).
## When true, this allows locally cached images to be served for up to
## one year. This can improve load speed and save requests to the image
## host. Set to false to revert to browser defaults (usually less than
## one year).
#cache : true
## Set redirect URL for an external image host (Amazon S3 or other).
## If hosting images for your pod on an external server (even your own),
## add its URL here. All requests made to images under /uploads/images
## will be redirected to https://yourhost.tld/uploads/images/
#image_redirect_url: 'https://images.example.org'
assets: ## Section
## Serve static assets via the appserver (default=false).
## This is highly discouraged for production use. Let your reverse
## proxy/webserver do it by serving the files under public/ directly.
#serve: false
## Upload your assets to S3 (default=false).
#upload: false
## Specify an asset host. Ensure it does not have a trailing slash (/).
#host: http://cdn.example.org/diaspora
## Pubsub server (default='https://pubsubhubbub.appspot.com/').
## Diaspora is only tested against the default pubsub server.
## You probably don't want to uncomment or change this.
#pubsub_server: 'https://pubsubhubbub.appspot.com/'
## Logger configuration
logging: ## Section
logrotate: ## Section
## Roll the application log on a daily basis (default=true).
#enable: true
## The number of days to keep (default=7)
#days: 7
## Debug logging
debug: ## Section
## Enables the debug-logging for SQL (default=false)
## This logs every SQL-statement!
#sql: true
## Enables the federation-debug-log (default=false)
## This logs all XMLs that are used for the federation
#federation: true
## Settings affecting how ./script/server behaves.
server: ## Section
## Where the appserver should listen to (default=unix:tmp/diaspora.sock)
#listen: 'unix:tmp/diaspora.sock'
#listen: 'unix:/run/diaspora/diaspora.sock'
#listen: '127.0.0.1:3000'
## Set the path for the PID file of the unicorn master process (default=tmp/pids/web.pid)
#pid: 'tmp/pids/web.pid'
## Rails environment (default='development').
## The environment in which the server should be started by default.
## Change this to 'production' if you wish to run a production environment.
#rails_environment: 'development'
## Write unicorn stderr and stdout log.
#stderr_log: 'log/unicorn-stderr.log'
#stdout_log: 'log/unicorn-stdout.log'
## Number of Unicorn worker processes (default=2).
## Increase this if you have many users.
#unicorn_worker: 2
## Number of seconds before a request is aborted (default=90).
## Increase if you get empty responses, or if large image uploads fail.
## Decrease if you're under heavy load and don't care if some
## requests fail.
#unicorn_timeout: 90
## Embed a Sidekiq worker inside the unicorn process (default=false).
## Useful for minimal Heroku setups.
#embed_sidekiq_worker: false
## Number of Sidekiq worker processes (default=1).
## In most cases it is better to
## increase environment.sidekiq.concurrency instead!
#sidekiq_workers: 1
## Diaspora has an internal XMPP web-client. If you want to enable the chat
## functionality or want to use a custom XMPP server, then you should edit
## the following configuration.
chat: ## Section
## Enable the chat service and all its components.
##
## Please make sure that you followed the Installation-Instructions first:
## https://wiki.diasporafoundation.org/Integration/Chat#Installation.2FUpdate
#enabled: true
## Custom XMPP server configuration goes here.
server: ## Section
## Use the configuration bridge to prosody (default=true).
## In case you want to run your own server or want to configure
## prosody on your own, you should disable it.
#enabled: false
## Set the directory in which to look for virtual hosts TLS certificates.
#certs: 'config/certs'
## XEP-0124 BOSH requests
## The easiest way of avoiding certificate and mixed-content issues
## is to use a proxy, e.g.:
##
## Apache: https://wiki.diasporafoundation.org/Integration/Chat#Apache2
## Nginx: https://wiki.diasporafoundation.org/Integration/Chat#Nginx
##
## If you configured your proxy correctly,
## you should set the proxy option to 'true'
bosh: ## Section
## If you'd like to use a proxy, you should set the proxy
## option to true, otherwise jsxc always tries to
## connect directly to the port specified below.
#proxy: true
## Configure the protocol used to access the BOSH endpoint
#proto: http
## Configure the address that prosody should listen on.
#address: '0.0.0.0'
## Configure the BOSH port.
#port: 5280
## Configure the bind endpoint.
#bind: '/http-bind'
## Specify log behaviour here.
log: ## Section
## Log file location.
#info: 'log/prosody.log'
## Error log file location.
#error: 'log/prosody.err'
## The debug level logs all XML sent and received by the server.
#debug: false
## Displays the location of a post in a map. Per default we are using the map
## tiles of the Heidelberg University (http://giscience.uni-hd.de).
## You also have the possibility to use the map tiles of https://www.mapbox.com
## which is probably more reliable. There you have to create an account to get
## an access token which is limited. If you want to get an unlimited account
## you can write an email to team@diasporafoundation.org.
## Please enable mapbox and fill out your access_token.
map: ##Section
mapbox:
#enabled: false
#access_token: "youraccesstoken"
#style: "mapbox/streets-v9"
## Settings potentially affecting the privacy of your users.
privacy: ## Section
## Include jQuery from jquery.com's CDN (default=false).
## Enabling this can reduce traffic and speed up load time since most
## clients already have this one cached. When set to false (the default),
## the jQuery library will be loaded from your pod's own resources.
#jquery_cdn: false
## Google Analytics (disabled by default).
## Provide a key to enable tracking by Google Analytics.
#google_analytics_key:
## Piwik Tracking (disabled by default).
## Provide a site ID and the host piwik is running on to enable
## tracking through Piwik.
piwik: ## Section
#enable: true
#host: 'stats.example.org'
#site_id: 1
## Statistics
## Your pod will report its name, software version and whether
## or not registrations are open via /statistics and NodeInfo.
## Uncomment the options below to enable more statistics.
statistics: ## Section
## Local user total and 6 month active counts.
#user_counts: true
## Local post total count.
#post_counts: true
#comment_counts: true
## Use Camo to proxy embedded remote images.
## Do not enable this setting unless you have a working Camo setup. Using
## camo to proxy embedded images will improve the privacy and security of
## your pod's frontend, but it will increase the traffic on your server.
## Check out https://wiki.diasporafoundation.org/Installation/Camo for
## more details and installation instructions.
camo: ## Section
## Proxy images embedded via markdown (default=false).
## Embedded images are quite often from non-SSL sites and may cause a
## partial content warning, so this is recommended.
#proxy_markdown_images: true
## Proxy Open Graph thumbnails (default=false).
## Open Graph thumbnails may or may not be encrypted and loaded from
## servers outside the network. Recommended.
#proxy_opengraph_thumbnails: true
## Proxy remote pod's images (default=false).
## Profile pictures and photos from other pods usually are encrypted,
## so enabling this is only useful if you want to avoid HTTP requests to
## third-party servers. This will create a lot of traffic on your camo
## instance. You have been warned.
#proxy_remote_pod_images: true
## Root of your Camo installation
#root: "https://example.com/camo/"
## Shared key of your Camo installation
#key: "example123example456example!"
## General settings
settings: ## Section
## Pod name (default="diaspora*")
## The pod name displayed in various locations, including the header.
#pod_name: "diaspora*"
## Allow registrations (default=true)
## Set this to false to prevent people from signing up to your pod
## without an invitation. Note that this needs to be set to true
## (or commented out) to enable the first registration (you).
#enable_registrations: true
## Auto-follow on sign-up (default=true)
## Users will automatically follow a specified account on creation.
## Set this to false if you don't want your users to automatically
## follow an account upon creation.
#autofollow_on_join: true
## Auto-follow account (default='hq@pod.diaspora.software')
## The diaspora* HQ account keeps users up to date with news about Diaspora.
## If you set another auto-follow account (for example your podmin account),
## please consider resharing diaspora* HQ's posts for your pod's users!
#autofollow_on_join_user: 'hq@pod.diaspora.software'
## Welcome Message settings
welcome_message: ##Section
## Welcome Message on registration (default=false)
## Send a message to new users after registration
## to tell them about your pod and how things
## are handled on it.
#enabled: false
## Welcome Message subject (default='Welcome Message')
## The subject of the conversation that is started
## by your welcome message.
#subject: "Welcome Message"
## Welcome Message text (default='Hello %{username}, welcome to diaspora.')
## The content of your welcome message.
## The placeholder "%{username}" will be replaced by the username
## of the new user.
#text: "Hello %{username}, welcome to diaspora."
## Invitation settings
invitations: ## Section
## Enable invitations (default=true)
## Set this to false if you don't want users to be able to send invites.
#open: true
## Number of invitations per invite link (default=25)
## Every user will see such a link if you have enabled
## invitations on your pod.
#count: 25
## Paypal donations (disabled by default)
## You can set details for a Paypal button here to allow donations
## towards running the pod.
## First, enable the function, then set the currency in which you
## wish to receive donations, and **either** a hosted button id
## **or** an encrypted key for an unhosted button.
paypal_donations: ## Section
#enable: false
## Currency used (USD, EUR...)
#currency: USD
## hosted Paypal button id
#paypal_hosted_button_id: "change_me"
## OR encrypted key of unhosted button
#paypal_unhosted_button_encrypted: "-----BEGIN PKCS7-----"
## Liberapay.com is a free platform which allow donations like patreon
## Set your username to include your liberapay button
# liberapay_username: "change_me"
## Bitcoin donations
## You can provide a bitcoin address here to allow your users to provide
## donations towards the running of their pod.
#bitcoin_address: "change_me"
## Community spotlight (disabled by default)
## The community spotlight shows new users public posts from people you
## think are interesting in Diaspora's community. To add an account
## to the community spotlight add the 'spotlight' role to it.
community_spotlight: ## Section
#enable: true
## E-mail address to which users can make suggestions about who
## should be in the community spotlight (optional).
#suggest_email: 'admin@example.org'
## CURL debug (default=false)
## Turn on extra verbose output when sending stuff. Note: you
## don't need to touch this unless explicitly told to.
#typhoeus_verbose: false
## Maximum number of parallel HTTP requests made to other pods (default=20)
## Be careful, raising this setting will heavily increase the memory usage
## of your Sidekiq workers.
#typhoeus_concurrency: 20
## Maximum number of parallel user data export jobs (default=1)
## Be careful, exports of big/old profiles can use a lot of memory, running
## many of them in parallel can be a problem for small servers.
#export_concurrency: 1
## Captcha settings
captcha: ## Section
## Enable captcha (default=true)
## Set this to false if you don't want to use captcha for signup process.
#enable: true
## Captcha image size (default='120x20')
#image_size: '120x20'
## Length of captcha text (default=5)(max=12)
#captcha_length: 5
## Captcha image style (default='simply_green')
## Available options for captcha image styles are: 'simply_blue',
## 'simply_red' 'simply_green', 'charcoal_grey', 'embossed_silver',
## 'all_black', 'distorted_black', 'almost_invisible', 'random'.
#image_style: 'simply_green'
## Captcha image distortion (default='low')
## Sets the level of image distortion used in the captcha.
## Available options are: 'low', 'medium', 'high', 'random'.
#distortion: 'low'
## Terms of Service
## Show a default or customized terms of service for users.
## You can create a custom Terms of Service by placing a template
## as app/views/terms/terms.haml or app/views/terms/terms.erb
## The default terms of service that can be extended is
## at app/views/terms/default.haml
## NOTE! The default terms have not been checked over by a lawyer and
## thus are unlikely to provide full legal protection for all situations
## for a podmin using them. They are also not specific to all countries
## and jurisdictions. If you are unsure, please check with a lawyer.
## We provide these for podmins as some basic rules that podmins
## can communicate to users easily via the diaspora* server software.
## Uncomment to enable this feature.
terms: ## Section
## First enable it by uncommenting below.
#enable: true
## Important! If you enable the terms, you should always
## set a location under which laws any disputes are governed
## under. For example, country or state/country, depending
## on the country in question.
## If this is not set, the whole paragraph about governing
## laws *is not shown* in the terms page.
#jurisdiction: ""
## Age limit for signups.
## Set a number to activate this setting. This age limit is shown
## in the default ToS document.
#minimum_age: false
## Maintenance
## Various pod maintenance related settings are controlled from here.
maintenance: ## Section
## Removing old inactive users can be done automatically by background
## processing. The amount of inactivity is set by `after_days`. A warning
## email will be sent to the user and after an additional `warn_days`, the
## account will be automatically closed.
## This maintenance is not enabled by default.
remove_old_users: ## Section
#enable: true
#after_days: 730
#warn_days: 30
## Limit queuing for removal per day.
#limit_removals_to_per_day: 100
## Source code URL
## URL to the source code your pod is currently running.
## If not set your pod will provide a downloadable archive.
#source_url: 'https://example.org/username/diaspora'
## Changelog URL
## URL to the changelog of the diaspora-version your pod is currently running.
## If not set an auto-generated url to github is used.
#changelog_url: "https://github.com/diaspora/diaspora/blob/master/Changelog.md"
## Default color theme
## You can change which color theme is displayed when a user is not signed in
## or has not selected any color theme from the available ones. You simply have
## to enter the name of the theme's folder in "app/assets/stylesheets/color_themes/".
## ("original" for the theme in "app/assets/stylesheets/color_themes/original/", for
## example).
#default_color_theme: "original"
## Default meta tags
## You can change here the default meta tags content included on the pages of your pod.
## Title will be used for the opengraph og:site_name property while description will be used
## for description and og:description.
default_metas:
#title: 'diaspora* social network'
#description: 'diaspora* is the online social world where you are in control.'
## CSP (Content Security Policy) header
## CSP allows limiting origins from where resources are allowed to be loaded. This
## improves security, since it helps to detect and mitigate cross-site scripting
## and data injection attacks. The default policy of diaspora* allows all third
## party domains from services that are included in diaspora*, like OEmbed
## scripts, so you can safely activate it by setting `report_only` to false. If
## you customized diaspora* (edited templates or added own JS), additional work
## may be required. You can test the policy with the `report_uri`. Our default CSP
## does not work with Google analytics or Piwik, because they inject JS code that
## is blocked by CSP.
csp:
## Report-Only header (default=true)
## By default diaspora* adds only a "Content-Security-Policy-Report-Only" header. If you set
## this to false, the "Content-Security-Policy" header is added instead.
#report_only: false
## CSP report URI (default=)
## You can set an URI here, where the user agent reports violations as JSON document via a POST request.
#report_uri: "/csp_violation_reports"
## Posting from Diaspora to external services (all are disabled by default).
services: ## Section
## OAuth credentials for Twitter
twitter: ## Section
#enable: true
#key: 'abcdef'
#secret: 'change_me'
## OAuth credentials for Tumblr
tumblr: ## Section
#enable: true
#key: 'abcdef'
#secret: 'change_me'
## OAuth credentials for Wordpress
wordpress: ## Section
#enable: true
#client_id: 'abcdef'
#secret: 'change_me'
## Allow your pod to send emails for notifications, password recovery
## and other purposes (disabled by default).
mail: ## Section
## First you need to enable it.
#enable: true
## Sender address used in mail sent by Diaspora.
#sender_address: 'no-reply@example.org'
## This selects which mailer should be used. Use 'smtp' for a smtp
## connection or 'sendmail' to use the sendmail binary.
#method: 'smtp'
## Ignore if method isn't 'smtp'.
smtp: ## Section
## Host and port of the smtp server handling outgoing mail.
## This should match the common name of the certificate sent by
## the SMTP server, if it sends one. (default port=587)
#host: 'smtp.example.org'
#port: 587
## Authentication required to send mail (default='plain').
## Use one of 'plain', 'login' or 'cram_md5'. Use 'none'
## if server does not support authentication.
#authentication: 'plain'
## Credentials to log in to the SMTP server.
## May be necessary if authentication is not 'none'.
#username: 'change_me'
#password: 'change_me'
## Automatically enable TLS (default=true).
## Leave this commented out if authentication is set to 'none'.
#starttls_auto: true
## The domain for the HELO command, if needed.
#domain: 'smtp.example.org'
## OpenSSL verify mode used when connecting to a SMTP server with TLS.
## Set this to 'none' if you have a self-signed certificate. Possible
## values: 'none', 'peer'.
#openssl_verify_mode: 'none'
## Ignore if method isn't 'sendmail'
sendmail: ## Section
## The path to the sendmail binary (default='/usr/sbin/sendmail')
#location: '/usr/sbin/sendmail'
## Use exim and sendmail (default=false)
#exim_fix: false
## Administrator settings
admins: ## Section
## Set the admin account.
## This doesn't make the user an admin but is used when a generic
## admin contact is needed, much like the postmaster role in mail
## systems. Set only the username, NOT the full ID.
#account: "podmaster"
## E-mail address to contact the administrator.
#podmin_email: 'podmin@example.org'
## Settings related to relays
relay: ## Section
## Relays are applications that exist to push public posts around to
## pods which want to subscribe to them but would not otherwise
## receive them due to not having direct contact with the remote pods.
##
## See more regarding relays: https://wiki.diasporafoundation.org/Relay_servers_for_public_posts
outbound: ## Section
## Enable this setting to send out public posts from this pod to a relay
#send: false
## Change default remote relay url used for sending out here
#url: 'https://relay.iliketoast.net/receive/public'
inbound: ## Section
## Enable this to receive public posts from relays
#subscribe: false
## Scope is either 'all' or 'tags' (default).
## - 'all', means this pod wants to receive all public posts from a relay
## - 'tags', means this pod wants only posts tagged with certain tags
#scope: tags
## If scope is 'tags', should we include tags that users on this pod follow?
## These are added in addition to 'pod_tags', if set.
#include_user_tags: false
## If scope is 'tags', a comma separated list of tags here can be set.
## For example "linux,diaspora", to receive posts related to these tags
#pod_tags:
## Here you can override settings defined above if you need
## to have them different in different environments.
production: ## Section
environment: ## Section
#redis: 'redis://production.example.org:6379'
development: ## Section
environment: ## Section
#redis: 'redis://production.example.org:6379'

View File

@@ -31,7 +31,7 @@ Devise.setup do |config|
Rails.logger.warn("No smtp sender address set, mail may fail.")
warn "WARNING: No smtp sender address set, mail may fail."
end
config.mailer_sender = "please-change-me@config-diaspora-yml.com"
config.mailer_sender = "please-change-me@config-diaspora-toml.com"
end
# Configure the class responsible to send e-mails.

View File

@@ -1,16 +1,16 @@
# frozen_string_literal: true
require 'sidekiq_middlewares'
require 'sidekiq/middleware/i18n'
require "sidekiq_middlewares"
require "sidekiq/middleware/i18n"
# Single process-mode
if AppConfig.environment.single_process_mode? && Rails.env != "test"
if Rails.env == 'production'
puts "WARNING: You are running Diaspora in production without Sidekiq"
puts " workers turned on. Please set single_process_mode to false in"
puts " config/diaspora.yml."
if AppConfig.environment.single_process_mode? && !Rails.env.test?
if Rails.env.production?
warn "WARNING: You are running Diaspora in production without Sidekiq"
warn " workers turned on. Please set single_process_mode to false in"
warn " config/diaspora.toml."
end
require 'sidekiq/testing/inline'
require "sidekiq/testing/inline"
end
Sidekiq.configure_server do |config|
@@ -20,35 +20,15 @@ Sidekiq.configure_server do |config|
chain.add SidekiqMiddlewares::CleanAndShortBacktraces
end
# Set connection pool on Heroku
database_url = ENV['DATABASE_URL']
if(database_url)
ENV['DATABASE_URL'] = "#{database_url}?pool=#{AppConfig.environment.sidekiq.concurrency.get}"
# Set connection pool to match concurrency
database_url = ENV["DATABASE_URL"]
if database_url
ENV["DATABASE_URL"] = "#{database_url}?pool=#{AppConfig.environment.sidekiq.concurrency.get}"
ActiveRecord::Base.establish_connection
end
# Make sure each Sidekiq process has its own sequence of UUIDs
UUID.generator.next_sequence
# wrap the logger to add the sidekiq job context to the log
class SidekiqLogger < SimpleDelegator
SPACE = " "
# only info is used with context
def info(data=nil)
return false if Logger::Severity::INFO < level
data = yield if data.nil? && block_given?
__getobj__.info("#{context}#{data}")
end
# from sidekiq/logging.rb
def context
c = Thread.current[:sidekiq_context]
"#{c.join(SPACE)}: " if c && c.any?
end
end
Sidekiq::Logging.logger = SidekiqLogger.new(Logging.logger[Sidekiq])
end
Sidekiq.configure_client do |config|

View File

@@ -3,6 +3,7 @@
require "pathname"
require "bundler/setup"
require "configurate"
require "configurate/provider/toml"
rails_env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
@@ -20,18 +21,35 @@ AppConfig ||= Configurate::Settings.create do
add_provider Configurate::Provider::Dynamic
add_provider Configurate::Provider::Env
unless heroku? || rails_env == "test" || File.exist?(File.join(config_dir, "diaspora.yml"))
warn "FATAL: Configuration not found. Copy over diaspora.yml.example"
warn " to diaspora.yml and edit it to your needs."
unless heroku? ||
rails_env == "test" ||
File.exist?(File.join(config_dir, "diaspora.toml")) ||
File.exist?(File.join(config_dir, "diaspora.yml"))
warn "FATAL: Configuration not found. Copy over diaspora.toml.example"
warn " to diaspora.toml and edit it to your needs."
exit!
end
add_provider Configurate::Provider::YAML,
File.join(config_dir, "diaspora.yml"),
namespace: rails_env, required: false
add_provider Configurate::Provider::YAML,
File.join(config_dir, "diaspora.yml"),
namespace: "configuration", required: false
if File.exist?(File.join(config_dir, "diaspora.toml"))
if File.exist?(File.join(config_dir, "diaspora.yml"))
warn "WARNING: diaspora.toml found, ignoring diaspora.yml. Move or delete diaspora.yml to remove this warning."
end
add_provider Configurate::Provider::TOML,
File.join(config_dir, "diaspora.toml"),
namespace: rails_env, required: false
add_provider Configurate::Provider::TOML,
File.join(config_dir, "diaspora.toml"),
namespace: "configuration", required: false
else
add_provider Configurate::Provider::YAML,
File.join(config_dir, "diaspora.yml"),
namespace: rails_env, required: false
add_provider Configurate::Provider::YAML,
File.join(config_dir, "diaspora.yml"),
namespace: "configuration", required: false
end
add_provider Configurate::Provider::YAML,
File.join(config_dir, "defaults.yml"),
namespace: rails_env

View File

@@ -1,124 +1,87 @@
# Copyright © 2011, Diaspora Inc. This file is
# Copyright (c) 2010-2013, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
# Jordi Mallach <jordi@softcatala.org>, 2011.
# Abans d'actualitzar aquesta traducció, si us plau poseu-vos en contacte
# amb Jordi Mallach o Softcatalà <info@softcatala.org>.
ca:
errors:
messages:
not_found: "no s'ha trobat"
already_confirmed: "ja estava confirmat"
not_locked: "no estava blocat"
devise:
confirmations:
confirmed: "S'ha confirmat el vostre compte amb èxit. Ara esteu autenticat."
new:
resend_confirmation: "Torna a enviar les instruccions per a la confirmació"
send_instructions: "En uns minuts rebreu un correu electrònic amb instruccions per a confirmar la vostra contrasenya."
failure:
unauthenticated: "Heu d'entrar o registrar-vos abans de continuar."
unconfirmed: "Heu de confirmar el vostre compte abans de continuar."
locked: "El vostre compte és blocat."
inactive: "El vostre compte encara no era actiu."
invalid: "El nom d'usuari o contrasenya no són vàlids."
invalid_token: "El testimoni d'autenticació és invàlid."
locked: "El vostre compte és blocat."
timeout: "La vostra sessió ha caducat, torneu a entrar per a continuar."
inactive: "El vostre compte encara no era actiu."
sessions:
new:
login: "Entra"
username: "Nom d'usuari"
password: "Contrasenya"
sign_in: "Entra"
remember_me: "Recorda'm"
alpha_software: "Esteu a punt d'emprar programari en estat alfa."
bugs_and_feedback: "Tingueu en compte que aneu a experimentar errors. Us encoratgem a emprar el botó de comentaris del costat dret del vostre navegador per a informar de qualsevol problema. Treballarem tan ràpid com siga possible per a resoldre tots aquells problemes de què informeu."
bugs_and_feedback_mobile: "Tingueu en compte que aneu a experimentar errors. Us encoratgem a informar de qualsevol problema. Treballarem tan ràpid com siga possible per a resoldre tots aquells problemes de què informeu."
modern_browsers: "només suporta navegadors moderns."
signed_in: "Heu entrat correctament."
signed_out: "Heu sortit correctament."
unauthenticated: "Heu d'entrar o registrar-vos abans de continuar."
unconfirmed: "Heu de confirmar el vostre compte abans de continuar."
invitations:
invitation_token_invalid: "Disculpeu! Aquest testimoni de invitació no és vàlid."
send_instructions: "S'ha enviat la vostra invitació."
updated: "S'ha establert la vostra contrasenya amb èxit. Ara esteu autenticat."
mailer:
confirmation_instructions:
confirm: "Confirma el meu compte"
subject: "Instruccions per a la confirmació"
you_can_confirm: "Podeu confirmar el vostre compte mitjançant l'enllaç següent:"
hello: "Hola, %{email}!"
inviter:
accept_at: "a %{url}, podeu acceptar-ho mitjançant l'enllaç següent."
has_invited_you: "%{name}"
have_invited_you: "%{names} us han convidat a unir-vos a Diàspora"
reset_password_instructions:
change: "Canvia la meua contrasenya"
ignore: "Si no heu demanat això, ignoreu aquest correu electrònic."
someone_requested: "Algú ha demanat un enllaç per a canviar la vostra contrasenya, i podeu fer-ho mitjançant l'enllaç següent."
subject: "Instruccions per al restabliment de la contrasenya"
wont_change: "La vostra contrasenya no es canviarà fins que no accediu l'enllaç anterior i en creeu una de nova."
unlock_instructions:
account_locked: "S'ha blocat el vostre compte degut a un nombre excessiu d'entrades fallides."
click_to_unlock: "Feu clic a l'enllaç següent per desblocar el vostre compte:"
subject: "Instruccions per al desblocatge"
unlock: "Desbloca el meu compte"
welcome: "Benvingut/da, %{email}!"
passwords:
send_instructions: "En uns minuts rebreu un correu electrònic amb instruccions per a reestablir la vostra contrasenya."
updated: "S'ha canviat la vostra contrasenya amb èxit. Ara esteu autenticat."
edit:
change_password: "Canvia la contrasenya"
new:
forgot_password: "Heu oblidat la vostra contrasenya?"
no_account: "No existeix cap compte amb aquest correu electrònic. Si espereu una invitació, aquestes s'enviaran el més aviat possible."
send_password_instructions: "Envia'm instruccions per a reestablir la contrasenya"
confirmations:
send_instructions: "En uns minuts rebreu un correu electrònic amb instruccions per a confirmar la vostra contrasenya."
confirmed: "S'ha confirmat el vostre compte amb èxit. Ara esteu autenticat."
new:
resend_confirmation: "Torna a enviar les instruccions per a la confirmació"
send_instructions: "En uns minuts rebreu un correu electrònic amb instruccions per a reestablir la vostra contrasenya."
updated: "S'ha canviat la vostra contrasenya amb èxit. Ara esteu autenticat."
registrations:
destroyed: "Adéu! S'ha canceŀlat el vostre compte amb èxit. Esperem tornar a veure-vos molt aviat."
signed_up: "Us heu registrat amb èxit. Si està habilitat, s'haurà enviat un correu electrònic de confirmació a la vostra adreça."
updated: "Heu actualitzat el compte amb èxit."
destroyed: "Adéu! S'ha canceŀlat el vostre compte amb èxit. Esperem tornar a veure-vos molt aviat."
unlocks:
send_instructions: "En uns minuts rebreu un correu electrònic amb instruccions per a desblocar el vostre compte."
unlocked: "El vostre compte s'ha desblocat amb èxit. Ara esteu autenticat."
sessions:
new:
resend_unlock: "Torna a enviar les instruccions per al deblocatge"
invitations:
send_instructions: "S'ha enviat la vostra invitació."
invitation_token_invalid: "Disculpeu! Aquest testimoni de invitació no és vàlid."
updated: "S'ha establert la vostra contrasenya amb èxit. Ara esteu autenticat."
mailer:
welcome: "Benvingut/da, %{email}!"
hello: "Hola, %{email}!"
confirmation_instructions:
subject: "Instruccions per a la confirmació"
you_can_confirm: "Podeu confirmar el vostre compte mitjançant l'enllaç següent:"
confirm: "Confirma el meu compte"
reset_password_instructions:
subject: "Instruccions per al restabliment de la contrasenya"
someone_requested: "Algú ha demanat un enllaç per a canviar la vostra contrasenya, i podeu fer-ho mitjançant l'enllaç següent."
change: "Canvia la meua contrasenya"
wont_change: "La vostra contrasenya no es canviarà fins que no accediu l'enllaç anterior i en creeu una de nova."
ignore: "Si no heu demanat això, ignoreu aquest correu electrònic."
unlock_instructions:
subject: "Instruccions per al desblocatge"
account_locked: "S'ha blocat el vostre compte degut a un nombre excessiu d'entrades fallides."
click_to_unlock: "Feu clic a l'enllaç següent per desblocar el vostre compte:"
unlock: "Desbloca el meu compte"
invitation_instructions:
displaying_correctly: "No veieu aquest correu correctament? %{link}"
view_in: "Vegeu-ho al vostre navegador."
finally: "Finalment, és aquí"
arrived: "La xarxa social que estaveu esperant ha arribat. Redissenyada, més segura i més divertida, %{strong_diaspora} és a punt per ajudar-vos a compartir i explorar el web d'una manera totalment nova."
sign_up_now: "Registreu-vos ara &rarr;"
friends_saying: "Què diuen els vostres amics…"
more_people: "Més gent encara està contenta de veure-vos!"
get_connected: "Connecteu-vos"
get_connected_paragraph: "Un moviment internacional amb una visió compartida per un web millor, la principal característica de %{strong_diaspora} és la seva comunitat. Trobeu gent nova, connecteu amb els amics i passeu-ho bé amb nosaltres."
be_yourself: "Sigues tu mateix"
be_yourself_paragraph: "Internet ha creat formes noves i singulars perquè ens expressem. ${strong_diaspora} us permet ser vosaltres mateixos i compartir com preferiu, amb o sense el vostre nom real."
cubbies: "Cubbi.es"
have_fun: "Passeu-ho bé"
have_fun_paragraph: "%{strong_diaspora} vol dir descobrir continguts i gent increïble a la xarxa. %{link}, la primera aplicació de %{strong_diaspora} és només el principi. Rebeu i compartiu el web amb tot el seu potencial."
made_by_people: "%{strong_diaspora} es composa de gent que estima Internet tant com vosaltres. %{jointeam} o %{helpfund}!"
join_team: "Uniu-vos a l'equip"
or: "o"
help_fund: "ajudeu amb el finançament del Diàspora*"
unsubscribe: "Per desubscrivir-vos, feu click %{link}."
here: "aquí"
love: "Adéu,"
team_diaspora: "L'equip del Diàspora"
email_us: "Per preguntes generals o suport amb el vostre compte del diàspora, escriviu-nos a %{email}."
email_address: "questions@joindiaspora.com"
subject: "Us han convidat a unir-vos a Diàspora!"
accept: "Accepta la invitació"
ignore: "Si no voleu acceptar la invitació, ignoreu aquest correu electrònic."
no_account_till: "No es crearà el vostre compte fins que no accediu l'enllaç anterior i us registreu."
inviter:
has_invited_you: "%{name}"
have_invited_you: "%{names} us han convidat a unir-vos a Diàspora"
accept_at: "a %{url}, podeu acceptar-ho mitjançant l'enllaç següent."
login: "Entra"
modern_browsers: "només suporta navegadors moderns."
password: "Contrasenya"
remember_me: "Recorda'm"
sign_in: "Entra"
username: "Nom d'usuari"
signed_in: "Heu entrat correctament."
signed_out: "Heu sortit correctament."
shared:
mail_signup_form:
sign_up_for_an_invite: "Registreu-vos per a rebre una invitació!"
links:
sign_in: "Entreu"
sign_up: "Registreu-vos"
sign_up_closed: "El registre lliure està tancat ara mateix."
forgot_your_password: "Heu oblidat la vostra contrasenya?"
receive_confirmation: "No heu rebut les instruccions per a la confirmació?"
receive_unlock: "No heu rebut les instruccions per al desblocatge?"
sign_in: "Entreu"
sign_up: "Registreu-vos"
sign_up_closed: "El registre lliure està tancat ara mateix."
unlocks:
new:
resend_unlock: "Torna a enviar les instruccions per al deblocatge"
send_instructions: "En uns minuts rebreu un correu electrònic amb instruccions per a desblocar el vostre compte."
unlocked: "El vostre compte s'ha desblocat amb èxit. Ara esteu autenticat."
errors:
messages:
already_confirmed: "ja estava confirmat"
not_found: "no s'ha trobat"
not_locked: "no estava blocat"

View File

@@ -1,92 +1,114 @@
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# Copyright (c) 2010-2013, Diaspora Inc. This file is
# 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"
gl:
devise:
failure:
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.'
not_found_in_database: 'O enderezo ou contrasinal son incorrectos.'
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: 'Acceder'
username: 'Nome de usuario'
password: 'Contrasinal'
sign_in: 'Acceder'
remember_me: "Lembrar os datos."
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_password: "Novo contrasinal"
confirm_password: "Confirmar o contrasinal"
new:
forgot_password: "Esqueceu o contrasinal?"
no_account: 'O enderezo non se corresponde con ningunha conta.'
reset_password: "Restablecer o contrasinal"
email: "Enderezo de correo"
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.'
confirmed: "Confirmouse a túa conta, e xa estás identificado con ela."
new:
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 eliminouse 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ás un correo electrónico con instrucións para confirmar a túa conta."
send_paranoid_instructions: "Se o enderezo de email existe na nosa base de datos, nuns minutos recibirás un correo con instruccións de cómo confirmar o enderezo de correo."
failure:
already_authenticated: "Xa estás conectada."
inactive: "Aínda non se activou a túa conta."
invalid: "Contrasinal ou %{authentication_keys} non válidos."
invalid_token: "O código de autenticación é incorrecto."
last_attempt: "Quédache un só intento antes de que se bloquee o acceso."
locked: "A súa conta está bloqueada."
not_found_in_database: "%{authentication_keys} ou contrasinal non válidos"
timeout: "A sesión rematou, introduce as credenciais para continuar."
unauthenticated: "Ten que acceder ou rexistrarse para continuar."
unconfirmed: "Tes que confirmar a túa conta para continuar."
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.'
invitation_token_invalid: "O código da invitación non é correcto."
send_instructions: "Envióuselle unha invitación."
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 solicitou unha ligazón para cambiar de contrasinal. Se foi vostede, 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"
subject: "Instrucións de confirmación"
you_can_confirm: "Pode confirmar a súa conta mediante a seguinte ligazón:"
hello: "Ola, %{email}!"
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."
has_invited_you: "%{name}"
have_invited_you: "%{names} convidoute a unirte a diaspora*"
password_change:
subject: "Contrasinal cambiado"
reset_password_instructions:
change: "Cambiar de contrasinal"
ignore: "Se non foi vostede quen solicitou o cambio, pode ignorar esta mensaxe."
someone_requested: "Alguén solicitou cambiar o teu contrasinal. Se foches ti, preme na seguinte ligazón:"
subject: "Instrucións para cambiar o contrasinal"
wont_change: "Para cambiar de contrasinal, prema a seguinte ligazón e escolla un novo."
unlock_instructions:
account_locked: "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:"
subject: "Instrucións para desbloquear a conta"
unlock: "Desbloquear a conta"
welcome: "Benvido, %{email}!"
omniauth_callbacks:
failure: "Non se puido autenticar desde %{kind} debido a \"%{reason}\"."
success: "Autenticada correctamente desde a conta %{kind}"
passwords:
edit:
change_password: "Cambiar o contrasinal"
confirm_password: "Confirmar contrasinal"
new_password: "Novo contrasinal"
new:
email: "Enderezo de correo-e"
forgot_password: "Esqueceu o contrasinal?"
reset_password: "Restablecer contrasinal"
send_password_instructions: "Recibir instrucións para cambiar de contrasinal"
no_token: "Non podes acceder a esta páxina sen proceder desde un correo de restablecemento de contrasinal. Se procedes de un correo de restablecemento de contrasinal, por favor asegúrate de que utilizas o URL completo que che proporcionaron."
send_instructions: "Nuns minutos recibirás un correo electrónico con instrucións para cambiar o contrasinal."
send_paranoid_instructions: "Se o enderezo de correo existe na nosa base de datos, recibirás en poucos minutos unha ligazón de restablecemento de contrasinal nun correo electrónico."
updated: "O teu contrasinal cambiouse correctamente, e xa estás identificado co novo."
updated_not_active: "Cambiaches correctamente o contrasinal."
registrations:
destroyed: "Ata outra! A conta eliminouse correctamente. Agardamos verte de novo por aquí."
signed_up: "Rexistrouse correctamente. Se así o solicitou, enviaráselle un correo electrónico de confirmación."
signed_up_but_inactive: "Rexistro correcto. Porén, non puidemos conectarte porque a conta aínda non foi activada."
signed_up_but_locked: "Rexistro correcto. Porén, non puidemos conectarte porque a conta está bloqueada."
signed_up_but_unconfirmed: "Enviamosche unha mensaxe de correo-e cunha ligazón de confirmación. Por favor sigue a ligazón para activar a conta."
update_needs_confirmation: "Actualizaches correctamente a conta, mais precisamos validar o novo enderezo de correo. Por favor comproba o correo e sigue a ligazón enviada para confirmar o novo enderezo de correo."
updated: "A túa conta actualizouse correctamente."
sessions:
already_signed_out: "Desconexión correcta."
new:
login: "Iniciar sesión"
modern_browsers: "só é compatíbel con navegadores web modernos."
password: "Contrasinal"
remember_me: "Lembrar os datos."
sign_in: "Acceder"
username: "Nome de usuario"
signed_in: "Accedeu correctamente."
signed_out: "Saíu correctamente."
shared:
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?'
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: "Acceder"
sign_up: "Crear conta"
sign_up_closed: "Nestes momentos non poden rexistrarse contas."
unlocks:
new:
resend_unlock: "Volver enviar as instrucións de desbloqueo"
send_instructions: "Nuns minutos recibirás un correo electrónico con instrucións para desbloquear a túa conta."
send_paranoid_instructions: "Se a conta existe, nuns minutos recibirás un correo-e con instruccións para desbloqueala."
unlocked: "Desbloqueouse a conta, por favor conéctate para continuar."
errors:
messages:
already_confirmed: "xa foi confirmado, intenta conectarte"
confirmation_period_expired: "necesita ser confirmado en %{period}, por favor solicita un novo"
expired: "caducou, por favor solicita un novo"
not_found: "non se atopou"
not_locked: "non foi bloqueado"
not_saved:
one: "%{count} fallo non permite que se garde %{resource}:"
other: "%{count} fallos non permiten que se garde %{resource}:"

View File

@@ -1,109 +1,114 @@
# Copyright (c) 2010-2013, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
sq:
devise:
confirmations:
confirmed: Adresa juaj email u ripohua me sukses.
send_instructions: Brenda pak minutash do tju vijë një email me udhëzime se si të ripohoni adresën tuaj email.
send_paranoid_instructions: Nëse adresa juaj email ekziston në bazën tonë të të dhënave, brenda pak minutash do të merrni një email me udhëzime se si të ripohoni adresën tuaj email.
confirmed: "Adresa juaj email i ripohua me sukses."
new:
resend_confirmation: Ridërgo udhëzime ripohimi
resend_confirmation: "Ridërgo udhëzime ripohimi"
send_instructions: "Brenda pak minutash do tju vijë një email me udhëzime se si të ripohoni adresën tuaj email."
send_paranoid_instructions: "Nëse adresa juaj email gjendet në bazën tonë të të dhënave, brenda pak minutash do të merrni një email me udhëzime se si të ripohoni adresën tuaj email."
failure:
already_authenticated: Jeni i futur tashmë.
inactive: Llogaria juaj ende sështë aktive.
already_authenticated: "Jeni i futur tashmë."
inactive: "Llogaria juaj sështë aktivizuar ende.\""
invalid: "%{authentication_keys} ose fjalëkalim i pavlefshëm."
locked: Llogaria juaj është e kyçur.
last_attempt: Keni edhe një provë, përpara se llogaria juaj të kyçet.
invalid_token: "Token mirëfilltësimi i pavlefshëm."
last_attempt: "Keni edhe një përpjekje, përpara se llogaria juaj të kyçet."
locked: "Llogaria juaj është e kyçur."
not_found_in_database: "%{authentication_keys} ose fjalëkalim i pavlefshëm."
timeout: Sesioni juaj skadoi. Ju lutemi, ribëni hyrjen, që të vazhdoni.
unauthenticated: Duhet të bëni hyrjen ose të regjistroheni, përpara se të vazhdohet.
unconfirmed: Duhet të ripohoni adresën tuaj email, përpara se të vazhdohet.
invalid_token: Token i pavlefshëm mirëfilltësimi.
timeout: "Sesionit tuaj i mbaroi koha, ju lutemi, hyni sërish që të vazhdoni."
unauthenticated: "Përpara se të vazhdohet më tej, lypset të bëni hyrjen ose të regjistroheni."
unconfirmed: "Duhet të ripohoni llogarinë tuaj, përpara se të vazhdohet."
invitations:
invitation_token_invalid: "Ndjesën tonë! Ky mekanizëm ose këto të dhëna ftese sjanë të vlefshme."
send_instructions: "Ftesa juaj u dërgua."
updated: "Fjalëkalimi juaj u caktua me sukses. Tani jeni i futur."
mailer:
confirmation_instructions:
subject: Udhëzime ripohimi
confirm: "Ripohim i llogarisë time"
subject: "Udhëzime ripohimi"
you_can_confirm: "Llogarinë tuaj mund të ripohoni përmes lidhjes më poshtë:"
confirm: Ripohoje llogarinë time
reset_password_instructions:
subject: Udhëzime ricaktimi fjalëkalimi
someone_requested: Dikush kërkoi një lidhje për ndryshimin e fjalëkalimit tuaj. Nëse qetë ju, këtë mund ta bëni përmes lidhjes më poshtë.
change: Ndryshoje fjalëkalimin tim
wont_change: Fjalëkalimi juaj sdo të ndryshohet pa u përdorur lidhja më sipër për të krijuar një të ri.
ignore: Nëse këtë se kërkuat ju, ju lutemi, shpërfilleni këtë email.
unlock_instructions:
subject: Udhëzime shkyçjeje
account_locked: Llogaria juaj është kyçur për shkak të një sasie të tepruar përpjekjesh të pasuksesshme për të hyrë në të.
click_to_unlock: "Që të shkyçet llogaria juaj, klikoni lidhjen më poshtë:"
unlock: Shkyçe llogarinë time
password_change:
subject: Fjalëkalimi Ndryshoi
welcome: Mirë se vini te %{email}!
hello: Tungjatjeta %{email}!
hello: "Tungjatjeta %{email}!"
inviter:
accept_at: "te %{url}, mund ta pranoni përmes lidhjes më poshtë."
has_invited_you: "%{name}"
have_invited_you: "%{names} ju ka ftuar të merrni pjesë në diaspora*"
accept_at: te %{url}, mund ta pranoni përmes lidhjes më poshtë.
password_change:
subject: "Fjalëkalimi u Ndryshua"
reset_password_instructions:
change: "Ndryshoje fjalëkalimin tim"
ignore: "Nëse këtë se kërkuat ju, ju lutemi, shpërfilleni këtë email."
someone_requested: "Dikush kërkoi një lidhje për ndryshimin e fjalëkalimit tuaj. Nëse qetë ju, këtë mund ta bëni përmes lidhjes më poshtë."
subject: "Udhëzime ricaktimi fjalëkalimi"
wont_change: "Fjalëkalimi juaj sdo të ndryshojë pa përdorur lidhjen më sipër dhe pa krijuar një të ri."
unlock_instructions:
account_locked: "Llogaria juaj është kyçur për shkak të një sasie të tepruar përpjekjesh të pasuksesshme për të hyrë në të."
click_to_unlock: "Që të shkyçni llogarinë tuaj, klikoni lidhjen më poshtë:"
subject: "Udhëzime shkyçjeje"
unlock: "Shkyçe llogarinë time"
welcome: "Mirë se vini %{email}!"
omniauth_callbacks:
failure: Su bë dot mirëfilltësimi juaj nga %{kind}, ngaqë %{reason}.
success: U bë me sukses mirëfilltësimi juaj nga llogaria %{kind}.
failure: "Su bë dot mirëfilltësimi juaj me %{kind}, ngaqë \"%{reason}\"."
success: "Mirëfilltësimi u bë me sukses me llogari %{kind}."
passwords:
no_token: Smund të hyni në këtë faqe pa ardhur nga një email ricaktimi fjalëkalimi. Nëse vini prej një email-i ricaktimi fjalëkalimi, ju lutemi, sigurohuni që përdorët ULR-në e plotë të dhënë atje.
send_instructions: Brenda pak minutash do tju vijë një email me udhëzime se si të ricaktoni fjalëkalimin tuaj.
send_paranoid_instructions: Nëse adresa juaj email ekziston në bazën tonë të të dhënave, brenda pak minutash do të merrni një email rikthimi fjalëkalimesh.
updated: Fjalëkalimi juaj u ndryshua me sukses. Tani jeni i futur.
updated_not_active: Fjalëkalimi juaj u ndryshua me sukses.
edit:
change_password: Ndryshoje fjalëkalimin tim
new_password: Fjalëkalim i ri
confirm_password: Ripohoni fjalëkalimin
change_password: "Ndryshoje fjalëkalimin tim"
confirm_password: "Ripohoni fjalëkalimin"
new_password: "Fjalëkalim i ri"
new:
forgot_password: Harruat fjalëkalimin?
no_account: Ska llogari me këtë email
reset_password: Ricaktoni fjalëkalimin
email: Adresë email
send_password_instructions: Dërgomëni udhëzime ricaktimi fjalëkalimi
email: "Adresë email"
forgot_password: "Harruat fjalëkalimin tuaj?"
reset_password: "Ricaktoni fjalëkalimin"
send_password_instructions: "Dërgomëni udhëzime ricaktimi fjalëkalimi"
no_token: "Smund të hyni në këtë faqe pa ardhur nga një email ricaktimi fjalëkalimi. Nëse vini prej një email-i ricaktimi fjalëkalimi, ju lutemi, sigurohuni se përdorët URL-në e plotë të dhënë në të."
send_instructions: "Brenda pak minutash do tju vijë një email me udhëzime se si të ricaktoni fjalëkalimin tuaj."
send_paranoid_instructions: "Nëse adresa juaj email gjendet në bazën tonë të të dhënave, brenda pak minutash, në adresën tuaj email, do të merrni një lidhje rimarrjeje fjalëkalimi."
updated: "Fjalëkalimi juaj u ndryshua me sukses. Tani jeni i futur."
updated_not_active: "Fjalëkalimi juaj u ndryshua me sukses."
registrations:
destroyed: Shëndet! Llogaria juaj u fshi me sukses. Shpresojmë tju shohim prapë së shpejti.
signed_up: U regjistruat me sukses. Në qoftë e aktivizuar mundësia përkatëse, ju është dërguar një mesazh ripohimi te email-i juaj.
signed_up_but_inactive: Jeni regjistruar me sukses. Megjithatë, se bëmë dot hyrjen tuaj, ngaqë llogaria juaj sështë ende aktive.
signed_up_but_locked: Jeni regjistruar me sukses. Megjithatë, se bëmë dot hyrjen tuaj, ngaqë llogaria juaj është e kyçur.
signed_up_but_unconfirmed: Te adresa juaj email është dërguar një mesazh me një lidhje ripohimi. Ju lutemi, që të aktivizoni llogarinë tuaj, ndiqni lidhjen.
update_needs_confirmation: E përditësuat me sukses llogarinë tuaj, por na duhet të verifikojmë adresën tuaj të re email. Ju lutemi, që të ripohoni adresën tuaj të re email kontrolloni email-in tuaj.
updated: Llogaria juaj u përditësua me sukses.
destroyed: "Shëndet! Llogaria juaj u fshi me sukses. Shpresojmë tju shohim prapë së shpejti."
signed_up: "U regjistruat me sukses. Po qe se mundësia përkatëse është e aktivizuar, ju është dërguar një mesazh ripohimi te email-i juaj."
signed_up_but_inactive: "Jeni regjistruar me sukses. Megjithatë, sbëmë dot futjen tuaj, ngaqë llogaria juaj sështë aktivizuar ende."
signed_up_but_locked: "Jeni regjistruar me sukses. Megjithatë, sbëmë dot futjen tuaj, ngaqë llogaria juaj është e kyçur."
signed_up_but_unconfirmed: "Te adresa juaj email është dërguar një lidhje ripohimi. Që të aktivizoni llogarinë tuaj, ju lutemi, ndiqni lidhjen."
update_needs_confirmation: "E përditësuat me sukses llogarinë tuaj, por na duhet të verifikojmë adresën tuaj të re email. Që të ripohoni adresën tuaj të re email, ju lutemi, shihni email-in tuaj dhe ndiqni lidhjen e ripohimit."
updated: "Llogaria juaj u përditësua me sukses."
sessions:
signed_in: Hytë me sukses.
signed_out: Dolët me sukses.
already_signed_out: Dolët me sukses.
already_signed_out: "Dolët me sukses."
new:
login: Hyni
username: Emër përdoruesi
password: Fjalëkalim
sign_in: Hyni
remember_me: Mbamë mend
modern_browsers: mbulohen vetëm shfletues modernë.
unlocks:
send_instructions: Brenda pak minutash do tju vijë një email me udhëzime se si të shkyçni llogarinë tuaj.
send_paranoid_instructions: Nëse llogaria juaj ekziston, brenda pak minutash do tju vijë një email me udhëzime se si ta shkyçni.
unlocked: Llogaria juaj u shkyç me sukses. Ju lutemi, që të vazhdohet, bëni hyrjen.
new:
resend_unlock: Ridërgo udhëzime shkyçjeje
invitations:
send_instructions: Ftesa juaj u dërgua.
invitation_token_invalid: Ndjesën tonë! Ky mekanizëm ftese sështë i vlefshëm.
updated: Fjalëkalimi juaj u caktua me sukses. Tani jeni i futur.
login: "Hyni"
modern_browsers: "mbulon vetëm shfletuesit modernë."
password: "Fjalëkalim"
remember_me: "Mbamë mend"
sign_in: "Hyni"
username: "Emër përdoruesi"
signed_in: "Hytë me sukses."
signed_out: "Dolët me sukses."
shared:
links:
sign_in: Hyni
sign_up: Krijoni llogari
sign_up_closed: Regjistrimet e lira janë të mbyllura hëpërhë.
forgot_your_password: Harruat fjalëkalimin tuaj?
receive_confirmation: Si morët udhëzimet për ripohimin?
receive_unlock: Si morët udhëzimet për shkyçjen?
forgot_your_password: "Harruat fjalëkalimin tuaj?"
receive_confirmation: "Si morët udhëzimet për ripohimin?"
receive_unlock: "Si morët udhëzimet për shkyçjen?"
sign_in: "Hyni"
sign_up: "Krijoni llogari"
sign_up_closed: "Hëpërhë regjistrimet e hapura janë mbyllur."
unlocks:
new:
resend_unlock: "Ridërgoji udhëzimet për shkyçje"
send_instructions: "Brenda pak minutash do tju vijë një email me udhëzime se si të shkyçni llogarinë tuaj."
send_paranoid_instructions: "Nëse llogaria juaj ekziston, brenda pak minutash do të merrni një email me udhëzime se si të shkyçet ajo."
unlocked: "Llogaria juaj u shkyç me sukses. Që të vazhdohet, ju lutemi, bëni hyrjen."
errors:
messages:
already_confirmed: është ripohuar tashmë, ju lutemi, provoni të bëni hyrjen
confirmation_period_expired: lypset të ripohohet brenda %{period}, ju lutemi, kërkoni një të ri
expired: ka skaduar, ju lutemi, kërkoni një të ri
not_found: su gjet
not_locked: sqe kyçur
already_confirmed: "qe e ripohuar tashmë, ju lutemi, provoni të bëni hyrjen"
confirmation_period_expired: "duhet ripohuar brenda %{period}, ju lutemi, kërkoni një të re"
expired: "ka skaduar, ju lutemi, kërkoni një të re"
not_found: "su gjet"
not_locked: "sqe kyçur"
not_saved:
one: "1 gabim ia pengoi ruajtjen këtij %{resource}:"
other: "%{count} gabime ia penguan ruajtjen këtij %{resource}:"
one: "Ruajtja e këtij %{resource} u pengua nga një gabim:"
other: "Ruajtja e këtij %{resource} u pengua nga %{count} gabime:"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,148 +1,120 @@
# Copyright © 2011, 2012, 2013 Diaspora Inc. This file is
# Copyright (c) 2010-2013, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
#
# Jordi Mallach <jordi@softcatala.org>, 2011, 2012, 2013.
# Abans d'actualitzar aquesta traducció, si us plau poseu-vos en contacte
# amb Jordi Mallach o Softcatalà <info@softcatala.org>.
ca:
javascripts:
confirm_dialog: "N'esteu segur?"
delete: "Suprimeix"
ignore: "Omet"
ignore_user: "Voleu ignorar aquest usuari?"
timeago:
prefixAgo: "fa"
prefixFromNow: "fa"
suffixAgo: ""
suffixFromNow: ""
seconds: "menys d'un minut"
minute: "aproximadament un minut"
minutes: "%d minuts"
hour: "aproximadament una hora"
hours: "aproximadament %d hours"
day: "un dia"
days: "%d dies"
month: "aproximadament un mes"
months: "%d mesos"
year: "aproximadament un any"
years: "%d anys"
my_activity: "La meva activitat"
my_stream: "Flux"
videos:
watch: "Visualitza aquest video a <%= provider %>"
unknown: "El tipus de vídeo és desconegut"
search_for: "Cerca per <%= name %>"
publisher:
at_least_one_aspect: "Heu de publicar en almenys un aspecte."
limited: "Limitat - la vostra publicació només serà visible per a la gent amb qui esteu compartint"
public: "Públic - la vostra publicació serà visible per a tothom i serà trobada pels cercadors"
infinite_scroll:
no_more: "No hi ha més publicacions."
aspect_dropdown:
add_to_aspect: "Afegeix el contacte"
select_aspects: "Selecciona els aspectes"
all_aspects: "Tots els aspectes"
stopped_sharing_with: "Heu deixat de compartir amb <%= name %>."
started_sharing_with: "Heu començat a compartir amb <%= name %>!"
error: "No s'ha pogut començar a compartir amb <%= name %>. L'esteu ignorant?"
select_aspects: "Selecciona els aspectes"
started_sharing_with: "Heu començat a compartir amb <%= name %>!"
stopped_sharing_with: "Heu deixat de compartir amb <%= name %>."
toggle:
zero: "Selecciona els aspectes"
one: "En <%= count %> aspecte"
other: "En <%= count %> aspectes"
show_more: "mostra'n més"
failed_to_like: "No s'ha pogut comunicar que us agrada!"
failed_to_post_message: "No s'ha pogut publicar el missatge!"
comments:
show: "mostra tots els comentaris"
hide: "amaga els comentaris"
reshares:
duplicate: "És bona, oi? Ja heu tornat a compartir aquesta publicació!"
successful: "S'ha tornat a compartir la publicació amb èxit!"
post: "Voleu tornar a compartir la publicació de <%= name %>?"
zero: "Selecciona els aspectes"
aspect_navigation:
select_all: "Selecciona'ls tots"
deselect_all: "Desselecciona'ls tots"
no_aspects: "No heu seleccionat cap aspecte"
select_all: "Selecciona'ls tots"
comments:
hide: "amaga els comentaris"
show: "mostra tots els comentaris"
confirm_dialog: "N'esteu segur?"
delete: "Suprimeix"
failed_to_post_message: "No s'ha pogut publicar el missatge!"
getting_started:
alright_ill_wait: "D'acord, m'esperaré."
hey: "Ei, <%= name %>!"
no_tags: "Ei, no heu seguit cap etiqueta! Voleu continuar igualment?"
alright_ill_wait: "D'acord, m'esperaré."
preparing_your_stream: "S'està preparant el vostre flux personalitzat…"
photo_uploader:
looking_good: "Vaja, teniu un aspecte fantàstic!"
completed: "<%= file %> completat"
tags:
wasnt_that_interesting: "D'acord, es possible que #<%= tagName %> no fos tan interessant…"
header:
admin: "Administració"
close: "tanca"
contacts: "Contactes"
home: "Inici"
log_out: "Surt"
mark_all_as_read: "Marca'ls tots com llegits"
notifications: "Notificacions"
profile: "Perfil"
recent_notifications: "Notificacions recents"
search: "Cerca"
settings: "Paràmetres"
switch_to_touch_optimized_mode: "Canvia al mode tàctil optimitzat"
view_all: "Visualitza'ls tots"
ignore: "Omet"
ignore_user: "Voleu ignorar aquest usuari?"
my_activity: "La meva activitat"
my_stream: "Flux"
people:
not_found: "i no s'ha trobat ningú…"
photo_uploader:
completed: "<%= file %> completat"
looking_good: "Vaja, teniu un aspecte fantàstic!"
reshares:
post: "Voleu tornar a compartir la publicació de <%= name %>?"
successful: "S'ha tornat a compartir la publicació amb èxit!"
show_more: "mostra'n més"
stream:
hide: "Amaga"
public: "Públic"
limited: "Limitat"
like: "M'agrada"
unlike: "Ja no m'agrada"
reshare: "Torna a compartir"
comment: "Comenta"
original_post_deleted: "Publicació original suprimida per l'autor."
show_nsfw_post: "Mostra la publicació"
show_nsfw_posts: "Mostra-les totes"
hide_nsfw_posts: "Amaga les publicacions #nsfw"
follow: "Segueix"
unfollow: "Deixa de seguir"
likes:
zero: "a cap persona li agrada"
one: "li agrada a <%= count %> persona"
other: "li agrada a <%= count %> persones"
reshares:
zero: "Torna a compartir"
one: "<%= count %> vegada tornat a compartir"
other: "<%= count %> vegades tornat a compatir"
more_comments:
zero: "Mostra <%= count %> comentaris més"
one: "Mostra <%= count %> comentari més"
other: "Mostra <%= count %> comentaris més"
followed_tag:
title: "#Etiquetes que seguiu"
contacts_title: "Gent que empra aquestes etiquetes"
add_a_tag: "Afegeix una etiqueta"
follow: "Segueix"
title: "#Etiquetes que seguiu"
hide: "Amaga"
hide_nsfw_posts: "Amaga les publicacions #nsfw"
like: "M'agrada"
likes:
one: "li agrada a <%= count %> persona"
other: "li agrada a <%= count %> persones"
zero: "a cap persona li agrada"
limited: "Limitat"
more_comments:
one: "Mostra <%= count %> comentari més"
other: "Mostra <%= count %> comentaris més"
zero: "Mostra <%= count %> comentaris més"
original_post_deleted: "Publicació original suprimida per l'autor."
public: "Públic"
reshare: "Torna a compartir"
reshares:
one: "<%= count %> vegada tornat a compartir"
other: "<%= count %> vegades tornat a compatir"
zero: "Torna a compartir"
show_nsfw_post: "Mostra la publicació"
show_nsfw_posts: "Mostra-les totes"
tags:
follow: "Segueix #<%= tag %>"
following: "S'està seguint #<%= tag %>"
stop_following: "Deixa de seguir #<%= tag %>"
header:
home: "Inici"
profile: "Perfil"
contacts: "Contactes"
settings: "Paràmetres"
admin: "Administració"
log_out: "Surt"
notifications: "Notificacions"
messages: "Missatges"
search: "Cerca"
recent_notifications: "Notificacions recents"
mark_all_as_read: "Marca'ls tots com llegits"
view_all: "Visualitza'ls tots"
close: "tanca"
viewer:
stop_following_post: "Deixa de seguir la publicació"
follow_post: "Segueix la publicació"
like: "M'agrada"
unfollow: "Deixa de seguir"
unlike: "Ja no m'agrada"
reshare: "Torna a compartir"
reshared: "Tornat a compartir"
comment: "Comenta"
home: "INICI"
tags:
wasnt_that_interesting: "D'acord, es possible que #<%= tagName %> no fos tan interessant…"
timeago:
day: "un dia"
days:
other: "%d dies"
hour: "aproximadament una hora"
hours:
other: "aproximadament %d hours"
minute: "aproximadament un minut"
minutes:
other: "%d minuts"
month: "aproximadament un mes"
months:
other: "%d mesos"
prefixAgo: "fa"
prefixFromNow: "fa"
seconds: "menys d'un minut"
suffixAgo: ""
suffixFromNow: ""
year: "aproximadament un any"
years:
other: "%d anys"
viewer:
reshared: "Tornat a compartir"

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# Copyright (c) 2010-2013, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
@@ -6,222 +6,328 @@
gl:
javascripts:
confirm_dialog: "Está seguro?"
confirm_unload: "Confirme que quere abandonar esta páxina. Non se gardarán os datos que introduciu."
report:
prompt: "Explique o motivo:"
prompt_default: "Contido ofensivo"
name: "Denunciar"
status:
created: "Interpúxose a denuncia."
exists: "A denuncia xa fora interposta."
report_prompt: "Explique o motivo:"
report_prompt_default: "Contido ofensivo"
delete: "Eliminar"
ignore: "Ignorar"
report: "Denunciar"
ignore_user: "Ignorar este usuario?"
ignore_failed: "Non é posíbel ignorar a este usuario"
unblock_failed: "Non foi posíbel retirarlle o bloqueo a este usuario"
admin:
pods:
actions: "Accións"
added: "Engadido"
check: "realizar test de conexión"
errors:
one: "O test de conexión devolveu un fallo de unha instancia."
other: "O test de conexión devolveu fallo en <%= count %> instancias."
follow_link: "abrir ligazón en navegador"
last_check: "última comprobación:"
more_info: "mostrar máis información"
ms:
one: "<%= count %>ms"
other: "<%= count %>ms"
no_info: "Non hai máis información dispoñible por agora"
not_available: "non dispoñible"
offline_since: "fora de liña desde:"
pod: "Instancia"
recheck:
failure: "Non se fixo a comprobación."
success: "A instancia foi comprobada de novo."
response_time: "Tempo de resposta:"
server_software: "Software do servidor:"
ssl: "SSL"
ssl_disabled: "SSL desactivado"
ssl_enabled: "SSL activado"
states:
dns_failed: "Fallo de resolución de nome (DNS)"
http_failed: "Fallo de conexión HTTP"
net_failed: "Fallo ao intentar conectar"
no_errors: "OK"
ssl_failed: "Fallo na conexión segura (SSL)"
unchecked: "Non marcado"
unknown_error: "Un fallo non específico aconteceu durante a comprobación"
version_failed: "Non se obtivo a versión do software"
status: "Estado"
unchecked:
one: "Queda unha instancia sen comprobar."
other: "Quedan <%= count %> instancias que aínda non se comprobaron."
unknown: "descoñecido"
version_failed:
one: "Hai unha instancia que non proporciona versión (instancia antiga, sen NodeInfo)."
other: "Hai <%= count %> instancias que non proporcionan versión (instancias antigas, sen NodeInfo)."
admins:
dashboard:
compare_versions: "A última versión de diaspora* é a <%= latestVersion %>, a túa instancia funciona coa <%= podVersion %>."
error: "Non se puido determinar a última versión de diaspora*."
outdated: "A túa instancia precisa ser actualizada!"
up_to_date: "A instancia está actualizada!"
and: "e"
comma: ","
edit: "Editar"
no_results: "Non se atoparon resultados"
timeago:
prefixAgo: "Hai"
prefixFromNow: "Dentro de"
suffixAgo: ""
suffixFromNow: ""
seconds: "menos dun minuto."
minute: "un minuto."
minutes: "%d minutos."
hours: "%d horas."
hour: "unha hora."
day: "un día."
days: "%d días."
month: "un mes."
months: "%d meses."
year: "un ano."
years: "%d anos."
wordSeparator: " "
contacts:
add_contact: "Engadir un contacto"
aspect_list_is_visible: "Os contactos deste aspecto poden verse os uns aos outros."
aspect_list_is_not_visible: "Os contactos deste aspecto non poden verse os uns aos outros."
remove_contact: "Retirar o contacto"
error_add: "Non foi posíbel engadir a <%= name %> ao aspecto :("
error_remove: "Non foi posíbel retirar a <%= name %> do aspecto :("
my_activity: "Actividade"
my_stream: "Onda"
my_aspects: "Aspectos"
videos:
watch: "Ver o vídeo en <%= provider %>"
unknown: "Tipo de vídeo descoñecido"
search_for: "Buscar «<%= name %>»"
publisher:
at_least_one_aspect: "Ten que publicalo polo menos nun aspecto."
limited: "Limitado. Só poderá velo a xente coa que comparte."
public: "Público. Poderá velo calquera, e aparecerá nos motores de busca."
near_from: "Publicado desde <%= location %>"
option: "Resposta"
add_option: "Engadir unha resposta"
question: "Cuestión"
bookmarklet:
post_something: "Publicar en diaspora*"
post_submit: "Enviando a publicación…"
post_success: "Publicouse! Pechando a xanela emerxente…"
infinite_scroll:
no_more: "Non hai máis publicacións."
aspect_dropdown:
add_to_aspect: "Engadir como contacto"
select_aspects: "Seleccionar aspectos"
all_aspects: "Todos os aspectos"
stopped_sharing_with: "Deixou de compartir con <%= name %>."
error: "Non se puido comezar a compartir con <%= name %>. Estás ignorando a esa persoa?"
error_remove: "Non se eliminou a <%= name %> do aspecto :("
mobile_row_checked: "<%= name %> (eliminar)"
mobile_row_unchecked: "<%= name %> (engadir)"
select_aspects: "Seleccionar aspectos"
started_sharing_with: "Comezou a compartir con <%= name %>!"
error: "Non foi posíbel empezar a compartir con <%= name %>. Está ignorando a esa persoa?"
error_remove: "Non foi posíbel eliminar a <%= name %> do aspecto."
stopped_sharing_with: "Deixou de compartir con <%= name %>."
toggle:
zero: "Engadir a un aspecto"
one: "Nun aspecto"
two: "En dous aspectos"
few: "En <%= count %> aspectos"
many: "En <%= count %> aspectos"
one: "Nun aspecto"
other: "En <%= count %> aspectos"
show_more: "Mostrar máis"
failed_to_like: "Non foi posíbel indicar que lle gusta a publicación!"
failed_to_post_message: "Non foi posíbel publicar a mensaxe!"
failed_to_remove: "Non foi posíbel eliminar a publicación!"
comments:
show: "Mostrar os comentarios"
hide: "Ocultar os comentarios"
no_comments: "Aínda non hai comentarios."
reshares:
duplicate: "Moi interesante ten que ser iso para que o repitas outra vez!"
successful: "A publicación repetiuse correctamente."
post: "Quere repetir a publicación de <%= name %>?"
two: "En dous aspectos"
zero: "Engadir a un aspecto"
updating: "actualizando..."
aspect_navigation:
select_all: "Escollelos todos"
add_an_aspect: "+ Engadir aspecto"
deselect_all: "Non escoller ningún"
no_aspects: "Non se escolleu ningún"
add_an_aspect: "Engadir un aspecto"
getting_started:
hey: "Ola, <%= name %>!"
no_tags: "Eh, non está a seguir ningunha etiqueta! Quere continuar aínda así?"
alright_ill_wait: "Como queira, esperarei."
preparing_your_stream: "Preparando a súa onda personalizada…"
photo_uploader:
looking_good: "Ghuapo ghuapo non é, pero ten unha pelaxe…"
completed: "<%= file %> enviada."
tags:
wasnt_that_interesting: "Vale, supoño que #<%= tagName %> non era tan interesante…"
people:
not_found: "Non se atopou a ninguén."
mention: "Mención"
message: "Mensaxe"
edit_my_profile: "Editar o perfil persoal"
stop_ignoring: "Deixar de ignorar"
helper:
is_sharing: "<%= name %> está a compartir con vostede"
is_not_sharing: "<%= name %> non está a compartir con vostede"
profile:
edit: "Editar"
add_some: "Engadir algunhas"
you_have_no_tags: "Non ten etiquetas!"
ignoring: "Está a ignorar todas as publicacións de <%= name %>."
bio: "Biografía"
location: "Lugar"
gender: "Sexo"
born: "Data de nacemento"
photos: "Fotos"
contacts: "Contactos"
posts: "Publicacións"
select_all: "Escollelos todos"
aspects:
create:
add_a_new_aspect: "Engadir novo aspecto"
failure: "Fallo ao crear o aspecto."
success: "Creouse o novo aspecto <%= name %>"
name: "Nome"
bookmarklet:
post_something: "Publicar en diaspora*"
post_submit: "Enviando publicación..."
post_success: "Publicada! Pechando a ventá..."
cancel: "Cancelar"
comma: ","
comments:
hide: "Agochar os comentarios"
no_comments: "Aínda non hai comentarios."
show: "Mostrar os comentarios"
confirm_dialog: "Está seguro?"
confirm_unload: "Por favor confirma que queres saír da páxina. Os datos introducidos non serán gardados."
contacts:
add_contact: "Engadir contacto"
aspect_chat_is_enabled: "Os contactos neste aspecto poden conversar contigo."
aspect_chat_is_not_enabled: "Os contactos neste aspecto non poden conversar contigo."
error_add: "Non se puido engadir a <%= name %> ao aspecto :("
error_remove: "Non se puido eliminar a <%= name %> do aspecto :("
remove_contact: "Eliminar contacto"
search_no_results: "Non se atoparon contactos"
conversation:
participants: "Participantes"
create:
no_recipient: "Vaia, primeiro debes engadir un correspondente!"
new:
no_contacts: "Debes engadir algúns contactos antes de poder iniciar a conversa."
create: "Crear"
delete: "Eliminar"
edit: "Editar"
errors:
connection: "Non se puido conectar ao servidor."
failed_to_post_message: "Non se puido publicar a mensaxe!"
failed_to_remove: "Fallo ao eliminar a entrada!"
getting_started:
alright_ill_wait: "Como queiras, agardarei."
hey: "Ola, <%= name %>!"
no_tags: "Eh, non estás a seguir ningunha etiqueta! Aínda así, queres continuar?"
preparing_your_stream: "Preparando a túa cronoloxía personalizada…"
header:
admin: "Administración"
close: "Pechar"
contacts: "Contactos"
conversations: "Conversas"
help: "Axuda"
home: "Inicio"
log_out: "Saír"
mark_all_as_read: "Marcalas todas como lidas"
moderator: "Moderadora"
notifications: "Notificacións"
profile: "Perfil"
recent_notifications: "Últimas notificacións"
search: "Atopar xente ou #etiquetas"
settings: "Configuración"
switch_to_touch_optimized_mode: "Cambiar a modo táctil optimizado"
toggle_navigation: "Activar nagevación"
view_all: "Velas todas"
hide_post: "Agochar esta publicación?"
hide_post_failed: "Non se puido agochar a publicación"
ignore: "Ignorar"
ignore_failed: "Non se puido ignorar a usuaria"
ignore_user: "Ignorar esta usuaria?"
my_activity: "Actividade"
my_aspects: "Aspectos"
my_stream: "Cronoloxía"
no_results: "Sen resultados"
notifications:
mark_read: "Marcar como lido"
mark_unread: "Marcar como non lido"
mark_read: "Marcar lido"
mark_unread: "Marcar non lido"
new_notifications:
one: "Tes <%= count %> notificación non lida"
other: "Tes <%= count %> notificacións non lidas"
people:
edit_my_profile: "Editar o meu perfil"
helper:
is_not_sharing: "<%= name %> non comparte contigo"
is_sharing: "<%= name %> está a compartir contigo"
mention: "Mencionar"
message: "Mensaxe"
not_found: "e non se atopou a ninguén..."
stop_ignoring: "Deixar de ignorar"
photo_uploader:
completed: "<%= file %> completado"
empty: "{file} está baleiro, por favor escolle novamente sen el."
error: "Algo fallou ao subir o ficheiro <%= file %>"
invalid_ext: "{file} ten unha extensión non válida. Só se permiten {extensions}"
looking_good: "Ghuapo ghuapo non é, pero ten unha pelaxe…"
size_error: "{file} é demasiado grande, o tamaño máximo é {sizeLimit}."
upload_photos: "Subir fotografías"
poll:
answer_count:
one: "1 voto"
other: "<%=count%> votos"
zero: "0 votos"
close_result: "Agochar resultado"
count:
one: "1 voto ata o momento"
other: "<%=count%> votos ata o momento"
go_to_original_post: "Podes participar nesta enquisa en <%= original_post_link %>"
original_post: "publicación orixinal"
result: "Resultado"
show_result: "Mostrar resultado"
vote: "Votar"
your_vote: "O teu voto"
profile:
add_some: "Engade algunha"
bio: "Bio"
born: "Aniversario"
edit: "Editar"
gender: "Xénero"
location: "Localización"
photos: "Fotos"
posts: "Publicacións"
you_have_no_tags: "Non tes etiquetas!"
publisher:
add_option: "Engadir unha resposta"
markdown_editor:
preview: "Vista previa"
texts:
code: "aquí o código"
heading: "texto de cabeceira"
insert_image_description_text: "escribe aquí a descrición da imaxe"
insert_image_help_text: "Escribe aquí a ligazón a imaxe"
insert_image_title: "Escribe aquí o título da imaxe"
insert_link_description_text: "introduce aquí a descrición da ligazón"
insert_link_help_text: "Escribe aquí a ligazón"
italic: "texto en cursiva"
list: "texto da lista aquí"
quote: "texto da cita aquí"
strong: "texto resaltado"
tooltips:
bold: "Resaltar"
cancel: "Cancelar mensaxe"
code: "Incrustar código"
heading: "Cabeceira"
insert_image: "Incrustar imaxe"
insert_link: "Incrustar ligazón"
insert_ordered_list: "Incrustar lista ordenada"
insert_unordered_list: "Incrustar lista non ordenada"
italic: "Cursiva"
preview: "Vista previa da mensaxe"
quote: "Incrustar cita"
write: "Editar mensaxe"
write: "Escribir"
mention_success: "Mencionaches a: <%= names %>"
near_from: "Publicada desde: <%= location %>"
option: "Resposta"
question: "Pregunta"
remove_post: "Eliminar esta publicación?"
report:
name: "Denunciar"
prompt: "Engade unha razón por favor:"
prompt_default: "ex. contido ofensivo"
status:
created: "Creouse correctamente o informe"
exists: "Xa existe o informe"
reshares:
post: "Compartir a publicación de <%= name %>?"
successful: "Esta publicación comparteuse!"
show_all: "Mostrar todo"
show_more: "Mostrar máis"
stream:
hide: "Ocultar"
public: "Público"
limited: "Limitado"
like: "Gústame"
unlike: "Xa non me gusta"
reshare: "Repetir"
comment: "Comentar"
original_post_deleted: "O autor eliminou a publicación orixinal."
show_post: "Mostrar a publicación"
hide_nsfw_posts: "Ocultar contido etiquetado con #nsfw"
comments:
one: "un comentario"
other: "<%= count %> comentarios"
zero: "ningún comentario"
disable_post_notifications: "Desactivar notificacións para esta publicación"
enable_post_notifications: "Activar notificacións para esta publicación"
follow: "Seguir"
unfollow: "Deixar de seguir"
via: "mediante <%= provider %>"
followed_tag:
add_a_tag: "Engadir etiqueta"
follow: "Seguir"
title: "Etiquetas #seguidas"
hide: "Agochar"
hide_nsfw_posts: "Agochar publicacións #nsfw"
like: "Gústame"
likes:
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."
two: "Gústalle a dúas persoas"
zero: "Non lle gusta a ninguén."
limited: "Limitado"
more_comments:
few: "Amosar <%= count %> comentarios máis"
many: "Amosar <%= count %> comentarios máis"
one: "Amosar o comentario que falta"
other: "Amosar <%= count %> comentarios máis"
two: "Amosar os dous comentarios que faltan"
zero: "Non hai máis comentarios"
no_posts_yet: "Aínda non hai publicacións para mostrar aquí."
original_post_deleted: "O autor eliminou a publicación orixinal."
permalink: "Ligazón permanente"
public: "Público"
reshare: "Repetir"
reshares:
zero: "Ningunha repetición."
one: "Unha repetición."
two: "Dúas repeticións."
few: "<%= count %> repeticións."
many: "<%= count %> repeticións."
one: "Unha repetición."
other: "<%= count %> repeticións."
more_comments:
zero: "Non hai máis comentarios"
one: "Mostrar o comentario que falta"
two: "Mostrar os dous comentarios que faltan"
few: "Mostrar <%= count %> comentarios máis"
many: "Mostrar <%= count %> comentarios máis"
other: "Mostrar <%= count %> comentarios máis"
header:
home: "Inicio"
profile: "Perfil"
contacts: "Contactos"
settings: "Configuración"
help: "Axuda"
admin: "Administración"
log_out: "Saír"
notifications: "Notificacións"
conversations: "Conversas"
search: "Atopar xente ou #etiquetas"
recent_notifications: "Últimas notificacións"
mark_all_as_read: "Marcalas todas como lidas"
view_all: "Velas todas"
close: "Pechar"
viewer:
stop_following_post: "Deixar de seguir"
follow_post: "Seguir a publicación"
like: "Gústame"
two: "Dúas repeticións."
zero: "Ningunha repetición."
show_nsfw_post: "Amosar a publicación"
show_nsfw_posts: "Amosar todo"
tags:
follow: "Seguir #<%= tag %>"
follow_error: "Non se puido seguir #<%= tag %> :("
following: "Seguindo #<%= tag %>"
stop_following: "Deixar de seguir #<%= tag %>"
stop_following_confirm: "Deixar de seguir #<%= tag %>"
stop_following_error: "Non puido deixar de seguir #<%= tag %> :("
unfollow: "Deixar de seguir"
unlike: "Xa non me gusta"
reshare: "Repetir"
reshared: "Repetida"
comment: "Comentar"
home: "Inicio"
poll:
vote: "Votar"
result: "Resultado"
count:
zero: "Aínda non votou ninguén."
one: "Votou unha persoa."
other: "Votaron <%=count%> persoas."
show_result: "Mostrar o resultado"
close_result: "Agochar o resultado"
via: "vía <%= provider %>"
tags:
wasnt_that_interesting: "Vale, supoño que #<%= tagName %> non era tan interesante…"
timeago:
day: "un día."
days:
one: "1 día"
other: "%d días"
hour: "unha hora."
hours:
one: "fai 1 hora"
other: "fai %d horas"
inPast: "en calquera momento"
minute: "un minuto."
minutes:
one: "1 minuto"
other: "%d minutos"
month: "un mes."
months:
one: "1 mes"
other: "%d meses"
prefixAgo: ""
prefixFromNow: ""
seconds: "menos dun minuto."
suffixAgo: "atrás"
suffixFromNow: "desde agora"
year: "un ano."
years:
one: "1 ano"
other: "%d anos"
unblock_failed: "Fallo ao desbloquear esta usuaria"
viewer:
reshared: "Compartido de novo"

View File

@@ -1,343 +1,326 @@
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# Copyright (c) 2010-2013, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
sq:
javascripts:
cancel: "Anuloje"
confirm_dialog: "Jeni i sigurt?"
confirm_unload: "Ju lutemi, ripohoni se doni ta braktisni këtë faqe. Të dhënat që keni dhënë sdo të ruhen."
create: "Krijoje"
delete: "Fshije"
ignore: "Shpërfille"
report:
prompt: "Ju lutemi, jepni një arsye:"
prompt_default: "p.sh. lëndë fyese"
name: "Njoftim"
status:
created: "Njoftimi u krijua me sukses"
exists: "Njoftimi ekziston"
ignore_user: "Të shpërfillet ky përdorues?"
ignore_failed: "Sarrihet të shpërfillet ky përdorues"
hide_post: "Të fshihet ky postim?"
hide_post_failed: "Sarrihet të fshihet ky postim"
remove_post: "Të hiqet ky postim?"
unblock_failed: "Zhbllokimi i këtij përdoruesi dështoi"
and: "dhe"
comma: ","
edit: "Përpunojeni"
no_results: "Su gjetën përfundime"
show_all: "Shfaqi krejt"
admins:
dashboard:
up_to_date: "Nyja juaj është e përditësuar!"
outdated: "Nyja juaj është e vjetruar."
compare_versions: "Versioni më i ri i diaspora* është <%= latestVersion %>, nyja juaj xhiron ende <%= podVersion %>."
error: "Su arrit të përcaktohej versioni më i ri i diaspora*."
admin:
pods:
pod: "Nyjë"
ssl: "SSL"
ssl_enabled: "SSL e aktivizuar"
ssl_disabled: "SSL e çaktivizuar"
added: "U shtua"
status: "Gjendje"
states:
unchecked: "E pakontrolluar"
no_errors: "OK"
dns_failed: "Ftillimi i emrit (DNS) dështoi"
net_failed: "Përpjekja për lidhje dështoi"
ssl_failed: "Lidhja e sigurt (SSL) dështoi"
http_failed: "Lidhja HTTP dështoi"
version_failed: "Su arrit të merrej version software-i"
unknown_error: "Gjatë kontrollit ndodhi një gabim i papërcaktuar"
actions: "Veprime"
offline_since: "i palidhur që prej:"
last_check: "kontrolli i fundit:"
more_info: "shfaq më tepër të dhëna"
added: "U shtua"
check: "kryej një provë të lidhjes"
recheck:
success: "Nyja u kontrolluar sërish."
failure: "Kontrolli su krye."
follow_link: "hape lidhjen në shfletues"
no_info: "Ska të dhëna të tjera në këtë pikë"
server_software: "Software shërbyesi:"
response_time: "Kohë përgjigjeje:"
ms:
one: "<%= count %>ms"
other: "<%= count %>ms"
unknown: "e panjohur"
not_available: "jo gati"
unchecked:
one: "Ka ende një nyjë që sështë kontrolluar fare."
other: "Ka ende <%= count %> nyja që sjanë kontrolluar fare."
version_failed:
one: "Ka një nyjë që ska version (nyjë e vjetër, pa NodeInfo)."
other: "Ka <%= count %> nyja që skanë version (nyja të vjetëra, pa NodeInfo)."
errors:
one: "Prova e lidhjes u përgjigj me një gabim për një nyjë."
other: "Prova e lidhjes u përgjigj me një gabim për <%= count %> nyje."
follow_link: "hape lidhjen në shfletues"
last_check: "kontrolli i fundit:"
more_info: "shfaq më tepër të dhëna"
ms:
one: "<%= count %>ms"
other: "<%= count %>ms"
no_info: "Në këtë pikë, ska të dhëna të tjera"
not_available: "jo gati"
offline_since: "jashtë linje që prej:"
pod: "Nyjë"
recheck:
failure: "Kontrolli nuk u krye."
success: "Nyja sapo u kontrolluar sërish."
response_time: "Kohë përgjigjeje:"
server_software: "Software shërbyesi:"
ssl: "SSL"
ssl_disabled: "Me SSL të çaktivizuar"
ssl_enabled: "Me SSL të aktivizuar"
states:
dns_failed: "Ftillimi i emrit (DNS) dështoi"
http_failed: "Lidhja HTTP dështoi"
net_failed: "Përpjekja për lidhje dështoi"
no_errors: "OK"
ssl_failed: "Lidhja e sigurt (SSL) dështoi"
unchecked: "E pakontrolluar"
unknown_error: "Gjatë kontrollit ndodhi një gabim i papërcaktuar"
version_failed: "Su arrit të merrej version software-i"
status: "Gjendje"
unchecked:
one: "Ka ende një nyjë që sështë kontrolluar fare."
other: "Ka ende <%= count %> nyja që sjanë kontrolluar fare."
unknown: "e panjohur"
version_failed:
one: "Ka një nyjë që ska version (nyjë e vjetër, pa NodeInfo)."
other: "Ka <%= count %> nyja që skanë version (nyja të vjetra, pa NodeInfo)."
admins:
dashboard:
compare_versions: "Versioni më i ri i diaspora*-s është <%= latestVersion %>, nyja juaj xhiron ende <%= podVersion %>."
error: "Su arrit të përcaktohej versioni më i ri i diaspora*-s."
outdated: "Nyja juaj është e vjetruar!"
up_to_date: "Nyja juaj është e përditësuar!"
and: "dhe"
aspect_dropdown:
add_to_aspect: "Shtoni kontakt"
all_aspects: "Krejt aspektet"
error: "Nuk u fillua dot ndarja e gjërave me <%= name %>. Mos po e shpërfillni?"
error_remove: "Su hoq dot <%= name %> prej aspekti :("
mobile_row_checked: "<%= name %> (hiqe)"
mobile_row_unchecked: "<%= name %> (shtoje)"
select_aspects: "Përzgjidhni aspekte"
started_sharing_with: "Filluat të ndani gjëra me <%= name %>!"
stopped_sharing_with: "Reshtët së ndari gjëra me <%= name %>."
toggle:
one: "Në <%= count %> aspekt"
other: "Në <%= count %> aspekte"
zero: "Përzgjidhni aspekte"
updating: "po përditësohet…"
aspect_navigation:
add_an_aspect: "+ Shtoni një aspekt"
deselect_all: "Çpërzgjidhi krejt"
no_aspects: "Nuk janë përzgjedhur aspekte"
select_all: "Përzgjidhi krejt"
aspects:
name: "Emër"
create:
add_a_new_aspect: "Shtoni aspekt të ri"
success: "Aspekti juaj i ri <%= name %> u krijua"
add_a_new_aspect: "Shtoni një aspekt të ri"
failure: "Krijimi i aspektit dështoi."
success: "Aspekti juaj i ri <%= name %> u krijua"
name: "Emër"
bookmarklet:
post_something: "Postoni diçka te diaspora*"
post_submit: "Po parashtrohet postimit…"
post_success: "U postua! Po mbyllet dritarja flluskë…"
cancel: "Anuloje"
comma: ","
comments:
hide: "fshihi komentet"
no_comments: "Ende ska komente."
show: "shfaqi krejt komentet"
confirm_dialog: "Jeni i sigurt?"
confirm_unload: "Ju lutemi, ripohoni se doni ta braktisni këtë faqe. Të dhënat që keni dhënë sdo të ruhen."
contacts:
add_contact: "Shtoni kontakt"
aspect_chat_is_enabled: "Kontaktet në këtë aspekt janë në gjendje të bisedojnë me ju."
aspect_chat_is_not_enabled: "Kontaktet në këtë aspekt sjanë në gjendje të bisedojnë me ju."
error_add: "Su shtua dot <%= name %> te aspekti :("
error_remove: "Su hoq dot <%= name %> prej aspekti :("
remove_contact: "Hiqe kontaktin"
search_no_results: "Su gjetën kontakte"
conversation:
create:
no_recipient: "Hej, së pari ju duhet një marrës!"
new:
no_contacts: "Përpara se të filloni një bisedë, lypset të shtoni ca kontakte."
create: "Krijoje"
delete: "Fshije"
edit: "Përpunoni"
errors:
connection: "Sarrihet të lidhet te shërbyesi."
connection: "Sarrihet të lidhet me shërbyesin."
failed_to_post_message: "Postimi i mesazhit dështoi!"
failed_to_remove: "Heqja e zërit dështoi!"
getting_started:
alright_ill_wait: "Në rregull, do të pres."
hey: "Hej, <%= name %>!"
no_tags: "Hej, nuk jeni duke ndjekur ndonjë etiketë! Të vazhdohet, sido qoftë?"
preparing_your_stream: "Po përgatitet rrëkeja juaj e personalizuar..."
header:
admin: "Përgjegjës"
close: "Mbylle"
contacts: "Kontakte"
conversations: "Biseda"
help: "Ndihmë"
home: "Kreu"
log_out: "Dilni"
mark_all_as_read: "Shënoji krejt si të lexuara"
moderator: "Moderator"
notifications: "Njoftime"
profile: "Profil"
recent_notifications: "Njoftime së fundi"
search: "Find people or #tags"
settings: "Rregullime"
switch_to_touch_optimized_mode: "Kalo nën mënyrën e optimizuar për ekrane touch"
toggle_navigation: "Shfaq/fshih lëvizjen"
view_all: "Shihni krejt"
hide_post: "Të kalohet i fshehur ky postim?"
hide_post_failed: "Sarrihet të kalohet i fshehur ky postim"
ignore: "Shpërfille"
ignore_failed: "Sarrihet të shpërfillet ky përdorues"
ignore_user: "Të shpërfillet ky përdorues?"
my_activity: "Veprimtaria ime"
my_aspects: "Aspektet e mi"
my_stream: "Rrjedhë"
no_results: "Su gjetën përfundime"
notifications:
mark_read: "Vëri shenjë si të lexuar"
mark_unread: "Vëri shenjë si të palexuar"
new_notifications:
one: "Keni <%= count %> njoftim të palexuar"
other: "Keni <%= count %> njoftime të palexuar"
people:
edit_my_profile: "Përpuno profilin tim"
helper:
is_not_sharing: "<%= name %> sndan gjëra me ju"
is_sharing: "<%= name %> ndan gjëra me ju"
mention: "Përmendje"
message: "Mesazh"
not_found: "… dhe su gjet gjë"
stop_ignoring: "Resht së shpërfilluri"
photo_uploader:
completed: "<%= file %> u plotësua"
empty: "{file} është e zbrazët, ju lutemi, ripërzgjidhni kartela pa e përfshirë atë."
error: "Ndodhi një problem teksa ngarkohej kartela <%= file %>"
invalid_ext: "{file} ka një zgjatim të pavlefshëm. Lejohen vetëm {extensions}."
looking_good: "O Zot, sa bukur që dukeni!"
size_error: "{file} është shumë e madhe, madhësia maksimum për kartelat është {sizeLimit}."
upload_photos: "Ngarkoni foto"
poll:
answer_count:
one: "1 votë"
other: "<%=count%> vota"
zero: "0 vota"
close_result: "Fshihe përfundimin"
count:
one: "1 votë deri tani"
other: "<%=count%> vota deri tani"
go_to_original_post: "Mund të merrni pjesë te ky votim përmes lidhjes te <%= original_post_link %>."
original_post: "postimi origjinal"
result: "Përfundim"
show_result: "Shfaqe përfundimin"
vote: "Votoni"
your_vote: "Vota juaj"
profile:
add_some: "Shtoni ca"
bio: "Jetëshkrim"
born: "Datëlindje"
edit: "Përpunojeni"
gender: "Gjini"
location: "Vendndodhje"
photos: "Foto"
posts: "Postime"
you_have_no_tags: "Skeni etiketa!"
publisher:
add_option: "Shtoni një përgjigje"
markdown_editor:
preview: "Paraparje"
texts:
code: "këtu kod"
heading: "tekst kryesh"
insert_image_description_text: "këtu jepni përshkrim figure"
insert_image_help_text: "Këtu futni lidhjen e figurës"
insert_image_title: "këtu jepni titullin e figurës"
insert_link_description_text: "këtu jepni përshkrimin e lidhjes"
insert_link_help_text: "këtu jepni lidhjen"
italic: "tekst me të pjerrëta"
list: "këtu tekstin e listës"
quote: "këtu tekstin e citimit"
strong: "tekst me të trasha"
tooltips:
bold: "Të trasha"
cancel: "Anuloje mesazhin"
code: "Futni kod"
heading: "Krye"
insert_image: "Futni figurë"
insert_link: "Futni lidhje"
insert_ordered_list: "Futni listë të renditur"
insert_unordered_list: "Futni listë të parenditur"
italic: "Të pjerrëta"
preview: "Parashiheni mesazhin"
quote: "Futni citim"
write: "Përpunoni mesazhin"
write: "Shkruani"
mention_success: "Përmendur me sukses: <%= names %>"
near_from: "Postuar që nga: <%= location %>"
option: "Përgjigje"
question: "Pyetje"
remove_post: "Të hiqet ky postim?"
report:
name: "Raportojeni"
prompt: "Ju lutemi, jepni një arsye:"
prompt_default: "p.sh., lëndë fyese"
status:
created: "Njoftimi u krijua me sukses"
exists: "Njoftimi ekziston tashmë"
reshares:
post: "Të rindahet postimi i <%= name %>?"
successful: "Postimi u rinda me sukses!"
show_all: "Shfaqi krejt"
show_more: "shfaq më tepër"
stream:
comment: "Komentojeni"
comments:
one: "<%= count %> koment"
other: "<%= count %> komente"
disable_post_notifications: "Çaktivizo njoftimet për këtë postim"
enable_post_notifications: "Aktivizo njoftimet për këtë postim"
follow: "Ndiqe"
followed_tag:
add_a_tag: "Shtoni një etiketë"
follow: "Ndiqe"
title: "Etiketa të #ndjekura"
hide: "Fshihe"
hide_nsfw_posts: "Fshihi postimet #nsfw"
like: "Pëlqejeni"
likes:
few: "<%= count %> Likes"
many: "<%= count %> Likes"
one: "<%= count %> Like"
other: "<%= count %> Likes"
two: "<%= count %> Likes"
zero: "<%= count %> Likes"
limited: "E kufizuar"
more_comments:
few: "Show <%= count %> more comments"
many: "Show <%= count %> more comments"
one: "Show <%= count %> more comment"
other: "Show <%= count %> more comments"
two: "Show <%= count %> more comments"
zero: "Show <%= count %> more comments"
no_posts_yet: "Këtu ska ende postime për tu shfaqur."
original_post_deleted: "Postimi origjinal është fshirë nga autori."
permalink: "Permalidhje"
public: "Publike"
reshare: "Rindajeni"
reshares:
few: "<%= count %> Reshares"
many: "<%= count %> Reshares"
one: "<%= count %> Reshare"
other: "<%= count %> Reshares"
two: "<%= count %> Reshares"
zero: "<%= count %> Reshares"
show_nsfw_post: "Shfaqe postimin"
show_nsfw_posts: "Shfaqi krejt"
tags:
follow: "Ndiqeni #<%= tag %>"
follow_error: "Su ndoq dot #<%= tag %> :("
following: "Po ndiqet #<%= tag %>"
stop_following: "Resht së ndjekuri #<%= tag %>"
stop_following_confirm: "Të reshtet së ndjekuri #<%= tag %>?"
stop_following_error: "Su resht dot së ndjekuri #<%= tag %> :("
unfollow: "Mos e ndiq më"
unlike: "Hiqja pëlqimin"
via: "përmes <%= provider %>"
tags:
wasnt_that_interesting: "OK, Them se #<%= tagName %> nuk qe kushedi se çë interesant..."
timeago:
prefixAgo: ""
prefixFromNow: ""
suffixAgo: "më parë"
suffixFromNow: "nga tani"
day: "një ditë"
days:
other: "%d ditë"
hour: "rreth një orë"
hours:
one: "rreth 1 orë"
other: "rreth %d orë"
inPast: "në çdo çast nga tani"
seconds: "më pak se një minutë"
minute: "rreth një minutë"
minutes:
one: "1 minutë"
other: "%d minuta"
hour: "rreth një orë"
hours:
one: "rreth 1 orë"
other: "rreth %d orë"
day: "një ditë"
days:
one: "1 ditë"
other: "%d ditë"
month: "rreth një muaj"
months:
one: "1 muaj"
other: "%d muaj"
prefixAgo: ""
prefixFromNow: ""
seconds: "më pak se një minutë"
suffixAgo: "më parë"
suffixFromNow: "nga tani"
year: "rreth një vit"
years:
one: "1 vit"
other: "%d vjet"
wordSeparator: " "
contacts:
add_contact: "Shtoni kontakt"
aspect_chat_is_enabled: "Kontaktet në këtë aspekt janë në gjendje të fjalosen me ju."
aspect_chat_is_not_enabled: "Kontaktet në këtë aspekt sjanë në gjendje të fjalosen me ju"
remove_contact: "Hiqe kontaktin"
error_add: "Su shtua dot <%= name %> te aspekti :("
error_remove: "Su hoq dot <%= name %> prej aspekti :("
search_no_results: "Su gjetën kontakte"
my_activity: "Veprimtaria ime"
my_stream: "Rrjedhë"
my_aspects: "Aspektet e mia"
publisher:
near_from: "Postuar që nga: <%= location %>"
option: "Përgjigjiuni"
add_option: "Shtoni një përgjigje"
question: "Pyetje"
markdown_editor:
preview: "Paraparje"
write: "Shkruani"
tooltips:
bold: "Të trasha"
italic: "Të pjerrëta"
heading: "Titull"
insert_link: "Futni lidhje"
insert_image: "Futni figurë"
insert_ordered_list: "Futni listë të renditur"
insert_unordered_list: "Futni listë të parenditur"
preview: "Paraparje mesazhi"
write: "Përpunoni mesazhin"
cancel: "Anulojeni mesazhin"
quote: "Futni citim"
code: "Futni kod"
texts:
strong: "tekst me të trasha"
italic: "tekst me të pjerrëta"
heading: "tekst titulli"
insert_link_description_text: "jepni këtu përshkrimin e lidhjes"
insert_link_help_text: "Futeni lidhjen këtu"
insert_image_description_text: "jepni këtu përshkrimin e figurës"
insert_image_help_text: "Futeni lidhjen e figurës këtu"
insert_image_title: "jepni këtu titullin e figurës"
list: "tekst liste këtu"
quote: "tekst citimi këtu"
code: "kod këtu"
mention_success: "U përmend me sukses: <%= names %>"
bookmarklet:
post_something: "Postoni diçka te diaspora*"
post_submit: "Po parashtrohet postimi…"
post_success: "U postua! Po mbyllet dritarja flluskë…"
aspect_dropdown:
add_to_aspect: "Shtoni kontakt"
select_aspects: "Përzgjidhni aspekte"
all_aspects: "Krejt aspektet"
updating: "po përditësohet…"
mobile_row_checked: "<%= name %> (hiqe)"
mobile_row_unchecked: "<%= name %> (shtoje)"
stopped_sharing_with: "Reshtët së ndari gjëra me <%= name %>."
started_sharing_with: "Filluat të ndani gjëra me <%= name %>!"
error: "Su fillua dot ndarja e gjërave me <%= name %>. Mos po i shpërfillni?"
error_remove: "Su hoq dot <%= name %> prej aspekti :("
toggle:
one: "Në <%= count %> aspekt"
other: "Në <%= count %> aspekte"
show_more: "shfaq më tepër"
failed_to_post_message: "Postimi i mesazhit dështoi!"
failed_to_remove: "Heqja e zërit dështoi!"
comments:
show: "Shfaqi krejt komentet"
hide: "Fshihi komentet"
no_comments: "Ende ska komente."
reshares:
successful: "Postimi u rinda me sukses me të tjerët!"
post: "Të rindahet me të tjerët postimi i <%= name %>?"
aspect_navigation:
select_all: "Përzgjidhi krejt"
deselect_all: "Shpërzgjidhi krejt"
no_aspects: "Sjanë përzgjedhur aspekte"
add_an_aspect: "+ Shtoni një aspekt"
getting_started:
hey: "Hej, <%= name %>!"
no_tags: "Hej, sjeni duke ndjekur ndonjë etiketë! Të vazhdohet, sido qoftë?"
alright_ill_wait: "Në rregull, do të pres."
preparing_your_stream: "Po përgatitet rrjedha juaj e personalizuar…"
photo_uploader:
upload_photos: "Ngarkoni foto"
looking_good: "O Zot, sa bukur që dukeni!"
completed: "<%= file %> u plotësua"
error: "Ndodhi një problem teksa ngarkohej kartela <%= file %>"
invalid_ext: "{file} ka një zgjatim të pavlefshëm. Lejohen vetëm {extensions}."
size_error: "{file} është shumë e madhe, madhësia maksimum për kartelat është {sizeLimit}."
empty: "{file} është e zbrazët, ju lutemi, ripërzgjidhni kartela pa e përfshirë atë."
tags:
wasnt_that_interesting: "OK, them se #<%= tagName %> sqe kushedi se çë interesante…"
people:
not_found: "… dhe su gjet gjë"
mention: "Përmendje"
message: "Mesazh"
edit_my_profile: "Përpuno profilin tim"
stop_ignoring: "Resht së shpërfilluri"
helper:
is_sharing: "<%= name %> ndan gjëra me ju"
is_not_sharing: "<%= name %> ndan gjëra me ju"
profile:
edit: "Përpunojeni"
add_some: "Shtoni ca"
you_have_no_tags: "Skeni etiketa!"
bio: "Jetëshkrim"
location: "Vendndodhje"
gender: "Gjini"
born: "Datëlindje"
photos: "Foto"
posts: "Postime"
conversation:
create:
no_recipient: "Hej, së pari lypset të shtoni një marrës!"
new:
no_contacts: "Lypset të shtoni ca kontakte përpara se të filloni një bisedë."
notifications:
mark_read: "Shënoje si të lexuar"
mark_unread: "Shënoje si të palexuar"
new_notifications:
one: "Keni <%= count %> njoftim të palexuar"
other: "Keni <%= count %> njoftime të palexuar"
stream:
hide: "Fshihe"
public: "Publike"
limited: "E kufizuar"
like: "Pëlqejeni"
unlike: "Shpëlqejeni"
reshare: "Rindajeni"
comment: "Komentojeni"
original_post_deleted: "Postimi origjinal është fshirë nga autori."
show_nsfw_post: "Shfaqe postimin"
show_nsfw_posts: "Shfaqi krejt"
hide_nsfw_posts: "Fshihi postimet #nsfw"
follow: "Ndiqe"
unfollow: "Mos e ndiq më"
enable_post_notifications: "Aktivizo njoftimet për këtë postim"
disable_post_notifications: "Çaktivizo njoftimet për këtë postim"
permalink: "Permalidhje"
via: "përmes <%= provider %>"
no_posts_yet: "Këtu ska ende postime për ti shfaqur."
likes:
zero: "<%= count %> Pëlqime"
one: "<%= count %> Pëlqim"
other: "<%= count %> Pëlqime"
reshares:
zero: "<%= count %> Rindarje"
one: "<%= count %> Rindarje"
other: "<%= count %> Rindarje"
comments:
zero: "<%= count %> komente"
one: "<%= count %> koment"
other: "<%= count %> komente"
more_comments:
zero: "Shfaq <%= count %> komente të tjera"
one: "Shfaq edhe <%= count %> koment tjetër"
other: "Shfaq edhe <%= count %> komente të tjera"
followed_tag:
title: "#Etiketa të ndjekura"
add_a_tag: "Shtoni një etiketë"
follow: "Ndiqe"
tags:
follow: "Ndiqe #<%= tag %>"
following: "Po ndiqet #<%= tag %>"
stop_following: "Resht së ndjekuri #<%= tag %>"
stop_following_confirm: "Të reshtet së ndjekuri #<%= tag %>?"
follow_error: "Su ndoq dot #<%= tag %> :("
stop_following_error: "Su resht dot së ndjekuri #<%= tag %> :("
header:
home: "Kreu"
profile: "Profil"
contacts: "Kontakte"
settings: "Rregullime"
help: "Ndihmë"
admin: "Admin"
moderator: "Moderator"
log_out: "Dilni"
toggle_navigation: "Shfaqni/fshihni lëvizjen"
toggle_mobile: "Shfaqeni/fshiheni për celular"
notifications: "Njoftime"
conversations: "Biseda"
search: "Kërko"
recent_notifications: "Njoftime së fundi"
mark_all_as_read: "Shënoji krejt si të lexuara"
view_all: "Shihini krejt"
close: "Mbylle"
other: "%d vjetë"
unblock_failed: "Zhbllokimi i këtij përdoruesi dështoi"
viewer:
reshared: "I rindarë"
poll:
vote: "Votoni"
go_to_original_post: "Mund të merrni pjesë te ky votim përmes lidhjes te <%= original_post_link %>."
original_post: "postimi origjinal"
result: "Përfundimi"
count:
one: "1 votë deri tani"
other: "<%=count%> vota deri tani"
answer_count:
zero: "0 vota"
one: "1 votë"
other: "<%=count%> vota"
show_result: "Shfaqe përfundimin"
close_result: "Fshihe përfundimin"
your_vote: "Vota juaj"
reshared: "I rindarë"

View File

@@ -86,7 +86,7 @@ Logging::Rails.configure do |config|
# Default log-level (development=debug, production=info)
Logging.logger.root.level = config.log_level
# log-levels from the diaspora.yml for SQL and federation debug-logging
# log-levels from the diaspora.toml for SQL and federation debug-logging
Logging.logger[ActionView::Base].level = Rails.env.development? ? :debug : :warn
Logging.logger[ActiveRecord::Base].level = AppConfig.environment.logging.debug.sql? ? :debug : :info
Logging.logger[DiasporaFederation::Salmon::MagicEnvelope].level =

View File

@@ -209,7 +209,7 @@ Rails.application.routes.draw do
get 'help/:topic' => 'help#faq'
#Protocol Url
get 'protocol' => redirect("http://wiki.diasporafoundation.org/Federation_Protocol_Overview")
get "protocol" => redirect("https://wiki.diasporafoundation.org/Federation_Protocol_Overview")
# NodeInfo
get ".well-known/nodeinfo", to: "node_info#jrd"

View File

@@ -1,8 +0,0 @@
# frozen_string_literal: true
%w[
.ruby-version
.rbenv-vars
tmp/restart.txt
tmp/caching-dev.txt
].each {|path| Spring.watch(path) }

View File

@@ -19,13 +19,9 @@ before_fork do |_server, _worker|
ActiveRecord::Base.connection.disconnect! # preloading app in master, so reconnect to DB
# disconnect redis if in use
unless AppConfig.environment.single_process_mode?
Sidekiq.redis {|redis| redis.client.disconnect }
end
Sidekiq.redis(&:close) unless AppConfig.environment.single_process_mode?
if AppConfig.server.embed_sidekiq_worker?
@sidekiq_pid ||= spawn("bin/bundle exec sidekiq")
end
@sidekiq_pid ||= spawn("bin/bundle exec sidekiq") if AppConfig.server.embed_sidekiq_worker?
end
after_fork do |server, worker|

View File

@@ -1,13 +1,13 @@
FROM ruby:2.4.4-slim-stretch
FROM ruby:2.6-slim-buster
RUN DEBIAN_FRONTEND=noninteractive \
apt-get update && \
apt-get install -y -qq \
apt-get install -y -qq --no-install-recommends \
build-essential \
cmake \
curl \
ghostscript \
git \
gsfonts \
imagemagick \
libcurl4-openssl-dev \
libidn11-dev \
@@ -16,7 +16,7 @@ RUN DEBIAN_FRONTEND=noninteractive \
libpq-dev \
libssl-dev \
libxml2-dev \
libxslt-dev \
libxslt1-dev \
nodejs \
gosu \
&& \
@@ -27,7 +27,8 @@ ARG DIA_UID
ARG DIA_GID
ENV HOME="/home/diaspora" \
GEM_HOME="/diaspora/vendor/bundle"
GEM_HOME="/diaspora/vendor/bundle" \
OPENSSL_CONF="/etc/ssl/"
RUN addgroup --gid $DIA_GID diaspora && \
adduser \
@@ -42,13 +43,6 @@ RUN addgroup --gid $DIA_GID diaspora && \
chown -R diaspora:diaspora $HOME /diaspora
RUN curl -L \
https://cifiles.diasporafoundation.org/phantomjs-2.1.1-linux-x86_64.tar.bz2 \
| tar -xj -C /usr/local/bin \
--transform='s#.*/##' \
phantomjs-2.1.1-linux-x86_64/bin/phantomjs
ENV BUNDLE_PATH="$GEM_HOME" \
BUNDLE_BIN="$GEM_HOME/bin" \
BUNDLE_APP_CONFIG="/diaspora/.bundle"

View File

@@ -19,10 +19,12 @@ Feature: Change settings
Scenario: Change my email preferences
When I uncheck "user_email_preferences_mentioned"
And I scroll a bit
And I press "change_email_preferences"
Then I should see "Email notifications changed"
And the "user_email_preferences_mentioned" checkbox should not be checked
When I uncheck "user_email_preferences_mentioned_in_comment"
And I scroll a bit
And I press "change_email_preferences"
Then I should see "Email notifications changed"
And the "user_email_preferences_mentioned_in_comment" checkbox should not be checked

View File

@@ -19,7 +19,6 @@ Feature: commenting
When I focus the comment field
And I fill in the following:
| text | is that a poodle? |
And I reject the alert after I follow "My activity"
And I press "Comment"
Then I should see "is that a poodle?" within ".comment"
And I should see "less than a minute ago" within ".comment time"

View File

@@ -34,7 +34,6 @@ Feature: editing your profile
And the "#profile_public_details" bootstrap-switch should be off
When I fill in "profile_bio" with "This is a new awesome bio"
And I reject the alert after I follow "My activity"
Then I should be on my edit profile page
When I fill in "profile[tag_string]" with "#kamino"

View File

@@ -33,7 +33,7 @@ Feature: posting
Then I should see "#boss from the #boss tag page" within "body"
Scenario: can stop following a tag from the tag page
When I press "Following #boss"
When I press "Stop following #boss"
And I go to the followed tags stream page
Then I should not see "#boss" within "#tags_list"

View File

@@ -11,10 +11,10 @@ Feature: new user registration
Scenario: new user goes through the setup wizard
When I fill in the following:
| profile_first_name | O |
And I confirm the alert after I follow "awesome_button"
Then I should be on the stream page
And the publisher should be expanded
And I close the publisher
Then I wait until ajax requests finished
When I go to the stream page
Then the publisher should be expanded
When I close the publisher
Then I should not see "awesome_button"
And I should not see any posts in my stream

View File

@@ -12,12 +12,11 @@ Feature: Invitations
And I press "Create account"
Then I should be on the getting started page
And I should see "Well, hello there!"
And I fill in the following:
When I fill in the following:
| profile_first_name | O |
And I confirm the alert after I follow "awesome_button"
Then I should be on the stream page
And I close the publisher
Then I wait until ajax requests finished
When I go to the stream page
Then I close the publisher
Scenario: accept invitation from user
Given I have been invited by "alice@alice.alice"
@@ -27,11 +26,10 @@ Feature: Invitations
Then I should be on the getting started page
And I should see "Well, hello there!"
And I should be able to friend "alice@alice.alice"
And I fill in the following:
When I fill in the following:
| profile_first_name | O |
And I confirm the alert after I follow "awesome_button"
Then I should be on the stream page
Then I wait until ajax requests finished
When I go to the stream page
And I close the publisher
And I log out
And I sign in as "alice@alice.alice"

View File

@@ -1,5 +1,4 @@
# We can create a separate cucumber profile that will run these tests with Selenium
@nophantomjs
@javascript
Feature: oembed
In order to make videos easy accessible

View File

@@ -42,7 +42,7 @@ Feature: Mentions
Then I should see "Bob Jones" within ".tt-suggestion"
When I click on the first user in the mentions dropdown list
When I press the "A" key in the publisher
And I append "@Bob" to the publisher
And I type "@Bob" into the publisher
Then I should not see the mentions dropdown list
When I press "Share"
Then I should see "Bob Jones" within ".stream-element"
@@ -80,8 +80,8 @@ Feature: Mentions
And I enter "@Bob" in the comment field
Then I should see "Bob Jones" within ".tt-suggestion"
When I click on the first user in the mentions dropdown list
And I press the "A" key in the publisher
And I append "@Bob" to the publisher
And I enter " A " in the comment field
And I enter "@Bob" in the comment field
Then I should not see the mentions dropdown list
When I press "Comment"
Then I should see "Bob Jones" within ".comments .comment:last-child"

View File

@@ -54,7 +54,7 @@ Feature: preview posts in the stream
Given I expand the publisher
And I mention Alice in the publisher
And I preview the post
And I confirm the alert after I follow "Alice Smith"
And I follow "Alice Smith"
Then I should see "Alice Smith"
Scenario: preview a post on tag page

View File

@@ -44,7 +44,7 @@
And I sign in as "alice@alice.alice"
And I open the show page of the "Here is a post to test with" post
And I confirm the alert after I click to report the post
And I confirm the prompt after I click to report the post
And I should see a flash message containing "The report has successfully been created"

View File

@@ -39,7 +39,7 @@ Feature: editing the profile in the mobile view
Then I should see "#kamino" within "ul#as-selections-tags"
And I should see "#starwars" within "ul#as-selections-tags"
When I confirm the alert after I attach the file "spec/fixtures/bad_urls.txt" to "qqfile" within "#file-upload"
When I accept the alert after I attach the file "spec/fixtures/bad_urls.txt" to "qqfile" within "#file-upload"
And I attach the file "spec/fixtures/button.png" to hidden "qqfile" within "#file-upload"
Then I should see "button.png completed"
And I should see a "img" within "#profile_photo_upload"

View File

@@ -17,7 +17,7 @@ Feature: editing the getting started in the mobile view
And I should not see "awesome_button"
Scenario: new user adds a profile photo and tags
When I confirm the alert after I attach the file "spec/fixtures/bad_urls.txt" to "qqfile" within "#file-upload"
When I accept the alert after I attach the file "spec/fixtures/bad_urls.txt" to "qqfile" within "#file-upload"
And I attach the file "spec/fixtures/button.png" to hidden "qqfile" within "#file-upload"
Then I should see a "img" within "#profile_photo_upload"

View File

@@ -43,7 +43,7 @@ Feature: posting from the mobile main page
Scenario: back out of posting a photo-only post
Given I visit the mobile publisher page
When I confirm the alert after I attach the file "spec/fixtures/bad_urls.txt" to "qqfile" within "#file-upload-publisher"
When I accept the alert after I attach the file "spec/fixtures/bad_urls.txt" to "qqfile" within "#file-upload-publisher"
Then I should not see an uploaded image within the photo drop zone
When I attach the file "spec/fixtures/button.png" to hidden "qqfile" within "#file-upload-publisher"
And I should see "button.png completed"

View File

@@ -119,6 +119,7 @@ When /^(.*) in the aspect creation modal$/ do |action|
end
When /^I drag "([^"]*)" (up|down)$/ do |aspect_name, direction|
expect(page).to have_js_defined("$('body').sortable")
page.execute_script("$('#aspect_nav .list-group').sortable('option', 'tolerance', 'pointer');")
aspect_id = @me.aspects.where(name: aspect_name).first.id
aspect = find(:xpath, "//div[@id='aspect_nav']/ul/a[@data-aspect-id='#{aspect_id}']")

View File

@@ -85,11 +85,23 @@ And /^I click on the first selector "([^"]*)"$/ do |selector|
end
And /^I confirm the alert after (.*)$/ do |action|
accept_confirm do
step action
end
end
And /^I accept the alert after (.*)$/ do |action|
accept_alert do
step action
end
end
And /^I confirm the prompt after (.*)$/ do |action|
accept_prompt do
step action
end
end
And /^I reject the alert after (.*)$/ do |action|
dismiss_confirm do
step action
@@ -155,6 +167,10 @@ Then /^I should see (\d+) contacts$/ do |n_posts|
has_css?("#people-stream .stream-element", count: n_posts.to_i).should be true
end
When /^I scroll a bit$/ do
page.execute_script("window.scrollBy(0,200)")
end
And /^I scroll down$/ do
page.execute_script("window.scrollBy(0,3000000)")
end

View File

@@ -54,7 +54,6 @@ Then /^I should not see any tokens in the redirect url$/ do
end
When /^I parse the bearer tokens and use it to access user info$/ do
current_url = page.driver.network_traffic.last.url # We get a redirect to example.org that we can't follow
access_token = current_url[/(?<=access_token=)[^&]+/]
expect(access_token).to be_present
get api_openid_connect_user_info_path, access_token: access_token

View File

@@ -2,18 +2,12 @@
When /^I allow geolocation$/ do
page.execute_script <<-JS
window.navigator = {
geolocation: {
getCurrentPosition: function(success) {
success({coords: {latitude: 42.42424242, longitude: 3.14159}});
OSM.Locator = function() {
return {
getAddress: function(callback) {
callback("locator address", {latitude: 42.42424242, longitude: 3.14159});
}
}
};
$.getJSON = function(url, myCallback) {
if (url === "https://nominatim.openstreetmap.org/reverse?format=json&lat=42.42424242&lon=3.14159&addressdetails=3") {
return myCallback({display_name: "locator address"});
}
};
}
JS
end

View File

@@ -32,7 +32,7 @@ end
Given /^"([^"]*)" has a public post with text "([^"]*)" and a picture/ do |email, text|
user = User.find_by(email: email)
post = user.post(:status_message, text: text, public: true, to: user.aspect_ids)
FactoryGirl.create(:photo, status_message: post)
FactoryGirl.create(:photo, status_message: post, author: user.person)
end
Given /^there are (\d+) public posts from "([^"]*)"$/ do |n_posts, email|

View File

@@ -47,6 +47,10 @@ When /^I append "([^"]*)" to the publisher$/ do |text|
append_to_publisher(text)
end
When /^I type "([^"]*)" into the publisher$/ do |text|
type_into_publisher(text)
end
When /^I attach "([^"]*)" to the publisher$/ do |path|
upload_file_with_publisher(path)
end

View File

@@ -26,6 +26,7 @@ Then /^the post "([^"]*)" should have a like from "([^"]*)"$/ do |post_text, use
within_post(post_text) do
find(".expand-likes").click
find(".likes .avatar")["data-original-title"].should have_content(username)
find(".likes .entypo-heart").hover # unfocus avatar to get rid of tooltip
end
end
@@ -68,14 +69,14 @@ When /^I prepare hiding the first post$/ do
end
When /^I click to delete the first post$/ do
accept_alert do
accept_confirm do
step "I prepare the deletion of the first post"
end
expect(find(".stream")).to have_no_css(".stream-element.loaded.deleting")
end
When /^I click to hide the first post$/ do
accept_alert do
accept_confirm do
step "I prepare hiding the first post"
end
end

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
When(/^I unfollow the "(.*?)" tag$/) do |tag|
accept_alert do
accept_confirm do
within("#tags_list") do
li = find("li", text: tag)
li.hover

View File

@@ -92,8 +92,7 @@ end
When /^(?:|I )attach the file "([^"]*)" to (?:hidden )?"([^"]*)"(?: within "([^"]*)")?$/ do |path, field, selector|
with_scope(selector) do
page.execute_script("$(\"input[name='#{field}']\").css('opacity', '1');")
attach_file(field, Rails.root.join(path).to_s)
attach_file(field, Rails.root.join(path).to_s, make_visible: true)
end
# wait for the image to be ready
page.assert_selector(".loading", count: 0)

View File

@@ -7,15 +7,13 @@ ENV["RAILS_ENV"] ||= "test"
# Have all rests run with english browser locale
ENV["LANG"] = "C"
require 'coveralls'
Coveralls.wear!('rails')
require "database_cleaner/active_record"
require "cucumber/rails"
require "capybara/rails"
require "capybara/cucumber"
require "capybara/session"
require "capybara/poltergeist"
require "capybara/apparition"
require "cucumber/api_steps"
@@ -26,11 +24,11 @@ Rails.application.routes.default_url_options[:port] = AppConfig.pod_uri.port
Capybara.server = :webrick
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, timeout: 30)
Capybara.register_driver :apparition do |app|
# Pass headless: false here if you need to see the browser
Capybara::Apparition::Driver.new(app, headless: true)
end
Capybara.javascript_driver = :poltergeist
Capybara.javascript_driver = :apparition
# Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In
# order to ease the transition to Capybara we set the default here. If you'd
@@ -55,6 +53,7 @@ Capybara.default_max_wait_time = 30
# of your scenarios, as this makes it hard to discover errors in your application.
ActionController::Base.allow_rescue = false
DatabaseCleaner.strategy = :truncation
Cucumber::Rails::Database.autorun_database_cleaner = true
Cucumber::Rails::World.use_transactional_tests = false

View File

@@ -39,6 +39,19 @@ RSpec::Matchers.define :have_value do |expected|
end
end
RSpec::Matchers.define :have_js_defined do |expected|
match do |actual|
await_condition { actual.evaluate_script("#{expected} !== undefined") == true }
end
failure_message_for_should do |actual|
"expected #{actual.inspect} to have a value for #{expected.inspect} in Javascript but it did not"
end
failure_message_for_should_not do |actual|
"expected #{actual.inspect} to not have a value for #{expected.inspect} in Javascript but it had"
end
end
def await_condition &condition
start_time = Time.zone.now
until condition.call

View File

@@ -70,10 +70,12 @@ module NavigationHelpers
end
def confirm_on_page(page_name)
if page_name == "my profile page"
expect(page).to have_path_in([person_path(@me.person), user_profile_path(@me.username)])
else
expect(page).to have_path(path_to(page_name))
page.driver.send(:retry_if_wrong_world) do
if page_name == "my profile page"
expect(page).to have_path_in([person_path(@me.person), user_profile_path(@me.username)])
else
expect(page).to have_path(path_to(page_name))
end
end
end
end

View File

@@ -6,10 +6,24 @@ module PublishingCukeHelpers
end
def append_to_publisher(txt)
status_message_text = find("#status_message_text").value
fill_in id: "status_message_text", with: "#{status_message_text} #{txt}"
update_publisher_with(txt) do |input|
fill_in id: "status_message_text", with: "#{input.value} #{txt}"
end
end
def type_into_publisher(txt)
update_publisher_with(txt) {|input| input.send_keys txt }
end
def update_publisher_with(txt)
input = find("#status_message_text")
yield input
# trigger JavaScript event listeners
find("#status_message_text").native.send_key(:end)
input.native.send_key(:end)
expect(input).to have_value(txt) # Wait for all key presses being processed
end
def upload_file_with_publisher(path)

View File

@@ -7,7 +7,7 @@ Before do
stub_request(:head, /.+/).with(
headers: {
"Accept" => "text/html",
"User-Agent" => "OpenGraphReader/0.7.0 (+https://github.com/jhass/open_graph_reader)"
"User-Agent" => "OpenGraphReader/0.7.1 (+https://github.com/jhass/open_graph_reader)"
}
).to_return(status: 200, body: "", headers: {"Content-Type" => "text/plain"})
end

View File

@@ -39,6 +39,7 @@ class AccountDeleter
remove_share_visibilities_on_contacts_posts
disconnect_contacts
delete_standard_user_associations
delete_user_invitation_code
tombstone_user
end
@@ -56,6 +57,10 @@ class AccountDeleter
end
end
def delete_user_invitation_code
InvitationCode.find_by(user_id: user.id).try(:destroy)
end
def normal_ar_person_associates_to_delete
%i[posts photos mentions participations roles blocks conversation_visibilities]
end

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
# It is recommended to regenerate this file in the future when you upgrade to a
# newer version of cucumber-rails. Consider adding your own code to a new file
# It is recommended to regenerate this file in the future when you upgrade to a
# newer version of cucumber-rails. Consider adding your own code to a new file
# instead of editing this one. Cucumber will automatically load all features/**/*.rb
# files.
@@ -20,7 +20,7 @@ begin
t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
t.fork = true # You may get faster startup if you set this to false
t.profile = 'default'
t.cucumber_opts = %w[--retry 3]
t.cucumber_opts = %w[--retry 3 --no-strict-flaky --fail-fast --publish-quiet]
end
Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t|

View File

@@ -1,16 +1,14 @@
# frozen_string_literal: true
namespace :ci do
namespace :travis do
task prepare_db: %w[db:create db:migrate]
task prepare: %w[prepare_db assets:generate_error_pages]
task prepare_db: %w[db:create db:migrate]
task prepare: %w[prepare_db assets:generate_error_pages]
desc "Run everyhting except cucumber"
task other: %w[prepare tests:generate_fixtures spec jasmine:ci]
desc "Run everyhting except cucumber"
task other: %w[prepare tests:generate_fixtures spec]
desc "Run cucumber"
task cucumber: %w[prepare rake:cucumber]
end
desc "Run cucumber"
task cucumber: %w[prepare rake:cucumber]
end
if defined?(RSpec)

View File

@@ -6,6 +6,3 @@ cp config/database.yml.example config/database.yml
if [ "${DB}" = "mysql" ]; then
sed -i 's/*common/*mysql/' config/database.yml
fi
gem install bundler
script/configure_bundler

View File

@@ -19,6 +19,7 @@ config("with #{database}")
if rails_env == "production"
config("without test:development")
config("ignore_messages true")
elsif rails_env == "test"
config("without development")
end

View File

@@ -257,7 +257,7 @@ dia_config() {
if [ ! -z $dia_config_delete ]; then
rm "$DIASPORA_CONFIG_DIA" "$DIASPORA_CONFIG_DB"
fi
# Create new diaspora.yml if none exists
# Create new diaspora.toml if none exists
if [ ! -f "$DIASPORA_CONFIG_DIA" ]; then
cp "$DIASPORA_CONFIG_DIA".example "$DIASPORA_CONFIG_DIA"
fi
@@ -477,7 +477,7 @@ export SCRIPT_ROOT=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
export DIASPORA_ROOT=$(dirname "$SCRIPT_ROOT")
export DIASPORA_ROOT_UID=1001
export DIASPORA_ROOT_GID=1001
export DIASPORA_CONFIG_DIA=$DIASPORA_ROOT/config/diaspora.yml
export DIASPORA_CONFIG_DIA=$DIASPORA_ROOT/config/diaspora.toml
export DIASPORA_CONFIG_DB=$DIASPORA_ROOT/config/database.yml
export DIASPORA_DOCKER_DB=$(dia_get_db)

View File

@@ -55,10 +55,15 @@ then
fatal "config/database.yml is missing! Copy over config/database.yml.example to config/database.yml and edit it properly!"
fi
# Check if diaspora.yml exists
if [ ! -e "config/diaspora.yml" ]
# Check if diaspora.toml exists
if [ -e "config/diaspora.toml" ]
then
fatal "config/diaspora.yml is missing! Copy over config/diaspora.yml.example to config/diaspora.yml and edit it properly!"
CONFIG_FILE="config/diaspora.toml"
elif [ -e "config/diaspora.yml" ]
then
CONFIG_FILE="config/diaspora.yml"
else
fatal "config/diaspora.toml is missing! Copy over config/diaspora.toml.example to config/diaspora.toml and edit it properly!"
fi
command -v git > /dev/null 2>&1
@@ -100,7 +105,7 @@ fi
if [ -z "$RAILS_ENV" ]
then
RAILS_ENV=$(bin/bundle exec ruby ./script/get_config.rb server.rails_environment | grep -vE "is not writable|as your home directory temporarily" )
on_failure "Couldn't parse config/diaspora.yml!"
on_failure "Couldn't parse $CONFIG_FILE!"
export RAILS_ENV
fi
@@ -116,7 +121,7 @@ vars=$(bin/bundle exec ruby ./script/get_config.rb \
redis_url=environment.redis \
| grep -vE "is not writable|as your home directory temporarily"
)
on_failure "Couldn't parse config/diaspora.yml!"
on_failure "Couldn't parse $CONFIG_FILE!"
eval "$vars"
args="$@"
@@ -170,10 +175,10 @@ then
if [ -n "$redis_url" ]
then
redis_param="url: '$redis_url'"
fi
fi
if [ "$(bin/bundle exec ruby -e "require 'redis'; puts Redis.new($redis_param).ping" 2> /dev/null | grep -vE "is not writable|as your home directory temporarily" )" != "PONG" ]
then
fatal "Can't connect to redis. Please check if it's running and if environment.redis is configured correctly in config/diaspora.yml."
fatal "Can't connect to redis. Please check if it's running and if environment.redis is configured correctly in $CONFIG_FILE."
fi
fi

View File

@@ -115,7 +115,7 @@ describe NotificationsController, :type => :controller do
it "should not provide a contacts menu for standard notifications" do
FactoryGirl.create(:notification, :recipient => alice, :target => @post)
get :index, params: {per_page: 5}
expect(Nokogiri(response.body).css('.aspect_membership')).to be_empty
expect(Nokogiri(response.body).css(".aspect-membership")).to be_empty
end
it "should provide a contacts menu for start sharing notifications" do

View File

@@ -1,28 +1,15 @@
describe("app.helpers.locations", function() {
describe("getTiles", function() {
context("with mapbox disabled", function() {
beforeEach(function() {
gon.appConfig = {map: {mapbox: {enabled: false}}};
});
it("returns tiles from the Heidelberg University", function() {
var tiles = app.helpers.locations.getTiles();
expect(tiles._url).toMatch("http://korona.geog.uni-heidelberg.de/");
expect(tiles._url).not.toMatch("https://api.tiles.mapbox.com/");
});
});
context("with mapbox enabled", function() {
beforeEach(function() {
/* eslint-disable camelcase */
gon.appConfig = {map: {mapbox: {enabled: true, style: "mapbox/streets-v9", access_token: "yourAccessToken"}}};
gon.appConfig = {map: {mapbox: {enabled: true, style: "mapbox/streets-v11", access_token: "yourAccessToken"}}};
/* eslint-enable camelcase */
});
it("returns tiles from mapbox", function() {
var tiles = app.helpers.locations.getTiles();
expect(tiles._url).toMatch("https://api.mapbox.com/");
expect(tiles._url).not.toMatch("http://korona.geog.uni-heidelberg.de/");
});
});
});

View File

@@ -10,6 +10,6 @@ describe("app.pages.GettingStarted", function() {
it("renders aspect membership dropdown", function() {
this.view.render();
expect($("ul.dropdown-menu.aspect_membership").length).toEqual(1);
expect($("ul.dropdown-menu.aspect-membership").length).toEqual(1);
});
});

View File

@@ -37,42 +37,39 @@ describe("app.views.Content", function(){
});
});
// These tests don't work in PhantomJS because it doesn't support HTML5 <video>.
if (/PhantomJS/.exec(navigator.userAgent) === null) {
describe("onVideoThumbClick", function() {
beforeEach(function() {
this.post = new app.models.StatusMessage({text: "[title](https://www.w3schools.com/html/mov_bbb.mp4)"});
this.view = new app.views.StatusMessage({model: this.post});
describe("onVideoThumbClick", function() {
beforeEach(function() {
this.post = new app.models.StatusMessage({text: "[title](https://www.w3schools.com/html/mov_bbb.mp4)"});
this.view = new app.views.StatusMessage({model: this.post});
this.view.render();
});
afterEach(function() {
this.view.$("video").stop();
});
it("hides video overlay", function() {
expect(this.view.$(".video-overlay").length).toBe(1);
this.view.$(".media-embed .thumb").click();
expect(this.view.$(".video-overlay")).toHaveClass("hidden");
});
it("expands posts on click", function() {
this.view.$(".collapsible").height(500);
this.view.collapseOversized();
expect(this.view.$(".collapsed").length).toBe(1);
this.view.$(".media-embed .thumb").click();
expect(this.view.$(".opened").length).toBe(1);
});
it("plays video", function(done) {
this.view.$("video").on("playing", function() {
done();
});
this.view.$(".media-embed .thumb").click();
});
this.view.render();
});
}
afterEach(function() {
this.view.$("video").stop();
});
xit("hides video overlay", function() {
expect(this.view.$(".video-overlay").length).toBe(1);
this.view.$(".media-embed .thumb").click();
expect(this.view.$(".video-overlay")).toHaveClass("hidden");
});
xit("expands posts on click", function() {
this.view.$(".collapsible").height(500);
this.view.collapseOversized();
expect(this.view.$(".collapsed").length).toBe(1);
this.view.$(".media-embed .thumb").click();
expect(this.view.$(".opened").length).toBe(1);
});
xit("plays video", function(done) {
this.view.$("video").on("playing", function() {
done();
});
this.view.$(".media-embed .thumb").click();
});
});
});

View File

@@ -0,0 +1,8 @@
# frozen_string_literal: true
Jasmine.configure do |config|
config.prevent_phantom_js_auto_install = true
config.runner_browser = :chromeheadless
config.chrome_startup_timeout = 20
config.chrome_cli_options["autoplay-policy"] = "no-user-gesture-required"
end

View File

@@ -1,23 +0,0 @@
# frozen_string_literal: true
$:.unshift(ENV['JASMINE_GEM_PATH']) if ENV['JASMINE_GEM_PATH'] # for gem testing purposes
ENV["JASMINE_BROWSER"] = "firefox"
require 'rubygems'
require 'json'
require 'jasmine'
require 'rspec'
jasmine_config = Jasmine::Config.new
spec_builder = Jasmine::SpecBuilder.new(jasmine_config)
should_stop = false
RSpec.configuration.after(:suite) do
spec_builder.stop if should_stop
end
spec_builder.start
should_stop = true
spec_builder.declare_suites

View File

@@ -76,6 +76,7 @@ describe AccountDeleter do
describe "#close_user" do
user_removal_methods = %i[
delete_standard_user_associations
delete_user_invitation_code
remove_share_visibilities_on_contacts_posts
disconnect_contacts tombstone_user
]
@@ -92,7 +93,7 @@ describe AccountDeleter do
end
describe "#delete_standard_user_associations" do
it 'removes all standard user associaltions' do
it "removes all standard user associations" do
@account_deletion.normal_ar_user_associates_to_delete.each do |asso|
association_double = double
expect(association_double).to receive(:ids).and_return([42])
@@ -107,11 +108,23 @@ describe AccountDeleter do
end
end
describe "#delete_user_invitation_code" do
it "deletes user invitation code" do
expect(bob.invitation_code).not_to be_nil
expect(bob.invitation_code).to eq(InvitationCode.find_by(user_id: bob.id))
invitation_code_double = double
expect(InvitationCode).to receive(:find_by).with(user_id: bob.id).and_return(invitation_code_double)
expect(invitation_code_double).to receive(:destroy)
@account_deletion.delete_user_invitation_code
end
end
describe "#delete_standard_person_associations" do
before do
@account_deletion.person = bob.person
end
it 'removes all standard person associaltions' do
it "removes all standard person associations" do
@account_deletion.normal_ar_person_associates_to_delete.each do |asso|
association_double = double
expect(association_double).to receive(:ids).and_return([42])

View File

@@ -216,7 +216,7 @@ describe Notifier, type: :mailer do
end
it "can handle status_messages without text" do
photo = FactoryGirl.create(:photo, public: true)
photo = FactoryGirl.create(:photo, public: true, author: alice.person)
status = FactoryGirl.create(:status_message, author: alice.person, text: nil, photos: [photo], public: true)
like = status.likes.create!(author: bob.person)
mail = Notifier.send_notification("liked", alice.id, like.author.id, like.id)

Some files were not shown because too many files have changed in this diff Show More