gitextract_skmjj783/ ├── .cocoadocs.yml ├── .codecov.yml ├── .github/ │ ├── CONDUCT.md │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE.md │ └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .travis.yml ├── Assets/ │ ├── jsq_messages_banner.psd │ ├── jsq_messages_icon.psd │ ├── jsq_messages_splash.psd │ └── jsq_messages_splash_ipad.psd ├── CHANGELOG.md ├── Documentation/ │ ├── apps_using_this_library.md │ ├── contributor_onboarding.md │ ├── faq.md │ ├── getting_started.md │ └── migration.md ├── JSQMessages.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ └── contents.xcworkspacedata │ └── xcshareddata/ │ └── xcschemes/ │ └── JSQMessages.xcscheme ├── JSQMessages.xcworkspace/ │ └── contents.xcworkspacedata ├── JSQMessagesDemo/ │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj/ │ │ ├── Localizable.strings │ │ └── Main.storyboard │ ├── DemoMessagesViewController.h │ ├── DemoMessagesViewController.m │ ├── DemoModelData.h │ ├── DemoModelData.m │ ├── DemoSettingsViewController.h │ ├── DemoSettingsViewController.m │ ├── Images.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── DemoAvatars/ │ │ │ ├── demo_avatar_cook.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── demo_avatar_jobs.imageset/ │ │ │ │ └── Contents.json │ │ │ └── demo_avatar_woz.imageset/ │ │ │ └── Contents.json │ │ ├── LaunchImage.launchimage/ │ │ │ └── Contents.json │ │ └── goldengate.imageset/ │ │ └── Contents.json │ ├── Info.plist │ ├── NSUserDefaults+DemoSettings.h │ ├── NSUserDefaults+DemoSettings.m │ ├── TableViewController.h │ ├── TableViewController.m │ ├── he.lproj/ │ │ ├── Localizable.strings │ │ └── Main.strings │ ├── jsq_messages_sample.m4a │ └── main.m ├── JSQMessagesTests/ │ ├── CategoryTests/ │ │ ├── JSQMessagesNSBundleTests.m │ │ ├── JSQMessagesNSStringTests.m │ │ ├── JSQMessagesUIColorTests.m │ │ ├── JSQMessagesUIImageTests.m │ │ └── JSQMessagesUIViewTests.m │ ├── ControllerTests/ │ │ └── JSQMessagesViewControllerTests.m │ ├── FactoryTests/ │ │ ├── JSQMessagesAvatarImageFactoryTests.m │ │ ├── JSQMessagesBubbleImageFactoryTests.m │ │ ├── JSQMessagesMediaViewBubbleImageMaskerTests.m │ │ ├── JSQMessagesTimestampFormatterTests.m │ │ └── JSQMessagesToolbarButtonFactoryTests.m │ ├── Info.plist │ ├── LayoutTests/ │ │ ├── JSQMessagesCollectionViewFlowLayoutTests.m │ │ └── JSQMessagesCollectionViewLayoutAttributesTests.m │ ├── ModelTests/ │ │ ├── JSQAudioMediaItemTests.m │ │ ├── JSQLocationMediaItemTests.m │ │ ├── JSQMessageMediaTests.m │ │ ├── JSQMessageTextTests.m │ │ ├── JSQMessagesAvatarImageTests.m │ │ ├── JSQMessagesBubbleImageTests.m │ │ ├── JSQPhotoMediaItemTests.m │ │ └── JSQVideoMediaItemTests.m │ └── ViewTests/ │ ├── JSQMessagesCollectionViewCellTests.m │ ├── JSQMessagesCollectionViewTests.m │ ├── JSQMessagesComposerTextViewTests.m │ ├── JSQMessagesInputToolbarTests.m │ ├── JSQMessagesLabelTests.m │ ├── JSQMessagesLoadEarlierHeaderViewTests.m │ ├── JSQMessagesToolbarContentViewTests.m │ └── JSQMessagesTypingIndicatorFooterViewTests.m ├── JSQMessagesViewController/ │ ├── Assets/ │ │ └── JSQMessagesAssets.bundle/ │ │ ├── Base.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── Sounds/ │ │ │ ├── message_received.aiff │ │ │ └── message_sent.aiff │ │ ├── ar.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── bs.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── cs.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── da.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── de.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── en.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── es.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── fa.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── fi.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── fr.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── he.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── hr.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── id.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── it.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── ja.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── ko.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── ms.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── nb.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── nl.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── pl.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── pt.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── ro.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── ru.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── sv.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── th.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── tr.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── vi.lproj/ │ │ │ └── JSQMessages.strings │ │ ├── zh-Hans.lproj/ │ │ │ └── JSQMessages.strings │ │ └── zh-Hant.lproj/ │ │ └── JSQMessages.strings │ ├── Categories/ │ │ ├── NSBundle+JSQMessages.h │ │ ├── NSBundle+JSQMessages.m │ │ ├── NSString+JSQMessages.h │ │ ├── NSString+JSQMessages.m │ │ ├── UIColor+JSQMessages.h │ │ ├── UIColor+JSQMessages.m │ │ ├── UIImage+JSQMessages.h │ │ ├── UIImage+JSQMessages.m │ │ ├── UIView+JSQMessages.h │ │ └── UIView+JSQMessages.m │ ├── Controllers/ │ │ ├── JSQMessagesViewController.h │ │ ├── JSQMessagesViewController.m │ │ └── JSQMessagesViewController.xib │ ├── Factories/ │ │ ├── JSQMessagesAvatarImageFactory.h │ │ ├── JSQMessagesAvatarImageFactory.m │ │ ├── JSQMessagesBubbleImageFactory.h │ │ ├── JSQMessagesBubbleImageFactory.m │ │ ├── JSQMessagesMediaViewBubbleImageMasker.h │ │ ├── JSQMessagesMediaViewBubbleImageMasker.m │ │ ├── JSQMessagesTimestampFormatter.h │ │ ├── JSQMessagesTimestampFormatter.m │ │ ├── JSQMessagesToolbarButtonFactory.h │ │ ├── JSQMessagesToolbarButtonFactory.m │ │ ├── JSQMessagesVideoThumbnailFactory.h │ │ └── JSQMessagesVideoThumbnailFactory.m │ ├── JSQMessages.h │ ├── Layout/ │ │ ├── JSQAudioMediaViewAttributes.h │ │ ├── JSQAudioMediaViewAttributes.m │ │ ├── JSQMessagesBubbleSizeCalculating.h │ │ ├── JSQMessagesBubblesSizeCalculator.h │ │ ├── JSQMessagesBubblesSizeCalculator.m │ │ ├── JSQMessagesCollectionViewFlowLayout.h │ │ ├── JSQMessagesCollectionViewFlowLayout.m │ │ ├── JSQMessagesCollectionViewFlowLayoutInvalidationContext.h │ │ ├── JSQMessagesCollectionViewFlowLayoutInvalidationContext.m │ │ ├── JSQMessagesCollectionViewLayoutAttributes.h │ │ └── JSQMessagesCollectionViewLayoutAttributes.m │ ├── Model/ │ │ ├── JSQAudioMediaItem.h │ │ ├── JSQAudioMediaItem.m │ │ ├── JSQLocationMediaItem.h │ │ ├── JSQLocationMediaItem.m │ │ ├── JSQMediaItem.h │ │ ├── JSQMediaItem.m │ │ ├── JSQMessage.h │ │ ├── JSQMessage.m │ │ ├── JSQMessageAvatarImageDataSource.h │ │ ├── JSQMessageBubbleImageDataSource.h │ │ ├── JSQMessageData.h │ │ ├── JSQMessageMediaData.h │ │ ├── JSQMessagesAvatarImage.h │ │ ├── JSQMessagesAvatarImage.m │ │ ├── JSQMessagesBubbleImage.h │ │ ├── JSQMessagesBubbleImage.m │ │ ├── JSQMessagesCollectionViewDataSource.h │ │ ├── JSQMessagesCollectionViewDelegateFlowLayout.h │ │ ├── JSQMessagesViewAccessoryButtonDelegate.h │ │ ├── JSQPhotoMediaItem.h │ │ ├── JSQPhotoMediaItem.m │ │ ├── JSQVideoMediaItem.h │ │ └── JSQVideoMediaItem.m │ └── Views/ │ ├── JSQMessagesCellTextView.h │ ├── JSQMessagesCellTextView.m │ ├── JSQMessagesCollectionView.h │ ├── JSQMessagesCollectionView.m │ ├── JSQMessagesCollectionViewCell.h │ ├── JSQMessagesCollectionViewCell.m │ ├── JSQMessagesCollectionViewCellIncoming.h │ ├── JSQMessagesCollectionViewCellIncoming.m │ ├── JSQMessagesCollectionViewCellIncoming.xib │ ├── JSQMessagesCollectionViewCellOutgoing.h │ ├── JSQMessagesCollectionViewCellOutgoing.m │ ├── JSQMessagesCollectionViewCellOutgoing.xib │ ├── JSQMessagesComposerTextView.h │ ├── JSQMessagesComposerTextView.m │ ├── JSQMessagesInputToolbar.h │ ├── JSQMessagesInputToolbar.m │ ├── JSQMessagesLabel.h │ ├── JSQMessagesLabel.m │ ├── JSQMessagesLoadEarlierHeaderView.h │ ├── JSQMessagesLoadEarlierHeaderView.m │ ├── JSQMessagesLoadEarlierHeaderView.xib │ ├── JSQMessagesMediaPlaceholderView.h │ ├── JSQMessagesMediaPlaceholderView.m │ ├── JSQMessagesToolbarContentView.h │ ├── JSQMessagesToolbarContentView.m │ ├── JSQMessagesToolbarContentView.xib │ ├── JSQMessagesTypingIndicatorFooterView.h │ ├── JSQMessagesTypingIndicatorFooterView.m │ ├── JSQMessagesTypingIndicatorFooterView.xib │ ├── JSQMessagesTypingView.h │ └── JSQMessagesTypingView.m ├── JSQMessagesViewController.podspec ├── LICENSE ├── README.md └── SwiftExample/ ├── Podfile ├── Pods/ │ ├── Local Podspecs/ │ │ └── JSQMessagesViewController.podspec.json │ ├── Pods.xcodeproj/ │ │ └── project.pbxproj │ └── Target Support Files/ │ ├── JSQMessagesViewController/ │ │ ├── Info.plist │ │ ├── JSQMessagesViewController-dummy.m │ │ ├── JSQMessagesViewController-prefix.pch │ │ ├── JSQMessagesViewController-umbrella.h │ │ ├── JSQMessagesViewController.modulemap │ │ └── JSQMessagesViewController.xcconfig │ ├── Pods-SwiftExample/ │ │ ├── Info.plist │ │ ├── Pods-SwiftExample-acknowledgements.markdown │ │ ├── Pods-SwiftExample-acknowledgements.plist │ │ ├── Pods-SwiftExample-dummy.m │ │ ├── Pods-SwiftExample-frameworks.sh │ │ ├── Pods-SwiftExample-resources.sh │ │ ├── Pods-SwiftExample-umbrella.h │ │ ├── Pods-SwiftExample.debug.xcconfig │ │ ├── Pods-SwiftExample.modulemap │ │ └── Pods-SwiftExample.release.xcconfig │ └── Pods-SwiftExampleTests/ │ ├── Info.plist │ ├── Pods-SwiftExampleTests-acknowledgements.markdown │ ├── Pods-SwiftExampleTests-acknowledgements.plist │ ├── Pods-SwiftExampleTests-dummy.m │ ├── Pods-SwiftExampleTests-frameworks.sh │ ├── Pods-SwiftExampleTests-resources.sh │ ├── Pods-SwiftExampleTests-umbrella.h │ ├── Pods-SwiftExampleTests.debug.xcconfig │ ├── Pods-SwiftExampleTests.modulemap │ └── Pods-SwiftExampleTests.release.xcconfig ├── SwiftExample/ │ ├── AppDelegate.swift │ ├── Base.lproj/ │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── ChatViewController.swift │ ├── Conversation.swift │ ├── DemoConversation.swift │ ├── Info.plist │ ├── InitalTableViewController.swift │ └── SettingsTableViewController.swift ├── SwiftExample.xcodeproj/ │ ├── project.pbxproj │ └── project.xcworkspace/ │ └── contents.xcworkspacedata ├── SwiftExample.xcworkspace/ │ └── contents.xcworkspacedata └── SwiftExampleTests/ ├── ChatViewControllerTests.swift ├── Info.plist └── SettingsTests.swift