Merge branch 'release/0.6.0.0'

This commit is contained in:
Dennis Schubert 2016-08-27 00:26:05 +02:00
commit deeabb26af
No known key found for this signature in database
GPG key ID: 5A0304BEA7966D7E
1330 changed files with 38711 additions and 44372 deletions

36
.codeclimate.yml Normal file
View file

@ -0,0 +1,36 @@
---
engines:
brakeman:
enabled: true
bundler-audit:
enabled: true
csslint:
enabled: true
duplication:
enabled: true
config:
languages:
- ruby
- javascript
eslint:
enabled: true
channel: "eslint-2"
fixme:
enabled: true
rubocop:
enabled: true
ratings:
paths:
- Gemfile.lock
- "**.erb"
- "**.haml"
- "**.rb"
- "**.css"
- "**.js"
exclude_paths:
- config/
- db/
- features/
- script/
- spec/
- vendor/

258
.eslintrc Normal file
View file

@ -0,0 +1,258 @@
{
"env": {
"browser": true,
"jasmine": true,
"jquery": true
},
"globals": {
"_": false,
"autosize": false,
"Backbone": false,
"Bloodhound": false,
"gon": false,
"Handlebars": false,
"HandlebarsTemplates": false,
"ImagePaths": false,
"jsxc": false,
"L": false,
"Routes": false,
"OSM": false,
"qq": false,
"blueimp": false,
"loginAs": true,
"logout": true,
"spec": true,
"context": true,
"factory": true,
"stubView": true,
"app": true,
"Diaspora": true,
"Keycodes": true,
"PosixBracketExpressions": true
},
"rules": {
"accessor-pairs": 0,
"array-bracket-spacing": [2, "never"],
"array-callback-return": 0,
"arrow-body-style": 0,
"arrow-parens": 0,
"arrow-spacing": 0,
"block-scoped-var": 0,
"block-spacing": [2, "always"],
"brace-style": [2, "1tbs", {"allowSingleLine": true}],
"callback-return": 0,
"camelcase": 2,
"comma-dangle": [2, "never"],
"comma-spacing": [2, {"before": false, "after": true}],
"comma-style": [2, "last"],
"complexity": [1, {"max": 20}],
"computed-property-spacing": [2, "never"],
"consistent-return": 2,
"consistent-this": 0,
"constructor-super": 0,
"curly": [2, "all"],
"default-case": 0,
"dot-location": [2, "property"],
"dot-notation": 2,
"eol-last": 2,
"eqeqeq": [2, "allow-null"],
"func-names": 0,
"func-style": 0,
"generator-star-spacing": 0,
"global-require": 0,
"guard-for-in": 1,
"handle-callback-err": 0,
"id-blacklist": 0,
"id-length": 0,
"id-match": 0,
"indent": [2, 2, {"SwitchCase": 1, "VariableDeclarator": {"var": 2, "let": 2, "const": 3}}],
"init-declarations": 0,
"jsx-quotes": 0,
"key-spacing": [2, {"beforeColon": false, "afterColon": true}],
"keyword-spacing": 2,
"linebreak-style": 0,
"lines-around-comment": 0,
"max-depth": 0,
"max-len": [1, {"code": 120, "ignoreUrls": true}],
"max-lines": 0,
"max-nested-callbacks": 0,
"max-params": 0,
"max-statements": 0,
"max-statements-per-line": 0,
"new-cap": [2, {"capIsNew": false}],
"new-parens": 2,
"newline-after-var": 0,
"newline-before-return": 0,
"newline-per-chained-call": 0,
"no-alert": 0,
"no-array-constructor": 2,
"no-bitwise": 0,
"no-caller": 2,
"no-case-declarations": 2,
"no-catch-shadow": 0,
"no-class-assign": 2,
"no-cond-assign": 2,
"no-confusing-arrow": 2,
"no-console": 2,
"no-const-assign": 2,
"no-constant-condition": 2,
"no-continue": 0,
"no-control-regex": 2,
"no-debugger": 2,
"no-delete-var": 2,
"no-div-regex": 0,
"no-dupe-args": 2,
"no-dupe-class-members": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-duplicate-imports": 0,
"no-else-return": 2,
"no-empty": 2,
"no-empty-character-class": 2,
"no-empty-function": 1,
"no-empty-pattern": 2,
"no-eq-null": 0,
"no-eval": 2,
"no-ex-assign": 2,
"no-extend-native": 2,
"no-extra-bind": 2,
"no-extra-boolean-cast": 2,
"no-extra-label": 0,
"no-extra-parens": 0,
"no-extra-semi": 2,
"no-fallthrough": 2,
"no-floating-decimal": 0,
"no-func-assign": 2,
"no-implicit-coercion": 0,
"no-implicit-globals": 0,
"no-implied-eval": 0,
"no-inline-comments": 0,
"no-inner-declarations": 2,
"no-invalid-regexp": 2,
"no-invalid-this": 0,
"no-irregular-whitespace": 2,
"no-iterator": 0,
"no-label-var": 0,
"no-labels": 0,
"no-lone-blocks": 0,
"no-lonely-if": 2,
"no-loop-func": 2,
"no-magic-numbers": 0,
"no-mixed-operators": 0,
"no-mixed-requires": 0,
"no-mixed-spaces-and-tabs": 2,
"no-multi-spaces": 1,
"no-multi-str": 0,
"no-multiple-empty-lines": [1, {"max": 1}],
"no-native-reassign": 2,
"no-negated-condition": 0,
"no-negated-in-lhs": 2,
"no-nested-ternary": 0,
"no-new": 0,
"no-new-func": 0,
"no-new-object": 0,
"no-new-require": 0,
"no-new-symbol": 0,
"no-new-wrappers": 0,
"no-obj-calls": 2,
"no-octal": 2,
"no-octal-escape": 0,
"no-param-reassign": 0,
"no-path-concat": 0,
"no-plusplus": 0,
"no-process-env": 0,
"no-process-exit": 0,
"no-proto": 2,
"no-prototype-builtins": 0,
"no-redeclare": 2,
"no-regex-spaces": 2,
"no-restricted-globals": 0,
"no-restricted-imports": 0,
"no-restricted-modules": 0,
"no-restricted-syntax": 0,
"no-return-assign": 2,
"no-script-url": 0,
"no-self-assign": 2,
"no-self-compare": 2,
"no-sequences": 2,
"no-shadow": 1,
"no-shadow-restricted-names": 2,
"no-spaced-func": 1,
"no-sparse-arrays": 2,
"no-sync": 0,
"no-ternary": 0,
"no-this-before-super": 2,
"no-throw-literal": 2,
"no-trailing-spaces": 2,
"no-undef": 2,
"no-undef-init": 0,
"no-undefined": 0,
"no-underscore-dangle": 0,
"no-unexpected-multiline": 2,
"no-unmodified-loop-condition": 1,
"no-unneeded-ternary": 1,
"no-unreachable": 2,
"no-unsafe-finally": 1,
"no-unused-expressions": 0,
"no-unused-labels": 2,
"no-unused-vars": 2,
"no-use-before-define": [2, {"functions": false, "classes": true}],
"no-useless-call": 1,
"no-useless-computed-key": 0,
"no-useless-concat": 0,
"no-useless-constructor": 0,
"no-useless-escape": 0,
"no-useless-rename": 0,
"no-var": 0,
"no-void": 0,
"no-warning-comments": 0,
"no-whitespace-before-property": 2,
"no-with": 2,
"object-curly-newline": 0,
"object-curly-spacing": [2, "never"],
"object-property-newline": 0,
"object-shorthand": 0,
"one-var": 0,
"one-var-declaration-per-line": 0,
"operator-assignment": 0,
"operator-linebreak": 0,
"padded-blocks": [2, "never"],
"prefer-arrow-callback": 0,
"prefer-const": 0,
"prefer-reflect": 0,
"prefer-rest-params": 0,
"prefer-spread": 0,
"prefer-template": 0,
"quote-props": 0,
"quotes": [2, "double", "avoid-escape"],
"radix": [2, "always"],
"require-jsdoc": 0,
"require-yield": 0,
"rest-spread-spacing": 0,
"semi": [2, "always"],
"semi-spacing": [2, {"before": false, "after": true}],
"sort-imports": 0,
"sort-vars": 0,
"space-before-blocks": [2, "always"],
"space-before-function-paren": [2, "never"],
"space-in-parens": [2, "never"],
"space-infix-ops": [2, {"int32Hint": true}],
"space-unary-ops": [2, {"words": true, "nonwords": false}],
"spaced-comment": [2, "always", {"markers": ["="]}],
"strict": 0,
"template-curly-spacing": 0,
"unicode-bom": 0,
"use-isnan": 2,
"valid-jsdoc": 0,
"valid-typeof": 2,
"vars-on-top": 0,
"wrap-iife": 0,
"wrap-regex": 0,
"yield-star-spacing": 0,
"yoda": [2, "never"]
}
}

24
.gitignore vendored
View file

@ -1,13 +1,13 @@
# xmpp certificates, keys and user data
config/vines/*.crt
config/vines/*.key
# XMPP certificates, keys and user data
config/certs/*.crt
config/certs/*.key
config/prosody.cfg.lua
#trademark sillyness
# Trademark sillyness
app/views/home/_show.*
app/views/terms/terms.*
app/assets/images/custom/
# Configuration files
config/diaspora.yml
config/heroku.yml
@ -21,8 +21,9 @@ vendor/cache/
config/database.yml
.rvmrc_custom
.rvmrc.local
config/oidc_key.pem
#Mailing list stuff
# Mailing list stuff
config/email_offset
config/mailing_list.csv
@ -42,9 +43,9 @@ public/500.html
app/assets/images/branding-*.png
app/assets/images/branding/logos-*.png
app/assets/images/icons-*.png
app/assets/images/social_media_logos-*.png
app/assets/images/social-media-logos-*.png
#Documentation
# Documentation
.yardoc/
doc/
@ -69,15 +70,18 @@ tmp/
*.swp
*~
*#
*.bak
*.save
*.autosave
nbproject
patches-*
capybara-*.html
dump.rdb
#Rubinius's JIT
# Rubinius's JIT
*.rbc
#IDE
# IDE
diaspora.iml
# Dolphin's directory's preferences files

5
.haml-lint.yml Normal file
View file

@ -0,0 +1,5 @@
linters:
LineLength:
max: 120
SpaceInsideHashAttributes:
style: no_space

View file

@ -1,9 +0,0 @@
java_script:
enabled: true
config_file: config/.jshint.json
ignore_file: config/.jshint_ignore
ruby:
enabled: true
config_file: .rubocop.yml
scss:
enabled: false

View file

@ -1 +0,0 @@
config/.jshint_ignore

View file

@ -1 +0,0 @@
config/.jshint.json

4
.pronto.yml Normal file
View file

@ -0,0 +1,4 @@
all:
exclude:
- "vendor/**/*"
consolidate_comments: true

View file

@ -1 +1 @@
2.1
2.3

231
.scss-lint.yml Normal file
View file

@ -0,0 +1,231 @@
scss_files: 'app/assets/stylesheets/**/*.scss'
plugin_directories: ['.scss-linters']
# List of gem names to load custom linters from (make sure they are already
# installed)
plugin_gems: []
linters:
BangFormat:
enabled: true
space_before_bang: true
space_after_bang: false
BemDepth:
enabled: false
max_elements: 1
BorderZero:
enabled: true
convention: zero # or `none`
ColorKeyword:
enabled: true
ColorVariable:
enabled: true
Comment:
enabled: true
DebugStatement:
enabled: true
DeclarationOrder:
enabled: true
DisableLinterReason:
enabled: true
DuplicateProperty:
enabled: true
ElsePlacement:
enabled: true
style: same_line # or 'new_line'
EmptyLineBetweenBlocks:
enabled: true
ignore_single_line_blocks: true
EmptyRule:
enabled: true
ExtendDirective:
enabled: false
FinalNewline:
enabled: true
present: true
HexLength:
enabled: true
style: short # or 'long'
HexNotation:
enabled: true
style: lowercase # or 'uppercase'
HexValidation:
enabled: true
IdSelector:
enabled: true
ImportantRule:
enabled: true
ImportPath:
enabled: true
leading_underscore: false
filename_extension: false
Indentation:
enabled: true
allow_non_nested_indentation: false
character: space # or 'tab'
width: 2
LeadingZero:
enabled: true
style: exclude_zero # or 'include_zero'
MergeableSelector:
enabled: true
force_nesting: true
NameFormat:
enabled: true
allow_leading_underscore: true
convention: hyphenated_lowercase # or 'camel_case', or 'snake_case', or a regex pattern
NestingDepth:
enabled: true
max_depth: 3
ignore_parent_selectors: false
PlaceholderInExtend:
enabled: true
PropertyCount:
enabled: false
include_nested: false
max_properties: 10
PropertySortOrder:
enabled: true
ignore_unspecified: false
min_properties: 2
separate_groups: false
PropertySpelling:
enabled: true
extra_properties: []
PropertyUnits:
enabled: true
global: [
'ch', 'em', 'ex', 'rem', # Font-relative lengths
'cm', 'in', 'mm', 'pc', 'pt', 'px', 'q', # Absolute lengths
'vh', 'vw', 'vmin', 'vmax', # Viewport-percentage lengths
'deg', 'grad', 'rad', 'turn', # Angle
'ms', 's', # Duration
'Hz', 'kHz', # Frequency
'dpi', 'dpcm', 'dppx', # Resolution
'%'] # Other
properties: {}
QualifyingElement:
enabled: true
allow_element_with_attribute: false
allow_element_with_class: false
allow_element_with_id: false
SelectorDepth:
enabled: true
max_depth: 3
SelectorFormat:
enabled: true
convention: hyphenated_lowercase # or 'strict_BEM', or 'hyphenated_BEM', or 'snake_case', or 'camel_case', or a regex pattern
Shorthand:
enabled: true
allowed_shorthands: [1, 2, 3]
SingleLinePerProperty:
enabled: true
allow_single_line_rule_sets: true
SingleLinePerSelector:
enabled: true
SpaceAfterComma:
enabled: true
SpaceAfterPropertyColon:
enabled: true
style: one_space # or 'no_space', or 'at_least_one_space', or 'aligned'
SpaceAfterPropertyName:
enabled: true
SpaceAfterVariableName:
enabled: true
SpaceAroundOperator:
enabled: true
style: one_space # or 'no_space'
SpaceBeforeBrace:
enabled: true
style: space # or 'new_line'
allow_single_line_padding: false
SpaceBetweenParens:
enabled: true
spaces: 0
StringQuotes:
enabled: true
style: single_quotes # or double_quotes
TrailingSemicolon:
enabled: true
TrailingWhitespace:
enabled: true
TrailingZero:
enabled: false
TransitionAll:
enabled: false
UnnecessaryMantissa:
enabled: true
UnnecessaryParentReference:
enabled: true
UrlFormat:
enabled: true
UrlQuotes:
enabled: true
VariableForProperty:
enabled: false
properties: []
VendorPrefix:
enabled: true
identifier_list: base
additional_identifiers: []
excluded_identifiers: []
ZeroUnit:
enabled: true
Compass::*:
enabled: false

View file

@ -1,14 +1,14 @@
language: ruby
rvm:
- 2.3.1
- 2.1
- 2.0
env:
- DB=postgres BUILD_TYPE=other
- DB=mysql BUILD_TYPE=other
- DB=postgres BUILD_TYPE=cucumber
- DB=postgresql BUILD_TYPE=cucumber
- DB=mysql BUILD_TYPE=cucumber
- DB=postgresql BUILD_TYPE=other
- DB=mysql BUILD_TYPE=other
sudo: false
cache:
@ -19,11 +19,17 @@ cache:
branches:
only:
- 'master'
- 'stable'
- 'next-minor'
- 'develop'
before_install: gem install bundler
bundler_args: "--without development production heroku --jobs 3 --retry 3"
before_install:
- gem install bundler
- 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
bundler_args: "--deployment --without development production --with mysql postgresql --jobs 3 --retry 3"
script: "./script/ci/build.sh"

View file

@ -1,3 +1,208 @@
# 0.6.0.0
## Warning: This release contains long migrations
This diaspora\* releases comes with a few database cleanup migrations and they could possible take a while. While you should always do that, it is especially important this time to make sure you run the migrations inside a detachable environment like `screen` or `tmux`. A interrupted SSH session could possibly harm your database. Also, please make a backup.
## The DB environment variable is gone
With Bundler 1.10 supporting optional groups, we removed the DB environment variable. When updating to this release, please update
bundler and select the database support you want:
```sh
gem install bundler
bundle install --with mysql # For MySQL and MariaDB
bundle install --with postgresql # For PostgreSQL
```
For production setups we now additionally recommend adding the `--deployment` flag.
If you set the DB environment variable anywhere, that's no longer necessary.
## Supported Ruby versions
This release recommends using Ruby 2.3, while retaining Ruby 2.1 as an officially supported version.
Ruby 2.0 is no longer officially supported.
## Configuration changes
Please note that the default listen parameter for production setups got
changed. diaspora\* will no longer listen on `0.0.0.0:3000` as it will now
bind to an UNIX socket at `unix:tmp/diaspora.sock`. Please change your local
`diaspora.yml` if necessary.
## Redis namespace support dropped
We dropped support for Redis namespaces in this release. If you previously set
a custom namespace, please note that diaspora\* will no longer use the
configured value. By default, Redis supports up to 8 databases which can be
selected via the Redis URL in `diaspora.yml`. Please check the examples
provided in our configuration example file.
## Terms of Use design changes
With the port to Bootstrap 3, app/views/terms/default.haml has a new structure. If you have created a customised app/views/terms/terms.haml or app/views/terms/terms.erb file, you will need to edit those files to base your customisations on the new default.haml file.
## API authentication
This release makes diaspora\* a OpenID Connect provider. This means you can authenticate to third parties with your diaspora\* account and let
them act as your diaspora\* account on your behalf. This feature is still considered in early development, we still expect edge cases and advanced
features of the specificiation to not be handled correctly or be missing. But we expect a basic OpenID Connect compliant client to work. Please submit issues!
We will also most likely still change the authorization scopes we offer and started with a very minimal set.
Most work still required is on documentation as well as designing and implementing the data API for all of Diaspora's functionality.
Contributions are very welcome, the hard work is done!
## Vines got replaced by Prosody
Due to many issues with Vines, we decided to remove Vines and offer a Prosody
example configuration instead. [Check the
wiki](https://wiki.diasporafoundation.org/Integration/Chat#Vines_to_Prosody)
for more information on how to migrate to Prosody if you've been using Vines
before.
## Sidekiq queue changes
We've decreased the amount of sidekiq queues from 13 to 5 in PR [#6950](https://github.com/diaspora/diaspora/pull/6950).
The new queues are organized according to priority for the jobs they will process. When upgrading please make sure to
empty the sidekiq queues before shutting down the server for an update.
If you run your sidekiq with a custom queue configuration, please make sure to update that for the new queues.
The new queues are: `urgent, high, medium, low, default`.
When you upgrade to the new version, some jobs may persist in the old queues. To move them to the default queue,
so they're processed, run:
```
bin/rake migrations:legacy_queues
```
Note that this will retry all dead jobs, if you want to prevent that empty the dead queue first.
The command will report queues that still have jobs and launch sidekiq process for that queues.
## Refactor
* Improve bookmarklet [#5904](https://github.com/diaspora/diaspora/pull/5904)
* Update listen configuration to listen on unix sockets by default [#5974](https://github.com/diaspora/diaspora/pull/5974)
* Port to Bootstrap 3 [#6015](https://github.com/diaspora/diaspora/pull/6015)
* Use a fixed width for the mobile drawer [#6057](https://github.com/diaspora/diaspora/pull/6057)
* Replace jquery.autoresize with autosize [#6104](https://github.com/diaspora/diaspora/pull/6104)
* Improve mobile conversation design [#6087](https://github.com/diaspora/diaspora/pull/6087)
* Replace remaining faceboxes with Bootstrap modals [#6106](https://github.com/diaspora/diaspora/pull/6106) [#6161](https://github.com/diaspora/diaspora/pull/6161)
* Rewrite header using Bootstrap 3 [#6109](https://github.com/diaspora/diaspora/pull/6109) [#6130](https://github.com/diaspora/diaspora/pull/6130) [#6132](https://github.com/diaspora/diaspora/pull/6132)
* Use upstream CSS mappings for Entypo [#6158](https://github.com/diaspora/diaspora/pull/6158)
* Replace some mobile icons with Entypo [#6218](https://github.com/diaspora/diaspora/pull/6218)
* Refactor publisher backbone view [#6228](https://github.com/diaspora/diaspora/pull/6228)
* Replace MBP.autogrow with autosize on mobile [#6261](https://github.com/diaspora/diaspora/pull/6261)
* Improve mobile drawer transition [#6233](https://github.com/diaspora/diaspora/pull/6233)
* Remove unused header icons and an unused favicon [#6283](https://github.com/diaspora/diaspora/pull/6283)
* Replace mobile icons for post interactions with Entypo icons [#6291](https://github.com/diaspora/diaspora/pull/6291)
* Replace jquery.autocomplete with typeahead.js [#6293](https://github.com/diaspora/diaspora/pull/6293)
* Redesign sidebars on stream pages [#6309](https://github.com/diaspora/diaspora/pull/6309)
* Improve ignored users styling [#6349](https://github.com/diaspora/diaspora/pull/6349)
* Use Blueimp image gallery instead of lightbox [#6301](https://github.com/diaspora/diaspora/pull/6301)
* Unify mobile and desktop header design [#6285](https://github.com/diaspora/diaspora/pull/6285)
* Add white background and box-shadow to stream elements [#6324](https://github.com/diaspora/diaspora/pull/6324)
* Override Bootstrap list group design [#6345](https://github.com/diaspora/diaspora/pull/6345)
* Clean up publisher code [#6336](https://github.com/diaspora/diaspora/pull/6336)
* Port conversations to new design [#6431](https://github.com/diaspora/diaspora/pull/6431)
* Hide cancel button in publisher on small screens [#6435](https://github.com/diaspora/diaspora/pull/6435)
* Replace mobile background with color [#6415](https://github.com/diaspora/diaspora/pull/6415)
* Port flash messages to backbone [#6395](https://github.com/diaspora/diaspora/pull/6395)
* Change login/registration/forgot password button color [#6504](https://github.com/diaspora/diaspora/pull/6504)
* A note regarding ignoring users was added to the failure messages on commenting/liking [#6646](https://github.com/diaspora/diaspora/pull/6646)
* Replace sidetiq with sidekiq-cron [#6616](https://github.com/diaspora/diaspora/pull/6616)
* Refactor mobile comment section [#6509](https://github.com/diaspora/diaspora/pull/6509)
* Set vertical resize as default for all textareas [#6654](https://github.com/diaspora/diaspora/pull/6654)
* Unifiy max-widths and page layouts [#6675](https://github.com/diaspora/diaspora/pull/6675)
* Enable autosizing for all textareas [#6674](https://github.com/diaspora/diaspora/pull/6674)
* Stream faces are gone [#6686](https://github.com/diaspora/diaspora/pull/6686)
* Refactor mobile javascript and add tests [#6394](https://github.com/diaspora/diaspora/pull/6394)
* Dropped `parent_author_signature` from relayables [#6586](https://github.com/diaspora/diaspora/pull/6586)
* Attached ShareVisibilities to the User, not the Contact [#6723](https://github.com/diaspora/diaspora/pull/6723)
* Refactor mentions input, now based on typeahead.js [#6728](https://github.com/diaspora/diaspora/pull/6728)
* Optimized the pod up checks [#6727](https://github.com/diaspora/diaspora/pull/6727)
* Prune and do not create aspect visibilities for public posts [#6732](https://github.com/diaspora/diaspora/pull/6732)
* Optimized mobile login and registration forms [#6764](https://github.com/diaspora/diaspora/pull/6764)
* Redesign stream pages [#6535](https://github.com/diaspora/diaspora/pull/6535)
* Improve search and mentions suggestions [#6788](https://github.com/diaspora/diaspora/pull/6788)
* Redesign back to top button [#6782](https://github.com/diaspora/diaspora/pull/6782)
* Adjusted Facebook integration for a successful review [#6778](https://github.com/diaspora/diaspora/pull/6778)
* Redirect to the sign-in page instead of the stream on account deletion [#6784](https://github.com/diaspora/diaspora/pull/6784)
* Removed own unicorn killer by a maintained third-party gem [#6792](https://github.com/diaspora/diaspora/pull/6792)
* Removed deprecated `REDISTOGO_URL` environment variable [#6863](https://github.com/diaspora/diaspora/pull/6863)
* Use Poltergeist instead of Selenium [#6768](https://github.com/diaspora/diaspora/pull/6768)
* Redesigned the landing page and added dedicated notes for podmins [#6268](https://github.com/diaspora/diaspora/pull/6268)
* Moved the entire federation implementation into its own gem. 🎉 [#6873](https://github.com/diaspora/diaspora/pull/6873)
* Remove `StatusMessage#raw_message` [#6921](https://github.com/diaspora/diaspora/pull/6921)
* Extract photo export into a service class [#6922](https://github.com/diaspora/diaspora/pull/6922)
* Use handlebars template for aspect membership dropdown [#6864](https://github.com/diaspora/diaspora/pull/6864)
* Extract relayable signatures into their own tables [#6932](https://github.com/diaspora/diaspora/pull/6932)
* Remove outdated columns from posts table [#6940](https://github.com/diaspora/diaspora/pull/6940)
* Remove some unused routes [#6781](https://github.com/diaspora/diaspora/pull/6781)
* Consolidate sidekiq queues [#6950](https://github.com/diaspora/diaspora/pull/6950)
* Don't re-render the whole comment stream when adding comments [#6406](https://github.com/diaspora/diaspora/pull/6406)
* Drop legacy invitation system [#6976](https://github.com/diaspora/diaspora/pull/6976)
* More consistent and updated meta tags throughout [#6998](https://github.com/diaspora/diaspora/pull/6998)
## Bug fixes
* Destroy Participation when removing interactions with a post [#5852](https://github.com/diaspora/diaspora/pull/5852)
* Improve accessibility of a couple pages [#6227](https://github.com/diaspora/diaspora/pull/6227)
* Capitalize "Powered by diaspora" [#6254](https://github.com/diaspora/diaspora/pull/6254)
* Display username and avatar for NSFW posts in mobile view [#6245](https://github.com/diaspora/diaspora/pull/6245)
* Prevent multiple comment boxes on mobile [#6363](https://github.com/diaspora/diaspora/pull/6363)
* Correctly display location in post preview [#6429](https://github.com/diaspora/diaspora/pull/6429)
* Do not fail when submitting an empty comment in the mobile view [#6543](https://github.com/diaspora/diaspora/pull/6543)
* Limit flash message width on small devices [#6529](https://github.com/diaspora/diaspora/pull/6529)
* Add navbar on mobile when not logged in [#6483](https://github.com/diaspora/diaspora/pull/6483)
* Fix timeago tooltips for reshares [#6648](https://github.com/diaspora/diaspora/pull/6648)
* "Getting started" is now turned off after first visit on mobile [#6681](https://github.com/diaspora/diaspora/pull/6681)
* Fixed a 500 when liking on mobile without JS enabled [#6683](https://github.com/diaspora/diaspora/pull/6683)
* Fixed profile image upload in the mobile UI [#6684](https://github.com/diaspora/diaspora/pull/6684)
* Fixed eye not stopping all processes when trying to exit `script/server` [#6693](https://github.com/diaspora/diaspora/pull/6693)
* Do not change contacts count when marking notifications on the contacts page as read [#6718](https://github.com/diaspora/diaspora/pull/6718)
* Fix typeahead for non-latin characters [#6741](https://github.com/diaspora/diaspora/pull/6741)
* Fix upload size error on mobile [#6803](https://github.com/diaspora/diaspora/pull/6803)
* Connection tester handles invalid NodeInfo implementations [#6890](https://github.com/diaspora/diaspora/pull/6890)
* Do not allow to change email to an already used one [#6905](https://github.com/diaspora/diaspora/pull/6905)
* Correctly filter mentions on the server side [#6902](https://github.com/diaspora/diaspora/pull/6902)
* Add aspects to the aspect membership dropdown when creating them on the getting started page [#6864](https://github.com/diaspora/diaspora/pull/6864)
* Strip markdown from message preview in conversations list [#6923](https://github.com/diaspora/diaspora/pull/6923)
* Improve tag stream performance [#6903](https://github.com/diaspora/diaspora/pull/6903)
* Only show mutual contacts in conversations auto suggestions [#7001](https://github.com/diaspora/diaspora/pull/7001)
## Features
* Support color themes [#6033](https://github.com/diaspora/diaspora/pull/6033)
* Add mobile services and privacy settings pages [#6086](https://github.com/diaspora/diaspora/pull/6086)
* Optionally make your extended profile details public [#6162](https://github.com/diaspora/diaspora/pull/6162)
* Add admin dashboard showing latest diaspora\* version [#6216](https://github.com/diaspora/diaspora/pull/6216)
* Display poll & location on mobile [#6238](https://github.com/diaspora/diaspora/pull/6238)
* Update counts on contacts page dynamically [#6240](https://github.com/diaspora/diaspora/pull/6240)
* Add support for relay based public post federation [#6207](https://github.com/diaspora/diaspora/pull/6207)
* Bigger mobile publisher [#6261](https://github.com/diaspora/diaspora/pull/6261)
* Backend information panel & health checks for known pods [#6290](https://github.com/diaspora/diaspora/pull/6290)
* Allow users to view a posts locations on an OpenStreetMap [#6256](https://github.com/diaspora/diaspora/pull/6256)
* Redesign and unify error pages [#6428](https://github.com/diaspora/diaspora/pull/6428)
* Redesign and refactor report admin interface [#6378](https://github.com/diaspora/diaspora/pull/6378)
* Add permalink icon to stream elements [#6457](https://github.com/diaspora/diaspora/pull/6457)
* Move reshare count to interactions for stream elements [#6487](https://github.com/diaspora/diaspora/pull/6487)
* Posts of ignored users are now visible on that profile page [#6617](https://github.com/diaspora/diaspora/pull/6617)
* Add white color theme [#6631](https://github.com/diaspora/diaspora/pull/6631)
* Add answer counts to poll [#6641](https://github.com/diaspora/diaspora/pull/6641)
* Check for collapsible posts after images in posts have loaded [#6671](https://github.com/diaspora/diaspora/pull/6671)
* Add reason for post report to email sent to admins [#6679](https://github.com/diaspora/diaspora/pull/6679)
* Add links to the single post view of the related post to photos in the photo stream [#6621](https://github.com/diaspora/diaspora/pull/6621)
* Add a note for people with disabled JavaScript [#6777](https://github.com/diaspora/diaspora/pull/6777)
* Do not include conversation subject in notification mail [#6910](https://github.com/diaspora/diaspora/pull/6910)
* Add 'Be excellent to each other!' to the sidebar [#6914](https://github.com/diaspora/diaspora/pull/6914)
* Expose Sidekiq dead queue configuration options
* Properly support pluralization in timeago strings [#6926](https://github.com/diaspora/diaspora/pull/6926)
* Return all contacts in people search [#6951](https://github.com/diaspora/diaspora/pull/6951)
* Make screenreaders read alerts [#6973](https://github.com/diaspora/diaspora/pull/6973)
* Display message when there are no posts in a stream [#6974](https://github.com/diaspora/diaspora/pull/6974)
* Add bootstrap-markdown editor to the publisher [#6551](https://github.com/diaspora/diaspora/pull/6551)
* Don't create notifications for ignored users [#6984](https://github.com/diaspora/diaspora/pull/6984)
* Fetch missing persons when receiving a mention for them [#6992](https://github.com/diaspora/diaspora/pull/6992)
# 0.5.10.2
Update to Rails 4.2.7.1 which fixes [CVE-2016-6316](https://groups.google.com/forum/#!topic/ruby-security-ann/8B2iV2tPRSE) and [CVE-2016-6317](https://groups.google.com/forum/#!topic/ruby-security-ann/WccgKSKiPZA).
@ -193,6 +398,7 @@ and on a pod that received that data.
* Update perfect-scrollbar [#6085](https://github.com/diaspora/diaspora/pull/6085)
* Remove top margin for first heading in a post [#6110](https://github.com/diaspora/diaspora/pull/6110)
* Add link to pod statistics in right navigation [#6117](https://github.com/diaspora/diaspora/pull/6117)
* Update to Rails 4.2.3 [#6140](https://github.com/diaspora/diaspora/pull/6140)
* Refactor person related URL generation [#6168](https://github.com/diaspora/diaspora/pull/6168)
* Move webfinger and HCard generation out of the core and embed the `diaspora_federation-rails` gem [#6151](https://github.com/diaspora/diaspora/pull/6151/)
* Refactor rspec tests to to use `let` instead of before blocks [#6199](https://github.com/diaspora/diaspora/pull/6199)

118
Gemfile
View file

@ -9,22 +9,23 @@ gem "responders", "2.2.0"
# Appserver
gem "unicorn", "5.1.0", require: false
gem "unicorn-worker-killer", "0.4.4"
# Federation
gem "diaspora_federation-rails", "0.0.13"
gem "diaspora_federation-rails", "0.1.4"
# API and JSON
gem "acts_as_api", "0.4.2"
gem "acts_as_api", "0.4.3"
gem "json", "1.8.3"
gem "json-schema", "2.6.2"
# Authentication
gem "devise", "3.5.6"
gem "devise", "4.2.0"
gem "devise_lastseenable", "0.0.6"
gem "devise-token_authenticatable", "0.4.6"
gem "devise-token_authenticatable", "0.5.2"
# Captcha
@ -32,16 +33,16 @@ gem "simple_captcha2", "0.4.0", require: "simple_captcha"
# Background processing
gem "sidekiq", "3.4.2"
gem "sidekiq", "4.1.4"
gem "sinatra", "1.4.7"
# Scheduled processing
gem "sidetiq", "0.6.3"
gem "sidekiq-cron", "0.4.2"
# Compression
gem "uglifier", "3.0.0"
gem "uglifier", "3.0.1"
# Configuration
@ -53,19 +54,23 @@ gem "rack-cors", "0.4.0", require: "rack/cors"
# CSS
gem "bootstrap-sass", "2.3.2.2"
gem "bootstrap-sass", "3.3.7"
gem "compass-rails", "2.0.5"
gem "sass-rails", "5.0.4"
gem "autoprefixer-rails", "6.3.6.2"
gem "sass-rails", "5.0.6"
gem "autoprefixer-rails", "6.4.0.2"
gem "bootstrap-switch-rails", "3.3.3"
# Database
ENV["DB"] ||= "mysql"
group :mysql, optional: true do
gem "mysql2", "0.4.4"
end
group :postgresql, optional: true do
gem "pg", "0.18.4"
end
gem "mysql2", "0.4.4" if ENV["DB"] == "all" || ENV["DB"] == "mysql"
gem "pg", "0.18.4" if ENV["DB"] == "all" || ENV["DB"] == "postgres"
gem "activerecord-import", "0.13.0"
gem "activerecord-import", "0.15.0"
# File uploading
@ -79,40 +84,39 @@ gem "uuid", "2.3.8"
# Icons
gem "entypo-rails", "2.2.3"
gem "entypo-rails", "3.0.0.pre.rc2"
# JavaScript
gem "backbone-on-rails", "1.2.0.0"
gem "handlebars_assets", "0.23.0"
gem "handlebars_assets", "0.23.1"
gem "jquery-rails", "4.1.1"
gem "jquery-ui-rails", "5.0.5"
gem "js_image_paths", "0.1.0"
gem "js-routes", "1.2.6"
gem "js-routes", "1.2.9"
source "https://rails-assets.org" do
gem "rails-assets-jquery", "1.12.0" # Should be kept in sync with jquery-rails
gem "rails-assets-jquery", "2.2.1" # Should be kept in sync with jquery-rails
gem "rails-assets-markdown-it", "6.0.5"
gem "rails-assets-markdown-it", "7.0.0"
gem "rails-assets-markdown-it-hashtag", "0.4.0"
gem "rails-assets-markdown-it-diaspora-mention", "0.4.0"
gem "rails-assets-markdown-it-sanitizer", "0.4.1"
gem "rails-assets-markdown-it-diaspora-mention", "1.0.0"
gem "rails-assets-markdown-it-sanitizer", "0.4.2"
gem "rails-assets-markdown-it--markdown-it-for-inline", "0.1.1"
gem "rails-assets-markdown-it-sub", "1.0.0"
gem "rails-assets-markdown-it-sup", "1.0.0"
gem "rails-assets-highlightjs", "9.4.0"
gem "rails-assets-highlightjs", "9.6.0"
gem "rails-assets-bootstrap-markdown", "2.10.0"
# jQuery plugins
gem "rails-assets-jeresig--jquery.hotkeys", "0.2.0"
gem "rails-assets-jquery-placeholder", "2.3.1"
gem "rails-assets-jquery-textchange", "0.2.3"
gem "rails-assets-perfect-scrollbar", "0.6.11"
gem "rails-assets-jakobmattsson--jquery-elastic", "1.6.11"
gem "rails-assets-perfect-scrollbar", "0.6.12"
gem "rails-assets-autosize", "3.0.17"
gem "rails-assets-blueimp-gallery", "2.21.3"
end
gem "facebox-rails", "0.2.0"
# Localization
gem "http_accept_language", "2.0.5"
@ -122,33 +126,37 @@ gem "rails-i18n", "4.0.8"
# Mail
gem "markerb", "1.1.0"
gem "messagebus_ruby_api", "1.0.3"
# Map
gem "leaflet-rails", "0.7.7"
# Parsing
gem "nokogiri", "1.6.8"
gem "redcarpet", "3.3.4"
gem "twitter-text", "1.13.4"
gem "roxml", "3.1.6"
gem "twitter-text", "1.14.0"
gem "ruby-oembed", "0.10.1"
gem "open_graph_reader", "0.6.1"
# Services
gem "omniauth", "1.3.1"
gem "omniauth-facebook", "3.0.0"
gem "omniauth-facebook", "4.0.0"
gem "omniauth-tumblr", "1.2"
gem "omniauth-twitter", "1.2.1"
gem "twitter", "5.16.0"
gem "omniauth-wordpress", "0.2.2"
# OpenID Connect
gem "openid_connect", "0.12.0"
# Serializers
gem "active_model_serializers", "0.9.5"
# XMPP chat dependencies
gem "diaspora-vines", "0.2.0.develop.4"
gem "rails-assets-diaspora_jsxc", "0.1.4", source: "https://rails-assets.org"
gem "diaspora-prosody-config", "0.0.5"
gem "rails-assets-diaspora_jsxc", "0.1.5.develop.1", source: "https://rails-assets.org"
# Tags
@ -160,12 +168,12 @@ gem "addressable", "2.3.8", require: "addressable/uri"
gem "faraday", "0.9.2"
gem "faraday_middleware", "0.10.0"
gem "faraday-cookie_jar", "0.0.6"
gem "typhoeus", "1.0.2"
gem "typhoeus", "1.1.0"
# Views
gem "gon", "6.0.1"
gem "haml", "4.0.7"
gem "gon", "6.1.0"
gem "hamlit", "2.5.0"
gem "mobile-fu", "1.3.1"
gem "will_paginate", "3.1.0"
gem "rails-timeago", "2.11.0"
@ -185,6 +193,8 @@ gem "rubyzip", "1.2.0", require: "zip"
# https://github.com/discourse/discourse/pull/238
gem "minitest"
gem "versionist", "1.5.0"
# Windows and OSX have an execjs compatible runtime built-in, Linux users should
# install Node.js or use "therubyracer".
#
@ -208,7 +218,7 @@ group :production do # we don"t install these on travis to speed up test runs
# Process management
gem "eye", "0.7"
gem "eye", "0.8.1"
# Redirects
@ -223,20 +233,24 @@ end
group :development do
# Automatic test runs
gem "guard", "2.14.0", require: false
gem "listen", "~> 3.0.0", require: false
gem "guard-cucumber", "2.1.2", require: false
gem "guard-rspec", "4.7.2", require: false
gem "guard-rspec", "4.7.3", require: false
gem "guard-rubocop", "1.2.0", require: false
gem "rb-fsevent", "0.9.7", require: false
gem "rb-inotify", "0.9.7", require: false
# Linters
gem "jshintrb", "0.3.0"
gem "rubocop", "0.40.0"
gem "rubocop", "0.40.0"
gem "haml_lint", "0.18.1"
gem "pronto", "0.7.0"
gem "pronto-eslint", "0.7.0"
gem "pronto-rubocop", "0.7.0"
gem "pronto-haml", "0.7.0"
gem "pronto-scss", "0.7.0", require: false
# Preloading environment
gem "spring", "1.7.1"
gem "spring", "1.7.2"
gem "spring-commands-rspec", "1.0.4"
gem "spring-commands-cucumber", "1.0.1"
@ -245,7 +259,7 @@ group :development do
gem "pry-byebug"
# test coverage
gem "simplecov", "0.11.2", require: false
gem "simplecov", "0.12.0", require: false
gem "turbo_dev_assets", "0.0.2"
end
@ -254,14 +268,17 @@ group :test do
# RSpec (unit tests, some integration tests)
gem "fixture_builder", "0.4.1"
gem "fuubar", "2.0.0"
gem "test_after_commit", "1.0.0"
gem "fuubar", "2.1.1"
gem "test_after_commit", "1.1.0"
# Cucumber (integration tests)
gem "capybara", "2.7.1"
gem "database_cleaner", "1.5.3"
gem "selenium-webdriver", "2.47.1"
gem "poltergeist", "1.10.0"
gem "cucumber-api-steps", "0.13", require: false
gem "json_spec", "1.1.4"
# General helpers
@ -270,15 +287,18 @@ group :test do
gem "webmock", "2.1.0", require: false
gem "shoulda-matchers", "3.1.1"
gem "diaspora_federation-test", "0.0.13"
gem "diaspora_federation-test", "0.1.4"
# Coverage
gem 'coveralls', require: false
end
group :development, :test do
# RSpec (unit tests, some integration tests)
gem "rspec-rails", "3.4.2"
gem "rspec-rails", "3.5.1"
# Cucumber (integration tests)
gem "cucumber-rails", "1.4.3", require: false
gem "cucumber-rails", "1.4.4", require: false
# Jasmine (client side application tests (JS))
gem "jasmine", "2.4.0"

View file

@ -34,8 +34,8 @@ GEM
activemodel (= 4.2.7.1)
activesupport (= 4.2.7.1)
arel (~> 6.0)
activerecord-import (0.13.0)
activerecord (>= 3.0)
activerecord-import (0.15.0)
activerecord (>= 3.2)
activesupport (4.2.7.1)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
@ -44,7 +44,7 @@ GEM
tzinfo (~> 1.1)
acts-as-taggable-on (3.5.0)
activerecord (>= 3.2, < 5)
acts_as_api (0.4.2)
acts_as_api (0.4.3)
activemodel (>= 3.0.0)
activesupport (>= 3.0.0)
rack (>= 1.1.0)
@ -55,7 +55,8 @@ GEM
fog (>= 1.8.0)
unf
ast (2.3.0)
autoprefixer-rails (6.3.6.2)
attr_required (1.0.1)
autoprefixer-rails (6.4.0.2)
execjs
backbone-on-rails (1.2.0.0)
eco
@ -63,8 +64,11 @@ GEM
jquery-rails
railties
bcrypt (3.1.11)
bootstrap-sass (2.3.2.2)
sass (~> 3.2)
bindata (2.3.1)
bootstrap-sass (3.3.7)
autoprefixer-rails (>= 5.2.1)
sass (>= 3.3.4)
bootstrap-switch-rails (3.3.3)
buftok (0.2.0)
builder (3.2.2)
byebug (9.0.5)
@ -81,18 +85,33 @@ GEM
json (>= 1.7)
mime-types (>= 1.16)
mimemagic (>= 0.3.0)
celluloid (0.16.0)
timers (~> 4.0.0)
celluloid-io (0.16.2)
celluloid (>= 0.16.0)
nio4r (>= 1.1.0)
childprocess (0.5.9)
ffi (~> 1.0, >= 1.0.11)
chunky_png (1.3.5)
celluloid (0.17.3)
celluloid-essentials
celluloid-extras
celluloid-fsm
celluloid-pool
celluloid-supervision
timers (>= 4.1.1)
celluloid-essentials (0.20.5)
timers (>= 4.1.1)
celluloid-extras (0.20.5)
timers (>= 4.1.1)
celluloid-fsm (0.20.5)
timers (>= 4.1.1)
celluloid-io (0.17.3)
celluloid (>= 0.17.2)
nio4r (>= 1.1)
timers (>= 4.1.1)
celluloid-pool (0.20.5)
timers (>= 4.1.1)
celluloid-supervision (0.20.6)
timers (>= 4.1.1)
chunky_png (1.3.6)
cliver (0.3.2)
coderay (1.1.1)
coffee-rails (4.1.1)
coffee-rails (4.2.1)
coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.1.x)
railties (>= 4.0.0, < 5.2.x)
coffee-script (2.4.1)
coffee-script-source
execjs
@ -113,8 +132,15 @@ GEM
compass (~> 1.0.0)
sass-rails (< 5.1)
sprockets (< 2.13)
concurrent-ruby (1.0.2)
configurate (0.3.1)
connection_pool (2.2.0)
coveralls (0.8.15)
json (>= 1.8, < 3)
simplecov (~> 0.12.0)
term-ansicolor (~> 1.3)
thor (~> 0.19.1)
tins (>= 1.6.0, < 2)
crack (0.4.3)
safe_yaml (~> 1.0.0)
cucumber (2.4.0)
@ -125,50 +151,47 @@ GEM
gherkin (~> 4.0)
multi_json (>= 1.7.5, < 2.0)
multi_test (>= 0.1.2)
cucumber-api-steps (0.13)
cucumber (>= 1.2.1)
jsonpath (>= 0.1.2)
rspec (>= 2.12.0)
cucumber-core (1.5.0)
gherkin (~> 4.0)
cucumber-rails (1.4.3)
cucumber-rails (1.4.4)
capybara (>= 1.1.2, < 3)
cucumber (>= 1.3.8, < 3)
mime-types (>= 1.16, < 4)
nokogiri (~> 1.5)
railties (>= 3, < 5)
railties (>= 3, < 5.1)
cucumber-wire (0.0.1)
database_cleaner (1.5.3)
devise (3.5.6)
devise (4.2.0)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 3.2.6, < 5)
railties (>= 4.1.0, < 5.1)
responders
thread_safe (~> 0.1)
warden (~> 1.2.3)
devise-token_authenticatable (0.4.6)
devise (>= 3.5.2, < 4.0.0)
devise-token_authenticatable (0.5.2)
devise (>= 4.0.0, < 4.3.0)
devise_lastseenable (0.0.6)
devise
rails (>= 3.0.4)
diaspora-vines (0.2.0.develop.4)
activerecord (~> 4.1)
bcrypt (~> 3.1)
em-hiredis (~> 0.3.0)
eventmachine (~> 1.0.8)
http_parser.rb (~> 0.6)
nokogiri (~> 1.6)
diaspora_federation (0.0.13)
diaspora-prosody-config (0.0.5)
diaspora_federation (0.1.4)
faraday (~> 0.9.0)
faraday_middleware (~> 0.10.0)
nokogiri (~> 1.6, >= 1.6.7.2)
nokogiri (~> 1.6, >= 1.6.8)
typhoeus (~> 1.0)
valid (~> 1.0)
diaspora_federation-rails (0.0.13)
diaspora_federation (= 0.0.13)
diaspora_federation-rails (0.1.4)
diaspora_federation (= 0.1.4)
rails (~> 4.2)
diaspora_federation-test (0.0.13)
diaspora_federation (= 0.0.13)
factory_girl (~> 4.5, >= 4.5.0)
diaspora_federation-test (0.1.4)
diaspora_federation (= 0.1.4)
factory_girl (~> 4.7)
diff-lcs (1.2.5)
docile (1.1.5)
domain_name (0.5.20160310)
domain_name (0.5.20160615)
unf (>= 0.0.5, < 1.0.0)
eco (1.0.0)
coffee-script
@ -176,27 +199,24 @@ GEM
execjs
eco-source (1.1.0.rc.1)
ejs (1.1.1)
em-hiredis (0.3.1)
eventmachine (~> 1.0)
hiredis (~> 0.6.0)
entypo-rails (2.2.3)
railties (>= 3.1, <= 5)
entypo-rails (3.0.0.pre.rc2)
railties (>= 4.1, <= 5)
equalizer (0.0.10)
erubis (2.7.0)
eslintrb (2.1.0)
execjs
multi_json (>= 1.3)
rake
ethon (0.9.0)
ffi (>= 1.3.0)
eventmachine (1.0.9.1)
excon (0.49.0)
execjs (2.7.0)
eye (0.7)
celluloid (~> 0.16.0)
celluloid-io (~> 0.16.0)
eye (0.8.1)
celluloid (~> 0.17.3)
celluloid-io (~> 0.17.0)
sigar (~> 0.7.3)
state_machine
thor
facebox-rails (0.2.0)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
factory_girl (4.7.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.7.0)
@ -209,7 +229,7 @@ GEM
http-cookie (~> 1.0.0)
faraday_middleware (0.10.0)
faraday (>= 0.7.4, < 0.10)
ffi (1.9.10)
ffi (1.9.14)
fission (0.5.0)
CFPropertyList (~> 2.2)
fixture_builder (0.4.1)
@ -342,16 +362,20 @@ GEM
fog-xml (0.1.2)
fog-core
nokogiri (~> 1.5, >= 1.5.11)
font-awesome-rails (4.6.3.0)
font-awesome-rails (4.6.3.1)
railties (>= 3.2, < 5.1)
formatador (0.2.5)
fuubar (2.0.0)
fuubar (2.1.1)
rspec (~> 3.0)
ruby-progressbar (~> 1.4)
get_process_mem (0.2.1)
gherkin (4.0.0)
gitlab (3.6.1)
httparty
terminal-table
globalid (0.3.7)
activesupport (>= 4.1.0)
gon (6.0.1)
gon (6.1.0)
actionpack (>= 3.0)
json
multi_json
@ -370,7 +394,7 @@ GEM
cucumber (~> 2.0)
guard-compat (~> 1.0)
nenv (~> 0.1)
guard-rspec (4.7.2)
guard-rspec (4.7.3)
guard (~> 2.1)
guard-compat (~> 1.1)
rspec (>= 2.99.0, < 4.0)
@ -379,7 +403,16 @@ GEM
rubocop (~> 0.20)
haml (4.0.7)
tilt
handlebars_assets (0.23.0)
haml_lint (0.18.1)
haml (~> 4.0)
rake (>= 10, < 12)
rubocop (>= 0.36.0)
sysexits (~> 1.1)
hamlit (2.5.0)
temple (~> 0.7.6)
thor
tilt
handlebars_assets (0.23.1)
execjs (~> 2.0)
multi_json (~> 1.0)
sprockets (>= 2.0.0)
@ -387,7 +420,6 @@ GEM
hashdiff (0.3.0)
hashie (3.4.4)
hike (1.2.3)
hiredis (0.6.1)
hitimes (1.2.4)
http (1.0.4)
addressable (~> 2.3)
@ -399,6 +431,10 @@ GEM
http-form_data (1.0.1)
http_accept_language (2.0.5)
http_parser.rb (0.6.0)
httparty (0.13.7)
json (~> 1.8)
multi_xml (>= 0.5.2)
httpclient (2.8.1)
i18n (0.7.0)
i18n-inflector (2.6.7)
i18n (>= 0.4.1)
@ -406,7 +442,6 @@ GEM
actionpack (>= 3.0.0)
i18n-inflector (~> 2.6)
railties (>= 3.0.0)
ice_cube (0.11.1)
inflecto (0.0.2)
ipaddress (0.8.3)
jasmine (2.4.0)
@ -422,26 +457,35 @@ GEM
thor (>= 0.14, < 2.0)
jquery-ui-rails (5.0.5)
railties (>= 3.2.16)
js-routes (1.2.6)
js-routes (1.2.9)
railties (>= 3.2)
sprockets-rails
js_image_paths (0.1.0)
rails (~> 4.0)
jshintrb (0.3.0)
execjs
multi_json (>= 1.3)
rake
json (1.8.3)
json-jwt (1.6.3)
activesupport
bindata
multi_json (>= 1.3)
securecompare
url_safe_base64
json-schema (2.6.2)
addressable (~> 2.3.8)
jwt (1.5.1)
json_spec (1.1.4)
multi_json (~> 1.0)
rspec (>= 2.0, < 4.0)
jsonpath (0.5.8)
multi_json
jwt (1.5.4)
kaminari (0.16.3)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
kgio (2.10.0)
listen (3.0.8)
leaflet-rails (0.7.7)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
little-plugger (1.1.4)
logging (2.1.0)
little-plugger (~> 1.1)
@ -458,7 +502,6 @@ GEM
markerb (1.1.0)
memoizable (0.4.2)
thread_safe (~> 0.3, >= 0.3.1)
messagebus_ruby_api (1.0.3)
method_source (0.8.2)
mime-types (3.1)
mime-types-data (~> 3.2015)
@ -478,24 +521,26 @@ GEM
naught (1.1.0)
nenv (0.3.0)
nested_form (0.3.2)
nio4r (1.2.0)
nio4r (1.2.1)
nokogiri (1.6.8)
mini_portile2 (~> 2.1.0)
pkg-config (~> 1.1.7)
notiffany (0.1.0)
notiffany (0.1.1)
nenv (~> 0.1)
shellany (~> 0.0)
oauth (0.5.1)
oauth2 (1.1.0)
oauth2 (1.2.0)
faraday (>= 0.8, < 0.10)
jwt (~> 1.0, < 1.5.2)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
octokit (4.3.0)
sawyer (~> 0.7.0, >= 0.5.3)
omniauth (1.3.1)
hashie (>= 1.2, < 4)
rack (>= 1.0, < 3)
omniauth-facebook (3.0.0)
omniauth-facebook (4.0.0)
omniauth-oauth2 (~> 1.2)
omniauth-oauth (1.1.0)
oauth
@ -514,13 +559,48 @@ GEM
open_graph_reader (0.6.1)
faraday (~> 0.9.0)
nokogiri (~> 1.6)
openid_connect (0.12.0)
activemodel
attr_required (>= 1.0.0)
json (>= 1.4.3)
json-jwt (>= 1.5.0)
rack-oauth2 (>= 1.3.1)
swd (>= 1.0.0)
tzinfo
validate_email
validate_url
webfinger (>= 1.0.1)
orm_adapter (0.5.0)
parser (2.3.1.2)
ast (~> 2.2)
pg (0.18.4)
phantomjs (2.1.1.0)
pkg-config (1.1.7)
poltergeist (1.10.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
powerpack (0.1.1)
pry (0.10.3)
pronto (0.7.0)
gitlab (~> 3.6, >= 3.4.0)
httparty (~> 0.13.7)
octokit (~> 4.3, >= 4.1.0)
rainbow (~> 2.1)
rugged (~> 0.24, >= 0.23.0)
thor (~> 0.19.0)
pronto-eslint (0.7.0)
eslintrb (~> 2.0, >= 2.0.0)
pronto (~> 0.7.0)
pronto-haml (0.7.0)
haml_lint (~> 0.16, >= 0.15.0)
pronto (~> 0.7.0)
pronto-rubocop (0.7.0)
pronto (~> 0.7.0)
rubocop (~> 0.38, >= 0.35.0)
pronto-scss (0.7.0)
pronto (~> 0.7.0)
scss_lint (~> 0.43, >= 0.43.0)
pry (0.10.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
@ -536,6 +616,12 @@ GEM
activesupport
rack-mobile-detect (0.4.0)
rack
rack-oauth2 (1.4.0)
activesupport (>= 2.3)
attr_required (>= 0.0.5)
httpclient (>= 2.4)
multi_json (>= 1.3.6)
rack (>= 1.1)
rack-piwik (0.3.0)
rack-pjax (0.8.0)
nokogiri (~> 1.5)
@ -558,7 +644,13 @@ GEM
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.7.1)
sprockets-rails
rails-assets-diaspora_jsxc (0.1.4)
rails-assets-autosize (3.0.17)
rails-assets-blueimp-gallery (2.21.3)
rails-assets-bootstrap (3.3.7)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-bootstrap-markdown (2.10.0)
rails-assets-bootstrap (~> 3)
rails-assets-diaspora_jsxc (0.1.5.develop.1)
rails-assets-favico.js (~> 0.3.9)
rails-assets-jquery (>= 1.11)
rails-assets-jquery-colorbox (~> 1.6.3)
@ -566,15 +658,11 @@ GEM
rails-assets-jquery.slimscroll (~> 1.3.6)
rails-assets-jquery.ui (~> 1.11.4)
rails-assets-favico.js (0.3.10)
rails-assets-highlightjs (9.4.0)
rails-assets-jakobmattsson--jquery-elastic (1.6.11)
rails-assets-jquery (>= 1.2.6)
rails-assets-highlightjs (9.6.0)
rails-assets-jasmine (2.4.1)
rails-assets-jasmine-ajax (3.2.0)
rails-assets-jasmine (~> 2)
rails-assets-jeresig--jquery.hotkeys (0.2.0)
rails-assets-jquery (>= 1.4.2)
rails-assets-jquery (1.12.0)
rails-assets-jquery (2.2.1)
rails-assets-jquery-colorbox (1.6.4)
rails-assets-jquery (>= 1.3.2)
rails-assets-jquery-fullscreen-plugin (0.5.0)
@ -582,17 +670,17 @@ GEM
rails-assets-jquery (>= 1.6)
rails-assets-jquery-textchange (0.2.3)
rails-assets-jquery
rails-assets-jquery.slimscroll (1.3.7)
rails-assets-jquery.slimscroll (1.3.8)
rails-assets-jquery.ui (1.11.4)
rails-assets-jquery (>= 1.6)
rails-assets-markdown-it--markdown-it-for-inline (0.1.1)
rails-assets-markdown-it (6.0.5)
rails-assets-markdown-it-diaspora-mention (0.4.0)
rails-assets-markdown-it (7.0.0)
rails-assets-markdown-it-diaspora-mention (1.0.0)
rails-assets-markdown-it-hashtag (0.4.0)
rails-assets-markdown-it-sanitizer (0.4.1)
rails-assets-markdown-it-sanitizer (0.4.2)
rails-assets-markdown-it-sub (1.0.0)
rails-assets-markdown-it-sup (1.0.0)
rails-assets-perfect-scrollbar (0.6.11)
rails-assets-perfect-scrollbar (0.6.12)
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.7)
@ -637,37 +725,34 @@ GEM
nokogiri (>= 1.4.1)
trollop
redcarpet (3.3.4)
redis (3.2.2)
redis (3.3.1)
redis-namespace (1.5.2)
redis (~> 3.0, >= 3.0.4)
remotipart (1.2.1)
request_store (1.3.1)
responders (2.2.0)
railties (>= 4.2.0, < 5.1)
roxml (3.1.6)
activesupport (>= 2.3.0)
nokogiri (>= 1.3.3)
rspec (3.4.0)
rspec-core (~> 3.4.0)
rspec-expectations (~> 3.4.0)
rspec-mocks (~> 3.4.0)
rspec-core (3.4.4)
rspec-support (~> 3.4.0)
rspec-expectations (3.4.0)
rspec (3.5.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-core (3.5.2)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.4.0)
rspec-mocks (3.4.1)
rspec-support (~> 3.5.0)
rspec-mocks (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.4.0)
rspec-rails (3.4.2)
actionpack (>= 3.0, < 4.3)
activesupport (>= 3.0, < 4.3)
railties (>= 3.0, < 4.3)
rspec-core (~> 3.4.0)
rspec-expectations (~> 3.4.0)
rspec-mocks (~> 3.4.0)
rspec-support (~> 3.4.0)
rspec-support (3.4.1)
rspec-support (~> 3.5.0)
rspec-rails (3.5.1)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
rubocop (0.40.0)
parser (>= 2.3.1.0, < 3.0)
powerpack (~> 0.1)
@ -676,40 +761,44 @@ GEM
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-oembed (0.10.1)
ruby-progressbar (1.8.1)
ruby_dep (1.3.1)
rubyzip (1.2.0)
rufus-scheduler (3.2.1)
rugged (0.24.0)
safe_yaml (1.0.4)
sass (3.4.22)
sass-rails (5.0.4)
railties (>= 4.0.0, < 5.0)
sass-rails (5.0.6)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
selenium-webdriver (2.47.1)
childprocess (~> 0.5)
multi_json (~> 1.0)
rubyzip (~> 1.0)
websocket (~> 1.0)
sawyer (0.7.0)
addressable (>= 2.3.5, < 2.5)
faraday (~> 0.8, < 0.10)
scss_lint (0.49.0)
rake (>= 0.9, < 12)
sass (~> 3.4.20)
securecompare (1.0.0)
shellany (0.0.1)
shoulda-matchers (3.1.1)
activesupport (>= 4.0.0)
sidekiq (3.4.2)
celluloid (~> 0.16.0)
sidekiq (4.1.4)
concurrent-ruby (~> 1.0)
connection_pool (~> 2.2, >= 2.2.0)
json (~> 1.0)
redis (~> 3.2, >= 3.2.1)
redis-namespace (~> 1.5, >= 1.5.2)
sidetiq (0.6.3)
celluloid (>= 0.14.1)
ice_cube (= 0.11.1)
sidekiq (>= 3.0.0)
sinatra (>= 1.4.7)
sidekiq-cron (0.4.2)
redis-namespace (>= 1.5.2)
rufus-scheduler (>= 2.0.24)
sidekiq (>= 4.0.0)
sigar (0.7.3)
simple_captcha2 (0.4.0)
rails (>= 4.1)
simple_oauth (0.3.1)
simplecov (0.11.2)
simplecov (0.12.0)
docile (~> 1.1.0)
json (~> 1.8)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
sinatra (1.4.7)
@ -719,7 +808,7 @@ GEM
sinon-rails (1.15.0)
railties (>= 3.1)
slop (3.6.0)
spring (1.7.1)
spring (1.7.2)
spring-commands-cucumber (1.0.1)
spring (>= 0.9.1)
spring-commands-rspec (1.0.4)
@ -734,15 +823,27 @@ GEM
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
state_machine (1.2.0)
swd (1.0.1)
activesupport (>= 3)
attr_required (>= 0.0.5)
httpclient (>= 2.4)
i18n
json (>= 1.4.3)
sysexits (1.2.0)
systemu (2.6.5)
test_after_commit (1.0.0)
temple (0.7.7)
term-ansicolor (1.3.2)
tins (~> 1.0)
terminal-table (1.6.0)
test_after_commit (1.1.0)
activerecord (>= 3.2)
thor (0.19.1)
thread_safe (0.3.5)
tilt (1.4.1)
timecop (0.8.1)
timers (4.0.4)
timers (4.1.1)
hitimes
tins (1.12.0)
trollop (2.1.2)
turbo_dev_assets (0.0.2)
twitter (5.16.0)
@ -756,104 +857,135 @@ GEM
memoizable (~> 0.4.0)
naught (~> 1.0)
simple_oauth (~> 0.3.0)
twitter-text (1.13.4)
twitter-text (1.14.0)
unf (~> 0.1.0)
typhoeus (1.0.2)
typhoeus (1.1.0)
ethon (>= 0.9.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
uglifier (3.0.0)
uglifier (3.0.1)
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.2)
unicode-display_width (1.0.5)
unicode-display_width (1.1.0)
unicorn (5.1.0)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-worker-killer (0.4.4)
get_process_mem (~> 0)
unicorn (>= 4, < 6)
url_safe_base64 (0.2.2)
uuid (2.3.8)
macaddr (~> 1.0)
valid (1.1.0)
valid (1.2.0)
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
validate_url (1.0.2)
activemodel (>= 3.0.0)
addressable
versionist (1.5.0)
activesupport (>= 3)
railties (>= 3)
yard (~> 0.7)
warden (1.2.6)
rack (>= 1.0)
webfinger (1.0.2)
activesupport
httpclient (>= 2.4)
multi_json
webmock (2.1.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
websocket (1.2.3)
websocket-driver (0.6.4)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)
will_paginate (3.1.0)
xml-simple (1.1.5)
xpath (2.0.0)
nokogiri (~> 1.3)
yard (0.8.7.6)
PLATFORMS
ruby
DEPENDENCIES
active_model_serializers (= 0.9.5)
activerecord-import (= 0.13.0)
activerecord-import (= 0.15.0)
acts-as-taggable-on (= 3.5.0)
acts_as_api (= 0.4.2)
acts_as_api (= 0.4.3)
addressable (= 2.3.8)
asset_sync (= 1.1.0)
autoprefixer-rails (= 6.3.6.2)
autoprefixer-rails (= 6.4.0.2)
backbone-on-rails (= 1.2.0.0)
bootstrap-sass (= 2.3.2.2)
bootstrap-sass (= 3.3.7)
bootstrap-switch-rails (= 3.3.3)
capybara (= 2.7.1)
carrierwave (= 0.11.2)
compass-rails (= 2.0.5)
configurate (= 0.3.1)
cucumber-rails (= 1.4.3)
coveralls
cucumber-api-steps (= 0.13)
cucumber-rails (= 1.4.4)
database_cleaner (= 1.5.3)
devise (= 3.5.6)
devise-token_authenticatable (= 0.4.6)
devise (= 4.2.0)
devise-token_authenticatable (= 0.5.2)
devise_lastseenable (= 0.0.6)
diaspora-vines (= 0.2.0.develop.4)
diaspora_federation-rails (= 0.0.13)
diaspora_federation-test (= 0.0.13)
entypo-rails (= 2.2.3)
eye (= 0.7)
facebox-rails (= 0.2.0)
diaspora-prosody-config (= 0.0.5)
diaspora_federation-rails (= 0.1.4)
diaspora_federation-test (= 0.1.4)
entypo-rails (= 3.0.0.pre.rc2)
eye (= 0.8.1)
factory_girl_rails (= 4.7.0)
faraday (= 0.9.2)
faraday-cookie_jar (= 0.0.6)
faraday_middleware (= 0.10.0)
fixture_builder (= 0.4.1)
fog (= 1.38.0)
fuubar (= 2.0.0)
gon (= 6.0.1)
fuubar (= 2.1.1)
gon (= 6.1.0)
guard (= 2.14.0)
guard-cucumber (= 2.1.2)
guard-rspec (= 4.7.2)
guard-rspec (= 4.7.3)
guard-rubocop (= 1.2.0)
haml (= 4.0.7)
handlebars_assets (= 0.23.0)
haml_lint (= 0.18.1)
hamlit (= 2.5.0)
handlebars_assets (= 0.23.1)
http_accept_language (= 2.0.5)
i18n-inflector-rails (= 1.0.7)
jasmine (= 2.4.0)
jasmine-jquery-rails (= 2.0.3)
jquery-rails (= 4.1.1)
jquery-ui-rails (= 5.0.5)
js-routes (= 1.2.6)
js-routes (= 1.2.9)
js_image_paths (= 0.1.0)
jshintrb (= 0.3.0)
json (= 1.8.3)
json-schema (= 2.6.2)
listen (~> 3.0.0)
json_spec (= 1.1.4)
leaflet-rails (= 0.7.7)
logging-rails (= 0.5.0)
markerb (= 1.1.0)
messagebus_ruby_api (= 1.0.3)
mini_magick (= 4.5.1)
minitest
mobile-fu (= 1.3.1)
mysql2 (= 0.4.4)
nokogiri (= 1.6.8)
omniauth (= 1.3.1)
omniauth-facebook (= 3.0.0)
omniauth-facebook (= 4.0.0)
omniauth-tumblr (= 1.2)
omniauth-twitter (= 1.2.1)
omniauth-wordpress (= 0.2.2)
open_graph_reader (= 0.6.1)
openid_connect (= 0.12.0)
pg (= 0.18.4)
poltergeist (= 1.10.0)
pronto (= 0.7.0)
pronto-eslint (= 0.7.0)
pronto-haml (= 0.7.0)
pronto-rubocop (= 0.7.0)
pronto-scss (= 0.7.0)
pry
pry-byebug
quiet_assets (= 1.1.0)
@ -864,22 +996,23 @@ DEPENDENCIES
rack-rewrite (= 1.5.1)
rack-ssl (= 1.4.1)
rails (= 4.2.7.1)
rails-assets-diaspora_jsxc (= 0.1.4)!
rails-assets-highlightjs (= 9.4.0)!
rails-assets-jakobmattsson--jquery-elastic (= 1.6.11)!
rails-assets-autosize (= 3.0.17)!
rails-assets-blueimp-gallery (= 2.21.3)!
rails-assets-bootstrap-markdown (= 2.10.0)!
rails-assets-diaspora_jsxc (= 0.1.5.develop.1)!
rails-assets-highlightjs (= 9.6.0)!
rails-assets-jasmine-ajax (= 3.2.0)!
rails-assets-jeresig--jquery.hotkeys (= 0.2.0)!
rails-assets-jquery (= 1.12.0)!
rails-assets-jquery (= 2.2.1)!
rails-assets-jquery-placeholder (= 2.3.1)!
rails-assets-jquery-textchange (= 0.2.3)!
rails-assets-markdown-it (= 6.0.5)!
rails-assets-markdown-it (= 7.0.0)!
rails-assets-markdown-it--markdown-it-for-inline (= 0.1.1)!
rails-assets-markdown-it-diaspora-mention (= 0.4.0)!
rails-assets-markdown-it-diaspora-mention (= 1.0.0)!
rails-assets-markdown-it-hashtag (= 0.4.0)!
rails-assets-markdown-it-sanitizer (= 0.4.1)!
rails-assets-markdown-it-sanitizer (= 0.4.2)!
rails-assets-markdown-it-sub (= 1.0.0)!
rails-assets-markdown-it-sup (= 1.0.0)!
rails-assets-perfect-scrollbar (= 0.6.11)!
rails-assets-perfect-scrollbar (= 0.6.12)!
rails-i18n (= 4.0.8)
rails-timeago (= 2.11.0)
rails_admin (= 0.8.1)
@ -888,32 +1021,32 @@ DEPENDENCIES
redcarpet (= 3.3.4)
remotipart (= 1.2.1)
responders (= 2.2.0)
roxml (= 3.1.6)
rspec-rails (= 3.4.2)
rspec-rails (= 3.5.1)
rubocop (= 0.40.0)
ruby-oembed (= 0.10.1)
rubyzip (= 1.2.0)
sass-rails (= 5.0.4)
selenium-webdriver (= 2.47.1)
sass-rails (= 5.0.6)
shoulda-matchers (= 3.1.1)
sidekiq (= 3.4.2)
sidetiq (= 0.6.3)
sidekiq (= 4.1.4)
sidekiq-cron (= 0.4.2)
simple_captcha2 (= 0.4.0)
simplecov (= 0.11.2)
simplecov (= 0.12.0)
sinatra (= 1.4.7)
sinon-rails (= 1.15.0)
spring (= 1.7.1)
spring (= 1.7.2)
spring-commands-cucumber (= 1.0.1)
spring-commands-rspec (= 1.0.4)
test_after_commit (= 1.0.0)
test_after_commit (= 1.1.0)
timecop (= 0.8.1)
turbo_dev_assets (= 0.0.2)
twitter (= 5.16.0)
twitter-text (= 1.13.4)
typhoeus (= 1.0.2)
uglifier (= 3.0.0)
twitter-text (= 1.14.0)
typhoeus (= 1.1.0)
uglifier (= 3.0.1)
unicorn (= 5.1.0)
unicorn-worker-killer (= 0.4.4)
uuid (= 2.3.8)
versionist (= 1.5.0)
webmock (= 2.1.0)
will_paginate (= 3.1.0)

View file

@ -1,15 +1,17 @@
# diaspora*
### A privacy-aware, distributed, open source social network
**master:** [![Build Status master](https://secure.travis-ci.org/diaspora/diaspora.png?branch=master)](http://travis-ci.org/diaspora/diaspora)
**stable:** [![Build Status stable](https://secure.travis-ci.org/diaspora/diaspora.png?branch=stable)](http://travis-ci.org/diaspora/diaspora) |
**develop:** [![Build Status develop](https://secure.travis-ci.org/diaspora/diaspora.png?branch=develop)](http://travis-ci.org/diaspora/diaspora) |
[![Dependency Status](https://gemnasium.com/diaspora/diaspora.png?travis)](https://gemnasium.com/diaspora/diaspora)
[![Code Climate](https://codeclimate.com/github/diaspora/diaspora.png)](https://codeclimate.com/github/diaspora/diaspora)
**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) |
[![Dependency Status](https://gemnasium.com/badges/github.com/diaspora/diaspora.svg)](https://gemnasium.com/diaspora/diaspora)
[![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](http://github.com/diaspora/diaspora/issues) |
[Bugtracker](https://github.com/diaspora/diaspora/issues) |
[Discussions](https://www.loomio.org/groups/194) |
[Mailing lists](https://wiki.diasporafoundation.org/How_We_Communicate#Mailing_Lists) |
[License](/COPYRIGHT) |
@ -17,7 +19,6 @@
## 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.
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!
@ -36,5 +37,4 @@ Everyone interacting in diasporas codebases, issue trackers, chat rooms, mail
## Security
Found a security issue? Please disclose it responsibly. We have a team of developers listening to [security@diasporafoundation.org](mailto:security@diasporafoundation.org). The PGP fingerprint is [AB0D AB02 0FC5 D398 03AB 3CE1 6F70 243F 27AD 886A](http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x6F70243F27AD886A)
Found a security issue? Please disclose it responsibly. We have a team of developers listening to [security@diasporafoundation.org](mailto:security@diasporafoundation.org). The PGP fingerprint is [AB0D AB02 0FC5 D398 03AB 3CE1 6F70 243F 27AD 886A](https://pgp.mit.edu/pks/lookup?op=get&search=0x6F70243F27AD886A).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
viewBox="0 0 744.09448819 1052.3622047"
height="40px"
width="40px">
<g
style="display:inline"
id="layer1"
transform="matrix(4.9383994,0,0,5.2618096,-1527.6262,-2214.8726)">
<path
id="path3511"
d="m 278.125,520.93362 0,-100 79.0625,0.0138 c 43.48437,0.008 81.17062,0.36221 83.74721,0.7881 3.3747,0.55781 6.95755,2.85698 12.8125,8.22198 l 8.12779,7.44764 0,16.13926 0,16.13926 -10,0 -10,0 -0.0158,-10.3125 -0.0157,-10.3125 -6.77054,-5.9375 -6.77057,-5.9375 -66.3387,0 -66.33869,0 0,83.75 0,83.75 24.54911,0 24.54912,0 -0.77696,6.5625 c -0.47778,4.0355 -1.59948,7.16416 -2.91302,8.125 -1.57019,1.14856 -10.18586,1.5625 -32.52216,1.5625 l -30.38609,0 0,-100 z m 75.01385,98.75856 c -0.95897,-0.59267 0.76874,-9.48251 5.61079,-28.86997 l 6.99644,-28.01359 39.00196,-39.14467 c 21.45108,-21.52956 40.5209,-39.95144 42.37738,-40.9375 1.87165,-0.99411 6.78352,-1.79283 11.02537,-1.79283 l 7.64993,0 12.71105,12.39542 12.71105,12.39542 0,12.61571 0,12.6157 -39.44885,39.44886 -39.44886,39.44885 -19.28755,4.7892 c -18.3445,4.55503 -36.89916,6.90323 -39.89871,5.0494 z m 33.55295,-18.06936 c 3.68049,-0.97963 6.89841,-1.98775 7.15094,-2.24027 0.25252,-0.25253 -3.66299,-4.55375 -8.70115,-9.55828 l -9.16028,-9.09915 -2.11015,8.40052 c -2.09814,8.35273 -2.09435,8.41733 0.66474,11.35425 3.24463,3.45376 3.41414,3.46969 12.1559,1.14293 z m 66.1351,-79.11794 -5.26283,-5.36242 -24.7019,24.67873 -24.70189,24.67874 5.26282,5.36243 5.26282,5.36242 24.70191,-24.67873 24.70189,-24.67875 -5.26282,-5.36242 z"
style="fill:#fefefe"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,014 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 B

View file

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 307 B

View file

Before

Width:  |  Height:  |  Size: 814 B

After

Width:  |  Height:  |  Size: 814 B

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 348 B

After

Width:  |  Height:  |  Size: 348 B

View file

Before

Width:  |  Height:  |  Size: 796 B

After

Width:  |  Height:  |  Size: 796 B

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 390 B

After

Width:  |  Height:  |  Size: 390 B

View file

Before

Width:  |  Height:  |  Size: 929 B

After

Width:  |  Height:  |  Size: 929 B

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 823 B

View file

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 B

View file

@ -0,0 +1,5 @@
$(document).ready(function() {
$("#js-app-logo").error(function () {
$(this).attr("src", ImagePaths.get("user/default.png"));
});
});

View file

@ -46,8 +46,8 @@ var app = {
app.router = new app.Router();
this.setupDummyPreloads();
this.setupFacebox();
this.setupUser();
this.setupAspects();
this.setupHeader();
this.setupBackboneLinks();
this.setupGlobalViews();
@ -66,7 +66,7 @@ var app = {
},
parsePreload : function(prop) {
if(!app.hasPreload(prop)) { return }
if(!app.hasPreload(prop)) { return; }
var preload = window.gon.preloads[prop];
delete window.gon.preloads[prop]; //prevent dirty state across navigates
@ -84,6 +84,10 @@ var app = {
app.currentUser = app.user(window.gon.user) || new app.models.User();
},
setupAspects: function() {
app.aspects = new app.collections.Aspects(app.currentUser.get("aspects"));
},
setupHeader: function() {
if(app.currentUser.authenticated()) {
app.header = new app.views.Header();
@ -92,12 +96,6 @@ var app = {
}
},
setupFacebox: function() {
$.facebox.settings.closeImage = ImagePaths.get('facebox/closelabel.png');
$.facebox.settings.loadingImage = ImagePaths.get('facebox/loading.gif');
$.facebox.settings.opacity = 0.75;
},
setupBackboneLinks: function() {
Backbone.history.start({pushState: true});
@ -110,12 +108,6 @@ var app = {
evt.preventDefault();
var link = $(this);
if(link.data("stream-title") && link.data("stream-title").length) {
$(".stream_title").text(link.data("stream-title"));
} else {
$(".stream_title").text(link.text());
}
$("html, body").animate({scrollTop: 0});
// app.router.navigate doesn't tell us if it changed the page,
@ -127,16 +119,14 @@ var app = {
setupGlobalViews: function() {
app.hovercard = new app.views.Hovercard();
$('.aspect_membership_dropdown').each(function(){
new app.views.AspectMembership({el: this});
});
app.sidebar = new app.views.Sidebar();
app.backToTop = new app.views.BackToTop({el: $(document)});
app.flashMessages = new app.views.FlashMessages({el: $("#flash-container")});
},
/* mixpanel wrapper function */
instrument : function(type, name, object, callback) {
if(!window.mixpanel) { return }
if(!window.mixpanel) { return; }
window.mixpanel[type](name, object, callback);
},
@ -150,6 +140,9 @@ var app = {
// add placeholder support for old browsers
$("input, textarea").placeholder();
// init autosize plugin
autosize($("textarea"));
// setup remote forms
$(document).on("ajax:success", "form[data-remote]", function() {
$(this).clearForm();

View file

@ -1,6 +1,10 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.collections.AspectMemberships = Backbone.Collection.extend({
model: app.models.AspectMembership
model: app.models.AspectMembership,
findByAspectId: function(id) {
return this.find(function(membership) { return membership.belongsToAspect(id); });
}
});
// @license-end

View file

@ -0,0 +1,31 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.collections.AspectSelections = Backbone.Collection.extend({
model: app.models.AspectSelection,
selectedGetAttribute: function(attribute) {
return _.pluck(_.filter(this.toJSON(), function(a) {
return a.selected;
}), attribute);
},
allSelected: function() {
return this.length === _.filter(this.toJSON(), function(a) { return a.selected; }).length;
},
selectAll: function() {
this.map(function(a) { a.set({"selected": true}); });
},
deselectAll: function() {
this.map(function(a) { a.set({"selected": false}); });
},
toSentence: function() {
var separator = Diaspora.I18n.t("comma") + " ";
var pattern = new RegExp(Diaspora.I18n.t("comma") + "\\s([^" + Diaspora.I18n.t("comma") + "]+)$");
return this.selectedGetAttribute("name").join(separator).replace(pattern, " " + Diaspora.I18n.t("and") + " $1")
|| Diaspora.I18n.t("my_aspects");
}
});
// @license-end

View file

@ -1,29 +1,7 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.collections.Aspects = Backbone.Collection.extend({
model: app.models.AspectSelection,
selectedAspects: function(attribute){
return _.pluck(_.filter(this.toJSON(), function(a){
return a.selected;
}), attribute);
},
allSelected: function(){
return this.length === _.filter(this.toJSON(), function(a){ return a.selected; }).length;
},
selectAll: function(){
this.map(function(a){ a.set({ 'selected' : true })} );
},
deselectAll: function(){
this.map(function(a){ a.set({ 'selected' : false })} );
},
toSentence: function(){
var separator = Diaspora.I18n.t("comma") + ' ';
return this.selectedAspects('name').join(separator).replace(/,\s([^,]+)$/, ' ' + Diaspora.I18n.t("and") + ' $1') || Diaspora.I18n.t("my_aspects");
}
model: app.models.Aspect,
url: "/aspects"
});
// @license-end

View file

@ -2,19 +2,20 @@
app.collections.Comments = Backbone.Collection.extend({
model: app.models.Comment,
url: function() { return _.result(this.post, 'url') + '/comments'; },
url: function() {
return _.result(this.post, "url") + "/comments";
},
initialize : function(models, options) {
this.post = options.post;
},
make : function(text){
make : function(text) {
var self = this;
var comment = new app.models.Comment({text: text });
var comment = new app.models.Comment({ "text": text });
var deferred = comment.save({}, {
url: '/posts/'+this.post.id+'/comments',
url: "/posts/"+ this.post.id +"/comments",
success: function() {
comment.set({author: app.currentUser.toJSON(), parent: self.post });
self.add(comment);

View file

@ -0,0 +1,10 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.collections.Pods = Backbone.Collection.extend({
model: app.models.Pod,
comparator: function(model) {
var host = model.get("host") || "";
return host.toLowerCase();
}
});
// @license-end

View file

@ -5,4 +5,3 @@ app.collections.Posts = Backbone.Collection.extend({
url : "/posts"
});
// @license-end

View file

@ -5,4 +5,3 @@ app.collections.Reshares = Backbone.Collection.extend({
url : "/reshares"
});
// @license-end

View file

@ -47,7 +47,7 @@ Handlebars.registerHelper("sharingMessage", function(person) {
var icon = "circle";
if( person.is_sharing ) {
i18nScope = "people.helper.is_sharing";
icon = "entypo check";
icon = "entypo-check";
}
var title = Diaspora.I18n.t(i18nScope, {name: _.escape(person.name)});
@ -60,11 +60,8 @@ Handlebars.registerHelper("sharingMessage", function(person) {
// allow hovercards for users that are not the current user.
// returns the html class name used to trigger hovercards.
Handlebars.registerHelper('hovercardable', function(person) {
if( app.currentUser.get('guid') !== person.guid ) {
return 'hovercardable';
}
return '';
Handlebars.registerHelper("hovercardable", function(person) {
return app.currentUser.get("guid") === person.guid ? "" : "hovercardable";
});
Handlebars.registerHelper('personImage', function(person, size, imageClass) {
@ -78,10 +75,11 @@ Handlebars.registerHelper('personImage', function(person, size, imageClass) {
size = ( !_.isString(size) ) ? "small" : size;
imageClass = ( !_.isString(imageClass) ) ? size : imageClass;
return _.template('<img src="<%= src %>" class="avatar <%= img_class %>" title="<%= title %>" alt="<%= title %>" />')({
'src': avatar[size],
'img_class': imageClass,
'title': _.escape(name)
return _.template("<img src=\"<%= src %>\" class=\"<%= imageClass %>\" " +
"title=\"<%= title %>\" alt=\"<%= title %>\" />")({
src: avatar[size],
imageClass: imageClass + " avatar img-responsive center-block",
title: _.escape(name)
});
});
@ -120,7 +118,7 @@ Handlebars.registerHelper("isCurrentProfilePage", function(id, diasporaHandle, o
Handlebars.registerHelper('aspectMembershipIndicator', function(contact,in_aspect) {
if(!app.aspect || !app.aspect.get('id')) return '<div class="aspect_membership_dropdown placeholder"></div>';
var html = '<i class="entypo ';
var html = "<i class=\"entypo-";
if( in_aspect === 'in_aspect' ) {
html += 'circled-cross contact_remove-from-aspect" ';
html += 'title="' + Diaspora.I18n.t('contacts.remove_contact') + '" ';

View file

@ -0,0 +1,25 @@
(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 (gon.appConfig.map.mapbox.enabled) {
return L.tileLayer("https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}", {
id: gon.appConfig.map.mapbox.id,
accessToken: gon.appConfig.map.mapbox.access_token,
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
});
}
// 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

@ -0,0 +1,13 @@
(function(){
app.helpers.showModal = function(id){
$(id).modal();
var modalBody = $(id).find(".modal-body");
var url = $(id).attr("href");
modalBody.load(url, function(){
$(id).find("#modalWaiter").remove();
$(id).trigger("modal:loaded");
});
};
})();

View file

@ -26,7 +26,12 @@
array[index][1] = attribute[1].replace(/^www\./, "http://www.");
}
});
tokens[idx].attrPush([ "target", "_blank" ]);
tokens[idx].attrPush(["target", "_blank"]);
tokens[idx].attrPush(["rel", "noopener noreferrer"]);
});
md.use(inlinePlugin, "responsive_images", "image", function (tokens, idx) {
tokens[idx].attrPush(["class", "img-responsive"]);
});
var hashtagPlugin = window.markdownitHashtag;
@ -49,7 +54,7 @@
var supPlugin = window.markdownitSup;
md.use(supPlugin);
var sanitizerPlugin = window.markdownitSanitizer;
md.use(sanitizerPlugin);
md.use(sanitizerPlugin, {imageClass: "img-responsive"});
var hljs = window.hljs;
md.set({
@ -76,7 +81,6 @@
// Bootstrap table markup
md.renderer.rules.table_open = function () { return "<table class=\"table table-striped\">\n"; };
return md.render(text);
};
})();

View file

@ -5,7 +5,6 @@
// Requires:
// this = model with "created_at" attribute
app.models.formatDateMixin = {
timeOf: function(field) {
return app.helpers.dateFormatter.parse(this.get(field)) / 1000;
},
@ -13,7 +12,5 @@ app.models.formatDateMixin = {
createdAt: function() {
return this.timeOf("created_at");
}
};
// @license-end

View file

@ -5,7 +5,11 @@
* (only valid for the context of the current user)
*/
app.models.AspectMembership = Backbone.Model.extend({
urlRoot: "/aspect_memberships"
urlRoot: "/aspect_memberships",
belongsToAspect: function(aspectId) {
var aspect = this.get("aspect");
return aspect && aspect.id === aspectId;
}
});
// @license-end

View file

@ -4,4 +4,3 @@ app.models.Comment = Backbone.Model.extend({
urlRoot: "/comments"
});
// @license-end

View file

@ -2,12 +2,15 @@
app.models.Contact = Backbone.Model.extend({
initialize : function() {
this.aspect_memberships = new app.collections.AspectMemberships(this.get('aspect_memberships'));
if( this.get('person') ) this.person = new app.models.Person(this.get('person'));
this.aspectMemberships = new app.collections.AspectMemberships(this.get("aspect_memberships"));
if (this.get("person")) {
this.person = new app.models.Person(this.get("person"));
this.person.contact = this;
}
},
inAspect : function(id) {
return this.aspect_memberships.any(function(membership){ return membership.get('aspect').id === id; });
return this.aspectMemberships.any(function(membership) { return membership.belongsToAspect(id); });
}
});
// @license-end

View file

@ -6,8 +6,13 @@ app.models.Person = Backbone.Model.extend({
},
initialize: function() {
if( this.get('profile') )
this.profile = new app.models.Profile(this.get('profile'));
if (this.get("profile")) {
this.profile = new app.models.Profile(this.get("profile"));
}
if (this.get("contact")) {
this.contact = new app.models.Contact(this.get("contact"));
this.contact.person = this;
}
},
isSharing: function() {

View file

@ -0,0 +1,15 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.models.Pod = Backbone.Model.extend({
urlRoot: Routes.adminPods(),
recheck: function() {
var self = this,
url = Routes.adminPodRecheck(this.id).toString();
return $.ajax({url: url, method: "POST", dataType: "json"})
.done(function(newAttributes) {
self.set(newAttributes);
});
}
});
// @license-end

View file

@ -32,7 +32,7 @@ app.models.Post.Interactions = Backbone.Model.extend({
},
likesCount : function(){
return (this.get("fetched") ? this.likes.models.length : this.get("likes_count") );
return this.get("fetched") ? this.likes.models.length : this.get("likes_count");
},
resharesCount : function(){
@ -44,12 +44,15 @@ app.models.Post.Interactions = Backbone.Model.extend({
},
userLike : function(){
return this.likes.select(function(like){ return like.get("author").guid === app.currentUser.get("guid")})[0];
return this.likes.select(function(like){
return like.get("author") && like.get("author").guid === app.currentUser.get("guid");
})[0];
},
userReshare : function(){
return this.reshares.select(function(reshare){
return reshare.get("author") && reshare.get("author").guid === app.currentUser.get("guid")})[0];
return reshare.get("author") && reshare.get("author").guid === app.currentUser.get("guid");
})[0];
},
toggleLike : function() {
@ -62,10 +65,15 @@ app.models.Post.Interactions = Backbone.Model.extend({
like : function() {
var self = this;
this.likes.create({}, {success : function(){
self.trigger("change");
self.set({"likes_count" : self.get("likes_count") + 1});
}});
this.likes.create({}, {
success: function() {
self.trigger("change");
self.set({"likes_count" : self.get("likes_count") + 1});
},
error: function() {
app.flashMessages.error(Diaspora.I18n.t("failed_to_like"));
}
});
app.instrument("track", "Like");
},
@ -84,11 +92,7 @@ app.models.Post.Interactions = Backbone.Model.extend({
var self = this;
this.comments.make(text).fail(function () {
var flash = new Diaspora.Widgets.FlashMessages();
flash.render({
success: false,
notice: Diaspora.I18n.t("failed_to_post_message")
});
app.flashMessages.error(Diaspora.I18n.t("failed_to_comment"));
}).done(function() {
self.trigger('change'); //updates after sync
});
@ -99,16 +103,11 @@ app.models.Post.Interactions = Backbone.Model.extend({
},
reshare : function(){
var interactions = this
, reshare = this.post.reshare()
, flash = new Diaspora.Widgets.FlashMessages();
var interactions = this;
reshare.save()
this.post.reshare().save()
.done(function(reshare) {
flash.render({
success: true,
notice: Diaspora.I18n.t("reshares.successful")
});
app.flashMessages.success(Diaspora.I18n.t("reshares.successful"));
interactions.reshares.add(reshare);
if (app.stream && /^\/(?:stream|activity|aspects)/.test(app.stream.basePath())) {
app.stream.addNow(reshare);
@ -116,10 +115,7 @@ app.models.Post.Interactions = Backbone.Model.extend({
interactions.trigger("change");
})
.fail(function(){
flash.render({
success: false,
notice: Diaspora.I18n.t("reshares.duplicate")
});
app.flashMessages.error(Diaspora.I18n.t("reshares.duplicate"));
});
app.instrument("track", "Reshare");

View file

@ -21,4 +21,3 @@ app.models.StatusMessage = app.models.Post.extend({
}
});
// @license-end

View file

@ -17,7 +17,7 @@ app.models.StreamAspects = app.models.Stream.extend({
},
fetch: function() {
if(this.isFetching()){ return false }
if(this.isFetching()) { return false; }
var url = this.url();
var ids = this.aspects_ids;
this.deferred = this.items.fetch(this._fetchOpts({url : url, data : { 'a_ids': ids }}))
@ -26,10 +26,9 @@ app.models.StreamAspects = app.models.Stream.extend({
fetchDone: function() {
this.triggerFetchedEvents();
if (app.aspects) {
app.aspects.trigger('aspectStreamFetched');
if (app.aspectSelections) {
app.aspectSelections.trigger("aspectStreamFetched");
}
}
});
// @license-end

View file

@ -0,0 +1,75 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.pages.AdminDashboard = Backbone.View.extend({
initialize: function() {
this.updatePodStatus();
},
updatePodStatus: function() {
var self = this,
tagName = "";
$.get("https://api.github.com/repos/diaspora/diaspora/releases/latest")
.done(function(data) {
// the response might be malformed
try {
/* jshint camelcase: false */
tagName = data.tag_name;
/* jshint camelcase: true */
if(tagName.charAt(0) !== "v") {
self.updatePodStatusFail();
return;
}
} catch(e) {
self.updatePodStatusFail();
return;
}
// split version into components
self.latestVersion = tagName.slice(1).split(".").map(Number);
if(self.podUpToDate() === null) {
self.updatePodStatusFail();
} else {
self.updatePodStatusSuccess();
}
})
.fail(function() {
self.updatePodStatusFail();
});
},
updatePodStatusSuccess: function() {
$("#pod-status .alert").removeClass("alert-info");
var podStatusMessage = Diaspora.I18n.t("admins.dashboard.up_to_date");
if(this.podUpToDate()) {
$("#pod-status .alert").addClass("alert-success");
} else {
podStatusMessage = Diaspora.I18n.t("admins.dashboard.outdated");
$("#pod-status .alert").addClass("alert-danger");
}
$("#pod-status .alert")
.html("<strong>" + podStatusMessage + "</strong>")
.append(" ")
.append(Diaspora.I18n.t("admins.dashboard.compare_versions", {
latestVersion: "v" + this.latestVersion.join("."),
podVersion: "v" + gon.podVersion
}));
},
updatePodStatusFail: function() {
$("#pod-status .alert")
.removeClass("alert-info")
.addClass("alert-warning")
.text(Diaspora.I18n.t("admins.dashboard.error"));
},
podUpToDate: function() {
var podVersion = gon.podVersion.split(/\.|\-/).map(Number);
if(this.latestVersion.length < 4 || podVersion.length < 4) { return null; }
for(var i = 0; i < 4; i++) {
if(this.latestVersion[i] < podVersion[i]) { return true; }
if(this.latestVersion[i] > podVersion[i]) { return false; }
}
return true;
}
});
// @license-end

View file

@ -0,0 +1,52 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.pages.AdminPods = app.views.Base.extend({
templateName: "pod_table",
tooltipSelector: "th i",
initialize: function() {
this.pods = new app.collections.Pods(app.parsePreload("pods"));
this.rows = []; // contains the table row views
},
postRenderTemplate: function() {
var self = this;
this._showMessages();
// avoid reflowing the page for every entry
var fragment = document.createDocumentFragment();
this.pods.each(function(pod) {
self.rows.push(new app.views.PodEntry({
parent: fragment,
model: pod
}).render());
});
this.$("tbody").append(fragment);
return this;
},
_showMessages: function() {
var msgs = document.createDocumentFragment();
if( gon.uncheckedCount && gon.uncheckedCount > 0 ) {
var unchecked = $("<div class='alert alert-info' role='alert' />")
.append(Diaspora.I18n.t("admin.pods.unchecked", {count: gon.uncheckedCount}));
msgs.appendChild(unchecked[0]);
}
if( gon.versionFailedCount && gon.versionFailedCount > 0 ) {
var versionFailed = $("<div class='alert alert-warning' role='alert' />")
.append(Diaspora.I18n.t("admin.pods.version_failed", {count: gon.versionFailedCount}));
msgs.appendChild(versionFailed[0]);
}
if( gon.errorCount && gon.errorCount > 0 ) {
var errors = $("<div class='alert alert-danger' role='alert' />")
.append(Diaspora.I18n.t("admin.pods.errors", {count: gon.errorCount}));
msgs.appendChild(errors[0]);
}
$("#pod-alerts").html(msgs);
}
});
// @license-end

View file

@ -8,17 +8,20 @@ app.pages.Contacts = Backbone.View.extend({
"click #contacts_visibility_toggle" : "toggleContactVisibility",
"click #chat_privilege_toggle" : "toggleChatPrivilege",
"click #change_aspect_name" : "showAspectNameForm",
"keyup #contact_list_search" : "searchContactList"
"click .conversation_button": "showMessageModal",
"click #invitations-button": "showInvitationsModal"
},
initialize: function(opts) {
this.visibility_toggle = $("#contacts_visibility_toggle .entypo");
this.chat_toggle = $("#chat_privilege_toggle .entypo");
this.visibilityToggle = $("#contacts_visibility_toggle i");
this.chatToggle = $("#chat_privilege_toggle i");
this.stream = opts.stream;
this.stream.render();
$("#people_stream.contacts .header .entypo").tooltip({"placement": "bottom"});
$("#people_stream.contacts .header i").tooltip({"placement": "bottom"});
$(document).on("ajax:success", "form.edit_aspect", this.updateAspectName);
app.events.on("aspect:create", function(){ window.location.reload() });
app.events.on("aspect_membership:create", this.addAspectMembership, this);
app.events.on("aspect_membership:destroy", this.removeAspectMembership, this);
this.aspectCreateView = new app.views.AspectCreate({ el: $("#newAspectContainer") });
this.aspectCreateView.render();
@ -27,14 +30,14 @@ app.pages.Contacts = Backbone.View.extend({
},
toggleChatPrivilege: function() {
if (this.chat_toggle.hasClass("enabled")) {
this.chat_toggle.tooltip("destroy")
if (this.chatToggle.hasClass("enabled")) {
this.chatToggle.tooltip("destroy")
.removeClass("enabled")
.removeAttr("data-original-title")
.attr("title", Diaspora.I18n.t("contacts.aspect_chat_is_not_enabled"))
.tooltip({"placement": "bottom"});
} else {
this.chat_toggle.tooltip("destroy")
this.chatToggle.tooltip("destroy")
.addClass("enabled")
.removeAttr("data-original-title")
.attr("title", Diaspora.I18n.t("contacts.aspect_chat_is_enabled"))
@ -43,17 +46,17 @@ app.pages.Contacts = Backbone.View.extend({
},
toggleContactVisibility: function() {
if (this.visibility_toggle.hasClass("lock-open")) {
this.visibility_toggle.removeClass("lock-open")
.addClass("lock")
if (this.visibilityToggle.hasClass("entypo-lock-open")) {
this.visibilityToggle.removeClass("entypo-lock-open")
.addClass("entypo-lock")
.tooltip("destroy")
.removeAttr("data-original-title")
.attr("title", Diaspora.I18n.t("contacts.aspect_list_is_not_visible"))
.tooltip({"placement": "bottom"});
}
else {
this.visibility_toggle.removeClass("lock")
.addClass("lock-open")
this.visibilityToggle.removeClass("entypo-lock")
.addClass("entypo-lock-open")
.tooltip("destroy")
.removeAttr("data-original-title")
.attr("title", Diaspora.I18n.t("contacts.aspect_list_is_visible"))
@ -75,13 +78,17 @@ app.pages.Contacts = Backbone.View.extend({
$(".header > h3").show();
},
searchContactList: function(e) {
this.stream.search($(e.target).val());
showMessageModal: function(){
app.helpers.showModal("#conversationModal");
},
showInvitationsModal: function() {
app.helpers.showModal("#invitationsModal");
},
setupAspectSorting: function() {
$("#aspect_nav .nav").sortable({
items: "li.aspect[data-aspect-id]",
$("#aspect_nav .list-group").sortable({
items: "a.aspect[data-aspect-id]",
update: function() {
$("#aspect_nav .ui-sortable").addClass("syncing");
var data = JSON.stringify({ ordered_aspect_ids: $(this).sortable("toArray", { attribute: "data-aspect-id" }) });
@ -92,7 +99,51 @@ app.pages.Contacts = Backbone.View.extend({
revert: true,
helper: "clone"
});
},
updateBadgeCount: function(selector, change) {
var count = parseInt($("#aspect_nav " + selector + " .badge").text(), 10);
$("#aspect_nav " + selector + " .badge").text(count + change);
},
addAspectMembership: function(data) {
if(data.startSharing) {
this.updateBadgeCount(".all_aspects", 1);
var contact = this.stream.collection.find(function(c) {
return c.get("person").id === data.membership.personId;
});
if(contact && contact.person.get("relationship") === "sharing") {
contact.person.set({relationship: "mutual"});
this.updateBadgeCount(".only_sharing", -1);
}
else if(contact && contact.person.get("relationship") === "not_sharing") {
contact.person.set({relationship: "receiving"});
this.updateBadgeCount(".all_contacts", 1);
}
}
this.updateBadgeCount("[data-aspect-id='" + data.membership.aspectId + "']", 1);
},
removeAspectMembership: function(data) {
if(data.stopSharing) {
this.updateBadgeCount(".all_aspects", -1);
var contact = this.stream.collection.find(function(c) {
return c.get("person").id === data.membership.personId;
});
if(contact && contact.person.get("relationship") === "mutual") {
contact.person.set({relationship: "sharing"});
this.updateBadgeCount(".only_sharing", 1);
}
else if(contact && contact.person.get("relationship") === "receiving") {
contact.person.set({relationship: "not_sharing"});
this.updateBadgeCount(".all_contacts", -1);
}
}
this.updateBadgeCount("[data-aspect-id='" + data.membership.aspectId + "']", -1);
}
});
// @license-end

View file

@ -0,0 +1,20 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.pages.GettingStarted = app.views.Base.extend({
el: "#hello-there",
templateName: false,
subviews: {
".aspect_membership_dropdown": "aspectMembershipView"
},
initialize: function(opts) {
this.inviter = opts.inviter;
app.events.on("aspect:create", this.render, this);
},
aspectMembershipView: function() {
return new app.views.AspectMembership({person: this.inviter, dropdownMayCreateNewAspect: true});
}
});
// @license-end

View file

@ -4,45 +4,49 @@ app.pages.Profile = app.views.Base.extend({
templateName: false,
events: {
'click #block_user_button': 'blockPerson',
'click #unblock_user_button': 'unblockPerson'
"click #block_user_button": "blockPerson",
"click #unblock_user_button": "unblockPerson"
},
subviews: {
'#profile': 'sidebarView',
'.profile_header': 'headerView',
'#main_stream': 'streamView'
"#profile": "sidebarView",
".profile_header": "headerView",
"#main_stream": "streamView"
},
tooltipSelector: '.profile_button .profile-header-icon, .sharing_message_container',
tooltipSelector: ".profile_button .profile-header-icon, .sharing_message_container",
initialize: function(opts) {
if( !this.model ) {
this._populateModel(opts);
}
if( app.hasPreload('photos') )
this.photos = app.parsePreload('photos'); // we don't interact with it, so no model
if( app.hasPreload('contacts') )
this.contacts = app.parsePreload('contacts'); // we don't interact with it, so no model
if (app.hasPreload("photos_count")) {
this.photos = app.parsePreload("photos_count");
}
if (app.hasPreload("contacts_count")) {
this.contacts = app.parsePreload("contacts_count");
}
this.streamCollection = _.has(opts, 'streamCollection') ? opts.streamCollection : null;
this.streamViewClass = _.has(opts, 'streamView') ? opts.streamView : null;
this.streamCollection = _.has(opts, "streamCollection") ? opts.streamCollection : null;
this.streamViewClass = _.has(opts, "streamView") ? opts.streamView : null;
this.model.on('change', this.render, this);
this.model.on('sync', this._done, this);
this.model.on("change", this.render, this);
this.model.on("sync", this._done, this);
// bind to global events
var id = this.model.get('id');
app.events.on('person:block:'+id, this.reload, this);
app.events.on('person:unblock:'+id, this.reload, this);
app.events.on('aspect:create', this.reload, this);
app.events.on('aspect_membership:update', this.reload, this);
var id = this.model.get("id");
app.events.on("person:block:"+id, this.reload, this);
app.events.on("person:unblock:"+id, this.reload, this);
app.events.on("aspect:create", this.reload, this);
app.events.on("aspect_membership:update", this.reload, this);
app.router.renderAspectMembershipDropdowns(this.$el);
},
_populateModel: function(opts) {
if( app.hasPreload('person') ) {
this.model = new app.models.Person(app.parsePreload('person'));
if( app.hasPreload("person") ) {
this.model = new app.models.Person(app.parsePreload("person"));
} else if(opts && opts.person_id) {
this.model = new app.models.Person({guid: opts.person_id});
this.model.fetch();
@ -52,14 +56,18 @@ app.pages.Profile = app.views.Base.extend({
},
sidebarView: function() {
if( !this.model.has('profile') ) return false;
if(!this.model.has("profile")){
return false;
}
return new app.views.ProfileSidebar({
model: this.model,
model: this.model
});
},
headerView: function() {
if( !this.model.has('profile') ) return false;
if(!this.model.has("profile")){
return false;
}
return new app.views.ProfileHeader({
model: this.model,
photos: this.photos,
@ -68,12 +76,7 @@ app.pages.Profile = app.views.Base.extend({
},
streamView: function() {
if( !this.model.has('profile') ) return false;
if( this.model.isBlocked() ) {
$('#main_stream').empty().html(
'<div class="dull">'+
Diaspora.I18n.t('profile.ignoring', {name: this.model.get('name')}) +
'</div>');
if(!this.model.has("profile")){
return false;
}
@ -96,14 +99,13 @@ app.pages.Profile = app.views.Base.extend({
},
blockPerson: function() {
if( !confirm(Diaspora.I18n.t('ignore_user')) ) return;
if(!confirm(Diaspora.I18n.t("ignore_user"))){
return;
}
var block = this.model.block();
block.fail(function() {
Diaspora.page.flashMessages.render({
success: false,
notice: Diaspora.I18n.t('ignore_failed')
});
app.flashMessages.error(Diaspora.I18n.t("ignore_failed"));
});
return false;
@ -112,22 +114,18 @@ app.pages.Profile = app.views.Base.extend({
unblockPerson: function() {
var block = this.model.unblock();
block.fail(function() {
Diaspora.page.flashMessages.render({
success: false,
notice: Diaspora.I18.t('unblock_failed')
});
app.flashMessages.error(Diaspora.I18.t("unblock_failed"));
});
return false;
},
reload: function() {
this.$('#profile').addClass('loading');
this.$("#profile").addClass("loading");
this.model.fetch();
},
_done: function() {
this.$('#profile').removeClass('loading');
this.$("#profile").removeClass("loading");
}
});
// @license-end

View file

@ -1,7 +1,9 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.pages.Settings = Backbone.View.extend({
initialize: function() {
$(".settings_visibilty").tooltip({placement: "top"});
$(".settings-visibility").tooltip({placement: "top"});
$(".profile-visibility-hint").tooltip({placement: "top"});
$("[name='profile[public_details]']").bootstrapSwitch();
}
});
// @license-end

View file

@ -12,16 +12,6 @@ app.pages.SinglePostViewer = app.views.Base.extend({
this.model = new app.models.Post({ id : gon.post.id });
this.model.preloadOrFetch().done(_.bind(this.initViews, this));
this.model.interactions.fetch(); //async, yo, might want to throttle this later.
this.setupLightbox();
},
setupLightbox : function(){
this.lightbox = Diaspora.BaseWidget.instantiate("Lightbox");
this.lightbox.set({
imageParent: '.photo_attachments',
imageSelector: 'img.stream-photo'
});
this.$el.delegate("a.stream-photo-link", "click", this.lightbox.lightboxImageClicked);
},
initViews : function() {
@ -37,7 +27,6 @@ app.pages.SinglePostViewer = app.views.Base.extend({
//... and converts html to plain text
document.title = $('<div>').html(html_title).text();
}
},
}
});
// @license-end

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