This commit is contained in:
mgabdev 2020-12-09 15:02:43 -05:00
parent f9c1246fac
commit 6c13144fbc
24 changed files with 577 additions and 416 deletions

View File

@ -15,121 +15,120 @@ GIT
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (5.2.3) actioncable (5.2.4.4)
actionpack (= 5.2.3) actionpack (= 5.2.4.4)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailer (5.2.3) actionmailer (5.2.4.4)
actionpack (= 5.2.3) actionpack (= 5.2.4.4)
actionview (= 5.2.3) actionview (= 5.2.4.4)
activejob (= 5.2.3) activejob (= 5.2.4.4)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (5.2.3) actionpack (5.2.4.4)
actionview (= 5.2.3) actionview (= 5.2.4.4)
activesupport (= 5.2.3) activesupport (= 5.2.4.4)
rack (~> 2.0) rack (~> 2.0, >= 2.0.8)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2) rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.2.3) actionview (5.2.4.4)
activesupport (= 5.2.3) activesupport (= 5.2.4.4)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.4) erubi (~> 1.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3) rails-html-sanitizer (~> 1.0, >= 1.0.3)
active_model_serializers (0.10.9) active_model_serializers (0.10.11)
actionpack (>= 4.1, < 6) actionpack (>= 4.1, < 6.1)
activemodel (>= 4.1, < 6) activemodel (>= 4.1, < 6.1)
case_transform (>= 0.2) case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3) jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
active_record_query_trace (1.6.2) active_record_query_trace (1.8)
activejob (5.2.3) activejob (5.2.4.4)
activesupport (= 5.2.3) activesupport (= 5.2.4.4)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (5.2.3) activemodel (5.2.4.4)
activesupport (= 5.2.3) activesupport (= 5.2.4.4)
activerecord (5.2.3) activerecord (5.2.4.4)
activemodel (= 5.2.3) activemodel (= 5.2.4.4)
activesupport (= 5.2.3) activesupport (= 5.2.4.4)
arel (>= 9.0) arel (>= 9.0)
activestorage (5.2.3) activestorage (5.2.4.4)
actionpack (= 5.2.3) actionpack (= 5.2.4.4)
activerecord (= 5.2.3) activerecord (= 5.2.4.4)
marcel (~> 0.3.1) marcel (~> 0.3.1)
activesupport (5.2.3) activesupport (5.2.4.4)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
minitest (~> 5.1) minitest (~> 5.1)
tzinfo (~> 1.1) tzinfo (~> 1.1)
addressable (2.6.0) addressable (2.7.0)
public_suffix (>= 2.0.2, < 4.0) public_suffix (>= 2.0.2, < 5.0)
airbrussh (1.3.0) airbrussh (1.4.0)
sshkit (>= 1.6.1, != 1.7.0) sshkit (>= 1.6.1, != 1.7.0)
annotate (2.7.5) annotate (2.7.5)
activerecord (>= 3.2, < 7.0) activerecord (>= 3.2, < 7.0)
rake (>= 10.4, < 13.0) rake (>= 10.4, < 13.0)
arel (9.0.0) arel (9.0.0)
ast (2.4.0) ast (2.4.1)
attr_encrypted (3.1.0) attr_encrypted (3.1.0)
encryptor (~> 3.0.0) encryptor (~> 3.0.0)
av (0.9.0) av (0.9.0)
cocaine (~> 0.5.3) cocaine (~> 0.5.3)
aws-eventstream (1.0.3) aws-eventstream (1.1.0)
aws-partitions (1.169.0) aws-partitions (1.404.0)
aws-sdk-core (3.54.0) aws-sdk-core (3.110.0)
aws-eventstream (~> 1.0, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1.0) aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
jmespath (~> 1.0) jmespath (~> 1.0)
aws-sdk-kms (1.21.0) aws-sdk-kms (1.39.0)
aws-sdk-core (~> 3, >= 3.53.0) aws-sdk-core (~> 3, >= 3.109.0)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.41.0) aws-sdk-s3 (1.86.0)
aws-sdk-core (~> 3, >= 3.53.0) aws-sdk-core (~> 3, >= 3.109.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1) aws-sigv4 (~> 1.1)
aws-sigv4 (1.1.0) aws-sigv4 (1.2.2)
aws-eventstream (~> 1.0, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
bcrypt (3.1.12) bcrypt (3.1.16)
benchmark-ips (2.7.2) benchmark-ips (2.8.4)
better_errors (2.5.1) better_errors (2.9.1)
coderay (>= 1.0.0) coderay (>= 1.0.0)
erubi (>= 1.0.0) erubi (>= 1.0.0)
rack (>= 0.9.0) rack (>= 0.9.0)
binding_of_caller (0.8.0) binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1) debug_inspector (>= 0.0.1)
blurhash (0.1.3) blurhash (0.1.4)
ffi (~> 1.10.0) ffi (~> 1.10.0)
bootsnap (1.4.4) bootsnap (1.5.1)
msgpack (~> 1.0) msgpack (~> 1.0)
brakeman (4.5.1) brakeman (4.10.0)
browser (2.5.3) browser (5.1.0)
builder (3.2.3) builder (3.2.4)
bullet (6.0.0) bullet (6.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
uniform_notifier (~> 1.11) uniform_notifier (~> 1.11)
bundler-audit (0.6.1) bundler-audit (0.7.0.1)
bundler (>= 1.2.0, < 3) bundler (>= 1.2.0, < 3)
thor (~> 0.18) thor (>= 0.18, < 2)
byebug (11.0.0) byebug (11.1.3)
capistrano (3.11.0) capistrano (3.14.1)
airbrussh (>= 1.0.0) airbrussh (>= 1.0.0)
i18n i18n
rake (>= 10.0.0) rake (>= 10.0.0)
sshkit (>= 1.9.0) sshkit (>= 1.9.0)
capistrano-bundler (1.3.0) capistrano-bundler (2.0.1)
capistrano (~> 3.1) capistrano (~> 3.1)
sshkit (~> 1.2) capistrano-rails (1.6.1)
capistrano-rails (1.4.0)
capistrano (~> 3.1) capistrano (~> 3.1)
capistrano-bundler (~> 1.1) capistrano-bundler (>= 1.1, < 3)
capistrano-rbenv (2.1.4) capistrano-rbenv (2.2.0)
capistrano (~> 3.1) capistrano (~> 3.1)
sshkit (~> 1.3) sshkit (~> 1.3)
capistrano-yarn (2.0.2) capistrano-yarn (2.0.2)
capistrano (~> 3.0) capistrano (~> 3.0)
capybara (3.22.0) capybara (3.34.0)
addressable addressable
mini_mime (>= 0.1.3) mini_mime (>= 0.1.3)
nokogiri (~> 1.8) nokogiri (~> 1.8)
@ -139,81 +138,83 @@ GEM
xpath (~> 3.2) xpath (~> 3.2)
case_transform (0.2) case_transform (0.2)
activesupport activesupport
charlock_holmes (0.7.6) charlock_holmes (0.7.7)
chewy (5.0.0) chewy (5.1.0)
activesupport (>= 4.0) activesupport (>= 4.0)
elasticsearch (>= 2.0.0) elasticsearch (>= 2.0.0)
elasticsearch-dsl elasticsearch-dsl
chunky_png (1.3.10) chunky_png (1.3.14)
cld3 (3.2.4) cld3 (3.2.6)
ffi (>= 1.1.0, < 1.11.0) ffi (>= 1.1.0, < 1.12.0)
climate_control (0.2.0) climate_control (0.2.0)
cocaine (0.5.8) cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0) climate_control (>= 0.0.3, < 1.0)
coderay (1.1.2) coderay (1.1.3)
concurrent-ruby (1.1.5) concurrent-ruby (1.1.7)
connection_pool (2.2.3) connection_pool (2.2.3)
crack (0.4.3) crack (0.4.4)
safe_yaml (~> 1.0.0) crass (1.0.6)
crass (1.0.4) css_parser (1.7.1)
css_parser (1.6.0)
addressable addressable
debug_inspector (0.0.3) debug_inspector (0.0.3)
derailed_benchmarks (1.3.5) derailed_benchmarks (1.8.1)
benchmark-ips (~> 2) benchmark-ips (~> 2)
get_process_mem (~> 0) get_process_mem (~> 0)
heapy (~> 0) heapy (~> 0)
memory_profiler (~> 0) memory_profiler (~> 0)
mini_histogram (>= 0.2.1)
rack (>= 1) rack (>= 1)
rake (> 10, < 13) rake (> 10, < 14)
thor (~> 0.19) ruby-statistics (>= 2.1)
devise (4.6.2) thor (>= 0.19, < 2)
devise (4.7.3)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
railties (>= 4.1.0, < 6.0) railties (>= 4.1.0)
responders responders
warden (~> 1.2.3) warden (~> 1.2.3)
devise-two-factor (3.0.3) devise-two-factor (3.1.0)
activesupport (< 5.3) activesupport (< 6.1)
attr_encrypted (>= 1.3, < 4, != 2) attr_encrypted (>= 1.3, < 4, != 2)
devise (~> 4.0) devise (~> 4.0)
railties (< 5.3) railties (< 6.1)
rotp (~> 2.0) rotp (~> 2.0)
devise_pam_authenticatable2 (9.2.0) devise_pam_authenticatable2 (9.2.0)
devise (>= 4.0.0) devise (>= 4.0.0)
rpam2 (~> 4.0) rpam2 (~> 4.0)
diff-lcs (1.3) diff-lcs (1.4.4)
docile (1.3.0) docile (1.3.2)
domain_name (0.5.20180417) domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0) unf (>= 0.0.5, < 1.0.0)
doorkeeper (5.1.0) doorkeeper (5.4.0)
railties (>= 5) railties (>= 5)
dotenv (2.7.2) dotenv (2.7.6)
dotenv-rails (2.7.2) dotenv-rails (2.7.6)
dotenv (= 2.7.2) dotenv (= 2.7.6)
railties (>= 3.2, < 6.1) railties (>= 3.2)
elasticsearch (6.0.2) e2mmap (0.1.0)
elasticsearch-api (= 6.0.2) elasticsearch (7.10.0)
elasticsearch-transport (= 6.0.2) elasticsearch-api (= 7.10.0)
elasticsearch-api (6.0.2) elasticsearch-transport (= 7.10.0)
elasticsearch-api (7.10.0)
multi_json multi_json
elasticsearch-dsl (0.1.5) elasticsearch-dsl (0.1.9)
elasticsearch-transport (6.0.2) elasticsearch-transport (7.10.0)
faraday faraday (~> 1)
multi_json multi_json
encryptor (3.0.0) encryptor (3.0.0)
equatable (0.5.0) erubi (1.10.0)
erubi (1.8.0) et-orbi (1.2.4)
et-orbi (1.1.6)
tzinfo tzinfo
excon (0.62.0) excon (0.78.1)
fabrication (2.20.2) fabrication (2.21.1)
faker (1.9.3) faker (1.9.6)
i18n (>= 0.7) i18n (>= 0.7)
faraday (0.15.0) faraday (1.1.0)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
ruby2_keywords
fast_blank (1.0.0) fast_blank (1.0.0)
fastimage (2.1.5) fastimage (2.2.0)
ffi (1.10.0) ffi (1.10.0)
fog-core (2.1.0) fog-core (2.1.0)
builder builder
@ -223,18 +224,19 @@ GEM
fog-json (1.2.0) fog-json (1.2.0)
fog-core fog-core
multi_json (~> 1.10) multi_json (~> 1.10)
fog-openstack (0.3.7) fog-openstack (0.3.10)
fog-core (>= 1.45, <= 2.1.0) fog-core (>= 1.45, <= 2.1.0)
fog-json (>= 1.0) fog-json (>= 1.0)
ipaddress (>= 0.8) ipaddress (>= 0.8)
formatador (0.2.5) formatador (0.2.5)
fugit (1.1.6) fugit (1.4.1)
et-orbi (~> 1.1, >= 1.1.6) et-orbi (~> 1.1, >= 1.1.8)
raabro (~> 1.1) raabro (~> 1.4)
fuubar (2.3.2) fuubar (2.5.0)
rspec-core (~> 3.0) rspec-core (~> 3.0)
ruby-progressbar (~> 1.4) ruby-progressbar (~> 1.4)
get_process_mem (0.2.3) get_process_mem (0.2.7)
ffi (~> 1.0)
globalid (0.4.2) globalid (0.4.2)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
goldfinger (2.1.0) goldfinger (2.1.0)
@ -242,8 +244,8 @@ GEM
http (~> 3.0) http (~> 3.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
oj (~> 3.0) oj (~> 3.0)
hamlit (2.9.3) hamlit (2.13.0)
temple (>= 0.8.0) temple (>= 0.8.2)
thor thor
tilt tilt
hamlit-rails (0.2.3) hamlit-rails (0.2.3)
@ -253,10 +255,11 @@ GEM
railties (>= 4.0.1) railties (>= 4.0.1)
hamster (3.0.0) hamster (3.0.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
hashdiff (0.3.7) hashdiff (1.0.1)
hashie (3.6.0) hashie (4.1.0)
heapy (0.1.4) heapy (0.2.0)
highline (2.0.1) thor
highline (2.0.3)
hiredis (0.6.3) hiredis (0.6.3)
hkdf (0.3.0) hkdf (0.3.0)
htmlentities (4.3.4) htmlentities (4.3.4)
@ -267,14 +270,14 @@ GEM
http_parser.rb (~> 0.6.0) http_parser.rb (~> 0.6.0)
http-cookie (1.0.3) http-cookie (1.0.3)
domain_name (~> 0.5) domain_name (~> 0.5)
http-form_data (2.1.1) http-form_data (2.3.0)
http_accept_language (2.1.1) http_accept_language (2.1.1)
httplog (1.3.0) httplog (1.4.3)
rack (>= 1.0) rack (>= 1.0)
rainbow (>= 2.0.0) rainbow (>= 2.0.0)
i18n (1.6.0) i18n (1.8.5)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
i18n-tasks (0.9.29) i18n-tasks (0.9.31)
activesupport (>= 4.0.2) activesupport (>= 4.0.2)
ast (>= 2.1.0) ast (>= 2.1.0)
erubi erubi
@ -286,46 +289,49 @@ GEM
terminal-table (>= 1.5.1) terminal-table (>= 1.5.1)
idn-ruby (0.1.0) idn-ruby (0.1.0)
ipaddress (0.8.3) ipaddress (0.8.3)
iso-639 (0.2.8) iso-639 (0.3.5)
jaro_winkler (1.5.2)
jmespath (1.4.0) jmespath (1.4.0)
json (2.1.0) json (2.3.1)
json-ld (3.0.2) json-canonicalization (0.2.0)
multi_json (~> 1.12) json-ld (3.1.5)
rdf (>= 2.2.8, < 4.0) htmlentities (~> 4.3)
json-ld-preloaded (3.0.2) json-canonicalization (~> 0.2)
json-ld (~> 3.0) link_header (~> 0.0, >= 0.0.8)
multi_json (~> 1.12) multi_json (~> 1.14)
rdf (~> 3.0) rack (~> 2.0)
jsonapi-renderer (0.2.0) rdf (~> 3.1)
jwt (2.1.0) json-ld-preloaded (3.1.3)
kaminari (1.1.1) json-ld (~> 3.1)
rdf (~> 3.1)
jsonapi-renderer (0.2.2)
jwt (2.2.2)
kaminari (1.2.1)
activesupport (>= 4.1.0) activesupport (>= 4.1.0)
kaminari-actionview (= 1.1.1) kaminari-actionview (= 1.2.1)
kaminari-activerecord (= 1.1.1) kaminari-activerecord (= 1.2.1)
kaminari-core (= 1.1.1) kaminari-core (= 1.2.1)
kaminari-actionview (1.1.1) kaminari-actionview (1.2.1)
actionview actionview
kaminari-core (= 1.1.1) kaminari-core (= 1.2.1)
kaminari-activerecord (1.1.1) kaminari-activerecord (1.2.1)
activerecord activerecord
kaminari-core (= 1.1.1) kaminari-core (= 1.2.1)
kaminari-core (1.1.1) kaminari-core (1.2.1)
launchy (2.4.3) launchy (2.5.0)
addressable (~> 2.3) addressable (~> 2.7)
letter_opener (1.7.0) letter_opener (1.7.0)
launchy (~> 2.2) launchy (~> 2.2)
letter_opener_web (1.3.4) letter_opener_web (1.4.0)
actionmailer (>= 3.2) actionmailer (>= 3.2)
letter_opener (~> 1.0) letter_opener (~> 1.0)
railties (>= 3.2) railties (>= 3.2)
link_header (0.0.8) link_header (0.0.8)
lograge (0.11.1) lograge (0.11.2)
actionpack (>= 4) actionpack (>= 4)
activesupport (>= 4) activesupport (>= 4)
railties (>= 4) railties (>= 4)
request_store (~> 1.0) request_store (~> 1.0)
loofah (2.2.3) loofah (2.8.0)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.7.1) mail (2.7.1)
@ -336,54 +342,54 @@ GEM
mimemagic (~> 0.3.2) mimemagic (~> 0.3.2)
mario-redis-lock (1.2.1) mario-redis-lock (1.2.1)
redis (>= 3.0.5) redis (>= 3.0.5)
memory_profiler (0.9.13) memory_profiler (0.9.14)
method_source (0.9.2) method_source (1.0.0)
microformats (4.1.0) microformats (4.2.1)
json (~> 2.1) json (~> 2.2)
nokogiri (~> 1.8, >= 1.8.3) nokogiri (~> 1.10)
mime-types (3.2.2) mime-types (3.3.1)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2018.0812) mime-types-data (3.2020.1104)
mimemagic (0.3.3) mimemagic (0.3.5)
mini_mime (1.0.1) mini_histogram (0.3.1)
mini_mime (1.0.2)
mini_portile2 (2.4.0) mini_portile2 (2.4.0)
minitest (5.11.3) minitest (5.14.2)
msgpack (1.2.10) msgpack (1.3.3)
multi_json (1.13.1) multi_json (1.15.0)
multipart-post (2.0.0) multipart-post (2.1.1)
necromancer (0.5.0) net-ldap (0.17.0)
net-ldap (0.16.1) net-scp (3.0.0)
net-scp (1.2.1) net-ssh (>= 2.6.5, < 7.0.0)
net-ssh (>= 2.6.5) net-ssh (6.1.0)
net-ssh (5.0.2) nio4r (2.5.4)
nio4r (2.3.1) nokogiri (1.10.10)
nokogiri (1.10.3)
mini_portile2 (~> 2.4.0) mini_portile2 (~> 2.4.0)
nokogumbo (2.0.0) nokogumbo (2.0.4)
nokogiri (~> 1.8, >= 1.8.4) nokogiri (~> 1.8, >= 1.8.4)
nsa (0.2.7) nsa (0.2.7)
activesupport (>= 4.2, < 6) activesupport (>= 4.2, < 6)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (>= 3.5) sidekiq (>= 3.5)
statsd-ruby (~> 1.4, >= 1.4.0) statsd-ruby (~> 1.4, >= 1.4.0)
oj (3.7.12) oj (3.10.16)
omniauth (1.9.0) omniauth (1.9.1)
hashie (>= 3.4.6, < 3.7.0) hashie (>= 3.4.6)
rack (>= 1.6.2, < 3) rack (>= 1.6.2, < 3)
omniauth-cas (1.1.1) omniauth-cas (1.1.1)
addressable (~> 2.3) addressable (~> 2.3)
nokogiri (~> 1.5) nokogiri (~> 1.5)
omniauth (~> 1.2) omniauth (~> 1.2)
omniauth-saml (1.10.1) omniauth-saml (1.10.3)
omniauth (~> 1.3, >= 1.3.2) omniauth (~> 1.3, >= 1.3.2)
ruby-saml (~> 1.7) ruby-saml (~> 1.9)
orm_adapter (0.5.0) orm_adapter (0.5.0)
ostatus2 (2.0.3) ostatus2 (2.0.3)
addressable (~> 2.5) addressable (~> 2.5)
http (~> 3.0) http (~> 3.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
ox (2.10.1) ox (2.13.4)
paperclip (6.0.0) paperclip (6.1.0)
activemodel (>= 4.2.0) activemodel (>= 4.2.0)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
mime-types mime-types
@ -392,155 +398,161 @@ GEM
paperclip-av-transcoder (0.6.4) paperclip-av-transcoder (0.6.4)
av (~> 0.9.0) av (~> 0.9.0)
paperclip (>= 2.5.2) paperclip (>= 2.5.2)
parallel (1.17.0) parallel (1.20.1)
parallel_tests (2.29.0) parallel_tests (2.32.0)
parallel parallel
parser (2.6.3.0) parser (2.7.2.0)
ast (~> 2.4.0) ast (~> 2.4.1)
pastel (0.7.2) pastel (0.8.0)
equatable (~> 0.5.0) tty-color (~> 0.5)
tty-color (~> 0.4.0)
pg (1.2.3) pg (1.2.3)
pghero (2.7.0) pghero (2.7.3)
activerecord (>= 5) activerecord (>= 5)
pkg-config (1.3.7) pkg-config (1.4.4)
premailer (1.11.1) premailer (1.14.2)
addressable addressable
css_parser (>= 1.6.0) css_parser (>= 1.6.0)
htmlentities (>= 4.0.0) htmlentities (>= 4.0.0)
premailer-rails (1.10.2) premailer-rails (1.11.1)
actionmailer (>= 3, < 6) actionmailer (>= 3)
premailer (~> 1.7, >= 1.7.9) premailer (~> 1.7, >= 1.7.9)
private_address_check (0.5.0) private_address_check (0.5.0)
pry (0.12.2) pry (0.13.1)
coderay (~> 1.1.0) coderay (~> 1.1)
method_source (~> 0.9.0) method_source (~> 1.0)
pry-byebug (3.7.0) pry-byebug (3.9.0)
byebug (~> 11.0) byebug (~> 11.0)
pry (~> 0.10) pry (~> 0.13.0)
pry-rails (0.3.9) pry-rails (0.3.9)
pry (>= 0.10.4) pry (>= 0.10.4)
public_suffix (3.1.0) public_suffix (4.0.6)
puma (5.0) puma (5.1.0)
nio4r (~> 2.0) nio4r (~> 2.0)
pundit (2.0.1) pundit (2.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.1.6) raabro (1.4.0)
rack (2.2.3) rack (2.2.3)
rack-attack (6.0.0) rack-attack (6.3.1)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
rack-cors (1.0.3) rack-cors (1.1.1)
rack (>= 2.0.0)
rack-proxy (0.6.5) rack-proxy (0.6.5)
rack rack
rack-test (1.1.0) rack-test (1.1.0)
rack (>= 1.0, < 3) rack (>= 1.0, < 3)
rails (5.2.3) rails (5.2.4.4)
actioncable (= 5.2.3) actioncable (= 5.2.4.4)
actionmailer (= 5.2.3) actionmailer (= 5.2.4.4)
actionpack (= 5.2.3) actionpack (= 5.2.4.4)
actionview (= 5.2.3) actionview (= 5.2.4.4)
activejob (= 5.2.3) activejob (= 5.2.4.4)
activemodel (= 5.2.3) activemodel (= 5.2.4.4)
activerecord (= 5.2.3) activerecord (= 5.2.4.4)
activestorage (= 5.2.3) activestorage (= 5.2.4.4)
activesupport (= 5.2.3) activesupport (= 5.2.4.4)
bundler (>= 1.3.0) bundler (>= 1.3.0)
railties (= 5.2.3) railties (= 5.2.4.4)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.4) rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.x) actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.x) actionview (>= 5.0.1.rc1)
activesupport (>= 5.0.1.x) activesupport (>= 5.0.1.rc1)
rails-dom-testing (2.0.3) rails-dom-testing (2.0.3)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.0.4) rails-html-sanitizer (1.3.0)
loofah (~> 2.2, >= 2.2.2) loofah (~> 2.3)
rails-i18n (5.1.3) rails-i18n (5.1.3)
i18n (>= 0.7, < 2) i18n (>= 0.7, < 2)
railties (>= 5.0, < 6) railties (>= 5.0, < 6)
rails-settings-cached (0.6.6) rails-settings-cached (0.7.2)
rails (>= 4.2.0) rails (>= 4.2.0)
railties (5.2.3) railties (5.2.4.4)
actionpack (= 5.2.3) actionpack (= 5.2.4.4)
activesupport (= 5.2.3) activesupport (= 5.2.4.4)
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0) thor (>= 0.19.0, < 2.0)
rainbow (3.0.0) rainbow (3.0.0)
rake (12.3.2) rake (12.3.3)
rb-fsevent (0.10.3) rb-fsevent (0.10.4)
rb-inotify (0.10.0) rb-inotify (0.10.1)
ffi (~> 1.0) ffi (~> 1.0)
rdf (3.0.9) rdf (3.1.7)
hamster (~> 3.0) hamster (~> 3.0)
link_header (~> 0.0, >= 0.0.8) link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.3.3) rdf-normalize (0.4.0)
rdf (>= 2.2, < 4.0) rdf (~> 3.1)
redcarpet (3.4.0) redcarpet (3.5.0)
redis (4.2.5) redis (4.2.5)
redis-actionpack (5.0.2) redis-actionpack (5.2.0)
actionpack (>= 4.0, < 6) actionpack (>= 5, < 7)
redis-rack (>= 1, < 3) redis-rack (>= 2.1.0, < 3)
redis-store (>= 1.1.0, < 2) redis-store (>= 1.1.0, < 2)
redis-activesupport (5.0.4) redis-activesupport (5.2.0)
activesupport (>= 3, < 6) activesupport (>= 3, < 7)
redis-store (>= 1.3, < 2) redis-store (>= 1.3, < 2)
redis-namespace (1.6.0) redis-namespace (1.8.0)
redis (>= 3.0.4) redis (>= 3.0.4)
redis-rack (2.0.4) redis-rack (2.1.3)
rack (>= 1.5, < 3) rack (>= 2.0.8, < 3)
redis-store (>= 1.2, < 2) redis-store (>= 1.2, < 2)
redis-rails (5.0.2) redis-rails (5.0.2)
redis-actionpack (>= 5.0, < 6) redis-actionpack (>= 5.0, < 6)
redis-activesupport (>= 5.0, < 6) redis-activesupport (>= 5.0, < 6)
redis-store (>= 1.2, < 2) redis-store (>= 1.2, < 2)
redis-store (1.5.0) redis-store (1.9.0)
redis (>= 2.2, < 5) redis (>= 4, < 5)
regexp_parser (1.5.1) regexp_parser (1.8.2)
request_store (1.4.1) request_store (1.5.0)
rack (>= 1.4) rack (>= 1.4)
responders (2.4.1) responders (3.0.1)
actionpack (>= 4.2.0, < 6.0) actionpack (>= 5.0)
railties (>= 4.2.0, < 6.0) railties (>= 5.0)
rexml (3.2.4)
rotp (2.1.2) rotp (2.1.2)
rpam2 (4.0.2) rpam2 (4.0.2)
rqrcode (0.10.1) rqrcode (0.10.1)
chunky_png (~> 1.0) chunky_png (~> 1.0)
rspec-core (3.8.0) rspec-core (3.9.3)
rspec-support (~> 3.8.0) rspec-support (~> 3.9.3)
rspec-expectations (3.8.2) rspec-expectations (3.9.4)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0) rspec-support (~> 3.9.0)
rspec-mocks (3.8.0) rspec-mocks (3.9.1)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0) rspec-support (~> 3.9.0)
rspec-rails (3.8.2) rspec-rails (3.9.1)
actionpack (>= 3.0) actionpack (>= 3.0)
activesupport (>= 3.0) activesupport (>= 3.0)
railties (>= 3.0) railties (>= 3.0)
rspec-core (~> 3.8.0) rspec-core (~> 3.9.0)
rspec-expectations (~> 3.8.0) rspec-expectations (~> 3.9.0)
rspec-mocks (~> 3.8.0) rspec-mocks (~> 3.9.0)
rspec-support (~> 3.8.0) rspec-support (~> 3.9.0)
rspec-sidekiq (3.0.3) rspec-sidekiq (3.1.0)
rspec-core (~> 3.0, >= 3.0.0) rspec-core (~> 3.0, >= 3.0.0)
sidekiq (>= 2.4.0) sidekiq (>= 2.4.0)
rspec-support (3.8.0) rspec-support (3.9.4)
rubocop (0.71.0) rubocop (0.93.1)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10) parallel (~> 1.10)
parser (>= 2.6) parser (>= 2.7.1.5)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8)
rexml
rubocop-ast (>= 0.6.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7) unicode-display_width (>= 1.4.0, < 2.0)
rubocop-ast (1.3.0)
parser (>= 2.7.1.5)
ruby-progressbar (1.10.1) ruby-progressbar (1.10.1)
ruby-saml (1.9.0) ruby-saml (1.11.0)
nokogiri (>= 1.5.10) nokogiri (>= 1.5.10)
rufus-scheduler (3.5.2) ruby-statistics (2.1.2)
fugit (~> 1.1, >= 1.1.5) ruby2_keywords (0.0.2)
safe_yaml (1.0.4) rufus-scheduler (3.6.0)
sanitize (5.0.0) fugit (~> 1.1, >= 1.1.6)
sanitize (5.2.1)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.8.0) nokogiri (>= 1.8.0)
nokogumbo (~> 2.0) nokogumbo (~> 2.0)
@ -549,8 +561,7 @@ GEM
sass-listen (4.0.0) sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4) rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7) rb-inotify (~> 0.9, >= 0.9.7)
scss_lint (0.58.0) scss_lint (0.59.0)
rake (>= 0.9, < 13)
sass (~> 3.5, >= 3.5.5) sass (~> 3.5, >= 3.5.5)
sidekiq (6.1.2) sidekiq (6.1.2)
connection_pool (>= 2.2.2) connection_pool (>= 2.2.2)
@ -558,91 +569,95 @@ GEM
redis (>= 4.2.0) redis (>= 4.2.0)
sidekiq-bulk (0.2.0) sidekiq-bulk (0.2.0)
sidekiq sidekiq
sidekiq-scheduler (3.0.0) sidekiq-scheduler (3.0.1)
e2mmap
redis (>= 3, < 5) redis (>= 3, < 5)
rufus-scheduler (~> 3.2) rufus-scheduler (~> 3.2)
sidekiq (>= 3) sidekiq (>= 3)
thwait
tilt (>= 1.4.0) tilt (>= 1.4.0)
sidekiq-unique-jobs (6.0.13) sidekiq-unique-jobs (6.0.25)
concurrent-ruby (~> 1.0, >= 1.0.5) concurrent-ruby (~> 1.0, >= 1.0.5)
sidekiq (>= 4.0, < 7.0) sidekiq (>= 4.0, < 7.0)
thor (~> 0) thor (>= 0.20, < 2.0)
simple-navigation (4.0.5) simple-navigation (4.1.0)
activesupport (>= 2.3.2) activesupport (>= 2.3.2)
simple_form (4.1.0) simple_form (4.1.0)
actionpack (>= 5.0) actionpack (>= 5.0)
activemodel (>= 5.0) activemodel (>= 5.0)
simplecov (0.16.1) simplecov (0.20.0)
docile (~> 1.1) docile (~> 1.1)
json (>= 1.8, < 3) simplecov-html (~> 0.11)
simplecov-html (~> 0.10.0) simplecov_json_formatter (~> 0.1)
simplecov-html (0.10.2) simplecov-html (0.12.3)
sprockets (3.7.2) simplecov_json_formatter (0.1.2)
sprockets (4.0.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-rails (3.2.1) sprockets-rails (3.2.2)
actionpack (>= 4.0) actionpack (>= 4.0)
activesupport (>= 4.0) activesupport (>= 4.0)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
sshkit (1.17.0) sshkit (1.21.1)
net-scp (>= 1.1.2) net-scp (>= 1.1.2)
net-ssh (>= 2.8.0) net-ssh (>= 2.8.0)
stackprof (0.2.12) stackprof (0.2.16)
statsd-ruby (1.4.0) statsd-ruby (1.4.0)
stoplight (2.1.3) stoplight (2.1.3)
streamio-ffmpeg (3.0.2) streamio-ffmpeg (3.0.2)
multi_json (~> 1.8) multi_json (~> 1.8)
strong_migrations (0.4.0) strong_migrations (0.7.3)
activerecord (>= 5) activerecord (>= 5)
temple (0.8.1) temple (0.8.2)
terminal-table (1.8.0) terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1) unicode-display_width (~> 1.1, >= 1.1.1)
terrapin (0.6.0) terrapin (0.6.0)
climate_control (>= 0.0.3, < 1.0) climate_control (>= 0.0.3, < 1.0)
thor (0.20.3) thor (0.20.3)
thread_safe (0.3.6) thread_safe (0.3.6)
tilt (2.0.9) thwait (0.2.0)
tty-color (0.4.3) e2mmap
tty-command (0.8.2) tilt (2.0.10)
pastel (~> 0.7.0) tty-color (0.6.0)
tty-cursor (0.7.0) tty-command (0.10.0)
tty-prompt (0.19.0) pastel (~> 0.8)
necromancer (~> 0.5.0) tty-cursor (0.7.1)
pastel (~> 0.7.0) tty-prompt (0.22.0)
tty-reader (~> 0.6.0) pastel (~> 0.8)
tty-reader (0.6.0) tty-reader (~> 0.8)
tty-reader (0.9.0)
tty-cursor (~> 0.7) tty-cursor (~> 0.7)
tty-screen (~> 0.7) tty-screen (~> 0.8)
wisper (~> 2.0.0) wisper (~> 2.0)
tty-screen (0.7.0) tty-screen (0.8.1)
twitter-text (1.14.7) twitter-text (1.14.7)
unf (~> 0.1.0) unf (~> 0.1.0)
tzinfo (1.2.5) tzinfo (1.2.8)
thread_safe (~> 0.1) thread_safe (~> 0.1)
tzinfo-data (1.2019.1) tzinfo-data (1.2020.4)
tzinfo (>= 1.0.0) tzinfo (>= 1.0.0)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.7.5) unf_ext (0.0.7.7)
unicode-display_width (1.6.0) unicode-display_width (1.7.0)
uniform_notifier (1.12.1) uniform_notifier (1.13.0)
warden (1.2.8) warden (1.2.9)
rack (>= 2.0.6) rack (>= 2.0.9)
webmock (3.5.1) webmock (3.10.0)
addressable (>= 2.3.6) addressable (>= 2.3.6)
crack (>= 0.3.2) crack (>= 0.3.2)
hashdiff hashdiff (>= 0.4.0, < 2.0.0)
webpacker (4.0.6) webpacker (4.3.0)
activesupport (>= 4.2) activesupport (>= 4.2)
rack-proxy (>= 0.6.1) rack-proxy (>= 0.6.1)
railties (>= 4.2) railties (>= 4.2)
webpush (0.3.8) webpush (1.1.0)
hkdf (~> 0.2) hkdf (~> 0.2)
jwt (~> 2.0) jwt (~> 2.0)
websocket-driver (0.7.0) websocket-driver (0.7.3)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3) websocket-extensions (0.1.5)
wisper (2.0.0) wisper (2.0.1)
xpath (3.2.0) xpath (3.2.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)

View File

@ -9,12 +9,10 @@ class Api::V1::ChatConversationController < Api::BaseController
before_action :set_chat_conversation, only: [:show, :mark_chat_conversation_approved, :mark_chat_conversation_hidden, :mark_chat_conversation_unread] before_action :set_chat_conversation, only: [:show, :mark_chat_conversation_approved, :mark_chat_conversation_hidden, :mark_chat_conversation_unread]
def show def show
puts "tilly ChatConversationsController-0"
render json: {}, each_serializer: REST::ChatConversationAccountSerializer render json: {}, each_serializer: REST::ChatConversationAccountSerializer
end end
def create def create
puts "tilly ChatConversationsController-1"
# : todo : # : todo :
# check if already created # check if already created
# check if blocked # check if blocked

View File

@ -27,12 +27,8 @@ class Api::V1::ChatMessagesController < Api::BaseController
end end
def destroy def destroy
puts "tilly destry chat"
@chat = ChatMessage.where(from_account: current_user.account).find(params[:id]) @chat = ChatMessage.where(from_account: current_user.account).find(params[:id])
puts "tilly @chat: " + @chat.inspect
# : todo : # : todo :
# make sure last_chat_message_id in chat_account_conversation gets set to last # make sure last_chat_message_id in chat_account_conversation gets set to last
@ -49,7 +45,6 @@ class Api::V1::ChatMessagesController < Api::BaseController
def set_chat_conversation_recipients def set_chat_conversation_recipients
account_conversation = ChatConversationAccount.where(account: current_user.account, chat_conversation: @chat_conversation).first account_conversation = ChatConversationAccount.where(account: current_user.account, chat_conversation: @chat_conversation).first
puts "tilly account_conversation - " + account_conversation.inspect
@chat_conversation_recipients = Account.where(id: account_conversation.participant_account_ids) @chat_conversation_recipients = Account.where(id: account_conversation.participant_account_ids)
end end

View File

@ -8,6 +8,8 @@ import ImmutablePureComponent from 'react-immutable-pure-component'
import { import {
favorite, favorite,
unfavorite, unfavorite,
repost,
unrepost,
} from '../actions/interactions' } from '../actions/interactions'
import { replyCompose } from '../actions/compose' import { replyCompose } from '../actions/compose'
import { openModal } from '../actions/modal' import { openModal } from '../actions/modal'
@ -15,8 +17,9 @@ import { openPopover } from '../actions/popover'
import { makeGetStatus } from '../selectors' import { makeGetStatus } from '../selectors'
import { import {
CX, CX,
MODAL_BOOST,
} from '../constants' } from '../constants'
import { me } from '../initial_state' import { me, boostModal } from '../initial_state'
import Avatar from './avatar' import Avatar from './avatar'
import Button from './button' import Button from './button'
import CommentHeader from './comment_header' import CommentHeader from './comment_header'
@ -49,6 +52,10 @@ class Comment extends ImmutablePureComponent {
this.props.onFavorite(this.props.status) this.props.onFavorite(this.props.status)
} }
handleOnRepost = () => {
this.props.onRepost(this.props.status)
}
handleOnOpenStatusOptions = () => { handleOnOpenStatusOptions = () => {
this.props.onOpenStatusOptions(this.moreNode, this.props.status) this.props.onOpenStatusOptions(this.moreNode, this.props.status)
} }
@ -57,6 +64,26 @@ class Comment extends ImmutablePureComponent {
this.setState({ showMedia: !this.state.showMedia }) this.setState({ showMedia: !this.state.showMedia })
} }
handleOnThreadMouseEnter = (event) => {
if (event.target) {
const threadKey = event.target.getAttribute('data-threader-indent')
const elems = document.querySelectorAll(`[data-threader-indent="${threadKey}"]`)
elems.forEach((elem) => elem.classList.add('thread-hovering'))
}
}
handleOnThreadMouseLeave = (event) => {
if (event.target) {
const threadKey = event.target.getAttribute('data-threader-indent')
const elems = document.querySelectorAll(`[data-threader-indent="${threadKey}"]`)
elems.forEach((elem) => elem.classList.remove('thread-hovering'))
}
}
handleOnThreadClick = (event) => {
// : todo :
}
setMoreNode = (c) => { setMoreNode = (c) => {
this.moreNode = c this.moreNode = c
} }
@ -81,7 +108,7 @@ class Comment extends ImmutablePureComponent {
} }
const style = { const style = {
paddingLeft: `${indent * 42}px`, paddingLeft: `${indent * 38}px`,
} }
const contentClasses = CX({ const contentClasses = CX({
@ -95,8 +122,28 @@ class Comment extends ImmutablePureComponent {
}) })
return ( return (
<div className={[_s.d, _s.px15, _s.mb10, _s.py5].join(' ')} data-comment={status.get('id')}> <div className={[_s.d, _s.px15, _s.py5].join(' ')} data-comment={status.get('id')}>
<div className={_s.d} style={style}> {
indent > 0 &&
<div className={[_s.d, _s.z3, _s.flexRow, _s.posAbs, _s.topNeg20PX, _s.left0, _s.bottom20PX, _s.aiCenter, _s.jcCenter].join(' ')}>
{Array.apply(null, {
length: indent
}).map((_, i) => (
<button
key={`thread-${status.get('id')}-${i}`}
data-threader
data-threader-indent={i}
onMouseEnter={this.handleOnThreadMouseEnter}
onMouseLeave={this.handleOnThreadMouseLeave}
onClick={this.handleOnThreadClick}
className={[_s.d, _s.w14PX, _s.h100PC, _s.outlineNone, _s.bgTransparent, _s.ml20, _s.cursorPointer].join(' ')}
>
<span className={[_s.d, _s.w2PX, _s.h100PC, _s.mlAuto, _s.mr2, _s.bgSubtle].join(' ')} />
</button>
))}
</div>
}
<div className={[_s.d, _s.mb10].join(' ')} style={style}>
<div className={[_s.d, _s.flexRow].join(' ')}> <div className={[_s.d, _s.flexRow].join(' ')}>
<NavLink <NavLink
@ -104,7 +151,7 @@ class Comment extends ImmutablePureComponent {
title={status.getIn(['account', 'acct'])} title={status.getIn(['account', 'acct'])}
className={[_s.d, _s.mr10, _s.pt5].join(' ')} className={[_s.d, _s.mr10, _s.pt5].join(' ')}
> >
<Avatar account={status.get('account')} size={32} /> <Avatar account={status.get('account')} size={30} />
</NavLink> </NavLink>
<div className={[_s.d, _s.flexShrink1, _s.maxW100PC42PX].join(' ')}> <div className={[_s.d, _s.flexShrink1, _s.maxW100PC42PX].join(' ')}>
@ -145,6 +192,10 @@ class Comment extends ImmutablePureComponent {
title={intl.formatMessage(messages.reply)} title={intl.formatMessage(messages.reply)}
onClick={this.handleOnReply} onClick={this.handleOnReply}
/> />
<CommentButton
title={intl.formatMessage(status.get('reblogged') ? messages.unrepost : messages.repost)}
onClick={this.handleOnRepost}
/>
<div ref={this.setMoreNode}> <div ref={this.setMoreNode}>
<CommentButton <CommentButton
title='···' title='···'
@ -193,6 +244,8 @@ CommentButton.propTypes = {
const messages = defineMessages({ const messages = defineMessages({
reply: { id: 'status.reply', defaultMessage: 'Reply' }, reply: { id: 'status.reply', defaultMessage: 'Reply' },
repost: { id: 'status.repost', defaultMessage: 'Repost' },
unrepost: { id: 'status.unrepost', defaultMessage: 'Unrepost' },
like: { id: 'status.like', defaultMessage: 'Like' }, like: { id: 'status.like', defaultMessage: 'Like' },
unlike: { id: 'status.unlike', defaultMessage: 'Unlike' }, unlike: { id: 'status.unlike', defaultMessage: 'Unlike' },
}) })
@ -227,6 +280,24 @@ const mapDispatchToProps = (dispatch) => ({
dispatch(favorite(status)) dispatch(favorite(status))
} }
}, },
onRepost(status) {
if (!me) return dispatch(openModal('UNAUTHORIZED'))
const alreadyReposted = status.get('reblogged')
if (boostModal && !alreadyReposted) {
dispatch(openModal(MODAL_BOOST, {
status,
onRepost: () => dispatch(repost(status)),
}))
} else {
if (alreadyReposted) {
dispatch(unrepost(status))
} else {
dispatch(repost(status))
}
}
},
onOpenStatusOptions(targetRef, status) { onOpenStatusOptions(targetRef, status) {
dispatch(openPopover('STATUS_OPTIONS', { dispatch(openPopover('STATUS_OPTIONS', {
targetRef, targetRef,
@ -260,6 +331,7 @@ Comment.propTypes = {
isHighlighted: PropTypes.bool, isHighlighted: PropTypes.bool,
onReply: PropTypes.func.isRequired, onReply: PropTypes.func.isRequired,
onFavorite: PropTypes.func.isRequired, onFavorite: PropTypes.func.isRequired,
onRepost: PropTypes.func.isRequired,
onOpenStatusOptions: PropTypes.func.isRequired, onOpenStatusOptions: PropTypes.func.isRequired,
onOpenLikes: PropTypes.func.isRequired, onOpenLikes: PropTypes.func.isRequired,
onOpenReposts: PropTypes.func.isRequired, onOpenReposts: PropTypes.func.isRequired,

View File

@ -5,8 +5,11 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'
import ImmutablePureComponent from 'react-immutable-pure-component' import ImmutablePureComponent from 'react-immutable-pure-component'
import { openModal } from '../../actions/modal' import { openModal } from '../../actions/modal'
import { cancelReplyCompose } from '../../actions/compose' import { cancelReplyCompose } from '../../actions/compose'
import ModalLayout from './modal_layout'
import TimelineComposeBlock from '../timeline_compose_block' import TimelineComposeBlock from '../timeline_compose_block'
import Block from '../block'
import Heading from '../heading'
import Text from '../text'
import Button from '../button'
class ComposeModal extends ImmutablePureComponent { class ComposeModal extends ImmutablePureComponent {
@ -32,6 +35,10 @@ class ComposeModal extends ImmutablePureComponent {
} }
} }
onHandleSubmit = () => {
}
render() { render() {
const { const {
intl, intl,
@ -42,13 +49,35 @@ class ComposeModal extends ImmutablePureComponent {
const title = isEditing ? messages.edit : isComment ? messages.comment : messages.title const title = isEditing ? messages.edit : isComment ? messages.comment : messages.title
return ( return (
<ModalLayout <div style={{width: '512px'}} className={[_s.d, _s.modal].join(' ')}>
noPadding <Block>
title={intl.formatMessage(title)} <div className={[_s.d, _s.flexRow, _s.aiCenter, _s.jcCenter, _s.borderBottom1PX, _s.borderColorSecondary, _s.h53PX, _s.px15].join(' ')}>
onClose={this.onClickClose} <Button
backgroundColor='none'
title={intl.formatMessage(messages.close)}
onClick={this.onClickClose}
color='secondary'
icon='close'
iconSize='10px'
/>
<Heading size='h2'>
{intl.formatMessage(title)}
</Heading>
<Button
backgroundColor='none'
title={intl.formatMessage(messages.close)}
className={_s.mlAuto}
onClick={this.onHandleSubmit}
color='secondary'
> >
<TimelineComposeBlock modal /> <Text>Post</Text>
</ModalLayout> </Button>
</div>
<div className={[_s.d].join(' ')}>
<TimelineComposeBlock isModal />
</div>
</Block>
</div>
) )
} }
} }
@ -58,6 +87,7 @@ const messages = defineMessages({
title: { id: 'navigation_bar.compose', defaultMessage: 'Compose new gab' }, title: { id: 'navigation_bar.compose', defaultMessage: 'Compose new gab' },
comment: { id: 'navigation_bar.compose_comment', defaultMessage: 'Compose new comment' }, comment: { id: 'navigation_bar.compose_comment', defaultMessage: 'Compose new comment' },
edit: { id: 'navigation_bar.edit_gab', defaultMessage: 'Edit' }, edit: { id: 'navigation_bar.edit_gab', defaultMessage: 'Edit' },
close: { id: 'lightbox.close', defaultMessage: 'Close' },
}) })
const mapStateToProps = (state) => { const mapStateToProps = (state) => {

View File

@ -99,7 +99,7 @@ const mapDispatchToProps = (dispatch) => ({
GroupsPanel.propTypes = { GroupsPanel.propTypes = {
groupIds: ImmutablePropTypes.list, groupIds: ImmutablePropTypes.list,
isLazy: PropTypes.bool, isLazy: PropTypes.bool,
onFetchGroups: PropTypes.func.isRequired, onFetchGroupsByTab: PropTypes.func.isRequired,
shouldLoad: PropTypes.bool, shouldLoad: PropTypes.bool,
groupType: PropTypes.string, groupType: PropTypes.string,
} }

View File

@ -160,12 +160,6 @@ class StatusOptionsPopover extends ImmutablePureComponent {
if (me) { if (me) {
if (isReply) { if (isReply) {
menu.push({
icon: 'repost',
hideArrow: true,
title: intl.formatMessage(status.get('reblogged') ? messages.cancel_repost_private : messages.repost_private),
onClick: this.handleRepostClick,
})
menu.push({ menu.push({
icon: 'pencil', icon: 'pencil',
hideArrow: true, hideArrow: true,

View File

@ -35,7 +35,7 @@ class SidebarPanelGroup extends React.PureComponent {
return ( return (
<React.Fragment> <React.Fragment>
{ {
layout.map((panel) => { layout.map((panel, i) => {
if (!panel) return null if (!panel) return null
if (typeof panel !== 'function' || panel.key === 'status-promotion-panel') { if (typeof panel !== 'function' || panel.key === 'status-promotion-panel') {
@ -44,6 +44,7 @@ class SidebarPanelGroup extends React.PureComponent {
return ( return (
<Bundle <Bundle
key={`sidebar-panel-group-item-${i}`}
fetchComponent={panel} fetchComponent={panel}
loading={this.renderLoading} loading={this.renderLoading}
error={this.renderError} error={this.renderError}

View File

@ -403,7 +403,6 @@ StatusList.propTypes = {
timelineId: PropTypes.string, timelineId: PropTypes.string,
queuedItemSize: PropTypes.number, queuedItemSize: PropTypes.number,
onDequeueTimeline: PropTypes.func.isRequired, onDequeueTimeline: PropTypes.func.isRequired,
onClearTimeline: PropTypes.func.isRequired,
onScrollToTop: PropTypes.func.isRequired, onScrollToTop: PropTypes.func.isRequired,
onScroll: PropTypes.func.isRequired, onScroll: PropTypes.func.isRequired,
onFetchContext: PropTypes.func.isRequired, onFetchContext: PropTypes.func.isRequired,

View File

@ -19,15 +19,15 @@ class TimelineComposeBlock extends ImmutablePureComponent {
account, account,
size, size,
intl, intl,
modal, isModal,
...rest ...rest
} = this.props } = this.props
if (modal) { if (isModal) {
return ( return (
<section className={_s.d}> <section className={_s.d}>
<div className={[_s.d, _s.flexRow].join(' ')}> <div className={[_s.d, _s.flexRow].join(' ')}>
<ComposeFormContainer {...rest} modal={modal} /> <ComposeFormContainer {...rest} isModal={isModal} />
</div> </div>
</section> </section>
) )
@ -69,7 +69,7 @@ TimelineComposeBlock.propTypes = {
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
account: ImmutablePropTypes.map.isRequired, account: ImmutablePropTypes.map.isRequired,
size: PropTypes.number, size: PropTypes.number,
modal: PropTypes.bool, isModal: PropTypes.bool,
} }
TimelineComposeBlock.defaultProps = { TimelineComposeBlock.defaultProps = {

View File

@ -71,7 +71,7 @@ UserStat.propTypes = {
PropTypes.number, PropTypes.number,
PropTypes.object, PropTypes.object,
]).isRequired, ]).isRequired,
isCentered: PropTypes.bool.isRequired, isCentered: PropTypes.bool,
} }
export default UserStat export default UserStat

View File

@ -43,10 +43,10 @@ class ComposeExtraButtonList extends React.PureComponent {
render() { render() {
const { isMatch, edit, hidePro } = this.props const { isMatch, edit, hidePro, isModal } = this.props
const { height } = this.state const { height } = this.state
const small = height <= 660 const small = height <= 660 || isModal
const containerClasses = CX({ const containerClasses = CX({
d: 1, d: 1,
@ -83,6 +83,7 @@ ComposeExtraButtonList.propTypes = {
hidePro: PropTypes.bool, hidePro: PropTypes.bool,
edit: PropTypes.bool, edit: PropTypes.bool,
isMatch: PropTypes.bool, isMatch: PropTypes.bool,
isModal: PropTypes.bool,
} }
export default ComposeExtraButtonList export default ComposeExtraButtonList

View File

@ -35,14 +35,14 @@ import Text from '../../../components/text'
import Icon from '../../../components/icon' import Icon from '../../../components/icon'
import ComposeExtraButtonList from './compose_extra_button_list' import ComposeExtraButtonList from './compose_extra_button_list'
import ComposeDestinationHeader from './compose_destination_header' import ComposeDestinationHeader from './compose_destination_header'
import ComposeFormSubmitButton from './compose_form_submit_button'
const messages = defineMessages({ const messages = defineMessages({
placeholder: { id: 'compose_form.placeholder', defaultMessage: "What's on your mind?" }, placeholder: { id: 'compose_form.placeholder', defaultMessage: "What's on your mind?" },
commentPlaceholder: { id: 'compose_form.comment_placeholder', defaultMessage: "Write a comment..." }, commentPlaceholder: { id: 'compose_form.comment_placeholder', defaultMessage: "Write a comment..." },
spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' }, spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' },
publish: { id: 'compose_form.publish', defaultMessage: 'Publish' }, post: { id: 'compose_form.post', defaultMessage: 'Post' },
publishEdit: { id: 'compose_form.publish_edit', defaultMessage: 'Publish Edit' }, postEdit: { id: 'compose_form.post_edit', defaultMessage: 'Post Edit' },
publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}' },
schedulePost: { id: 'compose_form.schedule_post', defaultMessage: 'Schedule Post' }, schedulePost: { id: 'compose_form.schedule_post', defaultMessage: 'Schedule Post' },
}) })
@ -73,12 +73,19 @@ class ComposeForm extends ImmutablePureComponent {
} }
handleClick = (e) => { handleClick = (e) => {
if (!this.form) return false; const { isStandalone, isModalOpen, shouldCondense } = this.props
if (!this.form) return false
if (e.target) { if (e.target) {
if (e.target.classList.contains('react-datepicker__time-list-item')) return false if (e.target.classList.contains('react-datepicker__time-list-item')) return false
} }
if (!this.form.contains(e.target)) { if (!this.form.contains(e.target)) {
this.handleClickOutside(); this.handleClickOutside()
} else {
if (!isStandalone && !isModalOpen && !shouldCondense) {
this.props.openComposeModal()
return false
}
} }
} }
@ -287,7 +294,7 @@ class ComposeForm extends ImmutablePureComponent {
isDisabled={disabledButton} isDisabled={disabledButton}
className={_s.px10} className={_s.px10}
> >
{intl.formatMessage(scheduledAt ? messages.schedulePost : messages.publish)} {intl.formatMessage(scheduledAt ? messages.schedulePost : messages.post)}
</Button> </Button>
</div> </div>
@ -307,15 +314,11 @@ class ComposeForm extends ImmutablePureComponent {
) )
} }
if (isModalOpen) {
//
}
if (isStandalone || isModalOpen) { if (isStandalone || isModalOpen) {
return ( return (
<div className={[_s.d, _s.w100PC, _s.flexGrow1, _s.bgTertiary].join(' ')}> <div className={[_s.d, _s.w100PC, _s.flexGrow1, _s.bgTertiary].join(' ')}>
<div className={[_s.d, _s.calcMaxH370PX, _s.overflowYScroll, _s.boxShadowBlock, _s.borderBottom1PX, _s.borderColorSecondary].join(' ')}> <div className={[_s.d, _s.pb10, _s.calcMaxH370PX, _s.overflowYScroll, _s.boxShadowBlock, _s.borderBottom1PX, _s.borderColorSecondary].join(' ')}>
<ComposeDestinationHeader account={account} /> <ComposeDestinationHeader account={account} />
<div <div
@ -327,11 +330,7 @@ class ComposeForm extends ImmutablePureComponent {
{ {
!!reduxReplyToId && isModalOpen && isMatch && !!reduxReplyToId && isModalOpen && isMatch &&
<div className={[_s.d, _s.px15, _s.py10, _s.mt5].join(' ')}> <div className={[_s.d, _s.px15, _s.py10, _s.mt5].join(' ')}>
<StatusContainer <StatusContainer contextType='compose' id={reduxReplyToId} isChild />
contextType='compose'
id={reduxReplyToId}
isChild
/>
</div> </div>
} }
@ -374,10 +373,7 @@ class ComposeForm extends ImmutablePureComponent {
{ {
(isUploading || anyMedia) && (isUploading || anyMedia) &&
<div className={[_s.d, _s.px15, _s.mt5].join(' ')}> <div className={[_s.d, _s.px15, _s.mt5].join(' ')}>
<UploadForm <UploadForm replyToId={replyToId} isModalOpen={isModalOpen} />
replyToId={replyToId}
isModalOpen={isModalOpen}
/>
</div> </div>
} }
@ -391,33 +387,15 @@ class ComposeForm extends ImmutablePureComponent {
{ {
!!quoteOfId && isModalOpen && isMatch && !!quoteOfId && isModalOpen && isMatch &&
<div className={[_s.d, _s.px15, _s.py10, _s.mt5].join(' ')}> <div className={[_s.d, _s.px15, _s.py10, _s.mt5].join(' ')}>
<StatusContainer <StatusContainer contextType='compose' id={quoteOfId} isChild />
contextType='compose'
id={quoteOfId}
isChild
/>
</div> </div>
} }
</div> </div>
</div> </div>
<div className={[_s.d, _s.w100PC, _s.pt10, _s.px10].join(' ')}> { !isModalOpen && <ComposeFormSubmitButton /> }
<Button
isBlock
isDisabled={disabledButton}
backgroundColor={disabledButton ? 'secondary' : 'brand'}
color={disabledButton ? 'tertiary' : 'white'}
className={[_s.fs15PX, _s.px15, _s.flexGrow1, _s.mlAuto].join(' ')}
onClick={this.handleSubmit}
>
<Text color='inherit' weight='medium' align='center'>
{intl.formatMessage(scheduledAt ? messages.schedulePost : edit ? messages.publishEdit : messages.publish)}
</Text>
</Button>
</div>
<ComposeExtraButtonList isMatch={isMatch} hidePro={hidePro} edit={edit} /> <ComposeExtraButtonList isMatch={isMatch} hidePro={hidePro} edit={edit} isModal={isModalOpen} />
</div> </div>
) )
} }
@ -431,26 +409,13 @@ class ComposeForm extends ImmutablePureComponent {
<Text className={[_s.d, _s.px15, _s.pt15, _s.pb10].join(' ')} size='medium' color='tertiary'> <Text className={[_s.d, _s.px15, _s.pt15, _s.pb10].join(' ')} size='medium' color='tertiary'>
{intl.formatMessage((shouldCondense || !!reduxReplyToId) && isMatch ? messages.commentPlaceholder : messages.placeholder)} {intl.formatMessage((shouldCondense || !!reduxReplyToId) && isMatch ? messages.commentPlaceholder : messages.placeholder)}
</Text> </Text>
<div className={[_s.d, _s.flexRow, _s.aiCenter, _s.mt5, _s.px10, _s.flexWrap].join(' ')}> <div className={[_s.d, _s.flexRow, _s.aiCenter, _s.mt5, _s.px10, _s.flexWrap].join(' ')}>
<UploadButton /> <UploadButton />
<EmojiPickerButton isMatch={isMatch} /> <EmojiPickerButton isMatch={isMatch} />
<Responsive min={BREAKPOINT_EXTRA_EXTRA_SMALL}>
<PollButton /> <PollButton />
</Responsive> <ComposeFormSubmitButton />
<Button
isOutline
isDisabled={disabledButton}
backgroundColor='none'
color='brand'
className={[_s.fs15PX, _s.px15, _s.flexGrow1, _s.maxW212PX, _s.mlAuto].join(' ')}
onClick={this.handleSubmit}
>
<Text color='inherit' weight='medium' align='center'>
{intl.formatMessage(scheduledAt ? messages.schedulePost : edit ? messages.publishEdit : messages.publish)}
</Text>
</Button>
</div> </div>
<div className={[_s.d, _s.posAbs, _s.z2, _s.left0, _s.right0, _s.bottom0, _s.top0].join(' ')} />
</div> </div>
) )
} }
@ -481,6 +446,7 @@ ComposeForm.propTypes = {
onFetchSuggestions: PropTypes.func.isRequired, onFetchSuggestions: PropTypes.func.isRequired,
onSuggestionSelected: PropTypes.func.isRequired, onSuggestionSelected: PropTypes.func.isRequired,
onChangeSpoilerText: PropTypes.func.isRequired, onChangeSpoilerText: PropTypes.func.isRequired,
openComposeModal: PropTypes.func.isRequired,
onPaste: PropTypes.func.isRequired, onPaste: PropTypes.func.isRequired,
showSearch: PropTypes.bool, showSearch: PropTypes.bool,
anyMedia: PropTypes.bool, anyMedia: PropTypes.bool,

View File

@ -0,0 +1,78 @@
import React from 'react'
import PropTypes from 'prop-types'
import { CX } from '../../../constants'
import Button from '../../../components/button'
import Text from '../../../components/text'
class ComposeFormSubmitButton extends React.PureComponent {
render() {
const {
title,
active,
small,
disabledButton,
} = this.props
const containerClasses = CX({
d: 1,
mr5: 1,
jcCenter: 1,
h40PX: 1,
})
const btnClasses = CX({
d: 1,
circle: 1,
noUnderline: 1,
font: 1,
cursorPointer: 1,
textAlignCenter: 1,
outlineNone: 1,
bgTransparent: 1,
flexRow: 1,
bgSubtle_onHover: !active,
bgBrandLight: active,
py10: 1,
px10: 1,
})
const iconClasses = CX({
cSecondary: !active,
cWhite: active,
mr10: 1,
py2: small,
ml10: small,
})
const iconSize = !small ? '18px' : '16px'
const textColor = !active ? 'primary' : 'white'
return (
<div className={containerClasses}>
<div className={[_s.d, _s.w100PC, _s.py10, _s.px10].join(' ')}>
<Button
isBlock
isDisabled={disabledButton}
backgroundColor={disabledButton ? 'secondary' : 'brand'}
color={disabledButton ? 'tertiary' : 'white'}
className={[_s.fs15PX, _s.px15, _s.flexGrow1, _s.mlAuto].join(' ')}
onClick={this.handleSubmit}
>
<Text color='inherit' weight='medium' align='center'>
post
</Text>
</Button>
</div>
</div>
)
}
}
// {intl.formatMessage(scheduledAt ? messages.schedulePost : edit ? messages.postEdit : messages.post)}
ComposeFormSubmitButton.propTypes = {
}
export default ComposeFormSubmitButton

View File

@ -13,6 +13,8 @@ import {
uploadCompose, uploadCompose,
changeScheduledAt, changeScheduledAt,
} from '../../../actions/compose' } from '../../../actions/compose'
import { openModal } from '../../../actions/modal'
import { MODAL_COMPOSE } from '../../../constants'
import { me } from '../../../initial_state' import { me } from '../../../initial_state'
const mapStateToProps = (state, props) => { const mapStateToProps = (state, props) => {
@ -20,7 +22,7 @@ const mapStateToProps = (state, props) => {
replyToId, replyToId,
isStandalone, isStandalone,
shouldCondense, shouldCondense,
modal, isModal,
} = props } = props
const reduxReplyToId = state.getIn(['compose', 'in_reply_to']) const reduxReplyToId = state.getIn(['compose', 'in_reply_to'])
@ -37,7 +39,7 @@ const mapStateToProps = (state, props) => {
if (isModalOpen) isMatch = true if (isModalOpen) isMatch = true
if (isModalOpen && shouldCondense) isMatch = false if (isModalOpen && shouldCondense) isMatch = false
if (isModalOpen && (!modal && !isStandalone)) isMatch = false if (isModalOpen && (!isModal && !isStandalone)) isMatch = false
if (!isMatch) { if (!isMatch) {
return { return {
@ -126,6 +128,10 @@ const mapDispatchToProps = (dispatch, { isStandalone }) => ({
setScheduledAt(date) { setScheduledAt(date) {
dispatch(changeScheduledAt(date)) dispatch(changeScheduledAt(date))
}, },
openComposeModal() {
dispatch(openModal(MODAL_COMPOSE))
},
}) })
function mergeProps(stateProps, dispatchProps, ownProps) { function mergeProps(stateProps, dispatchProps, ownProps) {

View File

@ -43,7 +43,6 @@ class Deck extends React.PureComponent {
componentDidMount () { componentDidMount () {
this.props.dispatch(deckConnect()) this.props.dispatch(deckConnect())
console.log("this.props.isPro:", this.props)
if (!this.props.isPro) this.handleOnOpenProUpgradeModal() if (!this.props.isPro) this.handleOnOpenProUpgradeModal()
} }
@ -52,7 +51,6 @@ class Deck extends React.PureComponent {
} }
handleOnOpenProUpgradeModal = () => { handleOnOpenProUpgradeModal = () => {
console.log("handleOnOpenProUpgradeModal")
this.props.dispatch(openModal(MODAL_PRO_UPGRADE)) this.props.dispatch(openModal(MODAL_PRO_UPGRADE))
} }
@ -71,7 +69,7 @@ class Deck extends React.PureComponent {
} }
getDeckColumn = (deckColumn, index) => { getDeckColumn = (deckColumn, index) => {
if (!deckColumn || !isPro) return null if (!deckColumn || !this.props.isPro) return null
let Component = null let Component = null
let componentParams = {} let componentParams = {}
@ -178,7 +176,7 @@ class Deck extends React.PureComponent {
<DeckColumn title='Gab Deck for GabPRO' icon='pro' noButtons> <DeckColumn title='Gab Deck for GabPRO' icon='pro' noButtons>
<div className={[_s.d, _s.px15, _s.py15].join(' ')}> <div className={[_s.d, _s.px15, _s.py15].join(' ')}>
<Text> <Text>
Gab Deck for GabPRO Gab Deck for GabPRO. Some text about what it does and some buttons on going pro to use it.
</Text> </Text>
</div> </div>
</DeckColumn> </DeckColumn>
@ -188,7 +186,7 @@ class Deck extends React.PureComponent {
} }
{ {
!isEmpty && isPro && !isEmpty && isPro &&
gabDeckOrder.splice(0, GAB_DECK_MAX_ITEMS).map((deckOption, i) => this.getDeckColumn(deckOption, i)) gabDeckOrder.map((deckOption, i) => this.getDeckColumn(deckOption, i))
} }
</SortableContainer> </SortableContainer>
) )

View File

@ -14,7 +14,7 @@
"account.follows": "Sigue", "account.follows": "Sigue",
"account.follows.empty": "Este usuario todavía no sigue a nadie.", "account.follows.empty": "Este usuario todavía no sigue a nadie.",
"account.follows_you": "Te sigue", "account.follows_you": "Te sigue",
"account.hide_reposts": "Ocultar retoots de @{name}", "account.hide_reposts": "Ocultar reposts de @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}", "account.link_verified_on": "Ownership of this link was checked on {date}",
"account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
"account.media": "Media", "account.media": "Media",
@ -28,7 +28,7 @@
"account.report": "Reportar a @{name}", "account.report": "Reportar a @{name}",
"account.requested": "Esperando aprobación", "account.requested": "Esperando aprobación",
"account.share": "Compartir el perfil de @{name}", "account.share": "Compartir el perfil de @{name}",
"account.show_reposts": "Mostrar retoots de @{name}", "account.show_reposts": "Mostrar reposts de @{name}",
"account.unblock": "Desbloquear a @{name}", "account.unblock": "Desbloquear a @{name}",
"account.unblock_domain": "Mostrar a {domain}", "account.unblock_domain": "Mostrar a {domain}",
"account.unendorse": "No mostrar en el perfil", "account.unendorse": "No mostrar en el perfil",
@ -155,7 +155,7 @@
"hashtag.column_settings.tag_mode.none": "None of these", "hashtag.column_settings.tag_mode.none": "None of these",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.column_settings.tag_toggle": "Include additional tags in this column",
"home.column_settings.basic": "Básico", "home.column_settings.basic": "Básico",
"home.column_settings.show_reposts": "Mostrar retoots", "home.column_settings.show_reposts": "Mostrar reposts",
"home.column_settings.show_replies": "Mostrar respuestas", "home.column_settings.show_replies": "Mostrar respuestas",
"intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
@ -263,7 +263,7 @@
"notifications.column_settings.mention": "Menciones:", "notifications.column_settings.mention": "Menciones:",
"notifications.column_settings.poll": "Poll results:", "notifications.column_settings.poll": "Poll results:",
"notifications.column_settings.push": "Notificaciones push", "notifications.column_settings.push": "Notificaciones push",
"notifications.column_settings.repost": "Retoots:", "notifications.column_settings.repost": "reposts:",
"notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.show": "Mostrar en columna",
"notifications.column_settings.sound": "Reproducir sonido", "notifications.column_settings.sound": "Reproducir sonido",
"notifications.filter.all": "All", "notifications.filter.all": "All",

View File

@ -79,6 +79,10 @@ class GroupsPage extends React.PureComponent {
to: isPro ? '/groups/create' : undefined, to: isPro ? '/groups/create' : undefined,
onClick: isPro ? undefined : this.handleOpenProUpgradeModal, onClick: isPro ? undefined : this.handleOpenProUpgradeModal,
}, },
{
icon: 'search',
to: '/search',
},
]} ]}
tabs={tabs} tabs={tabs}
page='groups' page='groups'

View File

@ -95,7 +95,7 @@ class HomePage extends React.PureComponent {
UserPanel, UserPanel,
ProgressPanel, ProgressPanel,
<WrappedBundle component={ProPanel} componentParams={{ isPro: isPro }} />, <WrappedBundle component={ProPanel} componentParams={{ isPro: isPro }} />,
<WrappedBundle component={TrendsBreakingPanel} componentParams={{ isLazy: true, shouldLoad: lazyLoaded }} />, <WrappedBundle component={TrendsBreakingPanel} />,
<WrappedBundle component={ShopPanel} componentParams={{ isLazy: true, shouldLoad: lazyLoaded }} />, <WrappedBundle component={ShopPanel} componentParams={{ isLazy: true, shouldLoad: lazyLoaded }} />,
<WrappedBundle component={ListsPanel} componentParams={{ isLazy: true, shouldLoad: lazyLoaded }} />, <WrappedBundle component={ListsPanel} componentParams={{ isLazy: true, shouldLoad: lazyLoaded }} />,
<WrappedBundle component={UserSuggestionsPanel} componentParams={{ isLazy: true, shouldLoad: lazyLoaded }} />, <WrappedBundle component={UserSuggestionsPanel} componentParams={{ isLazy: true, shouldLoad: lazyLoaded }} />,

View File

@ -491,6 +491,7 @@ pre {
/* */ /* */
.topNeg50PX { top: -50px; } .topNeg50PX { top: -50px; }
.topNeg20PX { top: -20px; }
.top0 { top: 0; } .top0 { top: 0; }
.top120PX { top: 120px; } .top120PX { top: 120px; }
.top60PX { top: 60px; } .top60PX { top: 60px; }
@ -499,6 +500,7 @@ pre {
.top50PC { top: 50%; } .top50PC { top: 50%; }
.bottom0 { bottom: 0; } .bottom0 { bottom: 0; }
.bottom20PX { bottom: 20px; }
.bottom55PX { bottom: 55px; } .bottom55PX { bottom: 55px; }
.bottom60PX { bottom: 60px; } .bottom60PX { bottom: 60px; }
.bottomAuto { bottom: auto; } .bottomAuto { bottom: auto; }
@ -617,6 +619,7 @@ pre {
.w14PX { width: 14px; } .w14PX { width: 14px; }
.w10PX { width: 10px; } .w10PX { width: 10px; }
.w4PX { width: 4px; } .w4PX { width: 4px; }
.w2PX { width: 2px; }
.w1PX { width: 1px; } .w1PX { width: 1px; }
.wAuto { width: auto; } .wAuto { width: auto; }
@ -808,6 +811,7 @@ pre {
.mr2 { margin-right: 2px; } .mr2 { margin-right: 2px; }
.mrAuto { margin-right: auto; } .mrAuto { margin-right: auto; }
.ml20 { margin-left: 20px; }
.ml15 { margin-left: 15px; } .ml15 { margin-left: 15px; }
.ml10 { margin-left: 10px; } .ml10 { margin-left: 10px; }
.ml7 { margin-left: 7px; } .ml7 { margin-left: 7px; }
@ -1205,6 +1209,11 @@ pre {
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
/* */
:global(.thread-hovering > span) {
background-color: var(--solid_color_secondary) !important;
}
/* */ /* */
:global(.emoji-mart-search input) { :global(.emoji-mart-search input) {

View File

@ -21,7 +21,7 @@ class StatusFilter
end end
def filtered_status? def filtered_status?
blocking_account? || blocking_domain? || muting_account? blocking_account? || muting_account?
end end
def blocking_account? def blocking_account?

View File

@ -87,9 +87,6 @@ class Group < ApplicationRecord
end end
def set_slug def set_slug
puts "tilly-5: " + slug.to_s
puts "tilly-6: " + self.member_count.to_s
if !slug.nil? && self.member_count > 50 && self.slug.nil? if !slug.nil? && self.member_count > 50 && self.slug.nil?
self.slug = slug.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') self.slug = slug.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
elsif !slug.nil? && self.member_count < 50 && self.slug.nil? elsif !slug.nil? && self.member_count < 50 && self.slug.nil?

View File

@ -22,7 +22,6 @@ class InstancePresenter
end end
def status_count def status_count
puts "tilly-hello-1"
Rails.cache.fetch('local_status_count') { Account.local.joins(:account_stat).sum('account_stats.statuses_count') }.to_i Rails.cache.fetch('local_status_count') { Account.local.joins(:account_stat).sum('account_stats.statuses_count') }.to_i
end end

View File

@ -32,7 +32,6 @@ class REST::StatusSerializer < ActiveModel::Serializer
has_one :preloadable_poll, key: :poll, serializer: REST::PollSerializer has_one :preloadable_poll, key: :poll, serializer: REST::PollSerializer
def id def id
# puts "tilly instance:" + instance_options.inspect
object.id.to_s object.id.to_s
end end