{"action":"created","comment":{"url":"https://api.github.com/repos/impress/impress.js/pulls/comments/51549208","id":51549208,"diff_hunk":"@@ -0,0 +1,250 @@\n+<!DOCTYPE html>\n+<html>\n+<head>\n+  <meta charset=\"utf-8\">\n+  <title>QUnit tests for impress.js</title>\n+  <link rel=\"stylesheet\" href=\"qunit/qunit.css\">\n+</head>\n+\n+\n+\n+<body class=\"impress-not-supported\">\n+  <!-- HTML elements to be tested with QUnit should typically be inside\n+       a qunit-fixture div. Unfortunately that just won't work with impress.js\n+       as it wants the div#impress element to be a direct child of body. Or\n+       something, I don't know, but it didn't work.\n+       \n+       So we just have an empty qunit-fixture, and then our impress steps\n+       just below it. This just means you have to make sure that each\n+       QUnit.test() cleans up after itself, can't rely on QUnit to do it now.\n+  -->\n+  <div id=\"qunit-fixture\">\n+  </div>\n+\n+  <div id=\"impress\">\n+    <div class=\"step\" data-x=\"-1000\" data-y=\"0\">First slide</div>\n+    <div class=\"step\" data-x=\"-800\" data-y=\"0\">Second slide</div>\n+    <div class=\"step\" data-x=\"-600\" data-y=\"0\">Third slide</div>\n+    <div class=\"step\" id=\"fourth\" data-x=\"-400\" data-y=\"0\">Fourth slide</div>\n+  </div>\n+\n+  <div id=\"qunit\"></div>\n+\n+  <script src=\"../js/impress.js\"></script>\n+  <script src=\"qunit/qunit.js\"></script>\n+  <script src=\"helpers.js\"></script>\n+  <script>\n+    // In case tests didn't complete, we are left with a hash/anchor pointing somewhere. But we want to start from scratch:\n+    window.location.hash = \"\";    \n+    // I don't understand exactly why, but we must call init() before the actual tests\n+    impress().init();\n+    \n+    QUnit.test( \"Initialize Impress.js\", function( assert ) {\n+      assert.ok( impress, \n+                 \"impress declared in global scope\" );\n+// This is the one that doesn't work. Test 17 fails if this is done inside a test()\n+//      assert.deepEqual( impress().init(), undefined,\n+//                        \"impress().init() called.\" );\n+      assert.deepEqual( impress().init(), undefined,\n+                        \"It's ok to call impress().init() a second time, it's a no-op.\" );\n+      var notSupportedClass = document.body.classList.contains(\"impress-not-supported\");\n+      var yesSupportedClass = document.body.classList.contains(\"impress-supported\");\n+      if ( !_impressSupported() ) {\n+        assert.ok( notSupportedClass,\n+                   \"body.impress-not-supported class still there.\" );\n+        assert.ok( !yesSupportedClass,\n+                   \"body.impress-supported class was NOT added.\" );\n+      } else {\n+        assert.ok( !notSupportedClass,\n+                   \"body.impress-not-supported class was removed.\" );\n+        assert.ok( yesSupportedClass,\n+                   \"body.impress-supported class was added.\" );\n+                   \n+        // To be pedantic, we run the rest of these tests inside the else \n+        // brackets as well, meaning that impress.js is tested to be supported.\n+        // However, other Qunit.test()s than this will fail miserably if it\n+        // weren't supported.\n+        assert.ok( !document.body.classList.contains(\"impress-disabled\"),\n+                   \"body.impress-disabled is removed.\" );\n+        assert.ok( document.body.classList.contains(\"impress-enabled\"),\n+                   \"body.impress-enabled is added.\" );\n+        \n+        var canvas = document.querySelector( \"div#impress > div\" );\n+        assert.ok( !canvas.classList.contains(\"step\") && canvas.id === \"\",\n+                   \"Additional 'canvas' div inserted between div#impress root and steps.\" );\n+        assert.equal( canvas.style.transform,\n+                      \"rotateZ(0deg) rotateY(0deg) rotateX(0deg) translate3d(1000px, 0px, 0px)\",\n+                      \"canvas.style.transform initialized correctly\" );\n+        assert.equal( canvas.style.transformOrigin,\n+                      \"left top 0px\",\n+                      \"canvas.style.transformOrigin initialized correctly\" );\n+        assert.equal( canvas.style.transformStyle,\n+                      \"preserve-3d\",\n+                      \"canvas.style.transformStyle initialized correctly\" );\n+        assert.equal( canvas.style.transitionDelay,\n+                      \"0ms\",\n+                      \"canvas.style.transitionDelay initialized correctly\" );\n+        // impress.js default values tries to set this to 1000ms, I'm completely confused about why that's not actually set in the browser?\n+        assert.equal( canvas.style.transitionDuration,\n+                      \"0ms\",\n+                      \"canvas.style.transitionDuration initialized correctly\" );\n+        assert.equal( canvas.style.transitionProperty,\n+                      \"all\",\n+                      \"canvas.style.transitionProperty initialized correctly\" );\n+        assert.equal( canvas.style.transitionTimingFunction,\n+                      \"ease-in-out\",\n+                      \"canvas.style.transitionTimingFunction initialized correctly\" );\n+                      \n+        assert.equal( document.documentElement.style.height,\n+                      \"100%\",\n+                      \"documentElement.style.height is 100%\" );\n+        \n+        // Steps initialization\n+        var step1 = document.querySelector( \"div#step-1\" );\n+        assert.equal( step1.style.position,\n+                      \"absolute\",\n+                      \"Step position is 'absolute'.\" );\n+\n+        assert.ok( step1.classList.contains(\"active\"),\n+                   \"Step 1 has active css class.\" );\n+        assert.ok( step1.classList.contains(\"present\"),\n+                   \"Step 1 has present css class.\" );\n+      }\n+    });\n+\n+    // Note: Here we focus on testing the core functionality of moving between\n+    // steps, the css classes set and unset, and events triggered.\n+    // TODO: more complex animations and check position, transitions, delays, etc...\n+    // Those need to be separate html files, and there could be several of them.\n+    QUnit.test( \"Impress Core API\", function( assert ) {\n+      // CSS classes are themselves manipulated in event listeners. Wait a short while before checking, to avoid race:\n+      var wait = 5; // milliseconds\n+      // Remember, when this block of tests is done, we must disable our event listeners\n+      var disableListeners = false;\n+\n+      var doneWithNext = assert.async();\n+      var doneWithPrev = assert.async();\n+      var step1 = document.querySelector( \"div#step-1\" );\n+      var step2 = document.querySelector( \"div#step-2\" );\n+      var step3 = document.querySelector( \"div#step-3\" );\n+      var step4 = document.querySelector( \"div#fourth\" );\n+      var root  = document.querySelector( \"div#impress\" );\n+\n+      // On impress:stepenter, we do some standard assertions. Finally,\n+      // we initialize the next transition from this array. \n+      var i = 0;\n+      var nextStep = [ { me   : step2,\n+                         next : function(){ return impress().goto(2); },\n+                         text : \"goto(<number>) called and returns ok (2->3)\" },\n+                       { me   : step3,\n+                         next : function(){ return impress().goto(\"fourth\"); },\n+                         text : \"goto(<string>) called and returns ok (3->4)\" },\n+                       { me   : step4,\n+                         next : function(){ return impress().next(); },\n+                         text : \"next() wraps around to first step (4->1)\" },\n+                       { me   : step1,\n+                         next : function(){ return impress().prev(); },\n+                         text : \"prev() wraps around to last step (1->4)\" },\n+                       { me   : step4,\n+                         next : function(){ return impress().prev(); },\n+                         text : \"prev() called and returns ok (4->3)\" },\n+                       { me   : step3,\n+                         next : false }      \n+      ];\n+      \n+      var assertStepEnter = function( event, registeredListener ) {\n+        assert.equal( event.target, nextStep[i].me,\n+                      event.target.id + \" triggered impress:stepenter event.\" );\n+        assert.ok( event.target.classList.contains(\"active\"),\n+                   event.target.id + \" set active css class.\" );\n+        assert.ok( event.target.classList.contains(\"present\"),\n+                   event.target.id + \" set present css class.\" );\n+        assert.ok( !event.target.classList.contains(\"future\"),\n+                   event.target.id + \" unset future css class.\" );\n+        assert.ok( !event.target.classList.contains(\"past\"),\n+                   event.target.id + \" unset past css class.\" );\n+\n+        if( nextStep[i].next ) {\n+          assert.ok( nextStep[i].next(), nextStep[i].text );\n+          i++;\n+        } else {\n+          // Remember to cleanup, since we're operating outside of qunit-fixture\n+          root.removeEventListener( \"impress:stepenter\", registeredListener );\n+          doneWithNext();\n+        }\n+      };\n+      \n+      root.addEventListener( \"impress:stepenter\", function( event ) {\n+        var registeredListener = this;\n+        setTimeout( function() { assertStepEnter( event, registeredListener ) },\n+                    wait*2 ); // wait*2 ensures that assertStepLeave is finished \n+                              // first, since here we'll call nextStep.next and i++\n+      });\n+\n+      var prevStep = [ step1 ];\n+      for(j=0; j < nextStep.length; j++){\n+        prevStep.push( nextStep[j].me );\n+      }\n+      var assertStepLeave = function( event, registeredListener ) {\n+        assert.equal( event.target, prevStep[i],\n+                      event.target.id + \" triggered impress:stepleave event.\" );\n+        assert.ok( !event.target.classList.contains(\"active\"),\n+                   event.target.id + \" unset active css class.\" );\n+        assert.ok( !event.target.classList.contains(\"present\"),\n+                   event.target.id + \" unset present css class.\" );\n+        assert.ok( !event.target.classList.contains(\"future\"),\n+                   event.target.id + \" unset future css class.\" );\n+        assert.ok( event.target.classList.contains(\"past\"),\n+                   event.target.id + \" set past css class.\" );\n+        \n+        if( i+2 == prevStep.length ) {\n+          root.removeEventListener( \"impress:stepleave\", registeredListener );\n+          doneWithPrev();\n+        }\n+\n+      };\n+\n+      root.addEventListener( \"impress:stepleave\", function( event ) {\n+        var registeredListener = this;\n+        setTimeout( function() { assertStepLeave( event, registeredListener ) },\n+                    wait );\n+      });\n+\n+      // Do other tests first, then trigger the chain reaction we setup above.\n+      assert.deepEqual( impress().goto(document.querySelector( \"div#impress\" )),\n+                        false,\n+                        \"goto() to a non-step element fails, as it should.\" );\n+      assert.deepEqual( impress().goto(),\n+                        false,\n+                        \"goto(<nothing>) fails, as it should.\" );\n+\n+      // This starts executing the chain of event listeners above     \n+      assert.ok( impress().next(),\n+                 \"next() called and returns ok (1->2)\" );\n+    });\n+    \n+\n+\n+\n+\n+\n+    // Note, it's clearly implied in the impress.js code, that when we support\n+    // plugins, the keypress api should be a plugin. Then this test of course\n+    // should go there as well.\n+    QUnit.test( \"Keypress API\", function( assert ) {\n+      var done = assert.async();\n+\n+    });","path":"test/index.html","position":237,"original_position":237,"commit_id":"44f7fd2028c1a653ac796a69b9ed807d38895d91","original_commit_id":"44f7fd2028c1a653ac796a69b9ed807d38895d91","user":{"login":"FagnerMartinsBrack","id":835857,"avatar_url":"https://avatars.githubusercontent.com/u/835857?v=3","gravatar_id":"","url":"https://api.github.com/users/FagnerMartinsBrack","html_url":"https://github.com/FagnerMartinsBrack","followers_url":"https://api.github.com/users/FagnerMartinsBrack/followers","following_url":"https://api.github.com/users/FagnerMartinsBrack/following{/other_user}","gists_url":"https://api.github.com/users/FagnerMartinsBrack/gists{/gist_id}","starred_url":"https://api.github.com/users/FagnerMartinsBrack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FagnerMartinsBrack/subscriptions","organizations_url":"https://api.github.com/users/FagnerMartinsBrack/orgs","repos_url":"https://api.github.com/users/FagnerMartinsBrack/repos","events_url":"https://api.github.com/users/FagnerMartinsBrack/events{/privacy}","received_events_url":"https://api.github.com/users/FagnerMartinsBrack/received_events","type":"User","site_admin":false},"body":"> It's a placeholder for future tests.\r\n\r\nOh ok xD. Maybe we could prefix the PR with a `WIP:` in the title just like how GitLab does? This way we can mark a PR as a Work in Progress to help building some context before somebody start reviewing :)\r\n\r\n@impress/mergers ","created_at":"2016-02-02T10:19:47Z","updated_at":"2016-02-02T10:19:47Z","html_url":"https://github.com/impress/impress.js/pull/510#discussion_r51549208","pull_request_url":"https://api.github.com/repos/impress/impress.js/pulls/510","_links":{"self":{"href":"https://api.github.com/repos/impress/impress.js/pulls/comments/51549208"},"html":{"href":"https://github.com/impress/impress.js/pull/510#discussion_r51549208"},"pull_request":{"href":"https://api.github.com/repos/impress/impress.js/pulls/510"}}},"pull_request":{"url":"https://api.github.com/repos/impress/impress.js/pulls/510","id":57901240,"html_url":"https://github.com/impress/impress.js/pull/510","diff_url":"https://github.com/impress/impress.js/pull/510.diff","patch_url":"https://github.com/impress/impress.js/pull/510.patch","issue_url":"https://api.github.com/repos/impress/impress.js/issues/510","number":510,"state":"open","locked":false,"title":"Adding qunit test framework and first set of basic tests.","user":{"login":"henrikingo","id":2482018,"avatar_url":"https://avatars.githubusercontent.com/u/2482018?v=3","gravatar_id":"","url":"https://api.github.com/users/henrikingo","html_url":"https://github.com/henrikingo","followers_url":"https://api.github.com/users/henrikingo/followers","following_url":"https://api.github.com/users/henrikingo/following{/other_user}","gists_url":"https://api.github.com/users/henrikingo/gists{/gist_id}","starred_url":"https://api.github.com/users/henrikingo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henrikingo/subscriptions","organizations_url":"https://api.github.com/users/henrikingo/orgs","repos_url":"https://api.github.com/users/henrikingo/repos","events_url":"https://api.github.com/users/henrikingo/events{/privacy}","received_events_url":"https://api.github.com/users/henrikingo/received_events","type":"User","site_admin":false},"body":"This is the beginning of having a test framework in impress.js.\r\n\r\nPart of issue #494","created_at":"2016-02-01T21:17:11Z","updated_at":"2016-02-02T10:19:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"75dcb2d9b1c2d76a156cd2b6f70a39e4473211e5","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/impress/impress.js/pulls/510/commits","review_comments_url":"https://api.github.com/repos/impress/impress.js/pulls/510/comments","review_comment_url":"https://api.github.com/repos/impress/impress.js/pulls/comments{/number}","comments_url":"https://api.github.com/repos/impress/impress.js/issues/510/comments","statuses_url":"https://api.github.com/repos/impress/impress.js/statuses/44f7fd2028c1a653ac796a69b9ed807d38895d91","head":{"label":"henrikingo:qunit","ref":"qunit","sha":"44f7fd2028c1a653ac796a69b9ed807d38895d91","user":{"login":"henrikingo","id":2482018,"avatar_url":"https://avatars.githubusercontent.com/u/2482018?v=3","gravatar_id":"","url":"https://api.github.com/users/henrikingo","html_url":"https://github.com/henrikingo","followers_url":"https://api.github.com/users/henrikingo/followers","following_url":"https://api.github.com/users/henrikingo/following{/other_user}","gists_url":"https://api.github.com/users/henrikingo/gists{/gist_id}","starred_url":"https://api.github.com/users/henrikingo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henrikingo/subscriptions","organizations_url":"https://api.github.com/users/henrikingo/orgs","repos_url":"https://api.github.com/users/henrikingo/repos","events_url":"https://api.github.com/users/henrikingo/events{/privacy}","received_events_url":"https://api.github.com/users/henrikingo/received_events","type":"User","site_admin":false},"repo":{"id":35943804,"name":"impress.js","full_name":"henrikingo/impress.js","owner":{"login":"henrikingo","id":2482018,"avatar_url":"https://avatars.githubusercontent.com/u/2482018?v=3","gravatar_id":"","url":"https://api.github.com/users/henrikingo","html_url":"https://github.com/henrikingo","followers_url":"https://api.github.com/users/henrikingo/followers","following_url":"https://api.github.com/users/henrikingo/following{/other_user}","gists_url":"https://api.github.com/users/henrikingo/gists{/gist_id}","starred_url":"https://api.github.com/users/henrikingo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/henrikingo/subscriptions","organizations_url":"https://api.github.com/users/henrikingo/orgs","repos_url":"https://api.github.com/users/henrikingo/repos","events_url":"https://api.github.com/users/henrikingo/events{/privacy}","received_events_url":"https://api.github.com/users/henrikingo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/henrikingo/impress.js","description":"It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.","fork":true,"url":"https://api.github.com/repos/henrikingo/impress.js","forks_url":"https://api.github.com/repos/henrikingo/impress.js/forks","keys_url":"https://api.github.com/repos/henrikingo/impress.js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/henrikingo/impress.js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/henrikingo/impress.js/teams","hooks_url":"https://api.github.com/repos/henrikingo/impress.js/hooks","issue_events_url":"https://api.github.com/repos/henrikingo/impress.js/issues/events{/number}","events_url":"https://api.github.com/repos/henrikingo/impress.js/events","assignees_url":"https://api.github.com/repos/henrikingo/impress.js/assignees{/user}","branches_url":"https://api.github.com/repos/henrikingo/impress.js/branches{/branch}","tags_url":"https://api.github.com/repos/henrikingo/impress.js/tags","blobs_url":"https://api.github.com/repos/henrikingo/impress.js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/henrikingo/impress.js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/henrikingo/impress.js/git/refs{/sha}","trees_url":"https://api.github.com/repos/henrikingo/impress.js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/henrikingo/impress.js/statuses/{sha}","languages_url":"https://api.github.com/repos/henrikingo/impress.js/languages","stargazers_url":"https://api.github.com/repos/henrikingo/impress.js/stargazers","contributors_url":"https://api.github.com/repos/henrikingo/impress.js/contributors","subscribers_url":"https://api.github.com/repos/henrikingo/impress.js/subscribers","subscription_url":"https://api.github.com/repos/henrikingo/impress.js/subscription","commits_url":"https://api.github.com/repos/henrikingo/impress.js/commits{/sha}","git_commits_url":"https://api.github.com/repos/henrikingo/impress.js/git/commits{/sha}","comments_url":"https://api.github.com/repos/henrikingo/impress.js/comments{/number}","issue_comment_url":"https://api.github.com/repos/henrikingo/impress.js/issues/comments{/number}","contents_url":"https://api.github.com/repos/henrikingo/impress.js/contents/{+path}","compare_url":"https://api.github.com/repos/henrikingo/impress.js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/henrikingo/impress.js/merges","archive_url":"https://api.github.com/repos/henrikingo/impress.js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/henrikingo/impress.js/downloads","issues_url":"https://api.github.com/repos/henrikingo/impress.js/issues{/number}","pulls_url":"https://api.github.com/repos/henrikingo/impress.js/pulls{/number}","milestones_url":"https://api.github.com/repos/henrikingo/impress.js/milestones{/number}","notifications_url":"https://api.github.com/repos/henrikingo/impress.js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/henrikingo/impress.js/labels{/name}","releases_url":"https://api.github.com/repos/henrikingo/impress.js/releases{/id}","deployments_url":"https://api.github.com/repos/henrikingo/impress.js/deployments","created_at":"2015-05-20T11:27:24Z","updated_at":"2016-01-13T13:43:57Z","pushed_at":"2016-02-01T21:12:48Z","git_url":"git://github.com/henrikingo/impress.js.git","ssh_url":"git@github.com:henrikingo/impress.js.git","clone_url":"https://github.com/henrikingo/impress.js.git","svn_url":"https://github.com/henrikingo/impress.js","homepage":"http://bartaz.github.com/impress.js","size":454,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"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":"impress:master","ref":"master","sha":"af6a5746c23d96d24dfdf0a279174d9260df1ac9","user":{"login":"impress","id":5477410,"avatar_url":"https://avatars.githubusercontent.com/u/5477410?v=3","gravatar_id":"","url":"https://api.github.com/users/impress","html_url":"https://github.com/impress","followers_url":"https://api.github.com/users/impress/followers","following_url":"https://api.github.com/users/impress/following{/other_user}","gists_url":"https://api.github.com/users/impress/gists{/gist_id}","starred_url":"https://api.github.com/users/impress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/impress/subscriptions","organizations_url":"https://api.github.com/users/impress/orgs","repos_url":"https://api.github.com/users/impress/repos","events_url":"https://api.github.com/users/impress/events{/privacy}","received_events_url":"https://api.github.com/users/impress/received_events","type":"Organization","site_admin":false},"repo":{"id":3065454,"name":"impress.js","full_name":"impress/impress.js","owner":{"login":"impress","id":5477410,"avatar_url":"https://avatars.githubusercontent.com/u/5477410?v=3","gravatar_id":"","url":"https://api.github.com/users/impress","html_url":"https://github.com/impress","followers_url":"https://api.github.com/users/impress/followers","following_url":"https://api.github.com/users/impress/following{/other_user}","gists_url":"https://api.github.com/users/impress/gists{/gist_id}","starred_url":"https://api.github.com/users/impress/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/impress/subscriptions","organizations_url":"https://api.github.com/users/impress/orgs","repos_url":"https://api.github.com/users/impress/repos","events_url":"https://api.github.com/users/impress/events{/privacy}","received_events_url":"https://api.github.com/users/impress/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/impress/impress.js","description":"It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.","fork":false,"url":"https://api.github.com/repos/impress/impress.js","forks_url":"https://api.github.com/repos/impress/impress.js/forks","keys_url":"https://api.github.com/repos/impress/impress.js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/impress/impress.js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/impress/impress.js/teams","hooks_url":"https://api.github.com/repos/impress/impress.js/hooks","issue_events_url":"https://api.github.com/repos/impress/impress.js/issues/events{/number}","events_url":"https://api.github.com/repos/impress/impress.js/events","assignees_url":"https://api.github.com/repos/impress/impress.js/assignees{/user}","branches_url":"https://api.github.com/repos/impress/impress.js/branches{/branch}","tags_url":"https://api.github.com/repos/impress/impress.js/tags","blobs_url":"https://api.github.com/repos/impress/impress.js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/impress/impress.js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/impress/impress.js/git/refs{/sha}","trees_url":"https://api.github.com/repos/impress/impress.js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/impress/impress.js/statuses/{sha}","languages_url":"https://api.github.com/repos/impress/impress.js/languages","stargazers_url":"https://api.github.com/repos/impress/impress.js/stargazers","contributors_url":"https://api.github.com/repos/impress/impress.js/contributors","subscribers_url":"https://api.github.com/repos/impress/impress.js/subscribers","subscription_url":"https://api.github.com/repos/impress/impress.js/subscription","commits_url":"https://api.github.com/repos/impress/impress.js/commits{/sha}","git_commits_url":"https://api.github.com/repos/impress/impress.js/git/commits{/sha}","comments_url":"https://api.github.com/repos/impress/impress.js/comments{/number}","issue_comment_url":"https://api.github.com/repos/impress/impress.js/issues/comments{/number}","contents_url":"https://api.github.com/repos/impress/impress.js/contents/{+path}","compare_url":"https://api.github.com/repos/impress/impress.js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/impress/impress.js/merges","archive_url":"https://api.github.com/repos/impress/impress.js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/impress/impress.js/downloads","issues_url":"https://api.github.com/repos/impress/impress.js/issues{/number}","pulls_url":"https://api.github.com/repos/impress/impress.js/pulls{/number}","milestones_url":"https://api.github.com/repos/impress/impress.js/milestones{/number}","notifications_url":"https://api.github.com/repos/impress/impress.js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/impress/impress.js/labels{/name}","releases_url":"https://api.github.com/repos/impress/impress.js/releases{/id}","deployments_url":"https://api.github.com/repos/impress/impress.js/deployments","created_at":"2011-12-28T22:23:19Z","updated_at":"2016-02-02T08:24:17Z","pushed_at":"2016-02-02T09:20:59Z","git_url":"git://github.com/impress/impress.js.git","ssh_url":"git@github.com:impress/impress.js.git","clone_url":"https://github.com/impress/impress.js.git","svn_url":"https://github.com/impress/impress.js","homepage":"http://impress.github.io/impress.js","size":13306,"stargazers_count":26424,"watchers_count":26424,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":5921,"mirror_url":null,"open_issues_count":175,"forks":5921,"open_issues":175,"watchers":26424,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/impress/impress.js/pulls/510"},"html":{"href":"https://github.com/impress/impress.js/pull/510"},"issue":{"href":"https://api.github.com/repos/impress/impress.js/issues/510"},"comments":{"href":"https://api.github.com/repos/impress/impress.js/issues/510/comments"},"review_comments":{"href":"https://api.github.com/repos/impress/impress.js/pulls/510/comments"},"review_comment":{"href":"https://api.github.com/repos/impress/impress.js/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/impress/impress.js/pulls/510/commits"},"statuses":{"href":"https://api.github.com/repos/impress/impress.js/statuses/44f7fd2028c1a653ac796a69b9ed807d38895d91"}}}}