This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Tweet { | |
render() { | |
// Visually the order here might make sense because of the squiggles and dots connecting it all | |
// but to screenreader users, we want to present the information in more of an RSS form that | |
// makes sense when read aloud. This includes reordering content and skipping reading some action buttons or labels | |
// unless they drill in or tab through the clickable items. This way they can more quickly consume the feed content. | |
// | |
// Note: because each item has lots of specialized formatting content, it would be hard/duplicative | |
// to exactly recreate the perfect string here outside of those sub-components | |
return (<View accessible aria-labelledby='userDomId timeDomId quotedDomId textFormatterDomId visuallyHiddenActivitySummaryDomId'> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Allows a route and screen to just exist, and let's the app figure out if it should be a modal or not | |
// and manage the background context | |
------------- | |
<Router> | |
<App> | |
<ModalSwitch> | |
<ModalRoute | |
component={RecipientsScreen} | |
exact | |
path='/keyboard_shortcuts' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TypeaheadInput extends Component { | |
constructor() { | |
this._dropdownDomId = `typeahead-${Math.random()}`; | |
// This is really fake, but it does need to be bound on the text input | |
this.state = { | |
focusedItemIdx: 0 | |
} | |
} | |
render() { | |
const focusedItemDomId = `typeaheadItem-${focusedItemIdx}`; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
desc "Log in to the Gmail account and cleanse anyone who appears to have bounced" | |
task :handle_bounces => :environment do | |
require 'gmail' | |
# Open a connection using your default smtp settings, could also define via YML or inline | |
gmail = Gmail.connect!(ActionMailer::Base.smtp_settings[:user_name], ActionMailer::Base.smtp_settings[:password]) | |
# Find everything from the Gmail mailer daemon (unread only) | |
emails = gmail.inbox.emails(:unread, :from => "mailer-daemon@googlemail.com", :subject => "Delivery Status Notification (Failure)") | |
Rails.logger.info("Found #{emails.length} messages") | |
emails.each do |email| | |
# Gmail sets a header "X-Failed-Recipients", with each email that failed |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.leaflet-div-icon { | |
background: transparent; | |
border: none; | |
} | |
.leaflet-marker-icon .number{ | |
position: relative; | |
top: -37px; | |
font-size: 12px; | |
width: 25px; |