{"action":"created","comment":{"url":"https://api.github.com/repos/edx/edx-app-ios/pulls/comments/155483171","pull_request_review_id":81794015,"id":155483171,"diff_hunk":"@@ -0,0 +1,238 @@\n+//\n+//  RegistrationFormFieldView.swift\n+//  edX\n+//\n+//  Created by Muhammad Zeeshan Arif on 22/11/2017.\n+//  Copyright © 2017 edX. All rights reserved.\n+//\n+\n+import UIKit\n+\n+class RegistrationFormFieldView: UIView {\n+    \n+    // MARK: - Configurations -\n+    private var textFieldHeight:CGFloat = 40.0\n+    private var textViewHeight:CGFloat = 100.0\n+    private var textInputViewHeight: CGFloat {\n+        return isTextArea ? textViewHeight : textFieldHeight\n+    }\n+    \n+    // MARK: - Properties -\n+    let titleLabelStyle = OEXMutableTextStyle(weight: OEXTextWeight.normal, size: OEXTextSize.base, color: OEXStyles.shared().neutralDark())\n+    let instructionsLabelStyle = OEXMutableTextStyle(weight: OEXTextWeight.normal, size: OEXTextSize.xxSmall, color: OEXStyles.shared().neutralDark())\n+    let errorLabelStyle = OEXMutableTextStyle(weight: OEXTextWeight.normal, size: OEXTextSize.xxSmall, color: UIColor.red)\n+    \n+    // MARK: - UI Properties -\n+    lazy private var textInputLabel: UILabel = {\n+        let label = UILabel()\n+        label.numberOfLines = 0\n+        label.isAccessibilityElement = false\n+        label.attributedText = self.isRequired ? self.titleLabelStyle.attributedString(withText: \"\\(self.formField?.label ?? \"\") \\(Strings.asteric)\") : self.titleLabelStyle.attributedString(withText: \"\\(self.formField?.label ?? \"\")\")\n+        return label\n+    }()\n+    \n+    // Used in child class\n+    lazy var textInputField: RegistrationTextField = {\n+        let textField = RegistrationTextField()\n+        textField.defaultTextAttributes = OEXStyles.shared().textFieldStyle(with: .base).attributes\n+        textField.autocapitalizationType = .none\n+        textField.autocorrectionType = .no\n+        textField.addTarget(self, action: #selector(RegistrationFormFieldView.valueDidChange), for: .editingChanged)\n+        return textField\n+    }()\n+    \n+    lazy private var textInputArea: OEXPlaceholderTextView = {\n+        let textArea = OEXPlaceholderTextView()\n+        textArea.textContainer.lineFragmentPadding = 0.0\n+        textArea.autocapitalizationType = .none\n+        textArea.applyBorderStyle()\n+        textArea.delegate = self\n+        return textArea\n+    }()\n+    \n+    lazy private var errorLabel: UILabel = {\n+        let label = UILabel()\n+        label.numberOfLines = 0\n+        label.isAccessibilityElement = false\n+        return label\n+    }()\n+    \n+    lazy private var instructionsLabel: UILabel = {\n+        let label = UILabel()\n+        label.numberOfLines = 0\n+        label.isAccessibilityElement = false\n+        label.attributedText = self.instructionsLabelStyle.attributedString(withText: self.formField?.instructions ?? \"\")\n+        return label\n+    }()\n+    \n+    var textInputView: UIView {\n+        return isTextArea ? textInputArea : textInputField\n+    }\n+    \n+    // Used in child class\n+    private(set) var formField: OEXRegistrationFormField?\n+    var errorMessage: String? {\n+        didSet {\n+            errorLabel.attributedText = self.errorLabelStyle.attributedString(withText: errorMessage ?? \"\")\n+            refreshAccessibilty()\n+        }\n+    }\n+    \n+    var currentValue: String {\n+        let value = isTextArea ? textInputArea.text : textInputField.text\n+        return value?.trimmingCharacters(in: NSCharacterSet.whitespaces) ?? \"\"\n+    }\n+    \n+    var isTextArea: Bool {\n+        return formField?.fieldType ?? OEXRegistrationFieldTypeText == OEXRegistrationFieldTypeTextArea\n+    }\n+    \n+    var isRequired: Bool {\n+        return formField?.isRequired ?? false\n+    }\n+    var hasValue: Bool {\n+        return currentValue != \"\"\n+    }\n+    \n+    var isValidInput: Bool {\n+        guard let errorMessage = validate() else {\n+            return true\n+        }\n+        self.errorMessage = errorMessage\n+        return false\n+    }\n+    \n+    // MARK: - Setup View -\n+    required init?(coder aDecoder: NSCoder) {\n+        super.init(coder: aDecoder)\n+    }\n+    \n+    init(with formField: OEXRegistrationFormField) {\n+        super.init(frame: CGRect.zero)\n+        self.formField = formField\n+        loadView()\n+    }\n+    \n+    // public method, can be inherited\n+    func loadView() {\n+        titleLabelStyle.lineBreakMode = .byWordWrapping\n+        instructionsLabelStyle.lineBreakMode = .byWordWrapping\n+        errorLabelStyle.lineBreakMode = .byWordWrapping\n+        addSubViews()\n+        refreshAccessibilty()\n+    }\n+    \n+    func refreshAccessibilty() {\n+        guard let formField = formField else { return }\n+        let errorAccessibility = errorMessage ?? \"\" != \"\" ? \",\\(Strings.Accessibility.errorText), \\(errorMessage ?? \"\")\" : \"\"\n+        let requiredOrOptionalAccessibility = isRequired ? Strings.Accessibility.requiredInput : Strings.Accessibility.optionalInput\n+        textInputView.accessibilityLabel = formField.label\n+        textInputView.accessibilityHint = \"\\(requiredOrOptionalAccessibility),\\(formField.instructions)\\(errorAccessibility)\"\n+    }\n+    \n+    func addSubViews() {\n+        // Add subviews\n+        addSubview(textInputLabel)\n+        addSubview(textInputView)\n+        addSubview(errorLabel)\n+        addSubview(instructionsLabel)\n+        setupConstraints()\n+    }\n+    \n+    func setupConstraints() {\n+        // Setup Constraints\n+        textInputLabel.snp_makeConstraints { (make) in\n+            make.top.equalTo(self)\n+            make.leading.equalTo(self).offset(StandardHorizontalMargin)\n+            make.trailing.equalTo(self).inset(StandardHorizontalMargin)\n+        }\n+        textInputView.snp_makeConstraints { (make) in\n+            make.leading.equalTo(textInputLabel.snp_leading)\n+            make.trailing.equalTo(textInputLabel.snp_trailing)\n+            make.top.equalTo(textInputLabel.snp_bottom).offset(StandardVerticalMargin/2.0)\n+            make.height.equalTo(textInputViewHeight)\n+        }\n+        errorLabel.snp_makeConstraints { (make) in\n+            make.leading.equalTo(textInputLabel.snp_leading)\n+            make.trailing.equalTo(textInputLabel.snp_trailing)","path":"Source/Registration Field Views/RegistrationFormFieldView.swift","position":157,"original_position":157,"commit_id":"b2b72c3165c82b34a0745cb6e2752fdda3a0a35d","original_commit_id":"b2b72c3165c82b34a0745cb6e2752fdda3a0a35d","user":{"login":"saeedbashir","id":5606473,"avatar_url":"https://avatars2.githubusercontent.com/u/5606473?v=4","gravatar_id":"","url":"https://api.github.com/users/saeedbashir","html_url":"https://github.com/saeedbashir","followers_url":"https://api.github.com/users/saeedbashir/followers","following_url":"https://api.github.com/users/saeedbashir/following{/other_user}","gists_url":"https://api.github.com/users/saeedbashir/gists{/gist_id}","starred_url":"https://api.github.com/users/saeedbashir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saeedbashir/subscriptions","organizations_url":"https://api.github.com/users/saeedbashir/orgs","repos_url":"https://api.github.com/users/saeedbashir/repos","events_url":"https://api.github.com/users/saeedbashir/events{/privacy}","received_events_url":"https://api.github.com/users/saeedbashir/received_events","type":"User","site_admin":false},"body":"No need to specify `. snp_trailing ` because automatically leading will be applied.","created_at":"2017-12-07T10:31:46Z","updated_at":"2017-12-07T10:55:18Z","html_url":"https://github.com/edx/edx-app-ios/pull/1040#discussion_r155483171","pull_request_url":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/edx/edx-app-ios/pulls/comments/155483171"},"html":{"href":"https://github.com/edx/edx-app-ios/pull/1040#discussion_r155483171"},"pull_request":{"href":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040"}}},"pull_request":{"url":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040","id":154775775,"html_url":"https://github.com/edx/edx-app-ios/pull/1040","diff_url":"https://github.com/edx/edx-app-ios/pull/1040.diff","patch_url":"https://github.com/edx/edx-app-ios/pull/1040.patch","issue_url":"https://api.github.com/repos/edx/edx-app-ios/issues/1040","number":1040,"state":"open","locked":false,"title":"Registration Updates: Provide visible labels or instructions for all input controls.","user":{"login":"zeshanarifarbisoft","id":33654380,"avatar_url":"https://avatars3.githubusercontent.com/u/33654380?v=4","gravatar_id":"","url":"https://api.github.com/users/zeshanarifarbisoft","html_url":"https://github.com/zeshanarifarbisoft","followers_url":"https://api.github.com/users/zeshanarifarbisoft/followers","following_url":"https://api.github.com/users/zeshanarifarbisoft/following{/other_user}","gists_url":"https://api.github.com/users/zeshanarifarbisoft/gists{/gist_id}","starred_url":"https://api.github.com/users/zeshanarifarbisoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zeshanarifarbisoft/subscriptions","organizations_url":"https://api.github.com/users/zeshanarifarbisoft/orgs","repos_url":"https://api.github.com/users/zeshanarifarbisoft/repos","events_url":"https://api.github.com/users/zeshanarifarbisoft/events{/privacy}","received_events_url":"https://api.github.com/users/zeshanarifarbisoft/received_events","type":"User","site_admin":false},"body":"**Description**\r\n\r\nThe form fields on the Register page do not have on-screen labels. Placeholder text is used as on-screen labels. When users start writing, the placeholder text disappears. People with cognitive disabilities will benefit from on-screen labels to enter the proper input. Registration flow implementation is refactored and A11y is also improved by adding errors.\r\n\r\n**Notes**\r\n\r\nTo simplify textfield design, created a custom textField with desired look to avoid overhead of managing a separate imageView for background and padding.\r\n\r\n1. RegistrationTextField.swift\r\n\r\n_**Objective-C**_\r\n\r\n1. OEXRegistrationFieldWrapperView.h\r\n2. OEXRegistrationFieldWrapperView.m\r\n3. OEXRegistrationFormTextField.h\r\n4. OEXRegistrationFormTextField.m\r\n5. OEXRegistrationFieldEmailView.h\r\n6. OEXRegistrationFieldEmailView.m\r\n7. OEXRegistrationFieldPasswordView.h\r\n8. OEXRegistrationFieldPasswordView.m\r\n9. OEXRegistrationFieldTextAreaView.h\r\n10. OEXRegistrationFieldTextAreaView.m\r\n\r\nThese views were on same pattern. So to simplify the code i have converted it into Swift and merged similar code in same class. \r\n\r\n_**Swift**_\r\n\r\n1. RegistrationFormFieldView.swift\r\n\r\n**_Objective-C_**\r\n\r\n1. OEXRegistrationFieldEmailController.h\r\n2. OEXRegistrationFieldEmailController.m\r\n3. OEXRegistrationFieldTextController.h\r\n4. OEXRegistrationFieldTextController.m\r\n5. OEXRegistrationFieldPasswordController.h\r\n6. OEXRegistrationFieldPasswordController.m\r\n7. OEXRegistrationFieldTextAreaController.h\r\n8. OEXRegistrationFieldTextAreaController.m\r\n\r\nThese Controllers were on same pattern. So to simplify the code i have converted it into Swift and merged similar code in same class. \r\n\r\n**_Swift_**\r\n\r\n1. RegistrationFieldController.swift\r\n\r\n**How to test this PR**\r\n\r\n- Goto Register Screen. \r\n- Verify Design - Input control having on-screen labels (* for required fields).\r\n- Verify Input validations. \r\n","created_at":"2017-11-27T10:42:42Z","updated_at":"2017-12-07T10:55:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2689099e3c25e8b85068a8bc98367af9161871f5","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040/commits","review_comments_url":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040/comments","review_comment_url":"https://api.github.com/repos/edx/edx-app-ios/pulls/comments{/number}","comments_url":"https://api.github.com/repos/edx/edx-app-ios/issues/1040/comments","statuses_url":"https://api.github.com/repos/edx/edx-app-ios/statuses/b2b72c3165c82b34a0745cb6e2752fdda3a0a35d","head":{"label":"zeshanarifarbisoft:master","ref":"master","sha":"b2b72c3165c82b34a0745cb6e2752fdda3a0a35d","user":{"login":"zeshanarifarbisoft","id":33654380,"avatar_url":"https://avatars3.githubusercontent.com/u/33654380?v=4","gravatar_id":"","url":"https://api.github.com/users/zeshanarifarbisoft","html_url":"https://github.com/zeshanarifarbisoft","followers_url":"https://api.github.com/users/zeshanarifarbisoft/followers","following_url":"https://api.github.com/users/zeshanarifarbisoft/following{/other_user}","gists_url":"https://api.github.com/users/zeshanarifarbisoft/gists{/gist_id}","starred_url":"https://api.github.com/users/zeshanarifarbisoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zeshanarifarbisoft/subscriptions","organizations_url":"https://api.github.com/users/zeshanarifarbisoft/orgs","repos_url":"https://api.github.com/users/zeshanarifarbisoft/repos","events_url":"https://api.github.com/users/zeshanarifarbisoft/events{/privacy}","received_events_url":"https://api.github.com/users/zeshanarifarbisoft/received_events","type":"User","site_admin":false},"repo":{"id":110670648,"name":"edx-app-ios","full_name":"zeshanarifarbisoft/edx-app-ios","owner":{"login":"zeshanarifarbisoft","id":33654380,"avatar_url":"https://avatars3.githubusercontent.com/u/33654380?v=4","gravatar_id":"","url":"https://api.github.com/users/zeshanarifarbisoft","html_url":"https://github.com/zeshanarifarbisoft","followers_url":"https://api.github.com/users/zeshanarifarbisoft/followers","following_url":"https://api.github.com/users/zeshanarifarbisoft/following{/other_user}","gists_url":"https://api.github.com/users/zeshanarifarbisoft/gists{/gist_id}","starred_url":"https://api.github.com/users/zeshanarifarbisoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zeshanarifarbisoft/subscriptions","organizations_url":"https://api.github.com/users/zeshanarifarbisoft/orgs","repos_url":"https://api.github.com/users/zeshanarifarbisoft/repos","events_url":"https://api.github.com/users/zeshanarifarbisoft/events{/privacy}","received_events_url":"https://api.github.com/users/zeshanarifarbisoft/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/zeshanarifarbisoft/edx-app-ios","description":"The Open EdX mobile app for iOS!","fork":true,"url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios","forks_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/forks","keys_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/teams","hooks_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/hooks","issue_events_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/issues/events{/number}","events_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/events","assignees_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/assignees{/user}","branches_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/branches{/branch}","tags_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/tags","blobs_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/statuses/{sha}","languages_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/languages","stargazers_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/stargazers","contributors_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/contributors","subscribers_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/subscribers","subscription_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/subscription","commits_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/contents/{+path}","compare_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/merges","archive_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/downloads","issues_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/issues{/number}","pulls_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/pulls{/number}","milestones_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/milestones{/number}","notifications_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/labels{/name}","releases_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/releases{/id}","deployments_url":"https://api.github.com/repos/zeshanarifarbisoft/edx-app-ios/deployments","created_at":"2017-11-14T09:40:24Z","updated_at":"2017-11-14T09:40:29Z","pushed_at":"2017-12-06T11:30:54Z","git_url":"git://github.com/zeshanarifarbisoft/edx-app-ios.git","ssh_url":"git@github.com:zeshanarifarbisoft/edx-app-ios.git","clone_url":"https://github.com/zeshanarifarbisoft/edx-app-ios.git","svn_url":"https://github.com/zeshanarifarbisoft/edx-app-ios","homepage":"https://docs.google.com/document/d/15MYZ2LAmahB82P5wkPkQOqjszfou0Qkeae3qz7STxUQ/edit","size":203164,"stargazers_count":0,"watchers_count":0,"language":"Swift","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"edx:master","ref":"master","sha":"6877b86b654249b430ba453d621c3e1a5d466de9","user":{"login":"edx","id":3179841,"avatar_url":"https://avatars3.githubusercontent.com/u/3179841?v=4","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"repo":{"id":29251733,"name":"edx-app-ios","full_name":"edx/edx-app-ios","owner":{"login":"edx","id":3179841,"avatar_url":"https://avatars3.githubusercontent.com/u/3179841?v=4","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/edx/edx-app-ios","description":"The Open EdX mobile app for iOS!","fork":false,"url":"https://api.github.com/repos/edx/edx-app-ios","forks_url":"https://api.github.com/repos/edx/edx-app-ios/forks","keys_url":"https://api.github.com/repos/edx/edx-app-ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/edx/edx-app-ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/edx/edx-app-ios/teams","hooks_url":"https://api.github.com/repos/edx/edx-app-ios/hooks","issue_events_url":"https://api.github.com/repos/edx/edx-app-ios/issues/events{/number}","events_url":"https://api.github.com/repos/edx/edx-app-ios/events","assignees_url":"https://api.github.com/repos/edx/edx-app-ios/assignees{/user}","branches_url":"https://api.github.com/repos/edx/edx-app-ios/branches{/branch}","tags_url":"https://api.github.com/repos/edx/edx-app-ios/tags","blobs_url":"https://api.github.com/repos/edx/edx-app-ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/edx/edx-app-ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/edx/edx-app-ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/edx/edx-app-ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/edx/edx-app-ios/statuses/{sha}","languages_url":"https://api.github.com/repos/edx/edx-app-ios/languages","stargazers_url":"https://api.github.com/repos/edx/edx-app-ios/stargazers","contributors_url":"https://api.github.com/repos/edx/edx-app-ios/contributors","subscribers_url":"https://api.github.com/repos/edx/edx-app-ios/subscribers","subscription_url":"https://api.github.com/repos/edx/edx-app-ios/subscription","commits_url":"https://api.github.com/repos/edx/edx-app-ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/edx/edx-app-ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/edx/edx-app-ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/edx/edx-app-ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/edx/edx-app-ios/contents/{+path}","compare_url":"https://api.github.com/repos/edx/edx-app-ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/edx/edx-app-ios/merges","archive_url":"https://api.github.com/repos/edx/edx-app-ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/edx/edx-app-ios/downloads","issues_url":"https://api.github.com/repos/edx/edx-app-ios/issues{/number}","pulls_url":"https://api.github.com/repos/edx/edx-app-ios/pulls{/number}","milestones_url":"https://api.github.com/repos/edx/edx-app-ios/milestones{/number}","notifications_url":"https://api.github.com/repos/edx/edx-app-ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/edx/edx-app-ios/labels{/name}","releases_url":"https://api.github.com/repos/edx/edx-app-ios/releases{/id}","deployments_url":"https://api.github.com/repos/edx/edx-app-ios/deployments","created_at":"2015-01-14T15:49:29Z","updated_at":"2017-11-29T03:17:31Z","pushed_at":"2017-12-07T09:51:00Z","git_url":"git://github.com/edx/edx-app-ios.git","ssh_url":"git@github.com:edx/edx-app-ios.git","clone_url":"https://github.com/edx/edx-app-ios.git","svn_url":"https://github.com/edx/edx-app-ios","homepage":"https://docs.google.com/document/d/15MYZ2LAmahB82P5wkPkQOqjszfou0Qkeae3qz7STxUQ/edit","size":203118,"stargazers_count":106,"watchers_count":106,"language":"Swift","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":108,"mirror_url":null,"archived":false,"open_issues_count":15,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":108,"open_issues":15,"watchers":106,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040"},"html":{"href":"https://github.com/edx/edx-app-ios/pull/1040"},"issue":{"href":"https://api.github.com/repos/edx/edx-app-ios/issues/1040"},"comments":{"href":"https://api.github.com/repos/edx/edx-app-ios/issues/1040/comments"},"review_comments":{"href":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040/comments"},"review_comment":{"href":"https://api.github.com/repos/edx/edx-app-ios/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/edx/edx-app-ios/pulls/1040/commits"},"statuses":{"href":"https://api.github.com/repos/edx/edx-app-ios/statuses/b2b72c3165c82b34a0745cb6e2752fdda3a0a35d"}},"author_association":"NONE"}}
{"actor":{"display_login":"saeedbashir"}}