GitHub PullRequestReviewCommentEvent at 2014-10-21 01:53:15
Repository: brackets
Actor: redmunds
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/adobe/brackets/pulls/comments/19126049","id":19126049,"diff_hunk":"@@ -719,10 +774,383 @@ define(function (require, exports, module) {\n             (brackets.platform !== \"win\");\n     });\n     \n+    /**\n+     * @private\n+     *\n+     * @param {?string} err Error type returned from JSON parser or open file operation\n+     * @param {string=} message Error message to be displayed in the dialog\n+     */\n+    function _showErrorsAndOpenKeyMap(err, message) {\n+        // Asynchronously loading Dialogs module to avoid the circular dependency\n+        require([\"widgets/Dialogs\"], function (dialogsModule) {\n+            var Dialogs = dialogsModule,\n+                errorMessage = Strings.ERROR_KEYMAP_CORRUPT;\n+            \n+            if (err === FileSystemError.UNSUPPORTED_ENCODING) {\n+                errorMessage = Strings.ERROR_LOADING_KEYMAP;\n+            } else if (message) {\n+                errorMessage = message;\n+            }\n+            \n+            Dialogs.showModalDialog(\n+                DefaultDialogs.DIALOG_ID_ERROR,\n+                Strings.ERROR_KEYMAP_TITLE,\n+                errorMessage\n+            )\n+                .done(function () {\n+                    if (err !== FileSystemError.UNSUPPORTED_ENCODING) {\n+                        CommandManager.execute(Commands.FILE_OPEN_KEYMAP);\n+                    }\n+                });\n+        });\n+    }\n+    \n+    /**\n+     * @private\n+     *\n+     * Checks whether the given command ID is a special command that the user can't bind \n+     * to another shortcut.\n+     * @param {!string} commandID A string referring to a specific command\n+     */\n+    function _isSpecialCommand(commandID) {\n+        if (brackets.platform === \"mac\" && commandID === \"file.quit\") {\n+            return true;\n+        }\n+        \n+        return (_specialCommands.indexOf(commandID) > -1);\n+    }\n+    \n+    /**\n+     * @private\n+     *\n+     * Checks whether the given key combination is a shortcut of a special command\n+     * or a Mac system command that the user can't reassign to another command.\n+     * @param {!string} normalizedKey A key combination string used for a keyboard shortcut\n+     */\n+    function _isReservedShortcuts(normalizedKey) {\n+        var originalBinding = _defaultKeyMap[normalizedKey];\n+        if (originalBinding && (normalizedKey === \"Cmd-Y\" ||\n+                _specialCommands.indexOf(originalBinding.commandID) > -1)) {\n+            return true;\n+        }\n+        \n+        if (brackets.platform === \"mac\" && _macReservedShortcuts.indexOf(normalizedKey) > -1) {\n+            return true;\n+        }\n+    }\n+    \n+    /**\n+     * @private\n+     *\n+     * Creates a bullet list item for any item in the given list.\n+     * @param {Array.<string>} list An array of strings to be converted into a \n+     * message string with a bullet list.\n+     */\n+    function _getBulletList(list) {\n+        var message = \"<ul class='dialog-list'>\";\n+        list.forEach(function (info) {\n+            message += \"<li>\" + info + \"</li>\";\n+        });\n+        message += \"</ul>\";\n+        return message;\n+    }\n+    \n+    /**\n+     * @private\n+     *\n+     * Gets the corresponding unicode symbol of an arrow key on Mac for display in the menu.\n+     */\n+    function _getDisplayKey(normalizedKey) {\n+        var displayKey = \"\";\n+        if (brackets.platform === \"mac\" && /(Up|Down|Left|Right)$/i.test(normalizedKey)) {\n+            normalizedKey = normalizedKey.replace(/Up$/i, \"\\u2191\");\n+            normalizedKey = normalizedKey.replace(/Down$/i, \"\\u2193\");\n+            normalizedKey = normalizedKey.replace(/Left$/i, \"\\u2190\");\n+            normalizedKey = normalizedKey.replace(/Right$/i, \"\\u2192\");\n+            displayKey = normalizedKey;\n+        }\n+        return displayKey;\n+    }\n+    \n+    /**\n+     * @private\n+     *\n+     * Applies each user key binding to all the affected commands and updates _keyMap. \n+     * Shows errors in a dialog and then opens the user key map file if any of the following \n+     * is detected while applying the user key bindings.\n+     *     - A key binding is attempting to modify a special command.\n+     *     - A key binding is attempting to assign a shortcut of a special command to another one.\n+     *     - Multiple key bindings are specified for the same command ID.\n+     *     - The same key combination is listed for multiple key bindings.\n+     *     - A key binding has any invalid key syntax.\n+     *     - A key binding is referring to a non-existent command ID.\n+     */\n+    function _applyUserKeyBindings() {\n+        var remappedCommands   = [],\n+            remappedKeys       = [],\n+            restrictedCommands = [],\n+            restrictedKeys     = [],\n+            invalidKeys        = [],\n+            invalidCommands    = [],\n+            multipleKeys       = [],\n+            duplicateBindings  = [],\n+            errorMessage       = \"\";\n+        \n+        if (_.size(_customKeyMap)) {\n+            _.forEach(_customKeyMap, function (commandID, key) {\n+                var normalizedKey    = normalizeKeyDescriptorString(key),\n+                    existingBindings = _commandMap[commandID] || [];\n+\n+                // Skip this since we don't allow user to update key binding of a special \n+                // command like cut, copy, paste, undo, redo and select all.\n+                if (_isSpecialCommand(commandID)) {\n+                    restrictedCommands.push(commandID);\n+                    return;\n+                }\n+\n+                // Skip this since we don't allow user to update a shortcut used in \n+                // a special command or any Mac system command.\n+                if (_isReservedShortcuts(normalizedKey)) {\n+                    restrictedKeys.push(key);\n+                    return;\n+                }\n+\n+                if (!normalizedKey) {\n+                    invalidKeys.push(key);\n+                } else if (_isKeyAssigned(normalizedKey)) {\n+                    if (remappedKeys.indexOf(normalizedKey) !== -1) {\n+                        // JSON parser already removed all the duplicates that have the exact\n+                        // same case or order in their keys. So we're only detecting duplicate \n+                        // bindings that have different orders or different cases used in the key.\n+                        duplicateBindings.push(key);\n+                        return;\n+                    }\n+                    // The same key binding already exists, so skip this.\n+                    if (_keyMap[normalizedKey].commandID === commandID) {\n+                        return;\n+                    }\n+                    removeBinding(normalizedKey);\n+                }\n+                \n+                if (remappedKeys.indexOf(normalizedKey) === -1) {\n+                    remappedKeys.push(normalizedKey);\n+                }\n+                \n+                // Remove another key binding if the new key binding is for a command\n+                // that has a different key binding. e.g. \"Ctrl-W\": \"edit.selectLine\"\n+                // requires us to remove \"Ctrl-W\" from \"file.close\" command, but we\n+                // also need to remove \"Ctrl-L\" from \"edit.selectLine\".\n+                if (existingBindings.length) {\n+                    existingBindings.forEach(function (binding) {\n+                        removeBinding(binding.key);\n+                    });\n+                }\n+                \n+                if (commandID) {\n+                    if (_allCommands.indexOf(commandID) !== -1) {\n+                        if (remappedCommands.indexOf(commandID) === -1) {\n+                            var keybinding = { key: normalizedKey };\n+                                \n+                            keybinding.displayKey = _getDisplayKey(normalizedKey);\n+                            addBinding(commandID, keybinding.displayKey ? keybinding : normalizedKey, brackets.platform);\n+                            remappedCommands.push(commandID);\n+                        } else {\n+                            multipleKeys.push(commandID);\n+                        }\n+                    } else {\n+                        invalidCommands.push(commandID);\n+                    }\n+                }\n+            });\n+            \n+            if (restrictedCommands.length) {\n+                errorMessage = StringUtils.format(Strings.ERROR_RESTRICTED_COMMANDS, _getBulletList(restrictedCommands));\n+            }\n+            \n+            if (restrictedKeys.length) {\n+                errorMessage += StringUtils.format(Strings.ERROR_RESTRICTED_SHORTCUTS, _getBulletList(restrictedKeys));\n+            }\n+            \n+            if (multipleKeys.length) {\n+                errorMessage += StringUtils.format(Strings.ERROR_MULTIPLE_SHORTCUTS, _getBulletList(multipleKeys));\n+            }\n+            \n+            if (duplicateBindings.length) {\n+                errorMessage += StringUtils.format(Strings.ERROR_DUPLICATE_SHORTCUTS, _getBulletList(duplicateBindings));\n+            }\n+\n+            if (invalidKeys.length) {\n+                errorMessage += StringUtils.format(Strings.ERROR_INVALID_SHORTCUTS, _getBulletList(invalidKeys));\n+            }\n+            \n+            if (invalidCommands.length) {\n+                errorMessage += StringUtils.format(Strings.ERROR_NONEXISTENT_COMMANDS, _getBulletList(invalidCommands));\n+            }\n+            \n+            if (errorMessage) {\n+                _showErrorsAndOpenKeyMap(\"\", errorMessage);\n+            }\n+        }\n+    }\n+    \n+    /**\n+     * @private\n+     *\n+     * Restores the default key bindings for all the commands that are modified by each key binding\n+     * specified in _customKeyMapCache (old version) but no longer specified in _customKeyMap (new version).\n+     */\n+    function _undonePriorUserKeyBindings() {","path":"src/command/KeyBindingManager.js","position":365,"original_position":365,"commit_id":"d57d327df4f042f2e87f3acc80bd9d01575c5c34","original_commit_id":"d57d327df4f042f2e87f3acc80bd9d01575c5c34","user":{"login":"redmunds","id":1197144,"avatar_url":"https://avatars.githubusercontent.com/u/1197144?v=2","gravatar_id":"","url":"https://api.github.com/users/redmunds","html_url":"https://github.com/redmunds","followers_url":"https://api.github.com/users/redmunds/followers","following_url":"https://api.github.com/users/redmunds/following{/other_user}","gists_url":"https://api.github.com/users/redmunds/gists{/gist_id}","starred_url":"https://api.github.com/users/redmunds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/redmunds/subscriptions","organizations_url":"https://api.github.com/users/redmunds/orgs","repos_url":"https://api.github.com/users/redmunds/repos","events_url":"https://api.github.com/users/redmunds/events{/privacy}","received_events_url":"https://api.github.com/users/redmunds/received_events","type":"User","site_admin":false},"body":"Wouldn't present tense (i.e. `_undoPriorUserKeyBindings()`) make more sense here?","created_at":"2014-10-21T01:53:15Z","updated_at":"2014-10-21T01:53:15Z","html_url":"https://github.com/adobe/brackets/pull/9589#discussion_r19126049","pull_request_url":"https://api.github.com/repos/adobe/brackets/pulls/9589","_links":{"self":{"href":"https://api.github.com/repos/adobe/brackets/pulls/comments/19126049"},"html":{"href":"https://github.com/adobe/brackets/pull/9589#discussion_r19126049"},"pull_request":{"href":"https://api.github.com/repos/adobe/brackets/pulls/9589"}}},"pull_request":{"url":"https://api.github.com/repos/adobe/brackets/pulls/9589","id":22960141,"html_url":"https://github.com/adobe/brackets/pull/9589","diff_url":"https://github.com/adobe/brackets/pull/9589.diff","patch_url":"https://github.com/adobe/brackets/pull/9589.patch","issue_url":"https://api.github.com/repos/adobe/brackets/issues/9589","number":9589,"state":"open","locked":false,"title":"Implement custom keyboard shortcuts support with a user key map file.","user":{"login":"RaymondLim","id":1542488,"avatar_url":"https://avatars.githubusercontent.com/u/1542488?v=2","gravatar_id":"","url":"https://api.github.com/users/RaymondLim","html_url":"https://github.com/RaymondLim","followers_url":"https://api.github.com/users/RaymondLim/followers","following_url":"https://api.github.com/users/RaymondLim/following{/other_user}","gists_url":"https://api.github.com/users/RaymondLim/gists{/gist_id}","starred_url":"https://api.github.com/users/RaymondLim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RaymondLim/subscriptions","organizations_url":"https://api.github.com/users/RaymondLim/orgs","repos_url":"https://api.github.com/users/RaymondLim/repos","events_url":"https://api.github.com/users/RaymondLim/events{/privacy}","received_events_url":"https://api.github.com/users/RaymondLim/received_events","type":"User","site_admin":false},"body":"Will add JSDoc later.","created_at":"2014-10-17T23:57:31Z","updated_at":"2014-10-21T01:53:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1b5ce36f2474950fa4b127b9eece9f6ad782a6a7","assignee":{"login":"redmunds","id":1197144,"avatar_url":"https://avatars.githubusercontent.com/u/1197144?v=2","gravatar_id":"","url":"https://api.github.com/users/redmunds","html_url":"https://github.com/redmunds","followers_url":"https://api.github.com/users/redmunds/followers","following_url":"https://api.github.com/users/redmunds/following{/other_user}","gists_url":"https://api.github.com/users/redmunds/gists{/gist_id}","starred_url":"https://api.github.com/users/redmunds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/redmunds/subscriptions","organizations_url":"https://api.github.com/users/redmunds/orgs","repos_url":"https://api.github.com/users/redmunds/repos","events_url":"https://api.github.com/users/redmunds/events{/privacy}","received_events_url":"https://api.github.com/users/redmunds/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/adobe/brackets/pulls/9589/commits","review_comments_url":"https://api.github.com/repos/adobe/brackets/pulls/9589/comments","review_comment_url":"https://api.github.com/repos/adobe/brackets/pulls/comments/{number}","comments_url":"https://api.github.com/repos/adobe/brackets/issues/9589/comments","statuses_url":"https://api.github.com/repos/adobe/brackets/statuses/d57d327df4f042f2e87f3acc80bd9d01575c5c34","head":{"label":"adobe:rlim/custom-key-map","ref":"rlim/custom-key-map","sha":"d57d327df4f042f2e87f3acc80bd9d01575c5c34","user":{"login":"adobe","id":476009,"avatar_url":"https://avatars.githubusercontent.com/u/476009?v=2","gravatar_id":"","url":"https://api.github.com/users/adobe","html_url":"https://github.com/adobe","followers_url":"https://api.github.com/users/adobe/followers","following_url":"https://api.github.com/users/adobe/following{/other_user}","gists_url":"https://api.github.com/users/adobe/gists{/gist_id}","starred_url":"https://api.github.com/users/adobe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adobe/subscriptions","organizations_url":"https://api.github.com/users/adobe/orgs","repos_url":"https://api.github.com/users/adobe/repos","events_url":"https://api.github.com/users/adobe/events{/privacy}","received_events_url":"https://api.github.com/users/adobe/received_events","type":"Organization","site_admin":false},"repo":{"id":2935735,"name":"brackets","full_name":"adobe/brackets","owner":{"login":"adobe","id":476009,"avatar_url":"https://avatars.githubusercontent.com/u/476009?v=2","gravatar_id":"","url":"https://api.github.com/users/adobe","html_url":"https://github.com/adobe","followers_url":"https://api.github.com/users/adobe/followers","following_url":"https://api.github.com/users/adobe/following{/other_user}","gists_url":"https://api.github.com/users/adobe/gists{/gist_id}","starred_url":"https://api.github.com/users/adobe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adobe/subscriptions","organizations_url":"https://api.github.com/users/adobe/orgs","repos_url":"https://api.github.com/users/adobe/repos","events_url":"https://api.github.com/users/adobe/events{/privacy}","received_events_url":"https://api.github.com/users/adobe/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/adobe/brackets","description":"An open source code editor for the web, written in JavaScript, HTML and CSS.","fork":false,"url":"https://api.github.com/repos/adobe/brackets","forks_url":"https://api.github.com/repos/adobe/brackets/forks","keys_url":"https://api.github.com/repos/adobe/brackets/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adobe/brackets/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adobe/brackets/teams","hooks_url":"https://api.github.com/repos/adobe/brackets/hooks","issue_events_url":"https://api.github.com/repos/adobe/brackets/issues/events{/number}","events_url":"https://api.github.com/repos/adobe/brackets/events","assignees_url":"https://api.github.com/repos/adobe/brackets/assignees{/user}","branches_url":"https://api.github.com/repos/adobe/brackets/branches{/branch}","tags_url":"https://api.github.com/repos/adobe/brackets/tags","blobs_url":"https://api.github.com/repos/adobe/brackets/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adobe/brackets/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adobe/brackets/git/refs{/sha}","trees_url":"https://api.github.com/repos/adobe/brackets/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adobe/brackets/statuses/{sha}","languages_url":"https://api.github.com/repos/adobe/brackets/languages","stargazers_url":"https://api.github.com/repos/adobe/brackets/stargazers","contributors_url":"https://api.github.com/repos/adobe/brackets/contributors","subscribers_url":"https://api.github.com/repos/adobe/brackets/subscribers","subscription_url":"https://api.github.com/repos/adobe/brackets/subscription","commits_url":"https://api.github.com/repos/adobe/brackets/commits{/sha}","git_commits_url":"https://api.github.com/repos/adobe/brackets/git/commits{/sha}","comments_url":"https://api.github.com/repos/adobe/brackets/comments{/number}","issue_comment_url":"https://api.github.com/repos/adobe/brackets/issues/comments/{number}","contents_url":"https://api.github.com/repos/adobe/brackets/contents/{+path}","compare_url":"https://api.github.com/repos/adobe/brackets/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adobe/brackets/merges","archive_url":"https://api.github.com/repos/adobe/brackets/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adobe/brackets/downloads","issues_url":"https://api.github.com/repos/adobe/brackets/issues{/number}","pulls_url":"https://api.github.com/repos/adobe/brackets/pulls{/number}","milestones_url":"https://api.github.com/repos/adobe/brackets/milestones{/number}","notifications_url":"https://api.github.com/repos/adobe/brackets/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adobe/brackets/labels{/name}","releases_url":"https://api.github.com/repos/adobe/brackets/releases{/id}","created_at":"2011-12-07T21:14:40Z","updated_at":"2014-10-21T00:08:57Z","pushed_at":"2014-10-21T01:21:28Z","git_url":"git://github.com/adobe/brackets.git","ssh_url":"git@github.com:adobe/brackets.git","clone_url":"https://github.com/adobe/brackets.git","svn_url":"https://github.com/adobe/brackets","homepage":"http://brackets.io","size":356486,"stargazers_count":18376,"watchers_count":18376,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3791,"mirror_url":null,"open_issues_count":1006,"forks":3791,"open_issues":1006,"watchers":18376,"default_branch":"master"}},"base":{"label":"adobe:master","ref":"master","sha":"01ca26c839d31e911ccbb18c3d1ab3cc2db03d14","user":{"login":"adobe","id":476009,"avatar_url":"https://avatars.githubusercontent.com/u/476009?v=2","gravatar_id":"","url":"https://api.github.com/users/adobe","html_url":"https://github.com/adobe","followers_url":"https://api.github.com/users/adobe/followers","following_url":"https://api.github.com/users/adobe/following{/other_user}","gists_url":"https://api.github.com/users/adobe/gists{/gist_id}","starred_url":"https://api.github.com/users/adobe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adobe/subscriptions","organizations_url":"https://api.github.com/users/adobe/orgs","repos_url":"https://api.github.com/users/adobe/repos","events_url":"https://api.github.com/users/adobe/events{/privacy}","received_events_url":"https://api.github.com/users/adobe/received_events","type":"Organization","site_admin":false},"repo":{"id":2935735,"name":"brackets","full_name":"adobe/brackets","owner":{"login":"adobe","id":476009,"avatar_url":"https://avatars.githubusercontent.com/u/476009?v=2","gravatar_id":"","url":"https://api.github.com/users/adobe","html_url":"https://github.com/adobe","followers_url":"https://api.github.com/users/adobe/followers","following_url":"https://api.github.com/users/adobe/following{/other_user}","gists_url":"https://api.github.com/users/adobe/gists{/gist_id}","starred_url":"https://api.github.com/users/adobe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adobe/subscriptions","organizations_url":"https://api.github.com/users/adobe/orgs","repos_url":"https://api.github.com/users/adobe/repos","events_url":"https://api.github.com/users/adobe/events{/privacy}","received_events_url":"https://api.github.com/users/adobe/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/adobe/brackets","description":"An open source code editor for the web, written in JavaScript, HTML and CSS.","fork":false,"url":"https://api.github.com/repos/adobe/brackets","forks_url":"https://api.github.com/repos/adobe/brackets/forks","keys_url":"https://api.github.com/repos/adobe/brackets/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adobe/brackets/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adobe/brackets/teams","hooks_url":"https://api.github.com/repos/adobe/brackets/hooks","issue_events_url":"https://api.github.com/repos/adobe/brackets/issues/events{/number}","events_url":"https://api.github.com/repos/adobe/brackets/events","assignees_url":"https://api.github.com/repos/adobe/brackets/assignees{/user}","branches_url":"https://api.github.com/repos/adobe/brackets/branches{/branch}","tags_url":"https://api.github.com/repos/adobe/brackets/tags","blobs_url":"https://api.github.com/repos/adobe/brackets/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adobe/brackets/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adobe/brackets/git/refs{/sha}","trees_url":"https://api.github.com/repos/adobe/brackets/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adobe/brackets/statuses/{sha}","languages_url":"https://api.github.com/repos/adobe/brackets/languages","stargazers_url":"https://api.github.com/repos/adobe/brackets/stargazers","contributors_url":"https://api.github.com/repos/adobe/brackets/contributors","subscribers_url":"https://api.github.com/repos/adobe/brackets/subscribers","subscription_url":"https://api.github.com/repos/adobe/brackets/subscription","commits_url":"https://api.github.com/repos/adobe/brackets/commits{/sha}","git_commits_url":"https://api.github.com/repos/adobe/brackets/git/commits{/sha}","comments_url":"https://api.github.com/repos/adobe/brackets/comments{/number}","issue_comment_url":"https://api.github.com/repos/adobe/brackets/issues/comments/{number}","contents_url":"https://api.github.com/repos/adobe/brackets/contents/{+path}","compare_url":"https://api.github.com/repos/adobe/brackets/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adobe/brackets/merges","archive_url":"https://api.github.com/repos/adobe/brackets/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adobe/brackets/downloads","issues_url":"https://api.github.com/repos/adobe/brackets/issues{/number}","pulls_url":"https://api.github.com/repos/adobe/brackets/pulls{/number}","milestones_url":"https://api.github.com/repos/adobe/brackets/milestones{/number}","notifications_url":"https://api.github.com/repos/adobe/brackets/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adobe/brackets/labels{/name}","releases_url":"https://api.github.com/repos/adobe/brackets/releases{/id}","created_at":"2011-12-07T21:14:40Z","updated_at":"2014-10-21T00:08:57Z","pushed_at":"2014-10-21T01:21:28Z","git_url":"git://github.com/adobe/brackets.git","ssh_url":"git@github.com:adobe/brackets.git","clone_url":"https://github.com/adobe/brackets.git","svn_url":"https://github.com/adobe/brackets","homepage":"http://brackets.io","size":356486,"stargazers_count":18376,"watchers_count":18376,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3791,"mirror_url":null,"open_issues_count":1006,"forks":3791,"open_issues":1006,"watchers":18376,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/adobe/brackets/pulls/9589"},"html":{"href":"https://github.com/adobe/brackets/pull/9589"},"issue":{"href":"https://api.github.com/repos/adobe/brackets/issues/9589"},"comments":{"href":"https://api.github.com/repos/adobe/brackets/issues/9589/comments"},"review_comments":{"href":"https://api.github.com/repos/adobe/brackets/pulls/9589/comments"},"review_comment":{"href":"https://api.github.com/repos/adobe/brackets/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/adobe/brackets/pulls/9589/commits"},"statuses":{"href":"https://api.github.com/repos/adobe/brackets/statuses/d57d327df4f042f2e87f3acc80bd9d01575c5c34"}}}}