3590 Commits (82236a37039043d134efb3ddbdd2a3e04e714e2c)

Author SHA1 Message Date
kibigo! 92cc79be72 Enabled vanilla thmee
7 years ago
kibigo! 08a01dd037 Public pack fix
7 years ago
kibigo! 672ace5a20 Media styling
7 years ago
kibigo! f51f7b0e06 Font styles are now packagified
7 years ago
Eugen Rochko 58cede4808
Profile redirect notes (#5746)
7 years ago
beatrix dec960c828
Merge pull request #208 from yipdw/keyword-mute
7 years ago
Jenkins eed50514be Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
7 years ago
SerCom_KC 6be72a3ec6 Updating Chinese (Simplified) translations (#5725)
7 years ago
kibigo! fc2c8b50dd Removed glitch tests
7 years ago
kibigo! e19fc6a9f8 Restore vanilla components
7 years ago
kibigo! 45c44989c8 Forking glitch theme
7 years ago
beatrix 5a9982b425
Merge pull request #223 from glitch-soc/glitchsoc/feature/configurable-status-size
7 years ago
David Yip 130aa90d55 Update annotations on Follow, FollowRequest, and Mute.
7 years ago
David Yip 1ab12ba38e Merge remote-tracking branch 'origin/master' into merge-upstream
7 years ago
Eugen Rochko 24cafd73a2
Lists (#5703)
7 years ago
David Yip 6f8ccbfcdf
Merge pull request #222 from yipdw/merge/tootsuite/master
7 years ago
David Yip dc16d73bf5 Merge remote-tracking branch 'lambadalambda/feature/configurable-status-size' into glitchsoc/feature/configurable-status-size
7 years ago
beatrix b006bb82af
Merge pull request #221 from glitch-soc/local-only-policy
7 years ago
Jenkins 94c5a11cda Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
7 years ago
David Yip 45f18b8f49
Merge pull request #218 from glitch-soc/themed-prefetching
7 years ago
Lynx Kotoura 4a2fc2d444 Increase contrast of Admin badges (#5740)
7 years ago
Clworld e1ebf36352 Fix regression #5467: fixes emoji copy (#5739)
7 years ago
David Yip f6355f6ffb Update StatusPolicy to check current_account for local_only? toots.
7 years ago
unarist e28b33c89c Move "Permissions" row into main table in /admin/accounts/:id (#5734)
7 years ago
David Yip 2a386ad88d
Add trailing comma in mapStateToProps
7 years ago
David Yip fbf76feb37
Merge pull request #219 from glitch-soc/no-spin
7 years ago
David Yip 392945f9a3 Throw layout, isWide, navbarUnder back into mapStateToProps.
7 years ago
kibigo! 4dd19054d6 Removes spin theme
7 years ago
kibigo! 585758a373 Themed prefetching
7 years ago
David Yip b28b405b97 Merge remote-tracking branch 'origin/master' into gs-master
7 years ago
ysksn 9dd5e329ab Remove empty strings (#5732)
7 years ago
Eugen Rochko 3e90987c8b Fix some rubocop style issues (#5730)
7 years ago
Eugen Rochko 2151fd3150
Display moderator badge (green), admin badge changed to red (#5728)
7 years ago
Renato "Lond" Cerqueira ad207456d6 Improve language filter (#5724)
7 years ago
ysksn 9e3d24a150 Fix AccountFinderConcern::AccountFinder#with_usernames (#5722)
7 years ago
Surinna Curtis 35fbdc36f9 Merge tootsuite/master at 3023725936
7 years ago
David Yip 08652baab0 Replace =~ with #matches?. #208.
7 years ago
David Yip 8fc54890e5 Prefix cache keys with the matcher type. #208.
7 years ago
David Yip cb4ef24ac9 Match keyword mute filter on hashtags. #208.
7 years ago
David Yip 431503bae2 Also run the keyword matcher on a status' tags. #208.
7 years ago
beatrix 04508868b0
Merge pull request #212 from aschmitz/feat/mute-reblogs
7 years ago
ysksn 19e8b861a2 Delegate some methods of User to @settings (#5706)
7 years ago
masarakki c73a1fb537 reusable-streaming (#5709)
7 years ago
Surinna Curtis 031a5a8f92 Optional notification muting (#5087)
7 years ago
ThibG 58bca7b1e4 Filter searched toots to be consistent with blocking behaviors (#5383)
7 years ago
ThibG 1c25853842 Use already-known remote user data if resolving temporarily fails in mentions (#5702)
7 years ago
Eugen Rochko fbef909c2a
Add option to block direct messages from people you don't follow (#5669)
7 years ago
SerCom_KC c3ec1e87b8 Updating Chinese (Simplified) translations (#5643)
7 years ago
Yamagishi Kazutoshi 20150659e6 Add uniqueness to block email domains (#5692)
7 years ago
Marcin Mikołajczak 8087aa83d4 i18n: Update Polish translation (#5699)
7 years ago
Lain Iwakura ca5440b93d Rename MAX_CHARS to MAX_TOOT_CHARS to be more specific.
7 years ago
Lain Iwakura dae8916544 Code style fixes.
7 years ago
Lain Iwakura d11b1a1aa7 Handle character limit in initial state in frontend.
7 years ago
Lain Iwakura a4dcabc11b Return character limit in API and initial state.
7 years ago
Lain Iwakura 6cd192b9fb Make character limit configurable.
7 years ago
Andrew c238444188 Updates and fixes to win95 theme
7 years ago
Anna e só 0e6c4cb796 l10n: PT-BR translation updated (#5681)
7 years ago
David Yip 656d54e945 Maintain case-insensitivity when merging multiple matchers (#213)
7 years ago
Daniel Hunsaker cf7e840990 Update model annotations to use BIGINT for IDs (#5461)
7 years ago
aschmitz 9a42f7cbed Actually filter blocked reblogs from feed
7 years ago
Eugen Rochko 07f7192bc3 Fix #5632 - Reset column loading status after fetch fail (#5659)
7 years ago
aschmitz 48c705bbad Don't update follower counts on reblog toggle
7 years ago
aschmitz 5128c4261e Updates per code review
7 years ago
Eugen Rochko 7bb8b0b2fc
Add moderator role and add pundit policies for admin actions (#5635)
7 years ago
ThibG 2b1190065c Retry thread resolving (#5599)
7 years ago
aschmitz b95c48748c Per-user reblog hiding implementation/fixes/tests
7 years ago
Lynx Kotoura f9e7336296 Fix focused background color of direct toots (#5642)
7 years ago
aschmitz 4944515020 "Show reblogs" per-follower UI/database changes
7 years ago
ysksn 54b42901df Add and Remove tests for FollowRequest (#5622)
7 years ago
unarist 49a285ce15 Show confirmation dialog on leaving WebUI while composing (#5616)
7 years ago
Quenty31 eb97bd8af6 i10n OC: Memorial (#5615) + #5467 (#5623)
7 years ago
ThibG 889ada5ee2 Fix process mentions for local users, as local users are considered to use OStatus (#5618)
7 years ago
nullkal 3f16caaa50 Eliminate space around emoji (#5474)
7 years ago
ThibG 5d5c0f4f43 Twidere mention workaround (#5552)
7 years ago
Eugen Rochko 1032f3994f
Add ability to disable login and mark accounts as memorial (#5615)
7 years ago
voidSatisfaction e618edf85a fix: slang to adequate word (#5453)
7 years ago
nullkal b6e2e999bd Show the local couterpart of emoji when it exists in /admin/custom_emojis (#5467)
7 years ago
MIYAGI Hikaru 782224c991 Avoid emojifying on invisible text (#5558)
7 years ago
ThibG 84cfee2488 Do not process undeliverable mentions (#5598)
7 years ago
ThibG 7bea1530f4 Resolve remote accounts when mentioned even if they are already known (#5539)
7 years ago
nullkal 864c4d869f Make fullscreen video in detailed status plays in fullscreen (Partly Fix #5160) (#5611)
7 years ago
kedama d8cd9000d9 Hide disabled custom emojis from emoji picker and emoji auto suggestions. (#5613)
7 years ago
kibigo! bc8532359b Mastodon GO! -> v0.1.1
7 years ago
kibigo! e0298d66f8 Autocollapse boosts option
7 years ago
MIYAGI Hikaru 8abe9e9058 don't display any descendants of .invisible (#5567)
7 years ago
beatrix 73bf0ea7d1
Merge pull request #204 from glitch-soc/with-mastodon-go
7 years ago
kibigo! 276432790a Introducing: Mastodon GO!
7 years ago
Quenty31 da3adc0a73 l10n Occitan (#5586)
7 years ago
MitarashiDango 38d072446b add account search condition (instance domain) (#5577)
7 years ago
Sorin Davidoi 5521e94e24 refactor(features/ui): Avoid useless renders in WrappedSwitch (#5580)
7 years ago
Yamagishi Kazutoshi 763a2f8511
Replace react-router-scroll to react-router-scroll-4 (#5568)
7 years ago
Nolan Lawson 60f962eedc Refactor initial state: auto_play_gif (#5576)
7 years ago
Nolan Lawson 0692991b54 Add ServiceWorker caching for static assets (#5524)
7 years ago
Nolan Lawson b254e6ca5f Refactor initial state: "me" (#5563)
7 years ago
SerCom_KC 29609fbb6a Updating Chinese (Simplified) translations (#5508)
7 years ago
ThibG d37a56c07c Update remote ActivityPub users when fetching their toots (#5545)
7 years ago
Nolan Lawson 2cea4592a3 Avoid modifying emoji data inline (#5548)
7 years ago
Nolan Lawson 512feab222 Add margin to account for Edge disappearing scrollbar (#5522)
7 years ago
Nolan Lawson 5e111ce16d Reactor unfollow_modal, boost_modal, delete_modal (#5505)
7 years ago
Herbert Kagumba 3e9236b343 Separate Follow/Unfollow and back buttons (#5496)
7 years ago
ThibG 89c77fe225 Instantiate service classes for each call (fixes #5540) (#5543)
7 years ago
Nolan Lawson e843f62f47 Avoid unnecessary Motion components in icon_button.js (#5544)
7 years ago
Nolan Lawson ec487166db Directly use <Motion/> if not reducing motion (#5546)
7 years ago
Nolan Lawson 3de22a82bf Refactor initial state: reduce_motion and auto_play_gif (#5501)
7 years ago
David Yip 870d71b78b Merge branch 'master' into gs-master
7 years ago
nullkal 781105293c Feature: Unlisted custom emojis (#5485)
7 years ago
puckipedia 0cb329f63a Allow ActivityPub Note's tag and attachment to be single objects (#5534)
7 years ago
Andrew 2827f852c0 Theme: Windows 95
7 years ago
Jenkins 656f5b6f87 Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
7 years ago
erin 22da775a85 Fix copying emojos: redirect to the page you were on (#5509)
7 years ago
David Yip dd28b94cf0 Merge remote-tracking branch 'origin/master' into gs-master
7 years ago
りんすき d556be2968 Fix column design broken with very long title (#5493)
7 years ago
Nolan Lawson 02f7f3619a Remove translateZ(0) on modal overlay (#5478)
7 years ago
beatrix a2612d0d38 Merge pull request #179 from glitch-soc/keyword-mute
7 years ago
David Yip 42f2045c21 Merge remote-tracking branch 'STJrInuyasha/feature/direct-timeline' into gs-direct-timeline
7 years ago
Jenkins 5f0268ab84 Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master
7 years ago
Ratmir Karabut 20fee786b1 Update Russian translation (#5517)
7 years ago
Olivier Nicole 1ba3725473 Complete Esperanto translation (#5520)
7 years ago
David Yip e40fe4092d Remove nil check in Glitch::KeywordMute#=~.
7 years ago
David Yip d9485e6497 Assume Glitch::KeywordMute#destroy! works and error out if it doesn't.
7 years ago
David Yip d5c8ebe205 Use edit template for displaying errors in update.
7 years ago
David Yip d03b48cea0 Also filter notifications containing muted keywords.
7 years ago
David Yip 9226257a1b Override Action View name inference in settings/keyword_mutes.
7 years ago
David Yip f5a3283976 Switch to Regexp.union for building the mute expression.
7 years ago
Ondřej Hruška 516eeeb43d option to add title to <Button>, use for toot buttons (#197)
7 years ago
David Yip 8410d33b49 Only cache the regex text, not the regex itself.
7 years ago
David Yip 4f01e6e8d5 Merge remote-tracking branch 'origin/master' into gs-master
7 years ago
Matthew Walsh a76b024228 Changes to match other timelines in 2.0
7 years ago
Matthew Walsh 3db80f75a6 Added a timeline for Direct statuses
7 years ago
David Yip af8f06413e KeywordMute matcher: more closely mimic Regexp#=~ behavior.
7 years ago
David Yip 1a60445a5f Address unused translation errors.
7 years ago
David Yip 4c84513e04 Use current_account from ApplicationController.
7 years ago
David Yip 4b68e82a19 Don't add \b to whole-word keywords that don't start with word characters.
7 years ago
David Yip 19826774f0 keyword mutes: also check spoiler (CW) text and reblogged statuses.
7 years ago
Marcin Mikołajczak fdb0848e08 i18n: Update Polish Translation (#5494)
7 years ago
David Yip ad86c86fa8 Apply keyword mutes to reblogs.
7 years ago
David Yip 670e6a33f8 Move KeywordMute into Glitch namespace.
7 years ago
David Yip cd04e3df58 Fill in create, edit, update, and destroy for keyword mutes interface.
7 years ago
David Yip 4a64181461 Allow keywords to match either substrings or whole words.
7 years ago
David Yip 2e03a10059 Spike out index and new views for keyword mutes controller.
7 years ago
David Yip 4fa2f7e82d Set up /settings/keyword_mutes. #164.
7 years ago
David Yip b4b657eb1d Invalidate cached matcher objects on KeywordMute commit. #164.
7 years ago
David Yip 693c66dfde Use more idiomatic string concatentation. #164.
7 years ago
David Yip a4851100fd Make use of the regex attr_reader. #164.
7 years ago
David Yip 603cf02b70 Rework KeywordMute interface to use a matcher object; spec out matcher. #164.
7 years ago
David Yip 4745d6eeca Spec out KeywordMute interface. #164.
7 years ago
David Yip 9093e2de7a Add KeywordMute model.
7 years ago
Ondřej Hruška d589dd7cd0 Compose buttons bar redesign + generalize dropdown (#194)
7 years ago
beatrix a7be86e875 hide mentions of muted accounts (in home col) (#190)
7 years ago
kibigo! 21bafc6555 Updates to bio metadata script
7 years ago
Nolan Lawson 8392ddbf87 Remove unnecessary translateZ(0) when doing scale() (#5473)
7 years ago
David Yip 9423553e5c Make the compose area optionally scrollable.
7 years ago
David Yip 90770f6d59 Merge pull request #185 from glitch-soc/fix-null-status
7 years ago
Ondřej Hruška eb907a5bab
formatting fix for eslint
7 years ago
David Yip 39c9cdf7fe Remove unused filesAttached property.
7 years ago
David Yip 86cf4468af Update stylesheet imports in glitch components.
7 years ago
David Yip 42e8c8eb0e Merge tag 'v2.0.0' into gs-master
7 years ago
Sho Kusano 09d81defcd Suppress type error(not a function) on calling fastSeek (#5452)
7 years ago
Renato "Lond" Cerqueira 26b2a6a71e Fix pt-BR translation strings related to advanced search. (#5449)
7 years ago
Technowix edf9a5e4fc Revert #5438 for FR (#5450)
7 years ago
Håkan Eriksson c710069c12 Some typos and supplementation in sentence structures (#5441)
7 years ago
JohnD28 e7099d8d9e fr.json typo (realtive time) (#5447)
7 years ago
YaQ 6e54719474 Make theme directory and Rename application.scss (#5336)
7 years ago
Eugen Rochko f3003417c5 When unreblog arrives over streaming API, just delete in UI (#5439)
7 years ago
JeanGauthier 33ea042dec i18n better wording (OC/CA/FR) + string added in FR (#5438)
7 years ago
Nolan Lawson 8b22a63ab0 Fix scrolling of dropdown when offscreen (#5434)
7 years ago
Eugen Rochko 05686cc99d Fix unwanted content warning gap in CSS (#5436)
7 years ago
Eugen Rochko 484208ce12 When status is fetched instead of delivered, do not stream it (#5437)
7 years ago
unarist 3bc8924940 Don't capture scheme-less URLs in the status (#5435)
7 years ago
JeanGauthier a02de9e012 i18n update (#5427) in OC/CA/FR/ES (#5431)
7 years ago
unarist 2d395324e1 Fix React warning about tabIndex on status with CW (#5432)
7 years ago
Jakob Kramer e6c9756fa9 Update German translation (#5425)
7 years ago
Yamagishi Kazutoshi 5050719fac Add Japanese translations (#5427)
7 years ago
aschmitz 554c2fd8af Clean up reblog tracking keys, related improvements (#5428)
7 years ago
Håkan Eriksson a2b600428c Swedish translation (#5406)
7 years ago
Jeroen df1a9c5ab5 Small update Dutch (nl) strings (#5424)
7 years ago
Ondřej Hruška 4421f6598f
Fix dual toot button wrong behavior after compose re-design
7 years ago
Ondřej Hruška 64a5e9a1de
workaround for null status
7 years ago
beatrix 7364b26e4b Merge pull request #184 from tootsuite/master
7 years ago
David Yip 313ba202ef Merge pull request #182 from glitch-soc/wide-tootbox-panel
7 years ago
Ondřej Hruška 37ff061d9b
satisfy eslint and jest
7 years ago
Ondřej Hruška 3d7de06db4
rem a comment
7 years ago
Ondřej Hruška 26f08f0791
double-decker tootbox
7 years ago
Ondřej Hruška 8b9ee5f16b
Merge remote-tracking branch 'upstream/master' into upstream-merge-again
7 years ago
Ondřej Hruška 4b397adb5b
fix some lint errors
7 years ago
Nolan Lawson 8980aa804f Fix reduced motion breaking public galleries (#5423)
7 years ago
Eugen Rochko 34118169ac Keep references to all reblogs of a status on home feed (#5419)
7 years ago
David Yip 7e9d93472c Merge remote-tracking branch 'upstream/master' into gs-master
7 years ago
David Yip dbb1fce94d Merge remote-tracking branch 'upstream/master' into gs-master
7 years ago
Eugen Rochko 7cc71748ce Ensure that feed renegeration restores non-zero items (#5409)
7 years ago
Eugen Rochko aec70b44fc Filter out duplicate IDs in timelines reducer (#5417)
7 years ago
unarist 6f490b4bfe Fix un-reblogged status being at wrong position in the home timeline (#5418)
7 years ago
voidSatisfaction 03975dbde4 Add up-to-date korean translation on client (#5402)
7 years ago
KY f72936b4e6 Fix #5082 - disable retweet link for followers only toot (#5397)
7 years ago
Marcin Mikołajczak 3c530d95f6 i18n: Update Polish translation (#5416)
7 years ago
JeanGauthier 1e7b3bf625 i18n ultim hour «More» dropdown title + reduce motion (#5415)
7 years ago
Yamagishi Kazutoshi bf0ee1a25c Enable ESLint rules import/* (#5414)
7 years ago
Nolan Lawson fa0be3f834 Add option to reduce motion (#5393)
7 years ago
Nolan Lawson 981e20b03a Fix offline-plugin warning in dev mode (#5411)
7 years ago
Yamagishi Kazutoshi d5b767c374 Replace JavaScript Testing Framework from Mocha to Jest (#5412)
7 years ago
Nolan Lawson 93b54b8d4b i18n "More" dropdown title (#5410)
7 years ago
Nolan Lawson e7ab9bf8b4 Refactor and simplify icon_button.js (#5413)
7 years ago
David Yip 6cd5b3bbe5 Merge remote-tracking branch 'origin/master' into gs-master
7 years ago
David Yip f72ad67a39 Merge pull request #180 from STJrInuyasha/glitch-soc/avatar-unification
7 years ago
Matthew Walsh 56094cb4bd 1.6 changed files for unified avatar styling -- updated to restore unity
7 years ago
David Yip 22df18e902 Merge pull request #173 from glitch-soc/zerowidthmoji
7 years ago
Eugen Rochko 894da3dcca Clear timer when unmounting RelativeTimestamp components (#5408)
7 years ago
JeanGauthier 8eb7d30a6c l10n Occitan: finishing touches (#5404)
7 years ago
Yannick A 7fe1428cc4 Update French translation (#5401)
7 years ago
Lynx Kotoura b3b4b5a2eb Adjust public hashtag pages (#5357)
7 years ago
unarist 8125fdc19f Use atomUri in Undo activity of Announce (#5376)
7 years ago
Ondřej Hruška ae716a12e1 replace newlines in desktop notif with spaces instead of removing them (#5361)
7 years ago
spla f63a40e7c2 Updated Catalan strings (#5323)
7 years ago
KY 1bdd694a0a Fix #5351 - Redirection with page params after copy emoji (#5387)
7 years ago
abcang 2eab41cd1a Close connection when succeeded posting (#5390)
7 years ago
Yannick A c6f76db2e1 Update French translation (#5384)
7 years ago
Masoud Abkenar 2c704ca9c6 l10n: update Persian translation for 2.0 (#5391)
7 years ago
Ondřej Hruška cdc22d23b9 Doodle improvements 2 (#176)
7 years ago
Jakob Kramer eb96aa86a4 Update German translation (#5389)
7 years ago
Ondřej Hruška 531dadad86 Doodle palette, options, fill tool (#172)
7 years ago
Ondřej Hruška 723890b6fa
use zerowidth spaces for emojis
7 years ago
Ondřej Hruška 2af964ef20
Fixed a bug where the canvas would get transparent bg upon erase
7 years ago
Ondřej Hruška 33e806217f
Initial doodle support
7 years ago
Jeroen c35132a738 Dutch strings: small change (#5375)
7 years ago
unarist a1c54220e8 Optimize Status#permitted_for 500x (account timeline) (#5373)
7 years ago
Eugen Rochko df7dbc41ae Fix NameError: uninitialized constant OStatus::AtomSerializer::TagManager (#5371)
7 years ago
Eugen Rochko b8db386e05 Fix UserTrackingConcern firing on every request, optimize some queries (#5368)
7 years ago
Eugen Rochko 48f7a58799 Do not try to guess why home timeline is empty in web UI (#5370)
7 years ago
Eugen Rochko 388d093beb When unfollowing, remove from home in web UI immediately (#5369)
7 years ago
ThibG 95fe20b78a Fix remote status fetching for “pure” ActivityPub WEB_ACCOUNT users (#5372)
7 years ago
Yamagishi Kazutoshi dc91fd482a Set InstancePresenter to `Auth::RegistrationsController#create` (#5366)
7 years ago
Lex Alexander b8bae96647 Retoot count increases without reason (#5363)
7 years ago
ThibG d37305c628 Reduce discrepancies between server and client-side character count (#5360)
7 years ago
Anna e só ad917cda10 l10n: PT-BR translation updated (#5362)
7 years ago
Ondřej Hruška df626fdd43
Fix the notification bug with newlines
7 years ago
David Yip 6a2b1ba91e Another tabs-vs-spaces fix, but with ~feeling~
7 years ago
Alda Marteau-Hardi 3cfcc7a50e Fix some consistance errors in gender neutral formulations. Add some missing ones. (#5350)
7 years ago
David Yip fe1c20cfb9 Fix tabs-vs-spaces issue pointed out by eslint.
7 years ago
JeanGauthier cb7ba23cd8 Update oc.json (#5343)
7 years ago
unarist 35ec1c91e3 Fix some failure cases on FetchLinkCardService (#5347)
7 years ago
David Yip edd1a00faf Restore variable assignment in MuteService#call.
7 years ago
David Yip 13e05fece2 Merge tag 'v2.0.0rc2' into gs-master
7 years ago
Sylvhem 3ebe03b729 Fixes and updates for the French translation (#5340)
7 years ago
Ondřej Hruška eeaa8fba43
Fix our media gallery not having alt text and tooltips
7 years ago
Ondřej Hruška b0b5ff1b0f
workaround for scrollIntoView bug ???
7 years ago
Ondřej Hruška bd51a16150
add duck beaks in haml
7 years ago
Ondřej Hruška 0bf9261e65
Merge remote-tracking branch 'upstream/master'
7 years ago
Jeroen 6bc07d3de3 Updating Dutch strings for 2.0 (#5334)
7 years ago
Alda Marteau-Hardi 0352c40e99 Use gender neutral language as in the rest of the french translation (#5331)
7 years ago
Lynx Kotoura 07ea625cb2 Fix styles of error pages (#5335)
7 years ago