Merge branch 'master' into debugger

Conflicts:
	Gemfile.lock
This commit is contained in:
Helge Rausch 2012-05-09 07:58:45 +02:00
commit b71f380f5d
173 changed files with 1089 additions and 1401 deletions

11
Gemfile
View file

@ -29,6 +29,7 @@ gem 'rails_admin'
# mail
gem 'markerb', '~> 1.0.0'
gem 'messagebus_ruby_api', '1.0.3'
gem 'airbrake'
gem 'newrelic_rpm'
@ -44,7 +45,7 @@ end
group :heroku do
gem 'pg'
gem 'unicorn', '~> 4.2.0', :require => false
gem 'unicorn', '~> 4.3.0', :require => false
end
gem 'settingslogic', :git => 'git://github.com/binarylogic/settingslogic.git'
@ -116,12 +117,12 @@ group :assets do
# install Node.js or use 'therubyracer'.
#
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platform => :ruby
gem 'handlebars_assets'
gem 'uglifier'
# asset_sync is required as needed by application.rb
gem "asset_sync", :require => nil
end
@ -156,7 +157,7 @@ group :test do
gem 'rspec-core', '~> 2.9.0'
gem 'rspec-instafail', '>= 0.1.7', :require => false
gem "rspec-rails", "~> 2.9.0"
gem 'selenium-webdriver'
gem 'selenium-webdriver', '2.22.0.rc1'
gem 'webmock', :require => false
gem 'sqlite3'

View file

@ -110,7 +110,7 @@ GEM
carrierwave (0.5.8)
activesupport (~> 3.0)
cgi_multipart_eof_fix (2.5.0)
childprocess (0.3.1)
childprocess (0.3.2)
ffi (~> 1.0.6)
chronic (0.6.7)
client_side_validations (3.1.4)
@ -259,12 +259,16 @@ GEM
railties (>= 3.0.0)
kgio (2.7.4)
launchy (2.0.3)
libwebsocket (0.1.3)
addressable
linecache (0.46)
rbx-require-relative (> 0.0.4)
mail (2.3.3)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
markerb (1.0.0)
redcarpet (>= 2.0)
messagebus_ruby_api (1.0.3)
mime-types (1.18)
mini_magick (3.4)
@ -414,7 +418,9 @@ GEM
ruby-hmac (0.4.0)
ruby-oembed (0.8.7)
ruby-progressbar (0.0.10)
rubyzip (0.9.7)
ruby_core_source (0.1.5)
archive-tar-minitar (>= 0.5.2)
rubyzip (0.9.8)
sass (3.1.15)
sass-rails (3.1.4)
actionpack (~> 3.1.0)
@ -422,10 +428,11 @@ GEM
sass (>= 3.1.4)
sprockets (~> 2.0.0)
tilt (~> 1.3.2)
selenium-webdriver (2.19.0)
selenium-webdriver (2.22.0.rc1)
childprocess (>= 0.2.5)
ffi (~> 1.0.9)
multi_json (~> 1.0.4)
ffi (~> 1.0)
libwebsocket (~> 0.1.3)
multi_json (~> 1.0)
rubyzip
simple_oauth (0.1.5)
sinatra (1.3.2)
@ -461,7 +468,7 @@ GEM
uglifier (1.2.4)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)
unicorn (4.2.1)
unicorn (4.3.1)
kgio (~> 2.6)
rack
raindrops (~> 0.7)
@ -530,6 +537,7 @@ DEPENDENCIES
json
jwt
linecache (= 0.46)
markerb (~> 1.0.0)
messagebus_ruby_api (= 1.0.3)
mini_magick (= 3.4)
mobile-fu
@ -567,7 +575,7 @@ DEPENDENCIES
rspec-rails (~> 2.9.0)
ruby-oembed (~> 0.8.7)
sass-rails (= 3.1.4)
selenium-webdriver
selenium-webdriver (= 2.22.0.rc1)
settingslogic!
spork (~> 1.0rc2)
sqlite3
@ -576,7 +584,7 @@ DEPENDENCIES
twitter (= 2.0.2)
typhoeus
uglifier
unicorn (~> 4.2.0)
unicorn (~> 4.3.0)
webmock
whenever
will_paginate

View file

@ -1,4 +1,4 @@
## Welcome to the Diaspora Project!
Diaspora*
Diaspora is a privacy-aware, personally-controlled, do-it-all open source social network. Check out our [project site](http://diasporaproject.org).
@ -12,41 +12,47 @@ If you want to do something big, reach out on IRC or the mailing list first, so
With Diaspora you can:
- Run and host your own pod and have control over your own social experience.
- Own your own data.
- Make friends across other pods seamlessly.
- Make cool stuff
- Share it across the web
- Own your own data
Documentation is available on our [wiki](https://github.com/diaspora/diaspora/wiki)
[Pull Request Guidelines](https://github.com/diaspora/diaspora/wiki/Pull-Request-Guidelines)
Before submitting code, feel free to sign our [Contributor License Agreement](https://github.com/diaspora/diaspora/wiki/New-CLA--12-13-10) [Sign Here](https://spreadsheets.google.com/a/joindiaspora.com/spreadsheet/viewform?formkey=dFdRTnY0TGtfaklKQXZNUndsMlJ2eGc6MQ)
## Quick Start:
Here's how you can get a development environment up and running. You can check out system-specific guides [here](https://github.com/diaspora/diaspora/wiki/Installation-Guides).
Here's how you can get a **[development](http://guides.rubyonrails.org/getting_started.html)** environment up and running. This is where any new pod runner should start, as well as people
looking to contribute to D*. This script assumes you have [a basic Rails setup installed](http://railsapps.github.com/installing-rails-3-1.html).
### Step 1: Download the script
### Step 1: Run the script and follow the on screen instructions.
```
curl https://raw.github.com/diaspora/diaspora/master/script/install.sh | /bin/sh
```
### Step 2: Follow the instructions
### Step 3: Run the the development server
### Step 2: Run the the development server
```
rails s
```
then visit 'http://localhost:3000' in your browser.
### Step 4: Run tests
### Step 3 (for developers): Run tests
```
rake
```
## Resources:
### Want a production setup? Having trouble with install script? Want to install D* the slow way?
Look to more specific install guides [here](https://github.com/diaspora/diaspora/wiki/Installation-Guides).
## Contributing
We love community contributions, and we work extra hard to make sure every code contribution is looked at and given feedback.
To help everyone involved, please review our [Pull Request Guidelines](https://github.com/diaspora/diaspora/wiki/Pull-Request-Guidelines)
to make sure all contributions are submitted smoothly.
Documentation is available on our [wiki](https://github.com/diaspora/diaspora/wiki)
Before submitting code, please sign our [Contributor License Agreement](https://github.com/diaspora/diaspora/wiki/New-CLA--12-13-10) [Sign Here](https://spreadsheets.google.com/a/joindiaspora.com/spreadsheet/viewform?formkey=dFdRTnY0TGtfaklKQXZNUndsMlJ2eGc6MQ)
## More Resources:
- [Wiki](https://github.com/diaspora/diaspora/wiki)
- [Podmin Resources](https://github.com/diaspora/diaspora/wiki/Podmin-Resources)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -42,7 +42,7 @@ var app = {
Backbone.history.start({pushState: true});
// there's probably a better way to do this...
$("a[rel=backbone]").bind("click", function(evt){
$("a[rel=backbone]").live("click", function(evt){
evt.preventDefault();
var link = $(this);

View file

@ -1,11 +1,35 @@
app.forms.Picture = app.views.Base.extend({
templateName : "picture-form",
app.forms.PictureBase = app.views.Base.extend({
events : {
'ajax:complete .new_photo' : "photoUploaded",
"change input[name='photo[user_file]']" : "submitForm"
},
onSubmit : $.noop,
uploadSuccess : $.noop,
postRenderTemplate : function(){
this.$("input[name=authenticity_token]").val($("meta[name=csrf-token]").attr("content"))
},
submitForm : function (){
this.$("form").submit();
this.onSubmit();
},
photoUploaded : function(evt, xhr) {
resp = JSON.parse(xhr.responseText)
if(resp.success) {
this.uploadSuccess(resp)
} else {
alert("Upload failed! Please try again. " + resp.error);
}
}
});
/* multi photo uploader */
app.forms.Picture = app.forms.PictureBase.extend({
templateName : "picture-form",
initialize : function() {
this.photos = new Backbone.Collection()
this.photos.bind("add", this.render, this)
@ -17,18 +41,12 @@ app.forms.Picture = app.views.Base.extend({
this.renderPhotos();
},
submitForm : function (){
this.$("form").submit();
onSubmit : function (){
this.$(".photos").append($('<span class="loader" style="margin-left: 80px;"></span>'))
},
photoUploaded : function(evt, xhr) {
resp = JSON.parse(xhr.responseText)
if(resp.success) {
this.photos.add(new Backbone.Model(resp.data))
} else {
alert("Upload failed! Please try again. " + resp.error);
}
uploadSuccess : function(resp) {
this.photos.add(new Backbone.Model(resp.data))
},
renderPhotos : function(){
@ -38,4 +56,13 @@ app.forms.Picture = app.views.Base.extend({
photoContainer.append(photoView)
})
}
});
/* wallpaper uploader */
app.forms.Wallpaper = app.forms.PictureBase.extend({
templateName : "wallpaper-form",
uploadSuccess : function(resp) {
$("#profile").css("background-image", "url(" + resp.data.wallpaper + ")")
}
});

View file

@ -2,6 +2,14 @@ app.models.Profile = Backbone.Model.extend({
urlRoot : "/profiles"
}, {
preloadOrFetch : function(id){
if(app.hasPreload("person")) {
return new app.models.Profile(app.parsePreload("person"))
} else {
return this.findByGuid(id)
}
},
findByGuid : function(personId){
var person = new app.models.Profile({ id : personId})
person.fetch()

View file

@ -11,5 +11,9 @@ app.models.User = Backbone.Model.extend({
expProfileUrl : function(){
return "/people/" + app.currentUser.get("guid") + "?ex=true"
},
isServiceConfigured : function(providerName) {
return _.include(this.get("configured_services"), providerName)
}
});

View file

@ -59,5 +59,5 @@ app.views.framerControls = app.views.Base.extend({
//crazy hack for model publisher.
function closeIFrame(){
location.reload()
location = "/people/" + app.currentUser.get("guid")
};

View file

@ -5,18 +5,13 @@ app.pages.PostViewer = app.views.Base.extend({
"#post-content" : "postView",
"#post-nav" : "navView",
"#post-interactions" : "interactionsView",
"#header-container" : "authorView"
"#author-info" : "authorView"
},
initialize : function(options) {
this.model = new app.models.Post({ id : options.id });
this.model.preloadOrFetch().done(_.bind(this.initViews, this));
this.prepIdleHooks();
$(document).bind("keypress", _.bind(this.commentAnywhere, this))
$(document).bind("keypress", _.bind(this.invokePane, this))
$(document).bind("keyup", _.bind(this.closePane, this))
this.bindEvents()
},
initViews : function() {
@ -29,6 +24,23 @@ app.pages.PostViewer = app.views.Base.extend({
this.render();
},
bindEvents : function(){
this.prepIdleHooks();
this.bindNavHooks();
$(document).bind("keypress", _.bind(this.commentAnywhere, this))
$(document).bind("keypress", _.bind(this.invokePane, this))
$(document).bind("keyup", _.bind(this.closePane, this))
},
unbind : function(){
$(document).unbind("idle.idleTimer")
$(document).unbind("active.idleTimer")
$(document).unbind('keydown')
$(document).unbind('keypress')
$(document).unbind('keyup')
},
prepIdleHooks : function () {
$.idleTimer(3000);
@ -41,38 +53,25 @@ app.pages.PostViewer = app.views.Base.extend({
});
},
postRenderTemplate : function() {
/* set the document title, if it has one */
if(this.model.get("title")){
document.title = this.model.get("title");
}
this.bindNavHooks();
},
bindNavHooks : function() {
/* navagation hooks */
var nextPostLocation = this.model.get("next_post");
var previousPostLocation = this.model.get("previous_post");
var model = this.model;
$(document).keydown(function(evt){
/* prevent nav from happening if the user is using the arrow
* keys to navigate through their comment text */
// prevent nav from happening if the user is using the arrow keys to navigate through their comment text
if($(evt.target).is("textarea")) { return }
switch(evt.keyCode) {
case 37:
navigate(nextPostLocation); break;
app.router.navigate(model.get("next_post"), true); break;
case 39:
navigate(previousPostLocation); break;
app.router.navigate(model.get("previous_post"), true); break;
default:
break;
}
})
},
function navigate(loc) {
loc ? window.location = loc : null
}
postRenderTemplate : function() {
if(this.model.get("title")){ document.title = this.model.get("title"); }
},
commentAnywhere : function(evt) {

View file

@ -2,13 +2,13 @@
//= require ../views/profile_info_view
app.pages.Profile = app.views.Base.extend({
className : "container",
templateName : "profile",
id : "profile",
subviews : {
"#profile-info" : "profileInfo",
"#canvas" : "canvasView"
"#canvas" : "canvasView",
"#wallpaper-upload" : "wallpaperForm"
},
events : {
@ -21,23 +21,13 @@ app.pages.Profile = app.views.Base.extend({
personGUID : null,
editMode : false,
presenter : function(){
var bio = this.model.get("bio") || ''
return _.extend(this.defaultPresenter(),
{text : this.model && app.helpers.textFormatter(bio, this.model),
isOwnProfile : this.isOwnProfile(),
showFollowButton : this.showFollowButton()
})
},
initialize : function(options) {
this.personGUID = options.personId
this.model = new app.models.Profile.findByGuid(options.personId)
this.model = this.model || app.models.Profile.preloadOrFetch(this.personGUID)
this.stream = options && options.stream || new app.models.Stream()
this.model.bind("change", this.setPageTitle, this)
this.model.bind("change", this.setPageTitleAndBackground, this)
/* binds for getting started pulsation */
this.stream.bind("fetched", this.pulsateNewPostControl, this)
@ -46,9 +36,17 @@ app.pages.Profile = app.views.Base.extend({
this.stream.preloadOrFetch();
this.canvasView = new app.views.Canvas({ model : this.stream })
this.wallpaperForm = new app.forms.Wallpaper()
this.profileInfo = new app.views.ProfileInfo({ model : this.model })
},
// send in isOwnProfile data
this.profileInfo = new app.views.ProfileInfo({ model : this.model.set({isOwnProfile : this.isOwnProfile()}) })
presenter : function(){
var bio = this.model.get("bio") || ''
return _.extend(this.defaultPresenter(),
{text : this.model && app.helpers.textFormatter(bio, this.model),
showFollowButton : this.showFollowButton()
})
},
pulsateNewPostControl : function() {
@ -59,9 +57,11 @@ app.pages.Profile = app.views.Base.extend({
]("pulse")
},
setPageTitle : function() {
if(this.model.get("name"))
setPageTitleAndBackground : function() {
if(this.model.get("name")) {
document.title = this.model.get("name")
this.$el.css("background-image", "url(" + this.model.get("wallpaper") + ")")
}
},
toggleEdit : function(evt) {
@ -81,10 +81,6 @@ app.pages.Profile = app.views.Base.extend({
},
showFollowButton : function() {
return this.followingEnabled() && !this.isOwnProfile()
},
isOwnProfile : function() {
return(app.currentUser.get("guid") == this.personGUID)
return this.followingEnabled() && !this.model.get("is_own_profile")
}
});
});

View file

@ -23,25 +23,38 @@ app.Router = Backbone.Router.extend({
"posts/new" : "composer",
"posts/:id": "singlePost",
"posts/:id/next": "siblingPost",
"posts/:id/previous": "siblingPost",
"p/:id": "singlePost",
"framer": "framer"
},
siblingPost : function(){ //next or previous
var post = new app.models.Post();
post.bind("change", setPreloadAttributesAndNavigate)
post.fetch({url : window.location})
function setPreloadAttributesAndNavigate(){
window.preloads.post = post.attributes
app.router.navigate(post.url(), true)
}
},
newProfile : function(personId) {
this.renderPage(new app.pages.Profile({ personId : personId }));
this.renderPage(function(){ return new app.pages.Profile({ personId : personId })});
},
composer : function(){
this.renderPage(new app.pages.Composer());
this.renderPage(function(){ return new app.pages.Composer()});
},
framer : function(){
this.renderPage(new app.pages.Framer());
this.renderPage(function(){ return new app.pages.Framer()});
},
singlePost : function(id) {
this.renderPage(new app.pages.PostViewer({ id: id }));
this.renderPage(function(){ return new app.pages.PostViewer({ id: id })});
},
profile : function(page) {
@ -72,8 +85,9 @@ app.Router = Backbone.Router.extend({
return query.search("ex=true") != -1
},
renderPage : function(page){
app.page = page
renderPage : function(pageConstructor){
app.page && app.page.unbind && app.page.unbind() //old page might mutate global events $(document).keypress, so unbind before creating
app.page = pageConstructor() //create new page after the world is clean (like that will ever happen)
$("#container").html(app.page.render().el)
}
});

View file

@ -10,9 +10,23 @@ app.views.Canvas = app.views.Base.extend(_.extend({}, app.views.infiniteScrollMi
renderTemplate : function() {
this.$el.empty()
this.stream.items.each(_.bind(function(post){
this.$el.append(this.createPostView(post).render().el);
}, this))
if(this.stream.items.isEmpty()){
var message
, person = app.page.model
if(person.get("is_own_profile")){
message = "Make something to start the magic."
} else {
var name = person.get("name") || ""
message = name + " hasn't posted anything yet."
}
this.$el.html("<p class='no-post-message'>" + message + "</p>")
} else {
this.stream.items.each(_.bind(function(post){
this.$el.append(this.createPostView(post).render().el);
}, this))
}
//needs to be deferred so it happens after html rendering finishes
_.defer(_.bind(this.mason, this))
@ -29,6 +43,7 @@ app.views.Canvas = app.views.Base.extend(_.extend({}, app.views.infiniteScrollMi
itemSelector : '.canvas-frame',
visibleStyle : {scale : 1},
hiddenStyle : {scale : 0.001},
containerStyle : {position : "relative"},
masonry : {
columnWidth : 292.5
}

View file

@ -3,6 +3,13 @@ app.views.PostViewerAuthor = app.views.Base.extend({
id : "post-author",
className : "media",
templateName: "post-viewer/author"
tooltipSelector : ".profile-image-container",
templateName: "post-viewer/author",
initialize : function() {
/* add a class so we know how to color the text for the author name */
this.$el.addClass(this.model.get("frame_name"))
}
});

View file

@ -1,16 +1,3 @@
app.views.PostViewerNav = app.views.Base.extend({
templateName: "post-viewer/nav",
postRenderTemplate : function() {
var mappings = {"#forward" : "next_post",
"#back" : "previous_post"};
_.each(mappings, function(attribute, selector){
this.setArrow(this.$(selector), this.model.get(attribute))
}, this);
},
setArrow : function(arrow, loc) {
loc ? arrow.attr('href', loc) : arrow.remove()
}
templateName: "post-viewer/nav"
});

View file

@ -1,5 +1,30 @@
app.views.ServicesSelector = app.views.Base.extend({
templateName : "services-selector"
templateName : "services-selector",
});
events : {
"click label" : "askForAuth"
},
tooltipSelector : "img",
services : [
'facebook',
'twitter',
'tumblr'
],
presenter : function() {
return _.extend(this.defaultPresenter(), {services : this.services})
},
askForAuth : function(evt){
var $target = $(evt.target);
if(app.currentUser.isServiceConfigured($target.data('provider'))) { return }
var serviceUrl = $target.data('url')
window.open(serviceUrl, 'popup', 'height=400,width=500')
}
});

View file

@ -71,7 +71,7 @@ app.views.SmallFrame = app.views.Post.extend({
},
adjustedImageHeight : function() {
if(!this.model.get("photos")[0]) { return }
if(!(this.model.get("photos") || [])[0]) { return }
var modifiers = [this.dimensionsClass(), this.colorClass()].join(' ')

View file

@ -1818,6 +1818,8 @@ ul#press_logos
:overflow hidden
:position relative
p
:margin 0 0 0.8em
p:nth-last-child(2)
:margin 0
.expander

View file

@ -1,3 +1,7 @@
body {
background-image : image_url("pattern.png");
}
/* new link color */
a { color : rgb(42,156,235) }
@ -5,12 +9,6 @@ a { color : rgb(42,156,235) }
.icon-red { background-image: image_url("img/glyphicons-halflings-red.png"); }
.icon-blue { background-image: image_url("img/glyphicons-halflings-blue.png"); }
@media (max-width: 770px) { //why is 770 a magic number?
body {
padding: 0;
}
}
.photoset {
@include center(horizontal);
width: 100%;
@ -58,30 +56,6 @@ a { color : rgb(42,156,235) }
vertical-align: middle;
}
.header {
position: fixed;
/* position absolute for mobile */
@media (max-width: 480px) {
position: absolute !important;
}
top: 0;
left: 0;
z-index: 10;
width: 100%;
overflow-x: hidden;
}
#header-container {
padding: 1.2%;
/* don't pad the header if we're mobile */
@media (max-width: 480px) {
padding: 0 !important;
}
}
.avatar {
&.micro {
height: 20px;
@ -95,46 +69,46 @@ a { color : rgb(42,156,235) }
}
.author-name {
font-family : Roboto;
color: inherit;
font-weight: bold;
}
#post-author {
@include border-radius();
#author-info {
position : absolute;
z-index : 300;
border: 1px solid rgba(255,255,255,0.2);
border-top: 1px solid rgba(255,255,255,0.5);
float: left;
margin: 0;
padding: 5px;
padding-right: 10px;
background-color: rgba(255,255,255,0.6);
/* don't pad the header if we're mobile */
@media (max-width: 480px) {
@include border-radius(0);
background-color: rgba(255,255,255,0.4);
width: 100% !important;
border: none !important;
padding: none !important;
.author-name {
color: #555;
}
max-height: 35px;
.avatar {
@include border-radius();
.bd {
margin-top : 5px;
}
.post-time,
.icon-retweet {
color: #000;
color: #555;
@include opacity(0.5);
}
}
#post-author {
margin : 0;
padding : 10px;
&.status-with-photo-backdrop,
&.Wallpaper {
.author-name {
color : #fff;
}
.post-time,
.icon-retweet {
color: #fff;
@include opacity(0.5);
}
}
}
.post-view {
display: table;
@ -203,6 +177,10 @@ article { //mood posts
background-color : $night-background-color;
color : $night-text-color;
#author-info {
color : $night-text-color;
}
.photo-viewer {
img {
max-height: 80%;
@ -240,9 +218,6 @@ article { //mood posts
&.wallpaper{
color : #fff;
header {
margin: 0 7%;
}
}
&.multi-photo {
@ -441,17 +416,23 @@ div[data-template=flow] {
label { display : inline;}
img {
@include transition(opacity);
cursor : pointer;
height : 28px;
width : 28px;
&:hover {
@include opacity(0.6);
}
}
input:not(:checked) + label {
@include opacity(0.4);
img {
@include opacity(0.4);
}
}
input:checked + label {
&:hover img {
@include opacity(1);
}
}
input {
@ -466,19 +447,6 @@ div[data-template=flow] {
right : 10px;
top : 10px;
.label {
padding : 2px 5px;
padding-bottom : 3px;
span {
display : inline-block;
position : relative;
top : 1px;
font-family : Roboto-Bold;
}
}
& > a {
@include transition(opacity);
@include opacity(0.4);
@ -490,4 +458,17 @@ div[data-template=flow] {
text-decoration : none;
}
}
}
}
/* bootstrap label fixes for Roboto */
.label {
padding : 2px 5px;
padding-bottom : 3px;
span {
display : inline-block;
position : relative;
top : 1px;
font-family : Roboto-Bold;
}
}

View file

@ -1,18 +1,18 @@
@mixin wide() {
width : $two-column-width + px;
min-width : $two-column-width + px;
max-width : $two-column-width + px;
}
body {
background-color : #F6F6F6;
background-image : image_url('pattern.png')
.no-post-message {
text-align: center;
margin-top: 50px;
font-size: 1.2em;
}
.canvas-frame {
float : left;
margin : 10px;
margin-bottom : 18px;
/* expand / contract cursor declarations */
&.x2 .content {
@ -28,12 +28,12 @@ body {
.content {
@include transition(box-shadow);
@include box-shadow(0,1px,3px,rgba(0,0,0,0.2));
@include box-shadow(0, 8px, 50px, rgba(0,0,0,0.9));
background-image : image_url("paper-texture-1.jpg");
&:hover {
@include box-shadow(0,1px,5px,rgba(0,0,0,0.5));
@include box-shadow(0, 3px, 10px,rgba(0,0,0,0.9));
.info {
top : 0;
@ -59,11 +59,9 @@ body {
max-width : $column-width + px;
overflow : hidden;
//padding : 20px;
/* used in masking photos with overflow: hidden; */
.image-container {
overflow : hidden;
width : 100%;
@ -128,6 +126,8 @@ body {
background-color : rgba(255,255,255,0.8);
border-bottom : 1px solid #fff;
color : #000;
position : absolute;
top : -32px;
right : 0;

View file

@ -11,9 +11,7 @@
#photo_upload_button {
position: relative;
margin : {
bottom : 9px;
}
margin-bottom : 9px;
input{
@include opacity(0);
@ -21,6 +19,7 @@
top: 0;
left: 0;
height:100%;
cursor : pointer;
}
}

View file

@ -1,3 +1,26 @@
#profile {
min-height : 100%;
color : #fff;
background : {
color : #333;
/* The background-image property will be user-generated and set in `app.pages.Profile` (app/assets/javascripts/app/pages/profile.js)
and should ONLY be set once the image is fully loaded.
Optimal imagemagick manipulation settings for uploaded image (via trial & error):
`mogrify -brightness-contrast -40x-50`
NOTE: I noticed that just turning the brightness down had an adverse affect on contrast,
thus the "washing out" at -50 contrast. For more info on this specific command, read the documentation
on it here: http://www.imagemagick.org/script/command-line-options.php#brightness-contrast */
size : cover;
attachment : fixed;
}
}
/* getting started pulse animation */
#composer-button.pulse {
-webkit-animation: opacity-pulse 1s infinite;
@ -35,6 +58,18 @@
display : inline-block;
margin-bottom : 5px;
&.small {
height : 40px;
width : 40px;
border : 2px solid #fff;
}
&.micro {
height : 24px;
width : 24px;
border : 2px solid #fff;
}
}
#profile-controls {

View file

@ -1,173 +0,0 @@
<div class="canvas-frame">
<div class="content">
<img src="https://joindiaspora.s3.amazonaws.com/uploads/images/scaled_full_bb076dd0d45f0caa4478.gif"/>
</div>
<div class="info">
Daniel Grippi
</div>
</div>
<div class="canvas-frame width x2">
<div class="content">
<p>
Here, he discusses how globalisation has exacerbated income inequalities and the control over politics exerted by the rich, citing the Occupy movement which he describes as a 'public relations hazard not a health hazard'
</p>
<p>
Echo park wolf kale chips sunt, dolor scenester deserunt ad cray leggings 3 wolf moon thundercats direct trade. Banksy placeat odd future et, ex gastropub elit whatever. Messenger bag eu fanny pack, pitchfork locavore four loko yr marfa forage. Mcsweeney's hoodie terry richardson exercitation, consectetur commodo banh mi ullamco laboris cliche raw denim salvia selvage in nulla. Lo-fi chambray culpa, dreamcatcher fugiat squid portland nihil high life. Quis VHS blog sunt sint, salvia wes anderson fingerstache portland eiusmod ex consectetur synth enim. Tattooed aliquip proident id, lomo aliqua qui pitchfork hella cosby sweater pariatur vero. </p>
</div>
<div class="info">
Dennis Collinson
</div>
</div>
<div class="canvas-frame">
<div class="content">
<img src="https://joindiaspora.s3.amazonaws.com/uploads/images/scaled_full_7dbfea26846d99848aac.jpg"/>
</div>
<div class="info">
Sarah Mei
</div>
</div>
<div class="canvas-frame">
<div class="content">
<h1>
sometimes, i say things loud.
</h1>
</div>
<div class="info">
Sean Tilley
</div>
</div>
<div class="canvas-frame height x2">
<div class="content">
<h1>
this is a longish status but i don't have that much to say. i guess i can keep on typing or something like that or make this a run-on sentance.
</h1>
</div>
<div class="info">
Daniel Grippi
</div>
</div>
<div class="canvas-frame width x2">
<div class="content">
<p>
Echo park wolf kale chips sunt, dolor scenester deserunt ad cray leggings 3 wolf moon thundercats direct trade. Banksy placeat odd future et, ex gastropub elit whatever. Messenger bag eu fanny pack, pitchfork locavore four loko yr marfa forage. Mcsweeney's hoodie terry richardson exercitation, consectetur commodo banh mi ullamco laboris cliche raw denim salvia selvage in nulla. Lo-fi chambray culpa, dreamcatcher fugiat squid portland nihil high life. Quis VHS blog sunt sint, salvia wes anderson fingerstache portland eiusmod ex consectetur synth enim. Tattooed aliquip proident id, lomo aliqua qui pitchfork hella cosby sweater pariatur vero.
</p>
</div>
<div class="info">
Dennis Collinson
</div>
</div>
<div class="canvas-frame height width x2">
<div class="content">
<img src="http://24.media.tumblr.com/tumblr_lzwkez5ew31qzxz2so1_500.jpg"/>
</div>
<div class="info">
Sarah Mei
</div>
</div>
<div class="canvas-frame">
<div class="content">
<h1>
#weinerjuice
</h1>
</div>
<div class="info">
Sean Tilley
</div>
</div>
<div class="canvas-frame width x2">
<div class="content">
<img src="http://hipsteripsum.wpengine.netdna-cdn.com/wp-content/uploads/2011/08/cropped-asian_hipster.jpg"/>
</div>
<div class="info">
Rosanna Yau
</div>
</div>
<div class="canvas-frame height x2">
<div class="content">
<h3>
Banksy placeat odd future et, ex gastropub elit whatever. Messenger bag eu fanny pack, pitchfork locavore four loko yr marfa forage. Mcsweeney's hoodie terry richardson exercitation, consectetur commodo banh mi ullamco laboris cliche raw denim salvia selvage
Banksy placeat odd future et, ex gastropub elit whatever. Messenger bag eu fanny pack, pitchfork.
</h3>
</div>
<div class="info">
Sarah Mei
</div>
</div>
<div class="canvas-frame width height x2">
<div class="content">
<img src="http://28.media.tumblr.com/tumblr_m02dfqdQT31qfzxa7o1_500.jpg"/>
</div>
<div class="info">
Daniel Grippi
</div>
</div>
<div class="canvas-frame">
<div class="content">
<p>
Banksy placeat odd future et, ex gastropub elit whatever. Messenger bag eu fanny pack, pitchfork locavore four loko yr marfa forage. Mcsweeney's hoodie terry richardson exercitation, consectetur commodo banh mi ullamco laboris cliche raw denim salvia selvage
</p>
</div>
<div class="info">
Daniel Grippi
</div>
</div>
<div class="canvas-frame">
<div class="content">
<h1>
skribblex.
</h1>
</div>
<div class="info">
Rosanna Yau
</div>
</div>
<div class="canvas-frame height x2">
<div class="content">
<img src="http://28.media.tumblr.com/tumblr_ln5654hJrs1qd33kzo1_1280.jpg"/>
</div>
<div class="info">
Sarah Mei
</div>
</div>
<div class="canvas-frame">
<div class="content">
hey there kids!
</div>
<div class="info">
Daniel Grippi
</div>
</div>
<div class="canvas-frame width x2">
<div class="content">
<iframe width="100%" height="450" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Fplaylists%2F1821180&show_artwork=true"></iframe>
</div>
<div class="info">
Rosanna Yau
</div>
</div>

View file

@ -107,7 +107,7 @@
<div id="lightbox">
<div id="lightbox-content">
<a href="#" id="lightbox-close-link">[x] close</a>
<a href="#" id="lightbox-close-link">[x] {{t "header.close"}}</a>
<img id="lightbox-image">
<div id="lightbox-imageset"></div>
</div>

View file

@ -1,8 +1,4 @@
<!-- header to be extracted -->
<div class="header">
<div id="header-container"> </div>
</div>
<div id="author-info"></div>
<div id="top-right-nav">
<a href="/" id="home-button">

View file

@ -1,25 +1,25 @@
<div class="img">
{{#linkToPerson author}}
{{{personImage this "small"}}}
{{/linkToPerson}}
{{#linkToPerson author}}
<div class="profile-image-container small" style="background-image : url('{{avatar.small}}');" data-placement="right"></div>
{{/linkToPerson}}
</div>
<div class="bd">
{{#linkToPerson author}}
{{name}}
{{/linkToPerson}}
{{#if root}}
<i class="icon-retweet"></i>
{{#linkToPerson root.author}}
{{name}}
{{#linkToPerson author}}
{{name}}
{{/linkToPerson}}
{{/if}}
<div class="post-time">
<time datetime="{{created_at}}" />
{{#unless public}}
<i class="icon-lock"> </i>
{{/unless}}
</div>
{{#if root}}
<i class="icon-retweet"></i>
{{#linkToPerson root.author}}
{{name}}
{{/linkToPerson}}
{{/if}}
<div class="post-time">
<time datetime="{{created_at}}" />
{{#unless public}}
<i class="icon-lock"> </i>
{{/unless}}
</div>
</div>

View file

@ -1,10 +1,10 @@
<a href="#" class="nav-arrow left" id="forward">
<a href="{{next_post}}" class="nav-arrow left" id="forward" rel="backbone">
<div class="nav-arrow-inner">
<img src="{{imageUrl "arrow-left.png"}}" />
</div>
</a>
<a href="#" class="nav-arrow right" id="back">
<a href="{{previous_post}}" class="nav-arrow right" id="back" rel="backbone">
<div class="nav-arrow-inner">
<img src="{{imageUrl "arrow-right.png"}}" />
</div>

View file

@ -8,7 +8,7 @@
{{#if location}}
<span class="stat">
<a href="http://maps.google.com/maps?q={{location}}" target="_blank">
<i class="icon-map-marker"></i>
<i class="icon-map-marker icon-white"></i>
</a>
{{location}}
</span>
@ -17,7 +17,7 @@
{{#if birthday}}
<span class="stat">
<img src='{{imageUrl "buttons/bday@2x.png"}}' class="cake" />
<img src='{{imageUrl "buttons/bday@2x-white.png"}}' class="cake" />
{{birthday}}
</span>
<span class="divider">•</span>
@ -25,20 +25,20 @@
<span class="stat services">
<a href="https://facebook.com" class="service" target="_blank">
<img src='{{imageUrl "buttons/service-icons/fb@2x.png"}}' />
<img src='{{imageUrl "buttons/service-icons/fb@2x-white.png"}}' />
</a>
<a href="https://twitter.com" class="service" target="_blank">
<img src='{{imageUrl "buttons/service-icons/twitter@2x.png"}}' />
<img src='{{imageUrl "buttons/service-icons/twitter@2x-white.png"}}' />
</a>
<a href="https://tumblr.com" class="service" target="_blank">
<img src='{{imageUrl "buttons/service-icons/tumblr@2x.png"}}' />
<img src='{{imageUrl "buttons/service-icons/tumblr@2x-white.png"}}' />
</a>
</span>
{{#if isOwnProfile}}
{{#if is_own_profile}}
<span class="divider">•</span>
<a href="/profile/edit" title="Edit Profile" rel="tooltip" style="margin-left:2px;">
<i class="icon-cog"></i>
<i class="icon-cog icon-white"></i>
</a>
{{/if}}
</div>

View file

@ -1,60 +1,68 @@
<div id="top-right-nav">
{{#if showFollowButton}}
<a href="#" onClick="alert('Not yet implemented!')" id="follow-button">
<span class="label label-inverse">
<i class="icon-plus icon-white"></i>
<span>
FOLLOW
</span>
</span>
</a>
{{/if}}
{{#if is_own_profile}}
<div id="wallpaper-upload"></div>
{{/if}}
{{#if current_user.guid}}
<a href="/" id="home-button">
<span class="label label-inverse">
<i class="icon-home icon-white"></i>
<span>
HOME
<div class="container">
<div id="top-right-nav">
{{#if showFollowButton}}
<a href="#" onClick="alert('Not yet implemented!')" id="follow-button">
<span class="label label-inverse">
<i class="icon-plus icon-white"></i>
<span>
FOLLOW
</span>
</span>
</span>
</a>
{{else}}
<a href="/" id="home-button">
<span class="label label-inverse">
<span>
DIASPORA
</span>
</span>
</a>
{{/if}}
</a>
{{/if}}
{{#if isOwnProfile}}
<a href="/users/sign_out" title="Log out" id="logout-button">
<span class="label label-inverse">
<i class="icon-off icon-white"></i>
</span>
</a>
{{/if}}
{{#if current_user.guid}}
<a href="/" id="home-button">
<span class="label label-inverse">
<i class="icon-home icon-white"></i>
<span>
HOME
</span>
</span>
</a>
{{else}}
<a href="/" id="home-button">
<span class="label label-inverse">
<span>
DIASPORA
</span>
</span>
</a>
{{/if}}
{{#if is_own_profile}}
<a href="/users/sign_out" title="Log out" id="logout-button">
<span class="label label-inverse">
<i class="icon-off icon-white"></i>
</span>
</a>
{{/if}}
</div>
<section id="profile-info"/>
<section id="profile-controls">
{{#if is_own_profile}}
<a href="#composer" id="composer-button" class="control small" rel="facebox">
<img src='{{imageUrl "buttons/pub@2x.png"}}' title="New Post" rel="tooltip"/>
</a>
<a href="#" id="edit-mode-toggle" class="control small">
<img src='{{imageUrl "buttons/edit@2x.png"}}' title="Edit Posts" rel="tooltip"/>
</a>
<!-- only load up this iframe if the current user is on their own page.
this should be ajax'ed in, regardless. -->
<div id="composer" style="display:none;">
<iframe src="/posts/new" height=500 width=700 style="border:none;"></iframe>
</div>
{{/if}}
</section>
<section id="canvas"></section>
<div id="paginate"><span class="loader hidden"/></div>
</div>
<section id="profile-info"/>
<div id="composer" style="display:none;">
<iframe src="/posts/new" height=500 width=700 style="border:none;"></iframe>
</div>
<section id="profile-controls">
{{#if isOwnProfile}}
<a href="#composer" id="composer-button" class="control small" rel="facebox">
<img src='{{imageUrl "buttons/pub@2x.png"}}' title="New Post" rel="tooltip"/>
</a>
<a href="#" id="edit-mode-toggle" class="control small">
<img src='{{imageUrl "buttons/edit@2x.png"}}' title="Edit Posts" rel="tooltip"/>
</a>
{{/if}}
</section>
<section id="canvas"></section>
<div id="paginate"><span class="loader hidden"/></div>

View file

@ -1,8 +1,10 @@
<!--*CSS MAGIC* CHECKBOX IS HIDDEN AND IS CHECKED BY CLICKING THE LABEL, CHANGE THIS AT YOUR OWN PERIL, RUN JASMINE AFTER-->
<div class="magic-service-selector">
{{#each current_user.services}}
<input id="service_toggle_{{provider}}" type="checkbox" name="services" class="service" value="{{provider}}" />
<label for="service_toggle_{{provider}}"><img class="legacy-provider-image" src="/assets/social_media_logos/{{provider}}-32x32.png" data-provider="{{provider}}" /></label>
{{#each services}}
<input id="service_toggle_{{this}}" type="checkbox" name="services" class="service" value="{{this}}"/>
<label for="service_toggle_{{this}}">
<img class="legacy-provider-image" src="/assets/social_media_logos/{{this}}-32x32.png" data-provider="{{this}}" data-url="/auth/{{this}}" title="Share on {{this}}" />
</label>
{{/each}}
</div>

View file

@ -0,0 +1,13 @@
<form accept-charset="UTF-8" action="/upload_wallpaper" class="new_photo" data-remote="true" enctype="multipart/form-data" method="post" style="position:absolute; left:10px; top: 10px; opacity:0.4;">
<input name="authenticity_token" type="hidden"/>
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓"/>
</div>
<div id='photo_upload_button'>
<a href="#" class='label label-inverse'>
<i class="icon-picture icon-white" style="margin-right:4px;"></i>CHANGE WALLPAPER
</a>
<input name="photo[user_file]" type="file"/>
</div>
</form>

View file

@ -106,10 +106,17 @@ class ApplicationController < ActionController::Base
end
def after_sign_in_path_for(resource)
stored_location_for(:user) || (current_user.getting_started? ? getting_started_path : root_path)
stored_location_for(:user) || current_user_redirect_path
end
def max_time
params[:max_time] ? Time.at(params[:max_time].to_i) : Time.now + 1
end
private
def current_user_redirect_path
return person_path(current_user.person) if current_user.beta?
current_user.getting_started? ? getting_started_path : root_path
end
end

View file

@ -119,7 +119,9 @@ class PeopleController < ApplicationController
format.all do
if params[:ex]
@page = :experimental
gon.stream = @stream.stream_posts.as_api_response(:backbone).as_json
gon.person = PersonPresenter.new(@person, current_user)
gon.stream = @stream.stream_posts.as_api_response(:backbone)
render :nothing => true, :layout => 'post'
else
respond_with @person, :locals => {:post_type => :all}

View file

@ -19,25 +19,21 @@ class PostsController < ApplicationController
:xml
def new
@feature_flag = FeatureFlagger.new(current_user) #I should be a global before filter so @feature_flag is accessible
@feature_flag = FeatureFlagger.new(current_user, current_user.person) #I should be a global before filter so @feature_flag is accessible
redirect_to "/stream" and return unless @feature_flag.new_publisher?
render :text => "", :layout => true
end
def show
return log_and_redirect_back unless @post
# @commenting_disabled = can_not_comment_on_post?
# mark corresponding notification as read
if user_signed_in? && notification = Notification.where(:recipient_id => current_user.id, :target_id => @post.id).first
notification.unread = false
notification.save
end
mark_corresponding_notification_read if user_signed_in?
respond_to do |format|
format.html{ gon.post = postJson; render 'posts/show.html.haml' }
format.html{ gon.post = post_json(@post); render 'posts/show.html.haml' }
format.xml{ render :xml => @post.to_diaspora_xml }
format.mobile{render 'posts/show.mobile.haml', :layout => "application"}
format.json{ render :json => postJson }
format.json{ render :json => post_json(@post) }
end
end
@ -81,11 +77,21 @@ class PostsController < ApplicationController
end
def next
redirect_to post_path(post_base.newer(@post))
next_post = visible_posts_from_author.newer(@post)
respond_to do |format|
format.html{ redirect_to post_path(next_post) }
format.json{ render :json => post_json(next_post) }
end
end
def previous
redirect_to post_path(post_base.older(@post))
previous_post = visible_posts_from_author.older(@post)
respond_to do |format|
format.html{ redirect_to post_path(previous_post) }
format.json{ render :json => post_json(previous_post) }
end
end
protected
@ -101,12 +107,12 @@ class PostsController < ApplicationController
@post = find_by_guid_or_id_with_current_user(params[:id])
end
def post_base
def visible_posts_from_author
Post.visible_from_author(@post.author, current_user)
end
def postJson
PostPresenter.new(@post, current_user).to_json
def post_json(post)
PostPresenter.new(post, current_user).to_json
end
def find_by_guid_or_id_with_current_user(id)
@ -122,17 +128,10 @@ class PostsController < ApplicationController
request.format = :html if request.format == 'application/html+xml'
end
def can_not_comment_on_post?
if !user_signed_in?
true
elsif @post.public && @post.author.local?
false
elsif current_user.contact_for(@post.author)
false
elsif current_user.owns?(@post)
false
else
true
def mark_corresponding_notification_read
if notification = Notification.where(:recipient_id => current_user.id, :target_id => @post.id).first
notification.unread = false
notification.save
end
end
end

View file

@ -14,20 +14,7 @@ class ProfilesController < ApplicationController
@person = Person.find_by_guid!(params[:id])
respond_to do |format|
format.json {
public_json = @person.as_api_response(:backbone)
extra_json = {}
if(current_user && (current_user.person == @person || current_user.contacts.receiving.where(:person_id => @person.id).first))
extra_json = {
:location => @person.profile.location,
:birthday => @person.profile.formatted_birthday,
:bio => @person.profile.bio
}
end
render :json => public_json.merge(extra_json)
}
format.json { render :json => PersonPresenter.new(@person, current_user) }
end
end
@ -77,6 +64,30 @@ class ProfilesController < ApplicationController
end
end
def upload_wallpaper_image
unless params[:photo].present?
respond_to do |format|
format.json { render :json => {"success" => false} }
end
return
end
if remotipart_submitted?
profile = current_user.person.profile
profile.wallpaper.store! params[:photo][:user_file]
if profile.save
respond_to do |format|
format.json { render :json => {"success" => true, "data" => {"wallpaper" => profile.wallpaper.url}} }
end
else
respond_to do |format|
format.json { render :json => {"success" => false} }
end
end
end
end
protected
def munge_tag_string

View file

@ -49,11 +49,7 @@ class ServicesController < ApplicationController
end
end
if current_user.getting_started
redirect_to getting_started_path
else
redirect_to services_url
end
render :text => ("<script>window.close()</script>")
end
def failure

View file

@ -7,11 +7,15 @@ class SessionsController < Devise::SessionsController
after_filter :enqueue_update, :only => :create
protected
def enqueue_update
begin
if current_user
current_user.services.each do |s|
Resque.enqueue(Jobs::UpdateServiceUsers, s.id) if s.respond_to? :save_friends
end
end
rescue
end
end
end

View file

@ -30,7 +30,10 @@ class Notifier < ActionMailer::Base
mail(default_opts)
mail(default_opts) do |format|
format.text
format.html
end
end
def invite(email, message, inviter, invitation_code, locale)
@ -44,7 +47,10 @@ class Notifier < ActionMailer::Base
:host => AppConfig[:pod_uri].host}
I18n.with_locale(locale) do
mail(mail_opts)
mail(mail_opts) do |format|
format.text
format.html
end
end
end
@ -85,7 +91,10 @@ class Notifier < ActionMailer::Base
@notification = NotificationMailers.const_get(type.to_s.camelize).new(*args)
with_recipient_locale do
mail(@notification.headers)
mail(@notification.headers) do |format|
format.text
format.html
end
end
end

View file

@ -309,6 +309,11 @@ class Person < ActiveRecord::Base
end
end
#gross method pulled out from controller, not exactly sure how it should be used.
def shares_with(user)
user.contacts.receiving.where(:person_id => self.id).first if user
end
# @param person [Person]
# @param url [String]
def update_url(url)
@ -339,6 +344,7 @@ class Person < ActiveRecord::Base
end
private
def fix_profile
Webfinger.new(self.diaspora_handle).fetch
self.reload

View file

@ -5,6 +5,8 @@
class Profile < ActiveRecord::Base
self.include_root_in_json = false
mount_uploader :wallpaper, WallpaperUploader
include Diaspora::Federated::Base
include Diaspora::Taggable

View file

@ -61,6 +61,10 @@ class Reshare < Post
Notifications::Reshared if root.author == user.person
end
def nsfw
root.nsfw
end
private
def after_parse

View file

@ -0,0 +1,34 @@
class PersonPresenter
def initialize(person, current_user = nil)
@person = person
@current_user = current_user
end
def as_json(options={})
attrs = @person.as_api_response(:backbone).merge(
{
:wallpaper => @person.profile.wallpaper.url,
:is_own_profile => is_own_profile
})
if is_own_profile || person_is_following_current_user
attrs.merge!({
:location => @person.profile.location,
:birthday => @person.profile.formatted_birthday,
:bio => @person.profile.bio
})
end
attrs
end
def is_own_profile
@current_user.try(:person) == @person
end
protected
def person_is_following_current_user
@person.shares_with(@current_user)
end
end

View file

@ -12,7 +12,8 @@ class UserPresenter
:admin => admin,
:aspects => aspects,
:services => services,
:following_count => self.user.contacts.receiving.count
:following_count => self.user.contacts.receiving.count,
:configured_services => self.configured_services
}
).to_json(options)
end
@ -21,6 +22,10 @@ class UserPresenter
ServicePresenter.as_collection(user.services)
end
def configured_services
user.services.map{|service| service.provider }
end
def aspects
AspectPresenter.as_collection(user.aspects)
end

View file

@ -0,0 +1,30 @@
class WallpaperUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
def store_dir
"uploads/images/wallpaper"
end
def extension_white_list
%w(jpg jpeg png tiff)
end
# Filename is associated with the user's diaspora handle, ensuring uniqueness
# and that only one copy is kept in the filesystem.
def filename
Digest::MD5.hexdigest(model.diaspora_handle) + File.extname(@filename) if @filename
end
process :darken
def darken
manipulate! do |img|
# img.brightness_contrast "-40x-50"
# thanks, heroku.
img.modulate "40,40"
img = yield(img) if block_given?
img
end
end
end

View file

@ -5,10 +5,18 @@
%h3#aspect_stream_header.stream_title
= stream.title
= render 'shared/publisher', :selected_aspects => stream.aspects, :aspect_ids => stream.aspect_ids, :for_all_aspects => stream.for_all_aspects?, :aspect => stream.aspect
- if current_user.beta?
= link_to "Make something", "#composer", :rel => "facebox", :class => "button primary", :style => "display: block; margin: 20px 10px; margin-bottom: 30px; padding: 10px; text-align:center; font-weight: bold;"
#composer{:style => "display:none;"}
%iframe{:src => '/posts/new', :height => 500, :width => 700, :style => "border:none;"}
- else
= render 'shared/publisher', :selected_aspects => stream.aspects, :aspect_ids => stream.aspect_ids, :for_all_aspects => stream.for_all_aspects?, :aspect => stream.aspect
= render 'aspects/no_posts_message'
#gs-shim{:title => popover_with_close_html("3. #{t('.stay_updated')}"), 'data-content' => t('.stay_updated_explanation')}
- unless current_user.beta?
#gs-shim{:title => popover_with_close_html("3. #{t('.stay_updated')}"), 'data-content' => t('.stay_updated_explanation')}
#main_stream.stream

View file

@ -1,18 +0,0 @@
<table style="padding: 20px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr>
<td width='100px'></td>
<td width="70px">
<a href="<%= accept_invitation_url(@resource, :invitation_token => @resource.invitation_token)%>" target="_blank"><img style="border: 0pt none ; padding: 0pt 5px; display: block;" src="<%=invite.sender.person.profile.image_url(:thumb_medium) %>" height="75" ></a>
</td>
<td style="line-height: 20px; width: 360px;">
<%= t('.has_invited_you', :name => invite.sender.name + " (#{invite.sender.diaspora_handle})") %> <br/>
<% unless invite.message.blank? %>
<strong> "<%= invite.message %>"</strong>
<% end %>
</td>
<td width='100px'></td>
</tr>
</tbody></table>

View file

@ -1,13 +0,0 @@
!!!
%html
%head
%meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
= render :partial => 'notifier/notifier_css'
%body
%header
= image_tag('branding/white.png')
#container
%p
= t('devise.mailer.welcome', :email => @resource.email)
%p= t('.you_can_confirm')
%p= link_to t('.confirm'), confirmation_url(@resource, :confirmation_token => @resource.confirmation_token), :class => "large_text"

View file

@ -0,0 +1,7 @@
<%= t('devise.mailer.welcome', :email => @resource.email) %>
<%= t('.you_can_confirm') %>
[<%= t('.confirm') %>][1]
[1]: <%= confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>

View file

@ -1,174 +0,0 @@
<%- self.extend NotifierHelper -%>
<% @invites = @resource.invitations_to_me.includes(:sender =>{:person => :profile}).where(:admin => false).all %>
<head>
<title><%=invite_email_title %></title>
</head>
<p style="background-color: rgb(255, 255, 255); text-align: center; font-size: 11px;"><%= t('.displaying_correctly', :link => link_to(t('.view_in'), invite_email_url(:invitation_token => @resource.invitation_token), :style => "color: #3F8FBA; text-decoration: none;")).html_safe %> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td style="padding: 30px 15px 0pt; background-color: rgb(221, 221, 221);">
<table style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; font-size: 16px; color: rgb(51, 51, 51);" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody>
<tr>
<td style="background-color: rgb(0, 0, 0);">
<a style="display: block;" href="<%= accept_invitation_url(@resource, :invitation_token => @resource.invitation_token) %>" target="_blank">
<img alt="Diaspora" src="http://dl.dropbox.com/u/15865/diaspora%20logo.png" style="border: 0pt none ; display: block;" height="134" width="600">
</a>
</td>
</tr>
<tr>
<td style="padding: 10px 0pt 0px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
<%= t('.finally') %><br>
</td>
</tr>
<tr><td style="padding: 0px 20px 0pt; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" width="600" height='389'>
<a href="<%= accept_invitation_url(@resource, :invitation_token => @resource.invitation_token)%>" target="_blank"><img src="http://dl.dropbox.com/u/15865/diaspora_shots.jpg" style="border: 0pt none ; display: block;" width="560">
</a></td></tr>
<tr><td style="padding: 0pt 30px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20px;">
<%= t('.arrived', :strong_diaspora => content_tag(:strong, "DIASPORA*")).html_safe %>
<br>
<br>
<%= link_to(t('.sign_up_now').html_safe, accept_invitation_url(@resource, :invitation_token => @resource.invitation_token), :style => "color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;", :target => "_blank").html_safe %>
</td></tr>
<% unless @invites.blank? %>
<% @invites_with_message, @invites_without_message = @invites.partition{|x| !x.message.blank?} %>
<% unless @invites_with_message.empty? %>
<tr>
<td style="padding: 10px 0pt 0px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 24px; font-weight: bold; color: rgb(0, 0, 0);">
<br>
<%= t('.friends_saying') %><br>
</td>
</tr>
<% @invites_with_message.each do |i| %>
<tr><td>
<%= render(:partial => 'devise/mailer/inviter', :locals => {:invite => i}) %>
</td></tr>
<% end %>
<% end %>
<% unless @invites_without_message.empty? %>
<tr>
<td style="padding: 10px 0pt 0px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 24px; font-weight: bold; color: rgb(0, 0, 0);">
<br>
<%= t('.more_people') %><br>
</td>
</tr>
<% @invites_without_message.each do |i| %>
<tr><td>
<%= render(:partial => 'devise/mailer/inviter', :locals => {:invite => i}) %>
</td></tr>
<% end %>
<% end %>
<% end %>
<tr><td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
1. <%= t('.get_connected') %></td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr>
<td width="200">
<a href="<%=accept_invitation_url(@resource, :invitation_token => @resource.invitation_token) %>" target="_blank"><img style="border: 0pt none ; padding: 0pt 10px 0px 5px; display: block;" src="https://joindiaspora.s3.amazonaws.com/uploads/images/scaled_full_c7506ec0b3ae6694c64d.gif" height="156" width="200"></a>
</td>
<td style="line-height: 20px; width: 360px;">
<%= t('.get_connected_paragraph', :strong_diaspora => content_tag(:strong, "DIASPORA*")).html_safe %>
<br>
<!-- <a style="color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;" href="https://joindiaspora.com/channels" target="_blank">Tune in to your favorite Channels</a>-->
</td>
</tr>
</tbody></table>
</td></tr>
<tr><td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
2. <%= t('.be_yourself') %></td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr>
<td style="line-height: 20px; width: 360px;">
<%= t('.be_yourself_paragraph', :strong_diaspora => content_tag(:strong, "DIASPORA*")).html_safe %>
<br>
<!-- <a style="color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;" href="#" target="_blank">Watch all the bumpers</a>-->
</td>
<td width="200">
<a href="<%= accept_invitation_url(@resource, :invitation_token => @resource.invitation_token)%>" target="_blank"><img style="border: 0pt none ; padding: 0pt 5px 0px 10px; display: block;" src="http://dl.dropbox.com/u/15865/apolonisaphrodisia.png" height="150" width="170"></a>
</td>
</tr>
</tbody></table>
</td></tr>
<tr><td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
3. <%= t('.have_fun') %></td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr>
<td width="200">
<a href="<%= accept_invitation_url(@resource, :invitation_token => @resource.invitation_token)%>" target="_blank"><img style="border: 0pt none ; padding: 0pt 5px; display: block;" src="http://joindiaspora.com/images/cubbies_screenshot2.png" height="151" width="200"></a>
</td>
<td style="line-height: 20px; width: 360px;">
<%= t('.have_fun_paragraph', :strong_diaspora => content_tag(:strong, "DIASPORA*"), :link => link_to(t('.cubbies'), "https://cubbi.es", :style => "color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;", :target => "_blank")).html_safe %>
<!-- <a style="color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;" href="#" target="_blank">Watch all the bumpers</a>-->
</td>
</tr>
</tbody></table>
</td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody>
<tr>
<td style="padding: 40px 20px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<%= link_to(t('.sign_up_now').html_safe, accept_invitation_url(@resource, :invitation_token => @resource.invitation_token), :style => "color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;", :target => "_blank").html_safe %>
</td>
</tr>
</tbody>
</table>
</td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody>
<tr>
<td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<%= t('.made_by_people', :strong_diaspora => content_tag(:strong, "DIASPORA*"), :jointeam => link_to(t('.join_team'), "https://github.com/diaspora/diaspora/wiki/Become-a-Contributor", :style =>"color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 18px;", :target => "_blank"), :helpfund => link_to(t('.help_fund'), "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QG4L6VYD8YGPU", :style =>"color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 18px;", :target => "_blank")).html_safe %>
</td>
</tr>
</tbody>
</table>
</td></tr>
<tr><td style="padding: 35px 20px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<%= t('.love') %><br>
<%= t('.team_diaspora') %><br>
</td></tr>
<tr><td style="padding: 35px 40px; font-size: 11px; color: rgb(102, 102, 102); line-height: 16px;">
<% if AppConfig[:pod_uri].host.match(/joindiaspora.com/) %>
<%= t('.unsubscribe', :link => link_to(t('.here'), "http://joindiaspora.us1.list-manage.com/unsubscribe?u=d759919b94f9cdcf39d204f3f&id=7b5ceb2f8b", :style => "color: #3F8FBA; text-decoration: none;")).html_safe %>
<% end %>
<%= t('.email_us', :email => link_to(t('.email_address'), "mailto:questions@joindiaspora.com", :style => "color: #3F8FBA; text-decoration: none;")).html_safe %>
</td></tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>

View file

@ -1,15 +0,0 @@
!!!
%html
%head
%meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
= render :partial => 'notifier/notifier_css'
%body
%header
= image_tag('branding/white.png')
#container
%p
= t('devise.mailer.hello', :email => @resource.email)
%p= t('.someone_requested')
%p= link_to t('.change'), edit_password_url(@resource, :reset_password_token => @resource.reset_password_token), :class => "large_text"
%p= t('.wont_change')
%p.small= t('.ignore')

View file

@ -0,0 +1,11 @@
<%= t('devise.mailer.hello', :email => @resource.email) %>
<%= t('.someone_requested') %>
[<%= t('.change') %>][1]
[1]: <%= edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %>
<%= t('.wont_change') %>
<%= t('.ignore') %>

View file

@ -1,14 +0,0 @@
!!!
%html
%head
%meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
= render :partial => 'notifier/notifier_css'
%body
%header
= image_tag('branding/white.png')
#container
%p
= t('devise.mailer.hello', :email => @resource.email)
%p= t('.account_locked')
%p= t('.click_to_unlock')
%p= link_to t('.unlock'), unlock_url(@resource, :unlock_token => @resource.unlock_token), :class => "large_text"

View file

@ -0,0 +1,9 @@
<%= t('devise.mailer.hello', :email => @resource.email) %>
<%= t('.account_locked') %>
<%= t('.click_to_unlock') %>
[<%= t('.unlock') %>][1]
[1]: <%= unlock_url(@resource, :unlock_token => @resource.unlock_token) %>

View file

@ -6,7 +6,7 @@
- content_for :head do
= javascript_include_tag :home
- if current_user.getting_started?
- if current_user.getting_started? && !current_user.beta?
#welcome-to-diaspora
.container{:style => "position: relative;"}
.right

View file

@ -1,4 +0,0 @@
%p
= comment_message(@notification.comment, :process_newlines => true)
%p
= link_to t('notifier.comment_on_post.reply', :name => @notification.comment.post.author.first_name), post_url(@notification.comment.post)

View file

@ -0,0 +1,5 @@
<%= comment_message(@notification.comment, :process_newlines => true) %>
[<%= t('notifier.comment_on_post.reply', :name => @notification.comment.post.author.first_name) %>][1]
[1]: <%= post_url(@notification.comment.post) %>

View file

@ -1 +0,0 @@
!= comment_message(@notification.comment)

View file

@ -1,4 +0,0 @@
%p
= comment_message(@notification.comment, :process_newlines => true)
%p
= link_to t('notifier.comment_on_post.reply', :name => @notification.comment.post.author.name), post_url(@notification.comment.post)

View file

@ -0,0 +1,5 @@
<%= comment_message(@notification.comment, :process_newlines => true) %>
[<%= t('notifier.comment_on_post.reply', :name => @notification.comment.post.author.name) %>][1]
[1]: <%= post_url(@notification.comment.post) %>

View file

@ -1 +0,0 @@
!= comment_message(@notification.comment)

View file

@ -1,7 +0,0 @@
%p
= t('notifier.hello', :name => @notification.recipient.profile.first_name)
%p
!= t('notifier.confirm_email.click_link', :unconfirmed_email => @notification.recipient.unconfirmed_email)
%br
= link_to confirm_email_url(:token => @notification.recipient.confirm_email_token),
confirm_email_url(:token => @notification.recipient.confirm_email_token)

View file

@ -0,0 +1,5 @@
<%= t('notifier.hello', :name => @notification.recipient.profile.first_name) %>
<%= t('notifier.confirm_email.click_link', :unconfirmed_email => @notification.recipient.unconfirmed_email) %>
<<%= confirm_email_url(:token => @notification.recipient.confirm_email_token) %>>

View file

@ -1,4 +0,0 @@
!= t('notifier.hello', :name => @notification.recipient.profile.first_name)
!= t('notifier.confirm_email.click_link', :unconfirmed_email => @notification.recipient.unconfirmed_email)
!= confirm_email_url(:token => @notification.recipient.confirm_email_token)

View file

@ -1,134 +0,0 @@
<%- self.extend NotifierHelper -%>
<head>
<title><%=invite_email_title %></title>
</head>
<p style="background-color: rgb(255, 255, 255); text-align: center; font-size: 11px;"><%= t('devise.mailer.invitation_instructions.displaying_correctly', :link => link_to(t('devise.mailer.invitation_instructions.view_in'), invite_email_url(:invitation_code => @invitation_code), :style => "color: #3F8FBA; text-decoration: none;")).html_safe %> </p>
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td style="padding: 30px 15px 0pt; background-color: rgb(221, 221, 221);">
<table style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; font-size: 16px; color: rgb(51, 51, 51);" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody>
<tr>
<td style="background-color: rgb(0, 0, 0);">
<a style="display: block;" href="<%= invite_code_url(@invitation_code) %>" target="_blank">
<img alt="Diaspora" src="http://dl.dropbox.com/u/15865/diaspora%20logo.png" style="border: 0pt none ; display: block;" height="134" width="600">
</a>
</td>
</tr>
<tr>
<td style="padding: 10px 0pt 0px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
<%= t('devise.mailer.invitation_instructions.finally') %><br>
</td>
</tr>
<tr><td style="padding: 0px 20px 0pt; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" width="600" height='389'>
<a href="<%= invite_code_url(@invitation_code)%>" target="_blank"><img src="http://dl.dropbox.com/u/15865/diaspora_shots.jpg" style="border: 0pt none ; display: block;" width="560">
</a></td></tr>
<tr><td style="padding: 0pt 30px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; line-height: 20px;">
<%= t('devise.mailer.invitation_instructions.arrived', :strong_diaspora => content_tag(:strong, "DIASPORA*")).html_safe %>
<br>
<br>
<%= link_to(t('devise.mailer.invitation_instructions.sign_up_now').html_safe, invite_code_url(@invitation_code), :style => "color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;", :target => "_blank").html_safe %>
</td></tr>
<tr><td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
1. <%= t('devise.mailer.invitation_instructions.get_connected') %></td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr>
<td width="200">
<a href="<%=invite_code_url(@invitation_code) %>" target="_blank"><img style="border: 0pt none ; padding: 0pt 10px 0px 5px; display: block;" src="https://joindiaspora.s3.amazonaws.com/uploads/images/scaled_full_c7506ec0b3ae6694c64d.gif" height="156" width="200"></a>
</td>
<td style="line-height: 20px; width: 360px;">
<%= t('devise.mailer.invitation_instructions.get_connected_paragraph', :strong_diaspora => content_tag(:strong, "DIASPORA*")).html_safe %>
<br>
<!-- <a style="color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;" href="https://joindiaspora.com/channels" target="_blank">Tune in to your favorite Channels</a>-->
</td>
</tr>
</tbody></table>
</td></tr>
<tr><td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
2. <%= t('devise.mailer.invitation_instructions.be_yourself') %></td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr>
<td style="line-height: 20px; width: 360px;">
<%= t('devise.mailer.invitation_instructions.be_yourself_paragraph', :strong_diaspora => content_tag(:strong, "DIASPORA*")).html_safe %>
<br>
<!-- <a style="color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;" href="#" target="_blank">Watch all the bumpers</a>-->
</td>
<td width="200">
<a href="<%= invite_code_url(@invitation_code)%>" target="_blank"><img style="border: 0pt none ; padding: 0pt 5px 0px 10px; display: block;" src="http://dl.dropbox.com/u/15865/apolonisaphrodisia.png" height="150" width="170"></a>
</td>
</tr>
</tbody></table>
</td></tr>
<tr><td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-size: 44px; font-weight: bold; color: rgb(0, 0, 0);">
3. <%= t('devise.mailer.invitation_instructions.have_fun') %></td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody><tr>
<td width="200">
<a href="<%= invite_code_url(@invitation_code)%>" target="_blank"><img style="border: 0pt none ; padding: 0pt 5px; display: block;" src="http://joindiaspora.com/images/cubbies_screenshot2.png" height="151" width="200"></a>
</td>
<td style="line-height: 20px; width: 360px;">
<%= t('devise.mailer.invitation_instructions.have_fun_paragraph', :strong_diaspora => content_tag(:strong, "DIASPORA*"), :link => link_to(t('devise.mailer.invitation_instructions.cubbies'), "https://cubbi.es", :style => "color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;", :target => "_blank")).html_safe %>
<!-- <a style="color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;" href="#" target="_blank">Watch all the bumpers</a>-->
</td>
</tr>
</tbody></table>
</td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody>
<tr>
<td style="padding: 40px 20px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<%= link_to(t('devise.mailer.invitation_instructions.sign_up_now').html_safe, invite_code_url(@invitation_code), :style => "color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 20px;", :target => "_blank").html_safe %>
</td>
</tr>
</tbody>
</table>
</td></tr>
<tr><td>
<table style="padding: 0pt 20px; background: rgb(255, 255, 255) none repeat scroll 0%; font-size: 16px; color: rgb(51, 51, 51); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="center" border="0" cellpadding="0" cellspacing="0" width="600">
<tbody>
<tr>
<td style="padding: 20px 20px 0px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<%= t('devise.mailer.invitation_instructions.made_by_people', :strong_diaspora => content_tag(:strong, "DIASPORA*"), :jointeam => link_to(t('devise.mailer.invitation_instructions.join_team'), "https://github.com/diaspora/diaspora/wiki/Become-a-Contributor", :style =>"color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 18px;", :target => "_blank"), :helpfund => link_to(t('devise.mailer.invitation_instructions.help_fund'), "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QG4L6VYD8YGPU", :style =>"color: #3F8FBA; text-decoration: underline; font-weight: bold; font-size: 18px;", :target => "_blank")).html_safe %>
</td>
</tr>
</tbody>
</table>
</td></tr>
<tr><td style="padding: 35px 20px 20px; background: rgb(255, 255, 255) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<%= t('devise.mailer.invitation_instructions.love') %><br>
<%= t('devise.mailer.invitation_instructions.team_diaspora') %><br>
</td></tr>
<tr><td style="padding: 35px 40px; font-size: 11px; color: rgb(102, 102, 102); line-height: 16px;">
<% if AppConfig[:pod_uri].host.match(/joindiaspora.com/) %>
<%= t('devise.mailer.invitation_instructions.unsubscribe', :link => link_to(t('devise.mailer.invitation_instructions.here'), "http://joindiaspora.us1.list-manage.com/unsubscribe?u=d759919b94f9cdcf39d204f3f&id=7b5ceb2f8b", :style => "color: #3F8FBA; text-decoration: none;")).html_safe %>
<% end %>
<%= t('devise.mailer.invitation_instructions.email_us', :email => link_to(t('devise.mailer.invitation_instructions.email_address'), "mailto:questions@joindiaspora.com", :style => "color: #3F8FBA; text-decoration: none;")).html_safe %>
</td></tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>

View file

@ -0,0 +1 @@
<%= t('.message', :invite_url => invite_code_url(@invitation_code)) %>

View file

@ -1,8 +0,0 @@
%p
= "#{t('.liked', :name => "#{@notification.sender.name}")}:"
%p{:style => "font-style:italic;color:#666"}
= post_message(@notification.like.target, :process_newlines => true)
%p
= link_to t('.view_post'), post_url(@notification.like.target)

View file

@ -0,0 +1,7 @@
<%= "#{t('.liked', :name => "#{@notification.sender.name}")}:" %>
<%= post_message(@notification.like.target, :process_newlines => true) %>
[<%= t('.view_post') %>][1]
[1]: <%= post_url(@notification.like.target) %>

View file

@ -1,3 +0,0 @@
!= "#{t('notifier.liked.liked', :name => "#{@notification.sender.name}")}:"
!=post_message(@notification.like.target)

View file

@ -1,4 +0,0 @@
%p
= post_message(@notification.post, :process_newlines => true, :length => 600)
%p
= link_to t('notifier.comment_on_post.reply', :name => @notification.post.author.name), post_url(@notification.post)

View file

@ -0,0 +1,5 @@
<%= post_message(@notification.post, :process_newlines => true, :length => 600) %>
[<%= t('notifier.comment_on_post.reply', :name => @notification.post.author.name) %>][1]
[1]: <%= post_url(@notification.post) %>

View file

@ -1 +0,0 @@
!= post_message(@notification.post, :process_newlines => true, :length => 600)

View file

@ -1,4 +0,0 @@
%p
= post_message(@notification.message, :process_newlines => true, :length => 2000)
%p
= link_to t('.reply_to_or_view'), conversations_url(:conversation_id => @notification.conversation)

View file

@ -0,0 +1,5 @@
<%= post_message(@notification.message, :process_newlines => true, :length => 2000) %>
[<%= t('.reply_to_or_view') %>][1]
[1]: <%= conversations_url(:conversation_id => @notification.conversation) %>

View file

@ -1 +0,0 @@
!= @notification.message.text

View file

@ -1,8 +0,0 @@
%p
= "#{t('.reshared', :name => "#{@notification.sender.name}")}:"
%p{:style => "font-style:italic;color:#666"}
= post_message(@notification.reshare.root, :process_newlines => true)
%p
= link_to t('.view_post'), post_url(@notification.reshare)

View file

@ -0,0 +1,7 @@
<%= "#{t('.reshared', :name => "#{@notification.sender.name}")}:" %>
<%= post_message(@notification.reshare.root, :process_newlines => true) %>
[<%= t('.view_post') %>][1]
[1]: <%= post_url(@notification.reshare) %>

View file

@ -1,3 +0,0 @@
!= "#{t('notifier.reshared.reshared', :name => "#{@notification.sender.name}")}:"
!=post_message(@notification.reshare.root)

View file

@ -1,8 +0,0 @@
%p
= t('notifier.hello', :name => @receiver.username)
%p
= @string
%br
= t('notifier.thanks')
= t('notifier.single_admin.admin')

View file

@ -0,0 +1,7 @@
<%= t('notifier.hello', :name => @receiver.username) %>
<%= @string %>
<%= t('notifier.thanks') %>
<%= t('notifier.single_admin.admin') %>

View file

@ -1,6 +0,0 @@
!= t('notifier.hello', :name => @receiver.username)
!= @string
!= t('notifier.thanks')
!= t('notifier.single_admin.admin')

View file

@ -1,5 +0,0 @@
%p
= @notification.sender.name
= t('.sharing')
%p
= link_to t('.view_profile', :name => @notification.sender.first_name), local_or_remote_person_path(@notification.sender, :absolute => true)

View file

@ -0,0 +1,5 @@
<%= @notification.sender.name %> <%= t('.sharing') %>
[<%= t('.view_profile', :name => @notification.sender.first_name) %>][1]
[1]: <%= local_or_remote_person_path(@notification.sender, :absolute => true) %>

View file

@ -1,4 +0,0 @@
!= "#{@notification.sender.name}"
!= t('notifier.started_sharing.sharing')
!= t('.view_profile', :name => @notification.sender.first_name)
!= local_or_remote_person_path(@notification.sender, :absolute => true)

View file

@ -16,4 +16,4 @@
- AppConfig.configured_services.each do |service|
- unless @services.any?{|x| x.provider == service}
%h4= link_to t("services.index.connect_to_#{service}"), "/auth/#{service}"
%h4= link_to t("services.index.connect_to_#{service}"), "#", :onclick => "window.open('/auth/#{service}', 'popup', 'height=400,width=500')"

View file

@ -251,10 +251,10 @@ test:
integration1:
<<: *defaults
pod_url: "http://localhost:45789/"
pod_url: "http://localhost:3001/"
serve_static_assets: true
integration2:
<<: *defaults
pod_url: "http://localhost:34658/"
pod_url: "http://localhost:3002/"
serve_static_assets: true

View file

@ -15,7 +15,6 @@ Diaspora::Application.configure do
# Show full error reports and disable caching
config.consider_all_requests_local = true
config.action_view.debug_rjs = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send

View file

@ -20,7 +20,7 @@ Rails.application.config.middleware.use OmniAuth::Builder do
provider :tumblr, SERVICES['tumblr']['consumer_key'], SERVICES['tumblr']['consumer_secret']
end
if SERVICES['facebook'] && SERVICES['facebook']['app_id'] && SERVICES['facebook']['app_secret']
provider :facebook, SERVICES['facebook']['app_id'], SERVICES['facebook']['app_secret'], { :scope => "publish_stream,email,offline_access",
provider :facebook, SERVICES['facebook']['app_id'], SERVICES['facebook']['app_secret'], { :display => "popup", :scope => "publish_stream,email,offline_access",
:client_options => {:ssl => {:ca_file => EnviromentConfiguration.ca_cert_file_location}}}
end
end

View file

@ -6,10 +6,10 @@ if !AppConfig.single_process_mode?
if redis_to_go = ENV["REDISTOGO_URL"]
uri = URI.parse(redis_to_go)
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
elsif AppConfig[:redis_url]
Resque.redis = Redis.new(:host => AppConfig[:redis_url], :port => 6379)
elsif ENV['RAILS_ENV']== 'integration2'
Resque.redis = Redis.new(:host => 'localhost', :port => 6380)
elsif AppConfig[:redis_url]
Resque.redis = Redis.new(:host => AppConfig[:redis_url], :port => 6379)
end
end

View file

@ -5,6 +5,14 @@
fa:
devise:
failure:
invalid: "نام کاربری و یا رمز عبور اشتباه است."
invalid_token: "نشانه تأیید هویت اشتباه است."
locked: "حساب شما قفل شده است."
timeout: "جلسه شما منقضی شده است، برای ادامه لطفا دوباره وارد شوید ."
unauthenticated: "قبل از ادامه, شما باید به سیستم وارد شوید یا ثبت نام کنید."
unconfirmed: "قبل از ادامه، شما باید حساب کاربری خود را تأیید کنید."
errors:
messages:
already_confirmed: "قبلا تایید شد"

View file

@ -32,13 +32,15 @@ nn:
invitation_instructions:
accept: "Godta invitasjonen"
be_yourself: "Ver deg sjølv"
be_yourself_paragraph: "Internettet har laga nye, unike vegar for korleis me kan uttrykka oss. %{strong_diaspora} lar deg vere deg sjølv og dele på den måten du ynskjer, både med eller utan det ekte namnet ditt."
be_yourself_paragraph: "Verdsveven har laga nye, unike vegar for korleis me kan uttrykka oss. %{strong_diaspora} lar deg vere deg sjølv og dele på den måten du ynskjer, både med eller utan det ekte namnet ditt."
cubbies: "Cubbi.es"
displaying_correctly: "Email not displaying correctly? %{link} in your browser"
email_address: "questions@joindiaspora.com"
email_us: "For å få vite meir eller for å få hjelp med Diaspora*-kontoen din, ta kontakt med oss på %{email}."
finally: "Endeleg er det her!"
friends_saying: "Dette seier venene dine..."
get_connected: "Vert tilknytt"
get_connected_paragraph: "Som ei internasjonal rørsle med mål om å ein betre verdsvev, er %{strong_diaspora} sitt viktigaste verkemiddel samhaldet. Treff nye menneske, del med vener, og ver med på moroa."
have_fun: "Ha det gama"
have_fun_paragraph: "%{strong_diaspora} handlar om å oppdage framifrå nytt innhald og nye folk på nettet. %{link}, verda si fyrste %{strong_diaspora}-tilleggsprogram er berre byrja. Samle og el nettet i all si prakt."
help_fund: "gje ein slant til Diaspora"

View file

@ -935,10 +935,6 @@ ar:
saved: "تم الحفظ!"
what_facebook_does: "to Diaspora. This will pull your name and photo, and enable cross-positng."
who_are_you: "من أنت؟"
logged_out:
go_mobile: "اذهب الى الجوال"
signed_out: "تم تسجيل خروجك من دياسبرا"
works_on_modern: "يعمل على جميع الهواتف الذكية الحديثة"
privacy_settings:
ignored_users: "المستخدمين الذين تم تجاهلهم"
stop_ignoring: "اوقف التجاهل"

View file

@ -246,12 +246,6 @@ art-nvi:
getting_started:
well_hello_there: "Tse, kaltxì tsatseng!"
who_are_you: "Pesu nga lu"
logged_out:
go_mobile: "Sar hì'ia eltuti lefngap."
on_your_mobile_device: "mì ngeyä hì'ia eltu lefngap fte sar diasporati ahì'i"
signed_out: "Nga holum Diasporait"
simply_visit: "Frrfen"
works_on_modern: "Fì'u tìkangkem si mì syawyu lefngap lefkrr nìwotx"
privacy_settings:
title: "Le'aw 'awpoä Sìfkeytok"
update:

View file

@ -912,12 +912,6 @@ bg:
what_are_you_in_to: "От какво се интересувате?"
what_facebook_does: "с Diaspora. Така някои данни (име и снимка) ще бъдат попълнени автоматично и ще можете да публикувате съобщения във Facebook от Diaspora."
who_are_you: "Кой сте вие?"
logged_out:
go_mobile: "Пробвайте и версията за мобилни устройства."
on_your_mobile_device: "от вашето мобилно устройство за достъп до мобилната версия на Diaspora*."
signed_out: "Отписахте се от Diaspora*"
simply_visit: "Просто посетете"
works_on_modern: "Съвместима е с всеки съвременен смартфон"
privacy_settings:
ignored_users: "Игнорирани потребители"
stop_ignoring: "Прекратяване на игнорирането"

View file

@ -855,8 +855,6 @@ cs:
well_hello_there: "Jé, ahojte!"
what_facebook_does: "to Diaspora. This will pull your name and photo, and enable cross-positng."
who_are_you: "Kdo jste?"
logged_out:
signed_out: "Odhlásili jste se z Diaspory*"
privacy_settings:
title: "Nastavení soukromí"
public:

View file

@ -915,12 +915,6 @@ da:
what_are_you_in_to: "Hvad er dine interesser?"
what_facebook_does: "til diaspora. Dette vil hente dit navn og foto, samt gøre det muligt at skrive indlæg på tværs af platforme."
who_are_you: "Hvem er du?"
logged_out:
go_mobile: "Bliv mobil nu."
on_your_mobile_device: "på din mobile enhed til at få adgang til Diaspora* mobil."
signed_out: "Du er logget ud af Diaspora*"
simply_visit: "Du skal blot besøge"
works_on_modern: "Virker på alle moderne smartphones"
privacy_settings:
ignored_users: "Ignorerede brugere"
stop_ignoring: "Hold op med at ignorere"

View file

@ -986,12 +986,6 @@ de:
what_are_you_in_to: "Was machst du so?"
what_facebook_does: "mit Diaspora verbindest. Hierbei wird dein Name und dein Foto geladen, um das Veröffentlichen bei Facebook zu ermöglichen."
who_are_you: "Wer bist Du?"
logged_out:
go_mobile: "Jetzt mobil werden."
on_your_mobile_device: "auf deinem mobilen Gerät, um die mobile Seite von Diaspora* aufzurufen."
signed_out: "Du hast dich aus Diaspora* ausgeloggt"
simply_visit: "Besuche einfach"
works_on_modern: "Funktioniert auf allen modernen Smartphones"
privacy_settings:
ignored_users: "Benutzer, die ignoriert werden"
stop_ignoring: "Aufhören, zu ignorieren"

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