about summary refs log tree commit diff
AgeCommit message (Collapse)Author
2017-10-24Remove nil check in Glitch::KeywordMute#=~.David Yip
@regex can no longer be nil, so we don't need to check it.
2017-10-24Assume Glitch::KeywordMute#destroy! works and error out if it doesn't.David Yip
There's nothing useful we can display if the destroy action messes up, so might as well assert it does and complain loudly if it doesn't.
2017-10-24Use edit template for displaying errors in update.David Yip
2017-10-24Also filter notifications containing muted keywords.David Yip
2017-10-24Override Action View name inference in settings/keyword_mutes.David Yip
Glitch::KeywordMute's name is inferred as glitch_keyword_mutes, and in templates this turns into e.g. settings/glitch/keyword_mutes. Going along with this convention means a lot of file movement, though, and for a UI that's as temporary and awkward as this one I think it's less effort to slap a bunch of as: options everywhere. We'll do the Right Thing when we build out the API and frontend UI.
2017-10-24Fix example description.David Yip
This example actually checks matches at the end of a string.
2017-10-24Switch to Regexp.union for building the mute expression.David Yip
Also make the keyword-building methods private: they always probably should have been private, but now I have encoded enough fun and games into them that it now seems wrong for them to *not* be private.
2017-10-23Only cache the regex text, not the regex itself.David Yip
It is possible to cache a Regexp object, but I'm not sure what happens if e.g. that object remains in cache across two different Ruby versions. Caching a string seems to raise fewer questions.
2017-10-22KeywordMute matcher: more closely mimic Regexp#=~ behavior.David Yip
Regexp#=~ returns nil if it does not match. An empty mute set does not match any status, so KeywordMute::Matcher#=~ ought to return nil also.
2017-10-22Address unused translation errors.David Yip
2017-10-22Use current_account from ApplicationController.David Yip
This avoids copy-pasting definitions of set_account.
2017-10-22Don't add \b to whole-word keywords that don't start with word characters.David Yip
Ditto for ending with \b. Consider muting the phrase "(hot take)". I stipulate it is reasonable to enter this with the default "match whole word" behavior. Under the old behavior, this would be encoded as \b\(hot\ take\)\b However, if \b is before the first character in the string and the first character in the string is not a word character, then the match will fail. Ditto for after. In our example, "(" is not a word character, so this will not match statuses containing "(hot take)", and that's a very surprising behavior. To address this, we only add leading and trailing \b to keywords that start or end with word characters.
2017-10-22keyword mutes: also check spoiler (CW) text and reblogged statuses.David Yip
2017-10-21Apply keyword mutes to reblogs.David Yip
2017-10-21Move KeywordMute into Glitch namespace.David Yip
There are two motivations for this: 1. It looks like we're going to add other features that require server-side storage (e.g. user notes). 2. Namespacing glitchsoc modifications is a good idea anyway: even if we do not end up doing (1), if upstream introduces a keyword-mute feature that also uses a "KeywordMute" model, we can avoid some merge conflicts this way and work on the more interesting task of choosing which implementation to use.
2017-10-21Fill in create, edit, update, and destroy for keyword mutes interface.David Yip
Also add a destroy-all action, which can be useful if you're flushing an old list entirely to start a new one.
2017-10-21Allow keywords to match either substrings or whole words.David Yip
Word-boundary matching only works as intended in English and languages that use similar word-breaking characters; it doesn't work so well in (say) Japanese, Chinese, or Thai. It's unacceptable to have a feature that doesn't work as intended for some languages. (Moreso especially considering that it's likely that the largest contingent on the Mastodon bit of the fediverse speaks Japanese.) There are rules specified in Unicode TR29[1] for word-breaking across all languages supported by Unicode, but the rules deliberately do not cover all cases. In fact, TR29 states For example, reliable detection of word boundaries in languages such as Thai, Lao, Chinese, or Japanese requires the use of dictionary lookup, analogous to English hyphenation. So we aren't going to be able to make word detection work with regexes within Mastodon (or glitchsoc). However, for a first pass (even if it's kind of punting) we can allow the user to choose whether they want word or substring detection and warn about the limitations of this implementation in, say, docs. [1]: https://unicode.org/reports/tr29/ https://web.archive.org/web/20171001005125/https://unicode.org/reports/tr29/
2017-10-21Spike out index and new views for keyword mutes controller.David Yip
2017-10-21Set up /settings/keyword_mutes. #164.David Yip
This should eventually be accessible via the API and the web frontend, but I find it easier to set up an editing interface using Rails templates and the like. We can always take it out if it turns out we don't need it.
2017-10-21Invalidate cached matcher objects on KeywordMute commit. #164.David Yip
2017-10-21Use more idiomatic string concatentation. #164.David Yip
The intent of the previous concatenation was to minimize object allocations, which can end up being a slow killer. However, it turns out that under MRI 2.4.x, the shove-strings-in-an-array-and-join method is not only arguably more common but (in this particular case) actually allocates *fewer* objects than the string concatenation. Or, at least, that's what I gather by running this: words = %w(palmettoes nudged hibernation bullish stockade's tightened Hades Dixie's formalize superego's commissaries Zappa's viceroy's apothecaries tablespoonful's barons Chennai tollgate ticked expands) a = Account.first KeywordMute.transaction do words.each { |w| KeywordMute.create!(keyword: w, account: a) } GC.start s1 = GC.stat re = String.new.tap do |str| scoped = KeywordMute.where(account: a) keywords = scoped.select(:id, :keyword) count = scoped.count keywords.find_each.with_index do |kw, index| str << Regexp.escape(kw.keyword.strip) str << '|' if index < count - 1 end end s2 = GC.stat puts s1.inspect, s2.inspect raise ActiveRecord::Rollback end vs this: words = %w( palmettoes nudged hibernation bullish stockade's tightened Hades Dixie's formalize superego's commissaries Zappa's viceroy's apothecaries tablespoonful's barons Chennai tollgate ticked expands ) a = Account.first KeywordMute.transaction do words.each { |w| KeywordMute.create!(keyword: w, account: a) } GC.start s1 = GC.stat re = [].tap do |arr| KeywordMute.where(account: a).select(:keyword, :id).find_each do |m| arr << Regexp.escape(m.keyword.strip) end end.join('|') s2 = GC.stat puts s1.inspect, s2.inspect raise ActiveRecord::Rollback end Using rails r, here is a comparison of the total_allocated_objects and malloc_increase_bytes GC stat data: total_allocated_objects malloc_increase_bytes string concat 3200241 -> 3201428 (+1187) 1176 -> 45216 (44040) array join 3200380 -> 3201299 (+919) 1176 -> 36448 (35272)
2017-10-21Make use of the regex attr_reader. #164.David Yip
It would also have been valid to get rid of the attr_reader, but I like being able to reach inside KeywordMute::Matcher without resorting to instance_variable_get tomfoolery.
2017-10-21Fix case-insensitive match scenario; test some word ornamentation. #164.David Yip
2017-10-21Rework KeywordMute interface to use a matcher object; spec out matcher. #164.David Yip
A matcher object that builds a match from KeywordMute data and runs it over text is, in my view, one of the easier ways to write examples for this sort of thing.
2017-10-21Spec out KeywordMute interface. #164.David Yip
2017-10-21Add KeywordMute model.David Yip
Gist of the proposed keyword mute implementation: Keyword mutes are represented server-side as one keyword per record. For each account, there exists a keyword regex that is generated as one big alternation of all keywords. This regex is cached (in Redis, I guess) so we can quickly get it when filtering in FeedManager.
2017-10-21Compose buttons bar redesign + generalize dropdown (#194)Ondřej Hruška
* Generalize compose dropdown for re-use * wip stuffs * new tootbox look and removed old doodle button files * use the house icon for ...
2017-10-20hide mentions of muted accounts (in home col) (#190)beatrix
* hide mentions of muted accounts (in home col) also cleans up some old crap * add test
2017-10-19Merge pull request #191 from glitch-soc/garglamel-yamlbeatrix
ƔAML update
2017-10-19Updates to bio metadata scriptkibigo!
2017-10-19Merge pull request #189 from glitch-soc/scrollable-compose-areabeatrix
Make the compose area optionally scrollable
2017-10-19Make the compose area optionally scrollable.David Yip
On desktop, the compose text box grows to accommodate the content. On mobile, the text box does not grow to accommodate text context, but does grow to accommodate images. It is possible in both cases to overflow the available area, which makes accessing other UI elements (e.g. visibility setttings) difficult. This commit makes the compose area optionally scrollable, which allows those UI elements to remain available even if they go off-screen.
2017-10-18Merge pull request #185 from glitch-soc/fix-null-statusDavid Yip
workaround for null status
2017-10-18Merge pull request #188 from glitch-soc/merge-upstream-2-0-0beatrix
Merge with upstream v2.0.0
2017-10-18formatting fix for eslintOndřej Hruška
2017-10-18Remove unused filesAttached property.David Yip
2017-10-18Update stylesheet imports in glitch components.David Yip
Commit 6e5471947438fc5883e72b8184663564ffadee28 moved the Mastodon variables and mixins deeper in the directory hierarchy; this commit brings the glitch components in line with that change.
2017-10-18Merge tag 'v2.0.0' into gs-masterDavid Yip
2017-10-18Suppress type error(not a function) on calling fastSeek (#5452)Sho Kusano
2017-10-18Bump version to 2.0.0 🐘Eugen Rochko
2017-10-18Fix pt-BR translation strings related to advanced search. (#5449)Renato "Lond" Cerqueira
2017-10-18Revert #5438 for FR (#5450)Technowix
As said here https://github.com/tootsuite/mastodon/pull/5438 the point of shortening the timestamp is legit, and after some time of adaptation no mistakes can be mades.
2017-10-18Some typos and supplementation in sentence structures (#5441)Håkan Eriksson
* Swedish file added * Swedish file added * Swedish file updated * Swedish languagefile added * Add Swedish translation * Add Swedish translation * Started the Swedish translation * Added Swedish lang settings * Updating Swedish language * Updating Swedish language * Updating Swedish language * Updating Swedish language * Updating Swedish language * Updating Swedish language * Swedish language completed and added * Swedish language Simple_form added * Swedish language Divise added * Swedish language doorkeeper added * Swedish language - now all file complete * Swedish - Typos and supplementation in sentence structure * Update simple_form.sv.yml * Update sv.yml * Update sv.yml Rearranged the alphabetical order.
2017-10-18Run `i18n-tasks checked-normalized` in Travis CI (#5443)Yamagishi Kazutoshi
2017-10-18Enable coverage for Jest (#5442)Yamagishi Kazutoshi
2017-10-18fr.json typo (realtive time) (#5447)JohnD28
Typo correction : https://fr.wikipedia.org/wiki/Heure#Typographie
2017-10-17Bump version to 2.0.0rc4Eugen Rochko
2017-10-17Dutch: A few strings I found last minute (#5440)Jeroen
* Dutch: A few strings I found last minute * Update simple_form.nl.yml
2017-10-18Make theme directory and Rename application.scss (#5336)YaQ
* Rename application.scss * Move to 'default' directory * Follow review Move directory, and Rename "mastodon". * Revert rename * undo removal of newline
2017-10-17When unreblog arrives over streaming API, just delete in UI (#5439)Eugen Rochko