{"action":"created","comment":{"url":"https://api.github.com/repos/spotify/HubFramework/pulls/comments/84070268","pull_request_review_id":4870077,"id":84070268,"diff_hunk":"@@ -47,10 +47,11 @@\n #import \"HUBActionRegistry.h\"\n #import \"HUBActionHandler.h\"\n #import \"HUBViewModelDiff.h\"\n+#import \"HUBComponentGestureRecognizer.h\"\n \n NS_ASSUME_NONNULL_BEGIN\n \n-@interface HUBViewControllerImplementation () <HUBViewModelLoaderDelegate, HUBImageLoaderDelegate, HUBComponentWrapperDelegate, UICollectionViewDataSource, UICollectionViewDelegate>\n+@interface HUBViewControllerImplementation () <HUBViewModelLoaderDelegate, HUBImageLoaderDelegate, HUBComponentWrapperDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UIGestureRecognizerDelegate>","path":"sources/HUBViewControllerImplementation.m","position":9,"original_position":9,"commit_id":"e09a20a66ccffa7fac701192a68c19673caf100c","original_commit_id":"641bfa9c7809db1a5eb806c35a0304273d645255","user":{"login":"JohnSundell","id":2466701,"avatar_url":"https://avatars.githubusercontent.com/u/2466701?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnSundell","html_url":"https://github.com/JohnSundell","followers_url":"https://api.github.com/users/JohnSundell/followers","following_url":"https://api.github.com/users/JohnSundell/following{/other_user}","gists_url":"https://api.github.com/users/JohnSundell/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnSundell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnSundell/subscriptions","organizations_url":"https://api.github.com/users/JohnSundell/orgs","repos_url":"https://api.github.com/users/JohnSundell/repos","events_url":"https://api.github.com/users/JohnSundell/events{/privacy}","received_events_url":"https://api.github.com/users/JohnSundell/received_events","type":"User","site_admin":false},"body":"Totally! We should add a GitHub issue for it with subtasks. There's a few \"quick wins\", like moving image loading out of it.","created_at":"2016-10-19T13:34:08Z","updated_at":"2016-10-19T13:34:09Z","html_url":"https://github.com/spotify/HubFramework/pull/80#discussion_r84070268","pull_request_url":"https://api.github.com/repos/spotify/HubFramework/pulls/80","_links":{"self":{"href":"https://api.github.com/repos/spotify/HubFramework/pulls/comments/84070268"},"html":{"href":"https://github.com/spotify/HubFramework/pull/80#discussion_r84070268"},"pull_request":{"href":"https://api.github.com/repos/spotify/HubFramework/pulls/80"}}},"pull_request":{"url":"https://api.github.com/repos/spotify/HubFramework/pulls/80","id":89818046,"html_url":"https://github.com/spotify/HubFramework/pull/80","diff_url":"https://github.com/spotify/HubFramework/pull/80.diff","patch_url":"https://github.com/spotify/HubFramework/pull/80.patch","issue_url":"https://api.github.com/repos/spotify/HubFramework/issues/80","number":80,"state":"open","locked":false,"title":"Make highlight & selection handling more dynamic","user":{"login":"JohnSundell","id":2466701,"avatar_url":"https://avatars.githubusercontent.com/u/2466701?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnSundell","html_url":"https://github.com/JohnSundell","followers_url":"https://api.github.com/users/JohnSundell/followers","following_url":"https://api.github.com/users/JohnSundell/following{/other_user}","gists_url":"https://api.github.com/users/JohnSundell/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnSundell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnSundell/subscriptions","organizations_url":"https://api.github.com/users/JohnSundell/orgs","repos_url":"https://api.github.com/users/JohnSundell/repos","events_url":"https://api.github.com/users/JohnSundell/events{/privacy}","received_events_url":"https://api.github.com/users/JohnSundell/received_events","type":"User","site_admin":false},"body":"This change makes the way components are highlighted & selected a lot more dynamic. Before, only components implemented using either `UITableViewCell` or `UICollectionViewCell` would be able to be have highlight & selection appearances (because we simply forwarded those events from the wrapper cell).\r\n\r\nWith this change, a `HUBComponentWithSelectionState` protocol is introduced, making any component able to respond to selection state changes. Selection & highlighting is now also done through a custom gesture recognizer, instead of attempting to hack UIKit’s touch handling code (turned out to be a mistake).\r\n\r\nThe end goal of this change is to:\r\n\r\n1) Enable any component to be highlighted & selected.\r\n2) Simplify the implementation of selection handling.\r\n3) Enable components to have custom gesture recognizers.","created_at":"2016-10-18T13:44:35Z","updated_at":"2016-10-19T13:34:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5149675c4688af39e8202a169ca3915d60613b43","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/spotify/HubFramework/pulls/80/commits","review_comments_url":"https://api.github.com/repos/spotify/HubFramework/pulls/80/comments","review_comment_url":"https://api.github.com/repos/spotify/HubFramework/pulls/comments{/number}","comments_url":"https://api.github.com/repos/spotify/HubFramework/issues/80/comments","statuses_url":"https://api.github.com/repos/spotify/HubFramework/statuses/e09a20a66ccffa7fac701192a68c19673caf100c","head":{"label":"JohnSundell:selection-handling-more-dynamic","ref":"selection-handling-more-dynamic","sha":"e09a20a66ccffa7fac701192a68c19673caf100c","user":{"login":"JohnSundell","id":2466701,"avatar_url":"https://avatars.githubusercontent.com/u/2466701?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnSundell","html_url":"https://github.com/JohnSundell","followers_url":"https://api.github.com/users/JohnSundell/followers","following_url":"https://api.github.com/users/JohnSundell/following{/other_user}","gists_url":"https://api.github.com/users/JohnSundell/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnSundell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnSundell/subscriptions","organizations_url":"https://api.github.com/users/JohnSundell/orgs","repos_url":"https://api.github.com/users/JohnSundell/repos","events_url":"https://api.github.com/users/JohnSundell/events{/privacy}","received_events_url":"https://api.github.com/users/JohnSundell/received_events","type":"User","site_admin":false},"repo":{"id":69602303,"name":"HubFramework","full_name":"JohnSundell/HubFramework","owner":{"login":"JohnSundell","id":2466701,"avatar_url":"https://avatars.githubusercontent.com/u/2466701?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnSundell","html_url":"https://github.com/JohnSundell","followers_url":"https://api.github.com/users/JohnSundell/followers","following_url":"https://api.github.com/users/JohnSundell/following{/other_user}","gists_url":"https://api.github.com/users/JohnSundell/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnSundell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnSundell/subscriptions","organizations_url":"https://api.github.com/users/JohnSundell/orgs","repos_url":"https://api.github.com/users/JohnSundell/repos","events_url":"https://api.github.com/users/JohnSundell/events{/privacy}","received_events_url":"https://api.github.com/users/JohnSundell/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/JohnSundell/HubFramework","description":"Spotify’s component-driven UI framework for iOS","fork":true,"url":"https://api.github.com/repos/JohnSundell/HubFramework","forks_url":"https://api.github.com/repos/JohnSundell/HubFramework/forks","keys_url":"https://api.github.com/repos/JohnSundell/HubFramework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JohnSundell/HubFramework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JohnSundell/HubFramework/teams","hooks_url":"https://api.github.com/repos/JohnSundell/HubFramework/hooks","issue_events_url":"https://api.github.com/repos/JohnSundell/HubFramework/issues/events{/number}","events_url":"https://api.github.com/repos/JohnSundell/HubFramework/events","assignees_url":"https://api.github.com/repos/JohnSundell/HubFramework/assignees{/user}","branches_url":"https://api.github.com/repos/JohnSundell/HubFramework/branches{/branch}","tags_url":"https://api.github.com/repos/JohnSundell/HubFramework/tags","blobs_url":"https://api.github.com/repos/JohnSundell/HubFramework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JohnSundell/HubFramework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JohnSundell/HubFramework/git/refs{/sha}","trees_url":"https://api.github.com/repos/JohnSundell/HubFramework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JohnSundell/HubFramework/statuses/{sha}","languages_url":"https://api.github.com/repos/JohnSundell/HubFramework/languages","stargazers_url":"https://api.github.com/repos/JohnSundell/HubFramework/stargazers","contributors_url":"https://api.github.com/repos/JohnSundell/HubFramework/contributors","subscribers_url":"https://api.github.com/repos/JohnSundell/HubFramework/subscribers","subscription_url":"https://api.github.com/repos/JohnSundell/HubFramework/subscription","commits_url":"https://api.github.com/repos/JohnSundell/HubFramework/commits{/sha}","git_commits_url":"https://api.github.com/repos/JohnSundell/HubFramework/git/commits{/sha}","comments_url":"https://api.github.com/repos/JohnSundell/HubFramework/comments{/number}","issue_comment_url":"https://api.github.com/repos/JohnSundell/HubFramework/issues/comments{/number}","contents_url":"https://api.github.com/repos/JohnSundell/HubFramework/contents/{+path}","compare_url":"https://api.github.com/repos/JohnSundell/HubFramework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JohnSundell/HubFramework/merges","archive_url":"https://api.github.com/repos/JohnSundell/HubFramework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JohnSundell/HubFramework/downloads","issues_url":"https://api.github.com/repos/JohnSundell/HubFramework/issues{/number}","pulls_url":"https://api.github.com/repos/JohnSundell/HubFramework/pulls{/number}","milestones_url":"https://api.github.com/repos/JohnSundell/HubFramework/milestones{/number}","notifications_url":"https://api.github.com/repos/JohnSundell/HubFramework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JohnSundell/HubFramework/labels{/name}","releases_url":"https://api.github.com/repos/JohnSundell/HubFramework/releases{/id}","deployments_url":"https://api.github.com/repos/JohnSundell/HubFramework/deployments","created_at":"2016-09-29T19:49:38Z","updated_at":"2016-09-29T19:49:40Z","pushed_at":"2016-10-19T13:23:05Z","git_url":"git://github.com/JohnSundell/HubFramework.git","ssh_url":"git@github.com:JohnSundell/HubFramework.git","clone_url":"https://github.com/JohnSundell/HubFramework.git","svn_url":"https://github.com/JohnSundell/HubFramework","homepage":"https://spotify.github.io/HubFramework","size":74385,"stargazers_count":0,"watchers_count":0,"language":"Objective-C","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"spotify:master","ref":"master","sha":"d0ace1dc4ab24651922a65a74af336a13d961293","user":{"login":"spotify","id":251374,"avatar_url":"https://avatars.githubusercontent.com/u/251374?v=3","gravatar_id":"","url":"https://api.github.com/users/spotify","html_url":"https://github.com/spotify","followers_url":"https://api.github.com/users/spotify/followers","following_url":"https://api.github.com/users/spotify/following{/other_user}","gists_url":"https://api.github.com/users/spotify/gists{/gist_id}","starred_url":"https://api.github.com/users/spotify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spotify/subscriptions","organizations_url":"https://api.github.com/users/spotify/orgs","repos_url":"https://api.github.com/users/spotify/repos","events_url":"https://api.github.com/users/spotify/events{/privacy}","received_events_url":"https://api.github.com/users/spotify/received_events","type":"Organization","site_admin":false},"repo":{"id":69279243,"name":"HubFramework","full_name":"spotify/HubFramework","owner":{"login":"spotify","id":251374,"avatar_url":"https://avatars.githubusercontent.com/u/251374?v=3","gravatar_id":"","url":"https://api.github.com/users/spotify","html_url":"https://github.com/spotify","followers_url":"https://api.github.com/users/spotify/followers","following_url":"https://api.github.com/users/spotify/following{/other_user}","gists_url":"https://api.github.com/users/spotify/gists{/gist_id}","starred_url":"https://api.github.com/users/spotify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spotify/subscriptions","organizations_url":"https://api.github.com/users/spotify/orgs","repos_url":"https://api.github.com/users/spotify/repos","events_url":"https://api.github.com/users/spotify/events{/privacy}","received_events_url":"https://api.github.com/users/spotify/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/spotify/HubFramework","description":"Spotify’s component-driven UI framework for iOS","fork":false,"url":"https://api.github.com/repos/spotify/HubFramework","forks_url":"https://api.github.com/repos/spotify/HubFramework/forks","keys_url":"https://api.github.com/repos/spotify/HubFramework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spotify/HubFramework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spotify/HubFramework/teams","hooks_url":"https://api.github.com/repos/spotify/HubFramework/hooks","issue_events_url":"https://api.github.com/repos/spotify/HubFramework/issues/events{/number}","events_url":"https://api.github.com/repos/spotify/HubFramework/events","assignees_url":"https://api.github.com/repos/spotify/HubFramework/assignees{/user}","branches_url":"https://api.github.com/repos/spotify/HubFramework/branches{/branch}","tags_url":"https://api.github.com/repos/spotify/HubFramework/tags","blobs_url":"https://api.github.com/repos/spotify/HubFramework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spotify/HubFramework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spotify/HubFramework/git/refs{/sha}","trees_url":"https://api.github.com/repos/spotify/HubFramework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spotify/HubFramework/statuses/{sha}","languages_url":"https://api.github.com/repos/spotify/HubFramework/languages","stargazers_url":"https://api.github.com/repos/spotify/HubFramework/stargazers","contributors_url":"https://api.github.com/repos/spotify/HubFramework/contributors","subscribers_url":"https://api.github.com/repos/spotify/HubFramework/subscribers","subscription_url":"https://api.github.com/repos/spotify/HubFramework/subscription","commits_url":"https://api.github.com/repos/spotify/HubFramework/commits{/sha}","git_commits_url":"https://api.github.com/repos/spotify/HubFramework/git/commits{/sha}","comments_url":"https://api.github.com/repos/spotify/HubFramework/comments{/number}","issue_comment_url":"https://api.github.com/repos/spotify/HubFramework/issues/comments{/number}","contents_url":"https://api.github.com/repos/spotify/HubFramework/contents/{+path}","compare_url":"https://api.github.com/repos/spotify/HubFramework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spotify/HubFramework/merges","archive_url":"https://api.github.com/repos/spotify/HubFramework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spotify/HubFramework/downloads","issues_url":"https://api.github.com/repos/spotify/HubFramework/issues{/number}","pulls_url":"https://api.github.com/repos/spotify/HubFramework/pulls{/number}","milestones_url":"https://api.github.com/repos/spotify/HubFramework/milestones{/number}","notifications_url":"https://api.github.com/repos/spotify/HubFramework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spotify/HubFramework/labels{/name}","releases_url":"https://api.github.com/repos/spotify/HubFramework/releases{/id}","deployments_url":"https://api.github.com/repos/spotify/HubFramework/deployments","created_at":"2016-09-26T18:19:58Z","updated_at":"2016-10-19T13:27:44Z","pushed_at":"2016-10-19T13:23:28Z","git_url":"git://github.com/spotify/HubFramework.git","ssh_url":"git@github.com:spotify/HubFramework.git","clone_url":"https://github.com/spotify/HubFramework.git","svn_url":"https://github.com/spotify/HubFramework","homepage":"https://spotify.github.io/HubFramework","size":77233,"stargazers_count":1131,"watchers_count":1131,"language":"Objective-C","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":51,"mirror_url":null,"open_issues_count":21,"forks":51,"open_issues":21,"watchers":1131,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/spotify/HubFramework/pulls/80"},"html":{"href":"https://github.com/spotify/HubFramework/pull/80"},"issue":{"href":"https://api.github.com/repos/spotify/HubFramework/issues/80"},"comments":{"href":"https://api.github.com/repos/spotify/HubFramework/issues/80/comments"},"review_comments":{"href":"https://api.github.com/repos/spotify/HubFramework/pulls/80/comments"},"review_comment":{"href":"https://api.github.com/repos/spotify/HubFramework/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/spotify/HubFramework/pulls/80/commits"},"statuses":{"href":"https://api.github.com/repos/spotify/HubFramework/statuses/e09a20a66ccffa7fac701192a68c19673caf100c"}}}}
{"actor":{"display_login":"JohnSundell"}}