{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/23669461","id":23669461,"diff_hunk":"@@ -1,714 +1,718 @@\n /* jshint moz:true */\n+/* global BaseModule */\n+/* global AppInstallDialog */\n+/* global AppInstallCancelDialog */\n+/* global AppDownloadCancelDialog */\n+/* global SetupInstalledAppDialog */\n+/* global ImeLayoutDialog */\n /* global ConfirmDialogHelper */\n /* global FtuLauncher */\n /* global KeyboardHelper */\n /* global inputWindowManager */\n-/* global LazyLoader */\n /* global ManifestHelper */\n /* global ModalDialog */\n /* global NotificationScreen */\n /* global StatusBar */\n /* global SystemBanner */\n-/* global Template */\n /* global UtilityTray */\n /* global applications */\n \n 'use strict';\n \n-var AppInstallManager = {\n-  mapDownloadErrorsToMessage: {\n-    'NETWORK_ERROR': 'download-failed',\n-    'DOWNLOAD_ERROR': 'download-failed',\n-    'MISSING_MANIFEST': 'install-failed',\n-    'INVALID_MANIFEST': 'install-failed',\n-    'INSTALL_FROM_DENIED': 'install-failed',\n-    'INVALID_SECURITY_LEVEL': 'install-failed',\n-    'INVALID_PACKAGE': 'install-failed',\n-    'APP_CACHE_DOWNLOAD_ERROR': 'download-failed'\n-  },\n-\n-  init: function ai_init() {\n-    this.systemBanner = new SystemBanner();\n-    this.dialog = document.getElementById('app-install-dialog');\n-    this.msg = document.getElementById('app-install-message');\n-    this.size = document.getElementById('app-install-size');\n-    this.authorName = document.getElementById('app-install-author-name');\n-    this.authorUrl = document.getElementById('app-install-author-url');\n-    this.installButton = document.getElementById('app-install-install-button');\n-    this.cancelButton = document.getElementById('app-install-cancel-button');\n-    this.imeLayoutDialog = document.getElementById('ime-layout-dialog');\n-    this.imeListTemplate = document.getElementById('ime-list-template');\n-    this.imeList = document.getElementById('ime-list');\n-    this.imeCancelButton = document.getElementById('ime-cancel-button');\n-    this.imeConfirmButton = document.getElementById('ime-confirm-button');\n-    this.setupCancelButton =\n-      document.getElementById('setup-cancel-button');\n-    this.setupConfirmButton =\n-      document.getElementById('setup-confirm-button');\n-\n-    this.installCancelDialog =\n-      document.getElementById('app-install-cancel-dialog');\n-    this.downloadCancelDialog =\n-      document.getElementById('app-download-cancel-dialog');\n-    this.setupInstalledAppDialog =\n-      document.getElementById('setup-installed-app-dialog');\n-    this.confirmCancelButton =\n-      document.getElementById('app-install-confirm-cancel-button');\n-    this.setupAppName = document.getElementById('setup-app-name');\n-    this.setupAppDescription = document.getElementById('setup-app-description');\n-\n-    this.resumeButton = document.getElementById('app-install-resume-button');\n-\n-    this.notifContainer =\n-            document.getElementById('install-manager-notification-container');\n-    this.appInfos = {};\n-    this.setupQueue = [];\n-    this.isSetupInProgress = false;\n-    window.addEventListener('mozChromeEvent',\n-      (function ai_handleChromeEvent(e) {\n-      if (e.detail.type == 'webapps-ask-install') {\n-        this.handleAppInstallPrompt(e.detail);\n-      }\n-      if (e.detail.type == 'webapps-ask-uninstall') {\n-        this.handleAppUninstallPrompt(e.detail);\n-      }\n-    }).bind(this));\n-\n-    window.addEventListener('applicationinstall',\n-      this.handleApplicationInstall.bind(this));\n-\n-    window.addEventListener('applicationuninstall',\n-      this.handleApplicationUninstall.bind(this));\n-\n-    this.installButton.onclick = this.handleInstall.bind(this);\n-    this.cancelButton.onclick = this.showInstallCancelDialog.bind(this);\n-    this.confirmCancelButton.onclick = this.handleInstallCancel.bind(this);\n-    this.resumeButton.onclick = this.hideInstallCancelDialog.bind(this);\n-    this.notifContainer.onclick = this.showDownloadCancelDialog.bind(this);\n-\n-    this.downloadCancelDialog.querySelector('.confirm').onclick =\n-      this.handleConfirmDownloadCancel.bind(this);\n-    this.downloadCancelDialog.querySelector('.cancel').onclick =\n-      this.handleCancelDownloadCancel.bind(this);\n-\n-    this.setupCancelButton.onclick = this.handleSetupCancelAction.bind(this);\n-    this.setupConfirmButton.onclick =\n-                             this.handleSetupConfirmAction.bind(this);\n-    this.imeCancelButton.onclick = this.hideIMEList.bind(this);\n-    this.imeConfirmButton.onclick = this.handleImeConfirmAction.bind(this);\n-    LazyLoader.load(['shared/js/template.js',\n-                     'shared/js/homescreens/confirm_dialog_helper.js']);\n-\n-    // bind these handlers so that we can have only one instance and check\n-    // them later on\n-    ['handleDownloadSuccess',\n-     'handleDownloadError',\n-     'handleProgress',\n-     'handleApplicationReady'\n-    ].forEach(function(name) {\n-      this[name] = this[name].bind(this);\n-    }, this);\n-\n-    window.addEventListener('applicationready',\n-        this.handleApplicationReady);\n-\n-    window.addEventListener('home', this.handleHomeButtonPressed.bind(this));\n-  },\n-\n-  handleHomeButtonPressed: function ai_handleHomeButtonPressed(e) {\n-    this.dialog.classList.remove('visible');\n-    this.handleInstallCancel();\n-\n-    // hide IME setup dialog if presented\n-    if (this.setupInstalledAppDialog.classList.contains('visible') ) {\n-      this.handleSetupCancelAction();\n-    }\n-\n-    // hide IME layout list if presented\n-    if (this.imeLayoutDialog.classList.contains('visible')) {\n-      this.hideIMEList();\n-    }\n-  },\n-\n-  handleApplicationReady: function ai_handleApplicationReady(e) {\n-    window.removeEventListener('applicationready',\n-        this.handleApplicationReady);\n+(function() {\n+  var AppInstallManager = function() {\n+  };\n+\n+  AppInstallManager.IMPORTS = [\n+    'shared/js/homescreens/confirm_dialog_helper.js'\n+  ];\n+\n+  BaseModule.create(AppInstallManager, {\n+    name: 'AppInstallManager',\n+\n+    mapDownloadErrorsToMessage: {\n+      'NETWORK_ERROR': 'download-failed',\n+      'DOWNLOAD_ERROR': 'download-failed',\n+      'MISSING_MANIFEST': 'install-failed',\n+      'INVALID_MANIFEST': 'install-failed',\n+      'INSTALL_FROM_DENIED': 'install-failed',\n+      'INVALID_SECURITY_LEVEL': 'install-failed',\n+      'INVALID_PACKAGE': 'install-failed',\n+      'APP_CACHE_DOWNLOAD_ERROR': 'download-failed'\n+    },\n+\n+    _start: function() {\n+      this.systemBanner = new SystemBanner();\n+\n+      this.dialog = new AppInstallDialog();\n+      this.installCancelDialog = new AppInstallCancelDialog();\n+      this.downloadCancelDialog = new AppDownloadCancelDialog();\n+      this.setupInstalledAppDialog = new SetupInstalledAppDialog();\n+      this.imeLayoutDialog = new ImeLayoutDialog();     \n+\n+      this.notifContainer =\n+              document.getElementById('install-manager-notification-container');\n+      this.appInfos = {};\n+      this.setupQueue = [];\n+      this.isSetupInProgress = false;\n+      window.addEventListener('mozChromeEvent',\n+        (function ai_handleChromeEvent(e) {\n+        if (e.detail.type == 'webapps-ask-install') {\n+          this.handleAppInstallPrompt(e.detail);\n+        }\n+        if (e.detail.type == 'webapps-ask-uninstall') {\n+          this.handleAppUninstallPrompt(e.detail);\n+        }\n+      }).bind(this));\n+\n+      window.addEventListener('applicationinstall',\n+        this.handleApplicationInstall.bind(this));\n+\n+      window.addEventListener('applicationuninstall',\n+        this.handleApplicationUninstall.bind(this));\n+\n+      this.dialog.elements.installButton.onclick =\n+        this.handleInstall.bind(this);\n+      this.dialog.elements.cancelButton.onclick =\n+        this.showInstallCancelDialog.bind(this);\n+      this.installCancelDialog.elements.confirmCancelButton.onclick =\n+        this.handleInstallCancel.bind(this);\n+      this.installCancelDialog.elements.resumeButton.onclick =\n+        this.hideInstallCancelDialog.bind(this);","path":"apps/system/js/app_install_manager.js","position":201,"original_position":201,"commit_id":"5f7842fd85c5edc0e47c06f9302947be2e45acb8","original_commit_id":"5f7842fd85c5edc0e47c06f9302947be2e45acb8","user":{"login":"alivedise","id":546519,"avatar_url":"https://avatars.githubusercontent.com/u/546519?v=3","gravatar_id":"","url":"https://api.github.com/users/alivedise","html_url":"https://github.com/alivedise","followers_url":"https://api.github.com/users/alivedise/followers","following_url":"https://api.github.com/users/alivedise/following{/other_user}","gists_url":"https://api.github.com/users/alivedise/gists{/gist_id}","starred_url":"https://api.github.com/users/alivedise/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alivedise/subscriptions","organizations_url":"https://api.github.com/users/alivedise/orgs","repos_url":"https://api.github.com/users/alivedise/repos","events_url":"https://api.github.com/users/alivedise/events{/privacy}","received_events_url":"https://api.github.com/users/alivedise/received_events","type":"User","site_admin":false},"body":"Move these event handle registration into AppInstallCancelDialog.prototype._registerEvents","created_at":"2015-01-28T07:18:32Z","updated_at":"2015-01-28T07:18:32Z","html_url":"https://github.com/mozilla-b2g/gaia/pull/27456#discussion_r23669461","pull_request_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456","_links":{"self":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/23669461"},"html":{"href":"https://github.com/mozilla-b2g/gaia/pull/27456#discussion_r23669461"},"pull_request":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456","id":27492317,"html_url":"https://github.com/mozilla-b2g/gaia/pull/27456","diff_url":"https://github.com/mozilla-b2g/gaia/pull/27456.diff","patch_url":"https://github.com/mozilla-b2g/gaia/pull/27456.patch","issue_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27456","number":27456,"state":"open","locked":false,"title":"Bug 1093516 - [System2] Migrate AppUpdate/InstallDialog to SystemDialog","user":{"login":"evanxd","id":3013038,"avatar_url":"https://avatars.githubusercontent.com/u/3013038?v=3","gravatar_id":"","url":"https://api.github.com/users/evanxd","html_url":"https://github.com/evanxd","followers_url":"https://api.github.com/users/evanxd/followers","following_url":"https://api.github.com/users/evanxd/following{/other_user}","gists_url":"https://api.github.com/users/evanxd/gists{/gist_id}","starred_url":"https://api.github.com/users/evanxd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanxd/subscriptions","organizations_url":"https://api.github.com/users/evanxd/orgs","repos_url":"https://api.github.com/users/evanxd/repos","events_url":"https://api.github.com/users/evanxd/events{/privacy}","received_events_url":"https://api.github.com/users/evanxd/received_events","type":"User","site_admin":false},"body":"Currently, I created `AppInstallManager` module with `BaseModule`, and I used system dialog module for `AppInstallDialog`, `AppInstallCancelDialog`, `AppDownloadCancelDialog`, `SetupInstalledAppDialog`, and `ImeLayoutDialog` dialogs.\r\n\r\nThat is our phase one for the refactor work.\r\nIn the phase two, I will use `Service.request()` to remove the global object in the top of `app_install_manager.js`.","created_at":"2015-01-16T09:11:37Z","updated_at":"2015-01-28T07:18:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3a520cf6db125acf3e23a8bc4889ed5060eb9429","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456/commits","review_comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456/comments","review_comment_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/{number}","comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27456/comments","statuses_url":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/5f7842fd85c5edc0e47c06f9302947be2e45acb8","head":{"label":"evanxd:bug-1093516","ref":"bug-1093516","sha":"5f7842fd85c5edc0e47c06f9302947be2e45acb8","user":{"login":"evanxd","id":3013038,"avatar_url":"https://avatars.githubusercontent.com/u/3013038?v=3","gravatar_id":"","url":"https://api.github.com/users/evanxd","html_url":"https://github.com/evanxd","followers_url":"https://api.github.com/users/evanxd/followers","following_url":"https://api.github.com/users/evanxd/following{/other_user}","gists_url":"https://api.github.com/users/evanxd/gists{/gist_id}","starred_url":"https://api.github.com/users/evanxd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanxd/subscriptions","organizations_url":"https://api.github.com/users/evanxd/orgs","repos_url":"https://api.github.com/users/evanxd/repos","events_url":"https://api.github.com/users/evanxd/events{/privacy}","received_events_url":"https://api.github.com/users/evanxd/received_events","type":"User","site_admin":false},"repo":{"id":7496174,"name":"gaia","full_name":"evanxd/gaia","owner":{"login":"evanxd","id":3013038,"avatar_url":"https://avatars.githubusercontent.com/u/3013038?v=3","gravatar_id":"","url":"https://api.github.com/users/evanxd","html_url":"https://github.com/evanxd","followers_url":"https://api.github.com/users/evanxd/followers","following_url":"https://api.github.com/users/evanxd/following{/other_user}","gists_url":"https://api.github.com/users/evanxd/gists{/gist_id}","starred_url":"https://api.github.com/users/evanxd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanxd/subscriptions","organizations_url":"https://api.github.com/users/evanxd/orgs","repos_url":"https://api.github.com/users/evanxd/repos","events_url":"https://api.github.com/users/evanxd/events{/privacy}","received_events_url":"https://api.github.com/users/evanxd/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/evanxd/gaia","description":"Gaia is a HTML5-based Phone UI for the Boot 2 Gecko Project","fork":true,"url":"https://api.github.com/repos/evanxd/gaia","forks_url":"https://api.github.com/repos/evanxd/gaia/forks","keys_url":"https://api.github.com/repos/evanxd/gaia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/evanxd/gaia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/evanxd/gaia/teams","hooks_url":"https://api.github.com/repos/evanxd/gaia/hooks","issue_events_url":"https://api.github.com/repos/evanxd/gaia/issues/events{/number}","events_url":"https://api.github.com/repos/evanxd/gaia/events","assignees_url":"https://api.github.com/repos/evanxd/gaia/assignees{/user}","branches_url":"https://api.github.com/repos/evanxd/gaia/branches{/branch}","tags_url":"https://api.github.com/repos/evanxd/gaia/tags","blobs_url":"https://api.github.com/repos/evanxd/gaia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/evanxd/gaia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/evanxd/gaia/git/refs{/sha}","trees_url":"https://api.github.com/repos/evanxd/gaia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/evanxd/gaia/statuses/{sha}","languages_url":"https://api.github.com/repos/evanxd/gaia/languages","stargazers_url":"https://api.github.com/repos/evanxd/gaia/stargazers","contributors_url":"https://api.github.com/repos/evanxd/gaia/contributors","subscribers_url":"https://api.github.com/repos/evanxd/gaia/subscribers","subscription_url":"https://api.github.com/repos/evanxd/gaia/subscription","commits_url":"https://api.github.com/repos/evanxd/gaia/commits{/sha}","git_commits_url":"https://api.github.com/repos/evanxd/gaia/git/commits{/sha}","comments_url":"https://api.github.com/repos/evanxd/gaia/comments{/number}","issue_comment_url":"https://api.github.com/repos/evanxd/gaia/issues/comments/{number}","contents_url":"https://api.github.com/repos/evanxd/gaia/contents/{+path}","compare_url":"https://api.github.com/repos/evanxd/gaia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/evanxd/gaia/merges","archive_url":"https://api.github.com/repos/evanxd/gaia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/evanxd/gaia/downloads","issues_url":"https://api.github.com/repos/evanxd/gaia/issues{/number}","pulls_url":"https://api.github.com/repos/evanxd/gaia/pulls{/number}","milestones_url":"https://api.github.com/repos/evanxd/gaia/milestones{/number}","notifications_url":"https://api.github.com/repos/evanxd/gaia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/evanxd/gaia/labels{/name}","releases_url":"https://api.github.com/repos/evanxd/gaia/releases{/id}","created_at":"2013-01-08T05:30:01Z","updated_at":"2014-10-28T07:22:13Z","pushed_at":"2015-01-28T03:44:29Z","git_url":"git://github.com/evanxd/gaia.git","ssh_url":"git@github.com:evanxd/gaia.git","clone_url":"https://github.com/evanxd/gaia.git","svn_url":"https://github.com/evanxd/gaia","homepage":"https://wiki.mozilla.org/B2G","size":878526,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":12,"forks":0,"open_issues":12,"watchers":0,"default_branch":"master"}},"base":{"label":"mozilla-b2g:master","ref":"master","sha":"6ed0df518a9abf240ba9cb65a34f511626beb053","user":{"login":"mozilla-b2g","id":1261292,"avatar_url":"https://avatars.githubusercontent.com/u/1261292?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-b2g","html_url":"https://github.com/mozilla-b2g","followers_url":"https://api.github.com/users/mozilla-b2g/followers","following_url":"https://api.github.com/users/mozilla-b2g/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-b2g/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-b2g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-b2g/subscriptions","organizations_url":"https://api.github.com/users/mozilla-b2g/orgs","repos_url":"https://api.github.com/users/mozilla-b2g/repos","events_url":"https://api.github.com/users/mozilla-b2g/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-b2g/received_events","type":"Organization","site_admin":false},"repo":{"id":2317369,"name":"gaia","full_name":"mozilla-b2g/gaia","owner":{"login":"mozilla-b2g","id":1261292,"avatar_url":"https://avatars.githubusercontent.com/u/1261292?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-b2g","html_url":"https://github.com/mozilla-b2g","followers_url":"https://api.github.com/users/mozilla-b2g/followers","following_url":"https://api.github.com/users/mozilla-b2g/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-b2g/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-b2g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-b2g/subscriptions","organizations_url":"https://api.github.com/users/mozilla-b2g/orgs","repos_url":"https://api.github.com/users/mozilla-b2g/repos","events_url":"https://api.github.com/users/mozilla-b2g/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-b2g/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla-b2g/gaia","description":"Gaia is a HTML5-based Phone UI for the Boot 2 Gecko Project. NOTE: For details of what branches are used for what releases, see","fork":false,"url":"https://api.github.com/repos/mozilla-b2g/gaia","forks_url":"https://api.github.com/repos/mozilla-b2g/gaia/forks","keys_url":"https://api.github.com/repos/mozilla-b2g/gaia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla-b2g/gaia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla-b2g/gaia/teams","hooks_url":"https://api.github.com/repos/mozilla-b2g/gaia/hooks","issue_events_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla-b2g/gaia/events","assignees_url":"https://api.github.com/repos/mozilla-b2g/gaia/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla-b2g/gaia/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla-b2g/gaia/tags","blobs_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla-b2g/gaia/languages","stargazers_url":"https://api.github.com/repos/mozilla-b2g/gaia/stargazers","contributors_url":"https://api.github.com/repos/mozilla-b2g/gaia/contributors","subscribers_url":"https://api.github.com/repos/mozilla-b2g/gaia/subscribers","subscription_url":"https://api.github.com/repos/mozilla-b2g/gaia/subscription","commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/comments/{number}","contents_url":"https://api.github.com/repos/mozilla-b2g/gaia/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla-b2g/gaia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla-b2g/gaia/merges","archive_url":"https://api.github.com/repos/mozilla-b2g/gaia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla-b2g/gaia/downloads","issues_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla-b2g/gaia/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla-b2g/gaia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla-b2g/gaia/labels{/name}","releases_url":"https://api.github.com/repos/mozilla-b2g/gaia/releases{/id}","created_at":"2011-09-03T01:38:46Z","updated_at":"2015-01-28T07:08:10Z","pushed_at":"2015-01-28T07:08:09Z","git_url":"git://github.com/mozilla-b2g/gaia.git","ssh_url":"git@github.com:mozilla-b2g/gaia.git","clone_url":"https://github.com/mozilla-b2g/gaia.git","svn_url":"https://github.com/mozilla-b2g/gaia","homepage":"https://wiki.mozilla.org/B2G","size":1389824,"stargazers_count":1856,"watchers_count":1856,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2183,"mirror_url":null,"open_issues_count":849,"forks":2183,"open_issues":849,"watchers":1856,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456"},"html":{"href":"https://github.com/mozilla-b2g/gaia/pull/27456"},"issue":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27456"},"comments":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/issues/27456/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/27456/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/5f7842fd85c5edc0e47c06f9302947be2e45acb8"}}}}