* fix(status_action_bar): Use aria-pressed for reblog and favourite button
* fix(column_back_button): Keyboard accessible
* fix(status_content): Make focusable and accessible
* fix(dropdown_menu): Use aria-expanded instead of aria-pressed
* fix(emoji_picker_dropdown): Use aria-expanded instead of aria-hidden
* feat(icon_button): Add aria-expanded
* fix(privacy_dropdown): Use aria-expanded instead of aria-hidden
* Fix protruded infomation board section
Set "flexwrap: wrap" for sections. Set upper and lower padding for each section, and adjust clearances around sections accordingly. Settings for viewport threshold 500px is no more needed.
* Fix mistake of reducing information-board padding
In according with this fix, additional padding setting for maximum 840px width is no more needed.
* fix(web_push_notification): Do not hard reload tab
* fix(web_push_notification_worker): Guard against null subscription
* refactor: Incorporate pull request feedback
* fix(dropdown_menu): Keyboard navigation
* fix(icon_button): Add aria-pressed attribute
* fix(privacy_dropdown): Make accessible
* fix(emoji_picker_dropdown): Make accessible
* fix(icon_button): Support tabIndex
* fix(actions_modal): Remove icon from tab order
* fix(dropdown_menu): Add role=group
* fix(setting_toggle): Toggle via space key
* fix(dropdown_menu): Remove redundant handling of Space key
* fix(emoji_picker_dropdown): Remove redundant Space key handling
* fix(privacy_dropdown): Remove redundant Space key handling
* fix(status): Switch to article and add aria-posinset, aria-setsize
* fix(status_list): Use role=feed and pass more ARIA props to Status
* chore(eslint): jsx-a11y/role-supports-aria-props
* fix(dropdown_menu): Open as modal on mobile
* fix(dropdown_menu): Open modal on touch
* fix(dropdown_menu): Show status
* fix(dropdown_menu): Max dimensions and reduce padding
* chore(dropdown_menu): Test new functionality
* refactor: Use DropdownMenuContainer instead of DropdownMenu
* feat(privacy_dropdown): Open as modal on touch devices
* feat(modal_root): Do not load actions-modal async
`height: 100%` in `align-self: stretch` flexboxes doesn't work on Safari < 11.
https://bugs.webkit.org/show_bug.cgi?id=137730
This workaround uses flexbox instead of `height: 100%` to stretch height.
* fix(column_header): Invalid ARIA role
* fix(column): Remove hidden nodes from the DOM
* refactor(column_link): Remove unused property hideOnMobile
* fix(column_header): Use aria-pressed
* fix(column_header): Make collapsed content not focusable, add focusable property
* fix(column_loading): Make header non-focusable
* fix(column_settings): Use role to group the toggles
* Fix padding in hero container, landing page
Erase hero container padding to fit registration form to full width. By this setting, heading padding disappears, so I adjust heading padding.
* Specify attribute strictly for heading padding
To overwrite padding-bottom in superior settings.
* Make padding shorthand more concise
* fix(compose): Use nav and remove redundant aria-label
* fix(tabs_tab): Use nav and add aria-label
* fix(app): Add aria-label for settings toggle button
* chore: Run yarn manage:translations
* Adjust mobile landing page
Change mobile viewport threshold to 840px in consideration of padding. Fix loss of "container hero" padding in about/more under 675px.
* Fix indent
* Update and expanding Dutch strings for 1.5
Only privacy policy is not translated, but is included. Hopefully I have time to translate this another time (you can set your own privacy policy now anyway).
* Missing file
* A few changes cause of changes in another file
* Fix
* Update Dutch strings for 1.5
* nl
* fix
don't know how that ended up there
* Update nl.yml
Setting only padding-left made the logo left-shifted on mobile page. Margin-right was old setting for adjusting clearance between old logo and letter "Mastodon".
Change the placeholder used in the content warning field from "Content Warning" to "Write your warning here". This change should made it easier to understand what the field is about.
Change le message de substitution utilisé dans le champ d’avertissement de « Avertissement » à « Écrivez ici votre avertissement ». Ce changement devrait rendre plus évidente la fonction du champ.
* add fr-FR locales to the landing page
* moar french locales
* terms of service/privacy policy
* remove un-used locales in the client (yarn manage:translations)
* update french locales in the client
* remove duplicate locales in fr.yml
* fix typos per PR comments in fr.yml
* put back default messages
* translate untranslated keys on the client
* add "push" after notifications
* correctly ident ToS in fr.yml
* feat(compose): More space on mobile devices
* feat(compose): Hide navigation when typing on mobile devices
* fix(compose): Make animation faster
* fix(navigation_bar): Remove hardcoded title
* fix(compose): Prevent accidental bluring
* fix(compose): Increase max-height to 600px
app/javascript/mastodon/main.js delayed the execution of modules,
but other entry points didn't. That leads to failure in executing
modules, which requires those polyfills.
Strictly enforce the rule to require any modules after loading
polyfill in entry points.
Though size of extended-video-player is already fixed to 80vw*80vh in components.scss, player size was also set to original video size in extended_video_player.js. Video size is fixed to 80vw*80vh, so video player's size must also be fixed to 80vw*80vh.
* Shrink too wide single image modal
Fix too wide react-swipeable-view-container
Fix 0067f80 shrinking all react-swipeable-view-container
Change to apply max-width of react-swipeable-view-container only under media-modal.
Fix b30b03b just a typo
* Centering contents in image-loader
Centering small img, canvas, and video in image-loader.
* chore(yarn): Install babel-plugin-preval as development dependency
* feat(babel): Add preval as a plugin
* feat(emojione_light): Prevaled module what tree-shaked emojione
* refactor(emoji): Use emojione_light
* feat: Preload emojione_picker bundle
* fix(emojione_light): Do not use Object.entries
* fix(emojify): Update tests
* chore(emojione_light): Remove silly ascii art
- Use unicode when selecting emoji through picker
- Convert shortcodes to unicode when storing text input server-side
- Do not convert shortcodes in JS anymore
Render function for BundleContainer must not be methods.
React doesn't know dependency of the method, so they won't rerender on property updates.
In this case, when you close modal and open another modal immediately,
old modal will be open instead of new one.
* Redesign the landing page, mount public timeline on it
* Adjust the standalone mounted component to the lacking of router
* Adjust auth layout pages to new design
* Fix tests
* Standalone public timeline polling every 5 seconds
* Remove now obsolete translations
* Add responsive design for new landing page
* Address reviews
* Add floating clouds behind frontpage form
* Use access token from public page when available
* Fix mentions and hashtags links, cursor on status content in standalone mode
* Add footer link to source code
* Fix errors on pages that don't embed the component, use classnames
* Fix tests
* Change anonymous autoPlayGif default to false
* When gif autoplay is disabled, hover to play
* Add option to hide the timeline preview
* Slightly improve alt layout
* Add elephant friend to new frontpage
* Display "back to mastodon" in place of "login" when logged in on frontpage
* Change polling time to 3s
* Added a success page to remote following
Includes follow-through links to web (the old redirect target) and back to the remote user's profile
* Use Account.new in spec instead of a fake with only id
(fixes spec)
* Fabricate(:account) over Account.new
* Remove self from the success text
(and all HTML with it)
* Changement de « Changement de mot de passe » en « Sécurité »
* Suppression de « (Two-factor auth) »
Change la valeur de la chaîne « two_factor_authentication » de « Identification à deux facteurs (Two-factor auth) » à « Identification à deux facteurs ».
La traduction anglaise entre parathentèse était redondante et gênait la lecture.
Change the value of the "two_factor_authentication" from "Identification à deux facteurs (Two-factor auth)" to "Identification à deux facteurs".
The English translation in brackets was superflous and was getting in the way of the reader.
* Remplace « ' » par « ’ »
Retire de la traduction les apostrophes droites « ' » (U+0027) au profit des apostrophes typographiques « ’ » (U+2019).
En typographie française, les apostrophes typographiques sont utilisées à la place des apostrophes droites. La traduction était jusqu’ici incohérente et utilisait les deux.
Remove from the translation all the vertical apostrophes (U+0027) in favor of the curly ones (U+2019).
In French typography, typographic apostrophes are used instead of vertical ones. The translation was incoherent and used both.
* Remplace « ... » par « … »
Remplace les séries de trois points par le caractère dédié « … » (U+2026).
Replace all the series of three dots by the dedicated character "…" (U+2026).
* Mise à jour
Crée config/locales/activerecord.fr.yml, ajoute de nouvelles chaînes et met à jour certains textes.
Les compteurs de caractères pour le pseudonyme et la biographie devrait maintenant pouvoir fonctionner même quand l’interface est en français.
Create config/locales/activerecord.fr.yml, add new strings et update some textes.
The caracters counters for the username and the biography should now work even when the interface is in French.
* Remplace « A » par « À »
Remplace « A » par « À » aux endroits où le mot est mal orthographié.
Replace "A" by "À" when the wrong word is used.
* Ajout d’espaces insécables
Ajoute des espaces insécables suivant les régles nécessaires en typographie française.
Add non-breaking spaces following rules of French typography.
* Remplace « certain » par « certain·e »
Harmonise la traduction en remplaçant « certain » par sa forme épicène.
Harmonize the translation by replacing "certain" (sure) by its epicene form.
* Corrige un angliscisme
Remplace « adresse e-mail » par « adresse électronique ».
Replace "adresse e-mail" (e-mail address) by "adresse électronique" (electronic address).
* add a system_font_ui setting on the server
* Plug the system_font_ui on the front-end
* add EN/FR locales for the new setting
* put Roboto after all other fonts
* remove trailing whitespace so CodeClimate is happy
* fix user_spec.rb
* correctly write user_spect this time
* slightly better way of adding the classes
* add comments to the system-font stack for clarification
* use .system-font for the class instead
* don't use multiple lines for comments
* remove trailing whitespace
* use the classnames module for consistency
* use `mastodon-font-sans-serif` instead of Roboto directly
* Update links in status content on update as well as mount
Fixes occasional bugs with mentions and hashtags not being set to open in a new column like they should, and instead opening in a new page
* use classList instead of raw className
This fixes a warning on status unmounting (e.g. deletion).
This also resets IntersectionObserverWrapper on disconnect to avoid `unobserve()` calls
which has bug in Edge.
* Fix embedded SVG fill attribute
SCSS darken/lighten functions may not return a color value, but a color
name like "white". See following example:
https://www.sassmeister.com/gist/c41da93b87d536890ddf30a1f42e7816
This patch will normalize $color argument to FFFFFF style.
I also changed the function name from "url-friendly-colour" to
"hex-color", Because...
1. The name "url-friendly" is not meaningful enough to describe what it
does.
2. It is familier to me using "color" rather than "colour"
kojima:kojiMac mastodon[master]$ git grep -l colour
app/javascript/styles/boost.scss
spec/fixtures/files/attachment.jpg
kojima:kojiMac mastodon[master]$ git grep -l color
.rspec
.scss-lint.yml
Gemfile.lock
app/javascript/mastodon/features/status/components/action_bar.js
app/javascript/styles/about.scss
app/javascript/styles/accounts.scss
app/javascript/styles/admin.scss
app/javascript/styles/basics.scss
app/javascript/styles/boost.scss
app/javascript/styles/compact_header.scss
app/javascript/styles/components.scss
app/javascript/styles/containers.scss
app/javascript/styles/footer.scss
app/javascript/styles/forms.scss
app/javascript/styles/landing_strip.scss
app/javascript/styles/reset.scss
app/javascript/styles/stream_entries.scss
app/javascript/styles/tables.scss
app/javascript/styles/variables.scss
app/views/admin/subscriptions/_subscription.html.haml
app/views/layouts/application.html.haml
app/views/layouts/error.html.haml
app/views/manifests/show.json.rabl
bin/webpack-dev-server
config/initializers/httplog.rb
public/500.html
public/emoji/1f1e6-1f1e8.svg
public/emoji/1f1ec-1f1f8.svg
public/emoji/1f1f3-1f1ee.svg
public/emoji/1f1fb-1f1ec.svg
spec/fixtures/requests/idn.txt
yarn.lock
* Add semicolon
* Added Korean Translation (based on japanese)
* Update korean translation
* Update korean translation: fix syntax error
* Updated korean translation
* Update korean translation
* Update ko.json
Translate non-translated parts
* Update ko.yml
Translated missed parts - and fixed some typos
* Create simple_form.ko.yml
* Updated korean translation
* i18n: fix test fails
* add missing locales for French translation
* accent "Media" in the front-end locales
* images => médias
* Change 'rapport' to 'signalement' in French locales to be more coherent
* fix typo
* remove duplicate EN locale
* translate missing locales
* update missing locale
* fix typo
* unify with "utilisateur⋅ice⋅s"
* address PR comments
* Fix#3910 - Require OTP authentication to disable 2FA. Also, remove ability
to generate new OTP backup codes *after* initial backup codes were handed
out during activation
* Restore recovery code re-generation
* Improve display of some 2FA elements
* Add overview of active sessions
* Better display of browser/platform name
* Improve how browser information is stored and displayed for sessions overview
* Fix test
(This patch has been merged as bugfix and reverted, but still valuable as
improvement)
Previously, we've attached IntersectionObserver twice for boosted statuses:
wrapper Status and wrapped Status. but wrapped Status don't need to manage
intersection and visibility by itself, because it's a part of wrapper Status.
* Revert "Bump version to 1.4.4"
This reverts commit 1585b0c6cc.
* Revert "Fix conversations (fixes#3869) (#3870)"
This reverts commit 15b43f555d.
* Revert "Fix streaming server. Redis connection subscribe for each channel. (#3828)"
This reverts commit d8ec832806.
* Revert "Filter direct statuses in Status.as_home_timeline (#3842)"
This reverts commit bab5a18232.
* Revert "Fix RemoteFollow behavior (#3868)"
This reverts commit a20cf3b64e.
* Revert "Update fabricator for MediaAttachment to attach a file according to type (#3862)"
This reverts commit 356df7ae6b.
* Revert "Upgrade React Router (#3677)"
This reverts commit 8f03fdce7f.
* Revert "Do not call setState from unmounted component (#3853)"
This reverts commit 1fc6cb4997.
* Revert "Replace TextIconButton for SensitiveButton to IconButton (#3759)"
This reverts commit eb832e88f4.
* Revert "Fix RTL detection on Ruby side (#3867)"
This reverts commit b16b69350e.
* Revert "i18n: Fixed typo in Polish translation (#3864)"
This reverts commit da6fa029f6.
* Revert "Don't attach IntersectionObserver for wrapped statuses (#3863)"
This reverts commit 94ad0706f5.
This fixes a bug that sometimes boosted statuses being hidden on scrolling.
Previously, we've attached IntersectionObserver twice for boosted statuses:
wrapper Status and wrapped Status. This will call intersection handler twice,
so this may results race condition...probably.
mergeDeep also merges columns, but it should be replaced simply.
So in the new function, first apply mergeDeep except columns, and set default columns if columns unset.
* Add form for account deletion
* If avatar or header are gone from source, remove them
* Add option to have SuspendAccountService remove user record, add tests
* Exclude suspended accounts from search
* Move ancestors/descendants out of timelines reducer
* Refactor timelines reducer
All types of timelines now have a flat structure and use the same
reducer functions and actions
* Reintroduce some missing behaviours
* Fix wrong import in reports
* Fix includes typo
* Fix issue related to "next" pagination in timelines and notifications
* Fix bug with timeline's initial state, expandNotifications
- Use plaintext
- Strip out URLs
- Strip out mentions
- Strip out hashtags
- Strip out whitespace from "overall" count
- Consistent between JS and Ruby
* Add regex filter on the community timeline and the public timeline
* correcting
* Adjust the height of header buttons
* Remove trailing spaces
* Remove trailing spaces
* Solve some code duplication
* reset the state of the locale files in app/javascript/mastodon/locales
* adjust to upstream
* adjust to upstream
* change keys of locale settings
* i18n Update : Add preference setting for delete toot modal
Adding a line for "Add preference setting for delete toot modal"
* i18n update for pin/unpin
Update to add two more translations
* i18n update to have the dates in plain occitan
* Removed the blank line
* %{selft} back in the translation
* Allow mounting arbitrary columns
* Refactor column headers, allow pinning/unpinning and moving columns around
* Collapse animation
* Re-introduce scroll to top
* Save column settings properly, do not display pin options in
single-column view, do not display collapse icon if there is
nothing to collapse
* Fix one instance of public timeline being closed closing the stream
Fix back buttons inconsistently sending you back to / even if history exists
* Getting started displays links to columns that are not mounted
* zh-cn.json: "additional info" -> "more info"
This commit changes the "extended info" (about/more) text to something that translates to "more info", as "additional info" in zh can sound like appending things to the (ugh) navbar, I guess.
Or should I just change it to "about this site" (关于本站)?
* zh-cn.json: navbar.info -> "about this site"
* zh-臺灣.json: navbar.info -> "about this site"
This implementation is a bit smaller and still has the following benefits:
* No need of app/javascript/packs/custom.js
For custom stylesheet, it typically has only
"require('../styles/custom.scss')" and is redundant.
* No need to extract vendor stylesheet to another asset
Extracting vendor stylesheet could be forgotten by developers who do not
use custom stylesheet.
* Set delete_modal preference to true by default
* Does not show confirmation modal if delete_modal is false
* Add ja translation for preference setting page
The combination of object-fit, relative position 50% from top and translating it
back upwards 50% is what allows us to crop the video properly, so it needs to
be +50%-50%
* Fix#2922 - Load stylesheet from "custom.css" entrypoint when present
This is pretty much the same way it worked as before, albeit with
having to create app/javascript/packs/custom.js with
require('../styles/custom.scss') (or whatever you want really), which
will be a blank slate for you to import whatever you want
* Remove old assets directory
* Extract font-awesome into common.css and always load it
* Update nl strings for 1.4
* Update nl strings for 1.4
* Update nl strings for 1.4
* nl strings (+1)
More new OTP strings will be translated another time
because it may causes flicker on the conversation when it contains blocked/muted user's status.
We use `/api/v1/statuses/{id}/context` to obtain status ids in the
conversation which filters blocked/muted user, but also uses internal
cache constructed from `in_reply_to_id` by `normalizeStatus()` in
`reducers/timelines.js` on each status loading which doesn't filter.
So statuses appears in conversation if those are cached, even those
statuses are from blocked/muted user. Then context cache will be updated
with the result of the context API and those statuses will be removed.
I have left the `normalizeStatus()` function itself which is called many
functions in the file as a placeholder for now, but maybe it should be
removed completely.
I've found this issue when I clicked replies to muted user on the timeline.
Properties I've removed in here were added with lazy loading using
IntersectionObserver (8e4d1cba), but those statuses are not need to be
tracked anyway because it will be rendered as only empty div.
This will reduce requests on who have only few statuses.
- Use next link header to detect more items from first request
- Omit next link header if result items are fewer than requested count
(It had omit it only if result was empty before)
* Add load more button for large screens
* Fix `next` state value on the first loading
* Don't load if `isLoading || !hasMore`
* Start load on near the bottom
* Only load Intl data for current language
* Extract common chunk only from application.js and public.js
* Generate locale packs, avoid caching on window object
* Persian translation update
* Persian translation update: new files
* Persian translation update
* activerecord.fa.yml language code
* Persian translation update
* fix indent
* refactor(components/status_list): Avoid quering scrollTop if not necessary
* refactor(components/dropdown_menu): Do not render items if not expanded
* refactor: Cherry-pick react-motion imports
* refactor(compose/privacy_dropdown): Do not render options if not open
* refactor(components/column_collapsable): Do not render children if collapsed
* Add buttons to block and unblock domain
* Relationship API now returns "domain_blocking" status for accounts,
rename "block entire domain" to "hide entire domain", fix unblocking domain,
do not block notifications from domain-blocked-but-followed people, do
not send Salmons to domain blocked users
* Add test
* Personal domain blocks shouldn't affect Salmon after all, since in this
direction of communication the control is very thin when it comes to
public stuff. Best stay consistent and not affect federation in this way
* Ignore followers and follow request from domain blocked folks,
ensure account domain blocks are not created for empty domain,
and avoid duplicates in validation
* Purge followers when blocking domain (without soft-blocks, since they
are useless here)
* Add tests, fix local timeline being empty when having any domain blocks
* feat(eslint): Set react/jsx-no-bind: error
* refactor(notifications/setting_toggle): Do not use bind
* refactor(components/dropdown_menu): Do not use bind
* refactor(components/autosuggest_textarea): Do not use bind
* refactor(compose/privacy_dropdown): Do not use bind
* refactor(compose/upload_form): Do not use bind
* refactor(components/status): Do not use bind
* refactor(components/onboarding_modal): Do not use bind
* refactor: PR feedback
* chore(notifications/setting_toggle): Lint
* refactor: PR feedback
- add translation "Bon Appetoot!"
- add whitelist what doesn't require translation
- replace exclamation mark full width
- add space after question mark
- remove blank between words
- run yarn manage:translations
* fix(polyfil): Catch error from promise
https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html
* fix(catch): Error
Make import promise catch a noop with commented out console.log for a debugging hint.
* fix(eslint): Disable eslint console rule
* fix(application): Use console error
* Always set `overflow: auto` to allow scroll just after opening
* Remove bounce animation which may cause unintended behavior due to max-height
* Use CSS transition instead of react-motion
* Some CSS refactoring including className changing
* Create common chunk rather than vendor chunk
vendor chunk is a set of modules provided by external vendors, but now we
can have a chunk as a set of modules shared by multiple entry points,
which could be more efficent than having vendor chunk.
* Start rails-ujs in common.js
This is used by /settings/two_factor_authentication.
* Add <ostatus:conversation /> tag to Atom input/output
Only uses ref attribute (not href) because href would be
the alternate link that's always included also.
Creates new conversation for every non-reply status. Carries
over conversation for every reply. Keeps remote URIs verbatim,
generates local URIs on the fly like the rest of them.
* Conversation muting - prevents notifications that reference a conversation
(including replies, favourites, reblogs) from being created. API endpoints
/api/v1/statuses/:id/mute and /api/v1/statuses/:id/unmute
Currently no way to tell when a status/conversation is muted, so the web UI
only has a "disable notifications" button, doesn't work as a toggle
* Display "Dismiss notifications" on all statuses in notifications column, not just own
* Add "muted" as a boolean attribute on statuses JSON
For now always false on contained reblogs, since it's only relevant for
statuses returned from the notifications endpoint, which are not nested
Remove "Disable notifications" from detailed status view, since it's
only relevant in the notifications column
* Up max class length
* Remove pending test for conversation mute
* Add tests, clean up
* Rename to "mute conversation" and "unmute conversation"
* Raise validation error when trying to mute/unmute status without conversation
From #2327 - Elephant friend was overlapping with text, oversized in
single column layout
From #2021 - Centered layout goes against design principles, changes
UX for everybody who's already used to the current one
From #2271 - CPU/RAM overusage from keeping columns in DOM (fix#2648,
possibly also #2101)
* Fix color contrast some more in privacy warning
Latest master appears to have changed the <strong> to this unreadable grey color. If you want that to be white then it should be pure white. If someone would rather revert this to that strong dark blue color it was before that would be good too.
* Make domain dark blue again
* add missing ;
woops
The current text contrast on the privacy warning is a WCAG violation. I didn't notice this because my instance has a custom theme which is better. On default theme I am barely able to read the text with my impaired vision. This patch brings the contrast to Normal Text WCAG AA compliance, and Large Text WCAG AAA compliance.
Use ES Class Fields & Static Properties (currently stage 2) for improve class outlook.
Added babel-plugin-transform-class-properties as a Babel plugin.
* Fix regressions from #2683
Properly format spoiler text HTML, while keeping old logic for blankness intact
Process hashtags and mentions in spoiler text
Format spoiler text for Atom
Change "show more" toggle into a button instead of anchor
Fix style regression on dropdowns for detailed statuses
* Fix lint issue
* Convert spoiler text to plaintext in desktop notifications
ExtractTextWebpackPlugin extracts the content of loaded files, which means
it loads files loaded by require.context but not required after that.
However the former implementation is not aware of that.
require.context can have a RegExp to filter files to load. This change
gives a RegExp which matches with SCSSes with 'custom' prefix to
require.context to take advantage of the feature.
* Update fr.json
Updating some missing french translations.
* Update fr.json
Fix repetition in line 41.
* Update fr.json
Fix : adding space between {name} and ? question mark.