diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml new file mode 100644 index 00000000..bb1e4ed8 --- /dev/null +++ b/.github/workflows/update.yml @@ -0,0 +1,38 @@ +name: 'automatic update' + +on: + workflow_dispatch: + inputs: + date: + type: string + description: Date(default today) + schedule: + - cron: '13/47 * * * *' + +jobs: + update: + name: Automatic Update + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2.4.0 + - uses: actions/setup-python@v4 + with: + python-version: '3.9' + cache: 'pip' # caching pip dependencies + - run: pip install -r requirements.txt + + - name: Update + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + INPUT_DATE: ${{ github.event.inputs.date }} + run: | + python get_data.py \ + python md_to_html.py \ + python yaml_2_js.py \ + python plot-stars.py \ + + - name: Commit + uses: EndBug/add-and-commit@v8 + with: + message: 'automatic update' + add: './' \ No newline at end of file diff --git a/apigh/2023-04-19/Aloud b/apigh/2023-04-19/Aloud new file mode 100644 index 00000000..6b2bfd32 --- /dev/null +++ b/apigh/2023-04-19/Aloud @@ -0,0 +1,122 @@ +{ + "id": 237287917, + "node_id": "MDEwOlJlcG9zaXRvcnkyMzcyODc5MTc=", + "name": "aloud", + "full_name": "patarapolw/aloud", + "private": false, + "owner": { + "login": "patarapolw", + "id": 21255931, + "node_id": "MDQ6VXNlcjIxMjU1OTMx", + "avatar_url": "https://avatars.githubusercontent.com/u/21255931?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/patarapolw", + "html_url": "https://github.com/patarapolw", + "followers_url": "https://api.github.com/users/patarapolw/followers", + "following_url": "https://api.github.com/users/patarapolw/following{/other_user}", + "gists_url": "https://api.github.com/users/patarapolw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/patarapolw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/patarapolw/subscriptions", + "organizations_url": "https://api.github.com/users/patarapolw/orgs", + "repos_url": "https://api.github.com/users/patarapolw/repos", + "events_url": "https://api.github.com/users/patarapolw/events{/privacy}", + "received_events_url": "https://api.github.com/users/patarapolw/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/patarapolw/aloud", + "description": "A commenting engine. Aloud your comments.", + "fork": false, + "url": "https://api.github.com/repos/patarapolw/aloud", + "forks_url": "https://api.github.com/repos/patarapolw/aloud/forks", + "keys_url": "https://api.github.com/repos/patarapolw/aloud/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/patarapolw/aloud/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/patarapolw/aloud/teams", + "hooks_url": "https://api.github.com/repos/patarapolw/aloud/hooks", + "issue_events_url": "https://api.github.com/repos/patarapolw/aloud/issues/events{/number}", + "events_url": "https://api.github.com/repos/patarapolw/aloud/events", + "assignees_url": "https://api.github.com/repos/patarapolw/aloud/assignees{/user}", + "branches_url": "https://api.github.com/repos/patarapolw/aloud/branches{/branch}", + "tags_url": "https://api.github.com/repos/patarapolw/aloud/tags", + "blobs_url": "https://api.github.com/repos/patarapolw/aloud/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/patarapolw/aloud/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/patarapolw/aloud/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/patarapolw/aloud/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/patarapolw/aloud/statuses/{sha}", + "languages_url": "https://api.github.com/repos/patarapolw/aloud/languages", + "stargazers_url": "https://api.github.com/repos/patarapolw/aloud/stargazers", + "contributors_url": "https://api.github.com/repos/patarapolw/aloud/contributors", + "subscribers_url": "https://api.github.com/repos/patarapolw/aloud/subscribers", + "subscription_url": "https://api.github.com/repos/patarapolw/aloud/subscription", + "commits_url": "https://api.github.com/repos/patarapolw/aloud/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/patarapolw/aloud/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/patarapolw/aloud/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/patarapolw/aloud/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/patarapolw/aloud/contents/{+path}", + "compare_url": "https://api.github.com/repos/patarapolw/aloud/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/patarapolw/aloud/merges", + "archive_url": "https://api.github.com/repos/patarapolw/aloud/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/patarapolw/aloud/downloads", + "issues_url": "https://api.github.com/repos/patarapolw/aloud/issues{/number}", + "pulls_url": "https://api.github.com/repos/patarapolw/aloud/pulls{/number}", + "milestones_url": "https://api.github.com/repos/patarapolw/aloud/milestones{/number}", + "notifications_url": "https://api.github.com/repos/patarapolw/aloud/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/patarapolw/aloud/labels{/name}", + "releases_url": "https://api.github.com/repos/patarapolw/aloud/releases{/id}", + "deployments_url": "https://api.github.com/repos/patarapolw/aloud/deployments", + "created_at": "2020-01-30T19:22:39Z", + "updated_at": "2020-11-25T20:16:09Z", + "pushed_at": "2022-12-22T20:20:30Z", + "git_url": "git://github.com/patarapolw/aloud.git", + "ssh_url": "git@github.com:patarapolw/aloud.git", + "clone_url": "https://github.com/patarapolw/aloud.git", + "svn_url": "https://github.com/patarapolw/aloud", + "homepage": "https://aloud.polv.cc", + "size": 2525, + "stargazers_count": 6, + "watchers_count": 6, + "language": "Vue", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 53, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comment-system", + "firebase-auth", + "firebase-storage", + "markdown-it", + "mongodb" + ], + "visibility": "public", + "forks": 0, + "open_issues": 53, + "watchers": 6, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 1 +} diff --git a/apigh/2023-04-19/Aloud.commit b/apigh/2023-04-19/Aloud.commit new file mode 100644 index 00000000..fb94c315 --- /dev/null +++ b/apigh/2023-04-19/Aloud.commit @@ -0,0 +1,98 @@ +{ + "sha": "af8740e4dbd575e89ececf45e50ed18016337430", + "node_id": "MDY6Q29tbWl0MjM3Mjg3OTE3OmFmODc0MGU0ZGJkNTc1ZTg5ZWNlY2Y0NWU1MGVkMTgwMTYzMzc0MzA=", + "commit": { + "author": { + "name": "Pacharapol Withayasakpunt", + "email": "polv@polv.cc", + "date": "2020-06-24T11:27:04Z" + }, + "committer": { + "name": "Pacharapol Withayasakpunt", + "email": "polv@polv.cc", + "date": "2020-06-24T11:27:04Z" + }, + "message": "๐Ÿ› Fix: save change for now. postMessage isn't working.", + "tree": { + "sha": "505e3976de84e8537e1e17b3b2d46ec34330870e", + "url": "https://api.github.com/repos/patarapolw/aloud/git/trees/505e3976de84e8537e1e17b3b2d46ec34330870e" + }, + "url": "https://api.github.com/repos/patarapolw/aloud/git/commits/af8740e4dbd575e89ececf45e50ed18016337430", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/patarapolw/aloud/commits/af8740e4dbd575e89ececf45e50ed18016337430", + "html_url": "https://github.com/patarapolw/aloud/commit/af8740e4dbd575e89ececf45e50ed18016337430", + "comments_url": "https://api.github.com/repos/patarapolw/aloud/commits/af8740e4dbd575e89ececf45e50ed18016337430/comments", + "author": { + "login": "patarapolw", + "id": 21255931, + "node_id": "MDQ6VXNlcjIxMjU1OTMx", + "avatar_url": "https://avatars.githubusercontent.com/u/21255931?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/patarapolw", + "html_url": "https://github.com/patarapolw", + "followers_url": "https://api.github.com/users/patarapolw/followers", + "following_url": "https://api.github.com/users/patarapolw/following{/other_user}", + "gists_url": "https://api.github.com/users/patarapolw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/patarapolw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/patarapolw/subscriptions", + "organizations_url": "https://api.github.com/users/patarapolw/orgs", + "repos_url": "https://api.github.com/users/patarapolw/repos", + "events_url": "https://api.github.com/users/patarapolw/events{/privacy}", + "received_events_url": "https://api.github.com/users/patarapolw/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "patarapolw", + "id": 21255931, + "node_id": "MDQ6VXNlcjIxMjU1OTMx", + "avatar_url": "https://avatars.githubusercontent.com/u/21255931?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/patarapolw", + "html_url": "https://github.com/patarapolw", + "followers_url": "https://api.github.com/users/patarapolw/followers", + "following_url": "https://api.github.com/users/patarapolw/following{/other_user}", + "gists_url": "https://api.github.com/users/patarapolw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/patarapolw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/patarapolw/subscriptions", + "organizations_url": "https://api.github.com/users/patarapolw/orgs", + "repos_url": "https://api.github.com/users/patarapolw/repos", + "events_url": "https://api.github.com/users/patarapolw/events{/privacy}", + "received_events_url": "https://api.github.com/users/patarapolw/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "888b32573534d685fc0f48a08670bbe0e0d17ec1", + "url": "https://api.github.com/repos/patarapolw/aloud/commits/888b32573534d685fc0f48a08670bbe0e0d17ec1", + "html_url": "https://github.com/patarapolw/aloud/commit/888b32573534d685fc0f48a08670bbe0e0d17ec1" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "290185a8c1bb471df63ed5f6c658babc1e908e3c", + "filename": "packages/web/src/views/Comment.vue", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/patarapolw/aloud/blob/af8740e4dbd575e89ececf45e50ed18016337430/packages%2Fweb%2Fsrc%2Fviews%2FComment.vue", + "raw_url": "https://github.com/patarapolw/aloud/raw/af8740e4dbd575e89ececf45e50ed18016337430/packages%2Fweb%2Fsrc%2Fviews%2FComment.vue", + "contents_url": "https://api.github.com/repos/patarapolw/aloud/contents/packages%2Fweb%2Fsrc%2Fviews%2FComment.vue?ref=af8740e4dbd575e89ececf45e50ed18016337430", + "patch": "@@ -77,7 +77,7 @@ export default class Comment extends Vue {\n if (this.parent) {\n this.parent.postMessage({\n scrollHeight: this.$el.scrollHeight + 100\n- }, location.origin)\n+ }, this.parent.origin)\n }\n })\n }" + } + ] +} diff --git a/apigh/2023-04-19/Artalk b/apigh/2023-04-19/Artalk new file mode 100644 index 00000000..7e28c72b --- /dev/null +++ b/apigh/2023-04-19/Artalk @@ -0,0 +1,145 @@ +{ + "id": 151233668, + "node_id": "MDEwOlJlcG9zaXRvcnkxNTEyMzM2Njg=", + "name": "Artalk", + "full_name": "ArtalkJS/Artalk", + "private": false, + "owner": { + "login": "ArtalkJS", + "id": 76841221, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2ODQxMjIx", + "avatar_url": "https://avatars.githubusercontent.com/u/76841221?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ArtalkJS", + "html_url": "https://github.com/ArtalkJS", + "followers_url": "https://api.github.com/users/ArtalkJS/followers", + "following_url": "https://api.github.com/users/ArtalkJS/following{/other_user}", + "gists_url": "https://api.github.com/users/ArtalkJS/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ArtalkJS/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ArtalkJS/subscriptions", + "organizations_url": "https://api.github.com/users/ArtalkJS/orgs", + "repos_url": "https://api.github.com/users/ArtalkJS/repos", + "events_url": "https://api.github.com/users/ArtalkJS/events{/privacy}", + "received_events_url": "https://api.github.com/users/ArtalkJS/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/ArtalkJS/Artalk", + "description": "๐ŸŒŒ ่‡ชๆ‰˜็ฎก่ฏ„่ฎบ็ณป็ปŸ | Your self-hosted comment system", + "fork": false, + "url": "https://api.github.com/repos/ArtalkJS/Artalk", + "forks_url": "https://api.github.com/repos/ArtalkJS/Artalk/forks", + "keys_url": "https://api.github.com/repos/ArtalkJS/Artalk/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ArtalkJS/Artalk/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ArtalkJS/Artalk/teams", + "hooks_url": "https://api.github.com/repos/ArtalkJS/Artalk/hooks", + "issue_events_url": "https://api.github.com/repos/ArtalkJS/Artalk/issues/events{/number}", + "events_url": "https://api.github.com/repos/ArtalkJS/Artalk/events", + "assignees_url": "https://api.github.com/repos/ArtalkJS/Artalk/assignees{/user}", + "branches_url": "https://api.github.com/repos/ArtalkJS/Artalk/branches{/branch}", + "tags_url": "https://api.github.com/repos/ArtalkJS/Artalk/tags", + "blobs_url": "https://api.github.com/repos/ArtalkJS/Artalk/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ArtalkJS/Artalk/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ArtalkJS/Artalk/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ArtalkJS/Artalk/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ArtalkJS/Artalk/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ArtalkJS/Artalk/languages", + "stargazers_url": "https://api.github.com/repos/ArtalkJS/Artalk/stargazers", + "contributors_url": "https://api.github.com/repos/ArtalkJS/Artalk/contributors", + "subscribers_url": "https://api.github.com/repos/ArtalkJS/Artalk/subscribers", + "subscription_url": "https://api.github.com/repos/ArtalkJS/Artalk/subscription", + "commits_url": "https://api.github.com/repos/ArtalkJS/Artalk/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ArtalkJS/Artalk/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ArtalkJS/Artalk/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ArtalkJS/Artalk/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ArtalkJS/Artalk/contents/{+path}", + "compare_url": "https://api.github.com/repos/ArtalkJS/Artalk/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ArtalkJS/Artalk/merges", + "archive_url": "https://api.github.com/repos/ArtalkJS/Artalk/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ArtalkJS/Artalk/downloads", + "issues_url": "https://api.github.com/repos/ArtalkJS/Artalk/issues{/number}", + "pulls_url": "https://api.github.com/repos/ArtalkJS/Artalk/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ArtalkJS/Artalk/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ArtalkJS/Artalk/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ArtalkJS/Artalk/labels{/name}", + "releases_url": "https://api.github.com/repos/ArtalkJS/Artalk/releases{/id}", + "deployments_url": "https://api.github.com/repos/ArtalkJS/Artalk/deployments", + "created_at": "2018-10-02T09:53:12Z", + "updated_at": "2023-04-18T09:33:12Z", + "pushed_at": "2023-04-18T23:29:50Z", + "git_url": "git://github.com/ArtalkJS/Artalk.git", + "ssh_url": "git@github.com:ArtalkJS/Artalk.git", + "clone_url": "https://github.com/ArtalkJS/Artalk.git", + "svn_url": "https://github.com/ArtalkJS/Artalk", + "homepage": "https://artalk.js.org", + "size": 7550, + "stargazers_count": 754, + "watchers_count": 754, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": true, + "forks_count": 68, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 20, + "license": { + "key": "lgpl-3.0", + "name": "GNU Lesser General Public License v3.0", + "spdx_id": "LGPL-3.0", + "url": "https://api.github.com/licenses/lgpl-3.0", + "node_id": "MDc6TGljZW5zZTEy" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "blog", + "comment-system", + "comments", + "docker", + "golang", + "self-hosted", + "vanilla-js", + "vite" + ], + "visibility": "public", + "forks": 68, + "open_issues": 20, + "watchers": 754, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "ArtalkJS", + "id": 76841221, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2ODQxMjIx", + "avatar_url": "https://avatars.githubusercontent.com/u/76841221?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ArtalkJS", + "html_url": "https://github.com/ArtalkJS", + "followers_url": "https://api.github.com/users/ArtalkJS/followers", + "following_url": "https://api.github.com/users/ArtalkJS/following{/other_user}", + "gists_url": "https://api.github.com/users/ArtalkJS/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ArtalkJS/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ArtalkJS/subscriptions", + "organizations_url": "https://api.github.com/users/ArtalkJS/orgs", + "repos_url": "https://api.github.com/users/ArtalkJS/repos", + "events_url": "https://api.github.com/users/ArtalkJS/events{/privacy}", + "received_events_url": "https://api.github.com/users/ArtalkJS/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 68, + "subscribers_count": 6 +} diff --git a/apigh/2023-04-19/Artalk.commit b/apigh/2023-04-19/Artalk.commit new file mode 100644 index 00000000..7870f986 --- /dev/null +++ b/apigh/2023-04-19/Artalk.commit @@ -0,0 +1,98 @@ +{ + "sha": "e9acd28126ed9db406c0807a0202d12989c1a604", + "node_id": "C_kwDOCQOkhNoAKGU5YWNkMjgxMjZlZDlkYjQwNmMwODA3YTAyMDJkMTI5ODljMWE2MDQ", + "commit": { + "author": { + "name": "qwqcode", + "email": "qwqcode@gmail.com", + "date": "2023-04-09T12:51:27Z" + }, + "committer": { + "name": "qwqcode", + "email": "qwqcode@gmail.com", + "date": "2023-04-09T12:51:54Z" + }, + "message": "chore: update renovate.json\n\nSigned-off-by: qwqcode ", + "tree": { + "sha": "612c6727e883805e7641c2a454bbafad993561c0", + "url": "https://api.github.com/repos/ArtalkJS/Artalk/git/trees/612c6727e883805e7641c2a454bbafad993561c0" + }, + "url": "https://api.github.com/repos/ArtalkJS/Artalk/git/commits/e9acd28126ed9db406c0807a0202d12989c1a604", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niHUEABYKAB0WIQS0Ev3sdPZbHkWwzmLUbg8O6nwTagUCZDK06gAKCRDUbg8O6nwT\nato0AQCzzcsXl2Dtc1WCmLaUo/rtOIwJgEP+RDg5p3rllZzjYAD9EkkGfN+chZBV\nyE8tSojivfXOTpQE3Lzw1lZ4G68XKws=\n=IPwt\n-----END PGP SIGNATURE-----", + "payload": "tree 612c6727e883805e7641c2a454bbafad993561c0\nparent b71b22f5a7da5dc4248ec9e7d2e8eda43c038c9e\nauthor qwqcode 1681044687 +0800\ncommitter qwqcode 1681044714 +0800\n\nchore: update renovate.json\n\nSigned-off-by: qwqcode \n" + } + }, + "url": "https://api.github.com/repos/ArtalkJS/Artalk/commits/e9acd28126ed9db406c0807a0202d12989c1a604", + "html_url": "https://github.com/ArtalkJS/Artalk/commit/e9acd28126ed9db406c0807a0202d12989c1a604", + "comments_url": "https://api.github.com/repos/ArtalkJS/Artalk/commits/e9acd28126ed9db406c0807a0202d12989c1a604/comments", + "author": { + "login": "qwqcode", + "id": 22412567, + "node_id": "MDQ6VXNlcjIyNDEyNTY3", + "avatar_url": "https://avatars.githubusercontent.com/u/22412567?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/qwqcode", + "html_url": "https://github.com/qwqcode", + "followers_url": "https://api.github.com/users/qwqcode/followers", + "following_url": "https://api.github.com/users/qwqcode/following{/other_user}", + "gists_url": "https://api.github.com/users/qwqcode/gists{/gist_id}", + "starred_url": "https://api.github.com/users/qwqcode/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/qwqcode/subscriptions", + "organizations_url": "https://api.github.com/users/qwqcode/orgs", + "repos_url": "https://api.github.com/users/qwqcode/repos", + "events_url": "https://api.github.com/users/qwqcode/events{/privacy}", + "received_events_url": "https://api.github.com/users/qwqcode/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "qwqcode", + "id": 22412567, + "node_id": "MDQ6VXNlcjIyNDEyNTY3", + "avatar_url": "https://avatars.githubusercontent.com/u/22412567?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/qwqcode", + "html_url": "https://github.com/qwqcode", + "followers_url": "https://api.github.com/users/qwqcode/followers", + "following_url": "https://api.github.com/users/qwqcode/following{/other_user}", + "gists_url": "https://api.github.com/users/qwqcode/gists{/gist_id}", + "starred_url": "https://api.github.com/users/qwqcode/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/qwqcode/subscriptions", + "organizations_url": "https://api.github.com/users/qwqcode/orgs", + "repos_url": "https://api.github.com/users/qwqcode/repos", + "events_url": "https://api.github.com/users/qwqcode/events{/privacy}", + "received_events_url": "https://api.github.com/users/qwqcode/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "b71b22f5a7da5dc4248ec9e7d2e8eda43c038c9e", + "url": "https://api.github.com/repos/ArtalkJS/Artalk/commits/b71b22f5a7da5dc4248ec9e7d2e8eda43c038c9e", + "html_url": "https://github.com/ArtalkJS/Artalk/commit/b71b22f5a7da5dc4248ec9e7d2e8eda43c038c9e" + } + ], + "stats": { + "total": 6, + "additions": 5, + "deletions": 1 + }, + "files": [ + { + "sha": "0d3c98f11e8857509d3f54ec4e7e6520ee008c6d", + "filename": ".github/renovate.json", + "status": "modified", + "additions": 5, + "deletions": 1, + "changes": 6, + "blob_url": "https://github.com/ArtalkJS/Artalk/blob/e9acd28126ed9db406c0807a0202d12989c1a604/.github%2Frenovate.json", + "raw_url": "https://github.com/ArtalkJS/Artalk/raw/e9acd28126ed9db406c0807a0202d12989c1a604/.github%2Frenovate.json", + "contents_url": "https://api.github.com/repos/ArtalkJS/Artalk/contents/.github%2Frenovate.json?ref=e9acd28126ed9db406c0807a0202d12989c1a604", + "patch": "@@ -1,9 +1,13 @@\n {\n- \"extends\": [\"config:base\", \"schedule:weekly\"],\n+ \"extends\": [\"config:base\", \"schedule:monthly\"],\n \"automerge\": false,\n \"major\": {\n \"automerge\": false\n },\n+ \"vulnerabilityAlerts\": {\n+ \"enabled\": true\n+ },\n+ \"osvVulnerabilityAlerts\": true,\n \"branchPrefix\": \"chore/\",\n \"labels\": [\"dependencies\"],\n \"gomodTidy\": true," + } + ] +} diff --git a/apigh/2023-04-19/Commentator b/apigh/2023-04-19/Commentator new file mode 100644 index 00000000..91cfa4ac --- /dev/null +++ b/apigh/2023-04-19/Commentator @@ -0,0 +1,121 @@ +{ + "id": 310951645, + "node_id": "MDEwOlJlcG9zaXRvcnkzMTA5NTE2NDU=", + "name": "commentator", + "full_name": "mcorbin/commentator", + "private": false, + "owner": { + "login": "mcorbin", + "id": 4451204, + "node_id": "MDQ6VXNlcjQ0NTEyMDQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/4451204?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mcorbin", + "html_url": "https://github.com/mcorbin", + "followers_url": "https://api.github.com/users/mcorbin/followers", + "following_url": "https://api.github.com/users/mcorbin/following{/other_user}", + "gists_url": "https://api.github.com/users/mcorbin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mcorbin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mcorbin/subscriptions", + "organizations_url": "https://api.github.com/users/mcorbin/orgs", + "repos_url": "https://api.github.com/users/mcorbin/repos", + "events_url": "https://api.github.com/users/mcorbin/events{/privacy}", + "received_events_url": "https://api.github.com/users/mcorbin/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/mcorbin/commentator", + "description": "A simple commenting system for your blog.", + "fork": false, + "url": "https://api.github.com/repos/mcorbin/commentator", + "forks_url": "https://api.github.com/repos/mcorbin/commentator/forks", + "keys_url": "https://api.github.com/repos/mcorbin/commentator/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mcorbin/commentator/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mcorbin/commentator/teams", + "hooks_url": "https://api.github.com/repos/mcorbin/commentator/hooks", + "issue_events_url": "https://api.github.com/repos/mcorbin/commentator/issues/events{/number}", + "events_url": "https://api.github.com/repos/mcorbin/commentator/events", + "assignees_url": "https://api.github.com/repos/mcorbin/commentator/assignees{/user}", + "branches_url": "https://api.github.com/repos/mcorbin/commentator/branches{/branch}", + "tags_url": "https://api.github.com/repos/mcorbin/commentator/tags", + "blobs_url": "https://api.github.com/repos/mcorbin/commentator/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mcorbin/commentator/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mcorbin/commentator/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mcorbin/commentator/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mcorbin/commentator/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mcorbin/commentator/languages", + "stargazers_url": "https://api.github.com/repos/mcorbin/commentator/stargazers", + "contributors_url": "https://api.github.com/repos/mcorbin/commentator/contributors", + "subscribers_url": "https://api.github.com/repos/mcorbin/commentator/subscribers", + "subscription_url": "https://api.github.com/repos/mcorbin/commentator/subscription", + "commits_url": "https://api.github.com/repos/mcorbin/commentator/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mcorbin/commentator/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mcorbin/commentator/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mcorbin/commentator/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mcorbin/commentator/contents/{+path}", + "compare_url": "https://api.github.com/repos/mcorbin/commentator/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mcorbin/commentator/merges", + "archive_url": "https://api.github.com/repos/mcorbin/commentator/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mcorbin/commentator/downloads", + "issues_url": "https://api.github.com/repos/mcorbin/commentator/issues{/number}", + "pulls_url": "https://api.github.com/repos/mcorbin/commentator/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mcorbin/commentator/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mcorbin/commentator/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mcorbin/commentator/labels{/name}", + "releases_url": "https://api.github.com/repos/mcorbin/commentator/releases{/id}", + "deployments_url": "https://api.github.com/repos/mcorbin/commentator/deployments", + "created_at": "2020-11-07T23:37:36Z", + "updated_at": "2022-01-10T18:21:29Z", + "pushed_at": "2022-05-20T17:54:53Z", + "git_url": "git://github.com/mcorbin/commentator.git", + "ssh_url": "git@github.com:mcorbin/commentator.git", + "clone_url": "https://github.com/mcorbin/commentator.git", + "svn_url": "https://github.com/mcorbin/commentator", + "homepage": "", + "size": 7500, + "stargazers_count": 29, + "watchers_count": 29, + "language": "HTML", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 1, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "epl-2.0", + "name": "Eclipse Public License 2.0", + "spdx_id": "EPL-2.0", + "url": "https://api.github.com/licenses/epl-2.0", + "node_id": "MDc6TGljZW5zZTMy" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "blog", + "comment", + "commenting", + "s3" + ], + "visibility": "public", + "forks": 1, + "open_issues": 0, + "watchers": 29, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 1, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/Commentator.commit b/apigh/2023-04-19/Commentator.commit new file mode 100644 index 00000000..3487f5fd --- /dev/null +++ b/apigh/2023-04-19/Commentator.commit @@ -0,0 +1,98 @@ +{ + "sha": "25093372506d2f0e598f689e3f9e393e49f16732", + "node_id": "C_kwDOEoi-3doAKDI1MDkzMzcyNTA2ZDJmMGU1OThmNjg5ZTNmOWUzOTNlNDlmMTY3MzI", + "commit": { + "author": { + "name": "mcorbin", + "email": "corbin.math@gmail.com", + "date": "2022-05-20T17:50:35Z" + }, + "committer": { + "name": "mcorbin", + "email": "corbin.math@gmail.com", + "date": "2022-05-20T17:50:35Z" + }, + "message": "release v0.18.0", + "tree": { + "sha": "2642a22cc45b19e8fa33788d0c854fa978674d95", + "url": "https://api.github.com/repos/mcorbin/commentator/git/trees/2642a22cc45b19e8fa33788d0c854fa978674d95" + }, + "url": "https://api.github.com/repos/mcorbin/commentator/git/commits/25093372506d2f0e598f689e3f9e393e49f16732", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQEzBAABCgAdFiEEalk8tHHvjKu5JR0jrJr5GHtteWQFAmKH1OsACgkQrJr5GHtt\neWQhtggAths0GdArpSsVuk/SwMBxGo6llRS9f6OeghtyEz8c0xXm8QQUUO1Zf+Q3\n1A7F2ZqFcRrGySAjXW5TUf2yPN3PcOqFycb5TZsakN75BoVSx9hxyXT84hS/LduB\n3u47ONDtQPcKO2Du1xiXz0QMEx1nniTarIofMQgKMrRDt4tSRaYa7Bhgc/zuz2p8\nNUepR5sQma7f4wRHU6qUYvabIuxq8VdfN9UfpBerhJoxWp3Pu59J6iIuOCLKla6G\nC/QeF9++Mta1zHihpdtIJP5lJJgBqKYQtByRlr8TvWW3rA7IHBS/FEv0CUCpz3j7\nD1FUrOXgm2h6x72I+96J4XK4kZOscg==\n=A7jX\n-----END PGP SIGNATURE-----", + "payload": "tree 2642a22cc45b19e8fa33788d0c854fa978674d95\nparent 61620d12f602f1b651da2d7140bc4dcd0e09dca4\nauthor mcorbin 1653069035 +0200\ncommitter mcorbin 1653069035 +0200\n\nrelease v0.18.0\n" + } + }, + "url": "https://api.github.com/repos/mcorbin/commentator/commits/25093372506d2f0e598f689e3f9e393e49f16732", + "html_url": "https://github.com/mcorbin/commentator/commit/25093372506d2f0e598f689e3f9e393e49f16732", + "comments_url": "https://api.github.com/repos/mcorbin/commentator/commits/25093372506d2f0e598f689e3f9e393e49f16732/comments", + "author": { + "login": "mcorbin", + "id": 4451204, + "node_id": "MDQ6VXNlcjQ0NTEyMDQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/4451204?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mcorbin", + "html_url": "https://github.com/mcorbin", + "followers_url": "https://api.github.com/users/mcorbin/followers", + "following_url": "https://api.github.com/users/mcorbin/following{/other_user}", + "gists_url": "https://api.github.com/users/mcorbin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mcorbin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mcorbin/subscriptions", + "organizations_url": "https://api.github.com/users/mcorbin/orgs", + "repos_url": "https://api.github.com/users/mcorbin/repos", + "events_url": "https://api.github.com/users/mcorbin/events{/privacy}", + "received_events_url": "https://api.github.com/users/mcorbin/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "mcorbin", + "id": 4451204, + "node_id": "MDQ6VXNlcjQ0NTEyMDQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/4451204?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mcorbin", + "html_url": "https://github.com/mcorbin", + "followers_url": "https://api.github.com/users/mcorbin/followers", + "following_url": "https://api.github.com/users/mcorbin/following{/other_user}", + "gists_url": "https://api.github.com/users/mcorbin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mcorbin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mcorbin/subscriptions", + "organizations_url": "https://api.github.com/users/mcorbin/orgs", + "repos_url": "https://api.github.com/users/mcorbin/repos", + "events_url": "https://api.github.com/users/mcorbin/events{/privacy}", + "received_events_url": "https://api.github.com/users/mcorbin/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "61620d12f602f1b651da2d7140bc4dcd0e09dca4", + "url": "https://api.github.com/repos/mcorbin/commentator/commits/61620d12f602f1b651da2d7140bc4dcd0e09dca4", + "html_url": "https://github.com/mcorbin/commentator/commit/61620d12f602f1b651da2d7140bc4dcd0e09dca4" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "52ce456a05f7ae7ddea042720c533eb07e0aa986", + "filename": "project.clj", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/mcorbin/commentator/blob/25093372506d2f0e598f689e3f9e393e49f16732/project.clj", + "raw_url": "https://github.com/mcorbin/commentator/raw/25093372506d2f0e598f689e3f9e393e49f16732/project.clj", + "contents_url": "https://api.github.com/repos/mcorbin/commentator/contents/project.clj?ref=25093372506d2f0e598f689e3f9e393e49f16732", + "patch": "@@ -1,4 +1,4 @@\n-(defproject commentator \"0.17.0\"\n+(defproject commentator \"0.18.0\"\n :description \"A Free commenting system\"\n :url \"https://github.com/mcorbin/commentator\"\n :license {:name \"EPL-2.0\"" + } + ] +} diff --git a/apigh/2023-04-19/Cusdis b/apigh/2023-04-19/Cusdis new file mode 100644 index 00000000..6c30f46b --- /dev/null +++ b/apigh/2023-04-19/Cusdis @@ -0,0 +1,119 @@ +{ + "id": 358607805, + "node_id": "MDEwOlJlcG9zaXRvcnkzNTg2MDc4MDU=", + "name": "cusdis", + "full_name": "djyde/cusdis", + "private": false, + "owner": { + "login": "djyde", + "id": 914329, + "node_id": "MDQ6VXNlcjkxNDMyOQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/914329?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/djyde", + "html_url": "https://github.com/djyde", + "followers_url": "https://api.github.com/users/djyde/followers", + "following_url": "https://api.github.com/users/djyde/following{/other_user}", + "gists_url": "https://api.github.com/users/djyde/gists{/gist_id}", + "starred_url": "https://api.github.com/users/djyde/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/djyde/subscriptions", + "organizations_url": "https://api.github.com/users/djyde/orgs", + "repos_url": "https://api.github.com/users/djyde/repos", + "events_url": "https://api.github.com/users/djyde/events{/privacy}", + "received_events_url": "https://api.github.com/users/djyde/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/djyde/cusdis", + "description": "lightweight, privacy-friendly alternative to Disqus.", + "fork": false, + "url": "https://api.github.com/repos/djyde/cusdis", + "forks_url": "https://api.github.com/repos/djyde/cusdis/forks", + "keys_url": "https://api.github.com/repos/djyde/cusdis/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/djyde/cusdis/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/djyde/cusdis/teams", + "hooks_url": "https://api.github.com/repos/djyde/cusdis/hooks", + "issue_events_url": "https://api.github.com/repos/djyde/cusdis/issues/events{/number}", + "events_url": "https://api.github.com/repos/djyde/cusdis/events", + "assignees_url": "https://api.github.com/repos/djyde/cusdis/assignees{/user}", + "branches_url": "https://api.github.com/repos/djyde/cusdis/branches{/branch}", + "tags_url": "https://api.github.com/repos/djyde/cusdis/tags", + "blobs_url": "https://api.github.com/repos/djyde/cusdis/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/djyde/cusdis/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/djyde/cusdis/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/djyde/cusdis/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/djyde/cusdis/statuses/{sha}", + "languages_url": "https://api.github.com/repos/djyde/cusdis/languages", + "stargazers_url": "https://api.github.com/repos/djyde/cusdis/stargazers", + "contributors_url": "https://api.github.com/repos/djyde/cusdis/contributors", + "subscribers_url": "https://api.github.com/repos/djyde/cusdis/subscribers", + "subscription_url": "https://api.github.com/repos/djyde/cusdis/subscription", + "commits_url": "https://api.github.com/repos/djyde/cusdis/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/djyde/cusdis/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/djyde/cusdis/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/djyde/cusdis/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/djyde/cusdis/contents/{+path}", + "compare_url": "https://api.github.com/repos/djyde/cusdis/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/djyde/cusdis/merges", + "archive_url": "https://api.github.com/repos/djyde/cusdis/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/djyde/cusdis/downloads", + "issues_url": "https://api.github.com/repos/djyde/cusdis/issues{/number}", + "pulls_url": "https://api.github.com/repos/djyde/cusdis/pulls{/number}", + "milestones_url": "https://api.github.com/repos/djyde/cusdis/milestones{/number}", + "notifications_url": "https://api.github.com/repos/djyde/cusdis/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/djyde/cusdis/labels{/name}", + "releases_url": "https://api.github.com/repos/djyde/cusdis/releases{/id}", + "deployments_url": "https://api.github.com/repos/djyde/cusdis/deployments", + "created_at": "2021-04-16T13:26:27Z", + "updated_at": "2023-04-16T13:22:38Z", + "pushed_at": "2023-04-04T11:02:48Z", + "git_url": "git://github.com/djyde/cusdis.git", + "ssh_url": "git@github.com:djyde/cusdis.git", + "clone_url": "https://github.com/djyde/cusdis.git", + "svn_url": "https://github.com/djyde/cusdis", + "homepage": "https://cusdis.com", + "size": 6517, + "stargazers_count": 2244, + "watchers_count": 2244, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": true, + "forks_count": 158, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 85, + "license": { + "key": "gpl-3.0", + "name": "GNU General Public License v3.0", + "spdx_id": "GPL-3.0", + "url": "https://api.github.com/licenses/gpl-3.0", + "node_id": "MDc6TGljZW5zZTk=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comment-system", + "disqus" + ], + "visibility": "public", + "forks": 158, + "open_issues": 85, + "watchers": 2244, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 158, + "subscribers_count": 16 +} diff --git a/apigh/2023-04-19/Cusdis.commit b/apigh/2023-04-19/Cusdis.commit new file mode 100644 index 00000000..969be34d --- /dev/null +++ b/apigh/2023-04-19/Cusdis.commit @@ -0,0 +1,103 @@ +{ + "sha": "de05281af62437803dd524b0a35732d81f299327", + "node_id": "C_kwDOFV_rvdoAKGRlMDUyODFhZjYyNDM3ODAzZGQ1MjRiMGEzNTczMmQ4MWYyOTkzMjc", + "commit": { + "author": { + "name": "Randy", + "email": "randypriv@gmail.com", + "date": "2023-03-14T05:44:10Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-03-14T05:44:10Z" + }, + "message": "Merge pull request #242 from medokin/add-de-lang\n\nfeat(lang): add german translation", + "tree": { + "sha": "dabed79e0a55175779e699cfc588051317f659ec", + "url": "https://api.github.com/repos/djyde/cusdis/git/trees/dabed79e0a55175779e699cfc588051317f659ec" + }, + "url": "https://api.github.com/repos/djyde/cusdis/git/commits/de05281af62437803dd524b0a35732d81f299327", + "comment_count": 1, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJkEAmqCRBK7hj4Ov3rIwAAXA4IABRp+jqBLNfB+6lz5SB8ioJw\nit7foJToFJteEmbNZ6oopDMqQTDb9U/pPbGI0RdRqACqbO3k3hvHlPqDzTN+1QCm\nWIkrU4T1gcduLHFSC0xLypf95Nq0vrGF5xr+EA6kral7gxuoAGInhUW+o2XogGfc\n1MES5/Ca8Xeah39du6+T7O1+slwoOa2sFlfFIEXGdAMfWrhHgRZhqemP0fzZXKXt\nYI16P4TFCcv+Mylbx11ep4dWbj1JRSs6GUumYZJ7picVtPNmJvtO5BN8e0JXlIG0\nzWkN+l9j6kY31bPiqmEWv+KcFTdpgcmzTdmMeeRQyVIkObuyw6dIIjg80SFKHEU=\n=Ukwi\n-----END PGP SIGNATURE-----\n", + "payload": "tree dabed79e0a55175779e699cfc588051317f659ec\nparent 4936ad6b9c8f5b70887c5f8cedd68ddaec663bb0\nparent d549eb5c84771dc2b1e214d70f53e85ba5156048\nauthor Randy 1678772650 +0800\ncommitter GitHub 1678772650 +0800\n\nMerge pull request #242 from medokin/add-de-lang\n\nfeat(lang): add german translation" + } + }, + "url": "https://api.github.com/repos/djyde/cusdis/commits/de05281af62437803dd524b0a35732d81f299327", + "html_url": "https://github.com/djyde/cusdis/commit/de05281af62437803dd524b0a35732d81f299327", + "comments_url": "https://api.github.com/repos/djyde/cusdis/commits/de05281af62437803dd524b0a35732d81f299327/comments", + "author": { + "login": "djyde", + "id": 914329, + "node_id": "MDQ6VXNlcjkxNDMyOQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/914329?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/djyde", + "html_url": "https://github.com/djyde", + "followers_url": "https://api.github.com/users/djyde/followers", + "following_url": "https://api.github.com/users/djyde/following{/other_user}", + "gists_url": "https://api.github.com/users/djyde/gists{/gist_id}", + "starred_url": "https://api.github.com/users/djyde/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/djyde/subscriptions", + "organizations_url": "https://api.github.com/users/djyde/orgs", + "repos_url": "https://api.github.com/users/djyde/repos", + "events_url": "https://api.github.com/users/djyde/events{/privacy}", + "received_events_url": "https://api.github.com/users/djyde/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "4936ad6b9c8f5b70887c5f8cedd68ddaec663bb0", + "url": "https://api.github.com/repos/djyde/cusdis/commits/4936ad6b9c8f5b70887c5f8cedd68ddaec663bb0", + "html_url": "https://github.com/djyde/cusdis/commit/4936ad6b9c8f5b70887c5f8cedd68ddaec663bb0" + }, + { + "sha": "d549eb5c84771dc2b1e214d70f53e85ba5156048", + "url": "https://api.github.com/repos/djyde/cusdis/commits/d549eb5c84771dc2b1e214d70f53e85ba5156048", + "html_url": "https://github.com/djyde/cusdis/commit/d549eb5c84771dc2b1e214d70f53e85ba5156048" + } + ], + "stats": { + "total": 20, + "additions": 20, + "deletions": 0 + }, + "files": [ + { + "sha": "039d4fb2547a60f5e301011e162cde0929dbf428", + "filename": "widget/lang/de.js", + "status": "added", + "additions": 20, + "deletions": 0, + "changes": 20, + "blob_url": "https://github.com/djyde/cusdis/blob/de05281af62437803dd524b0a35732d81f299327/widget%2Flang%2Fde.js", + "raw_url": "https://github.com/djyde/cusdis/raw/de05281af62437803dd524b0a35732d81f299327/widget%2Flang%2Fde.js", + "contents_url": "https://api.github.com/repos/djyde/cusdis/contents/widget%2Flang%2Fde.js?ref=de05281af62437803dd524b0a35732d81f299327", + "patch": "@@ -0,0 +1,20 @@\n+window.CUSDIS_LOCALE= {\n+ powered_by: 'Kommentare powered by Cusdis',\n+ post_comment: 'Kommentare',\n+ loading: 'Lรคdt',\n+\n+ // comment\n+ email: 'Email (optional)',\n+ nickname: 'Spitzname',\n+ reply_placeholder: 'Antworten...',\n+ reply_btn: 'Antworten',\n+ sending: 'senden...',\n+\n+ // reply\n+ mod_badge: 'MOD',\n+ content_is_required: 'Inhalt ist erforderlich',\n+ nickname_is_required: 'Spitzname ist erforderlich',\n+\n+ comment_has_been_sent:\n+ 'Ihr Kommentar wurde abgeschickt. Bitte warten Sie auf die Bestรคtigung.',\n+}" + } + ] +} diff --git a/apigh/2023-04-19/SupaComments b/apigh/2023-04-19/SupaComments new file mode 100644 index 00000000..0ec150d8 --- /dev/null +++ b/apigh/2023-04-19/SupaComments @@ -0,0 +1,129 @@ +{ + "id": 479794704, + "node_id": "R_kgDOHJkWEA", + "name": "SupaComments", + "full_name": "mcnaveen/SupaComments", + "private": false, + "owner": { + "login": "mcnaveen", + "id": 8493007, + "node_id": "MDQ6VXNlcjg0OTMwMDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/8493007?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mcnaveen", + "html_url": "https://github.com/mcnaveen", + "followers_url": "https://api.github.com/users/mcnaveen/followers", + "following_url": "https://api.github.com/users/mcnaveen/following{/other_user}", + "gists_url": "https://api.github.com/users/mcnaveen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mcnaveen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mcnaveen/subscriptions", + "organizations_url": "https://api.github.com/users/mcnaveen/orgs", + "repos_url": "https://api.github.com/users/mcnaveen/repos", + "events_url": "https://api.github.com/users/mcnaveen/events{/privacy}", + "received_events_url": "https://api.github.com/users/mcnaveen/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/mcnaveen/SupaComments", + "description": "โšก A blazing fast, lightweight, and open source comment system for your static website, blogs powered by Supabase", + "fork": false, + "url": "https://api.github.com/repos/mcnaveen/SupaComments", + "forks_url": "https://api.github.com/repos/mcnaveen/SupaComments/forks", + "keys_url": "https://api.github.com/repos/mcnaveen/SupaComments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mcnaveen/SupaComments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mcnaveen/SupaComments/teams", + "hooks_url": "https://api.github.com/repos/mcnaveen/SupaComments/hooks", + "issue_events_url": "https://api.github.com/repos/mcnaveen/SupaComments/issues/events{/number}", + "events_url": "https://api.github.com/repos/mcnaveen/SupaComments/events", + "assignees_url": "https://api.github.com/repos/mcnaveen/SupaComments/assignees{/user}", + "branches_url": "https://api.github.com/repos/mcnaveen/SupaComments/branches{/branch}", + "tags_url": "https://api.github.com/repos/mcnaveen/SupaComments/tags", + "blobs_url": "https://api.github.com/repos/mcnaveen/SupaComments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mcnaveen/SupaComments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mcnaveen/SupaComments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mcnaveen/SupaComments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mcnaveen/SupaComments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mcnaveen/SupaComments/languages", + "stargazers_url": "https://api.github.com/repos/mcnaveen/SupaComments/stargazers", + "contributors_url": "https://api.github.com/repos/mcnaveen/SupaComments/contributors", + "subscribers_url": "https://api.github.com/repos/mcnaveen/SupaComments/subscribers", + "subscription_url": "https://api.github.com/repos/mcnaveen/SupaComments/subscription", + "commits_url": "https://api.github.com/repos/mcnaveen/SupaComments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mcnaveen/SupaComments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mcnaveen/SupaComments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mcnaveen/SupaComments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mcnaveen/SupaComments/contents/{+path}", + "compare_url": "https://api.github.com/repos/mcnaveen/SupaComments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mcnaveen/SupaComments/merges", + "archive_url": "https://api.github.com/repos/mcnaveen/SupaComments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mcnaveen/SupaComments/downloads", + "issues_url": "https://api.github.com/repos/mcnaveen/SupaComments/issues{/number}", + "pulls_url": "https://api.github.com/repos/mcnaveen/SupaComments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mcnaveen/SupaComments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mcnaveen/SupaComments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mcnaveen/SupaComments/labels{/name}", + "releases_url": "https://api.github.com/repos/mcnaveen/SupaComments/releases{/id}", + "deployments_url": "https://api.github.com/repos/mcnaveen/SupaComments/deployments", + "created_at": "2022-04-09T17:18:07Z", + "updated_at": "2023-04-15T12:54:11Z", + "pushed_at": "2023-03-30T21:25:09Z", + "git_url": "git://github.com/mcnaveen/SupaComments.git", + "ssh_url": "git@github.com:mcnaveen/SupaComments.git", + "clone_url": "https://github.com/mcnaveen/SupaComments.git", + "svn_url": "https://github.com/mcnaveen/SupaComments", + "homepage": "https://supacomments.vercel.app/?ref=github-repo", + "size": 269, + "stargazers_count": 116, + "watchers_count": 116, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 10, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 13, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "blog", + "comment-system", + "comments-widget", + "gatsby", + "hugo", + "jekyll", + "producthunt", + "supabase", + "supabase-client", + "supabase-js", + "svelte", + "tailwindcss" + ], + "visibility": "public", + "forks": 10, + "open_issues": 13, + "watchers": 116, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 10, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/SupaComments.commit b/apigh/2023-04-19/SupaComments.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-19/SupaComments.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-19/Twikoo b/apigh/2023-04-19/Twikoo new file mode 100644 index 00000000..349ef828 --- /dev/null +++ b/apigh/2023-04-19/Twikoo @@ -0,0 +1,124 @@ +{ + "id": 266566637, + "node_id": "MDEwOlJlcG9zaXRvcnkyNjY1NjY2Mzc=", + "name": "twikoo", + "full_name": "imaegoo/twikoo", + "private": false, + "owner": { + "login": "imaegoo", + "id": 20182252, + "node_id": "MDQ6VXNlcjIwMTgyMjUy", + "avatar_url": "https://avatars.githubusercontent.com/u/20182252?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/imaegoo", + "html_url": "https://github.com/imaegoo", + "followers_url": "https://api.github.com/users/imaegoo/followers", + "following_url": "https://api.github.com/users/imaegoo/following{/other_user}", + "gists_url": "https://api.github.com/users/imaegoo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/imaegoo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/imaegoo/subscriptions", + "organizations_url": "https://api.github.com/users/imaegoo/orgs", + "repos_url": "https://api.github.com/users/imaegoo/repos", + "events_url": "https://api.github.com/users/imaegoo/events{/privacy}", + "received_events_url": "https://api.github.com/users/imaegoo/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/imaegoo/twikoo", + "description": "๐Ÿ’ฌ ไธ€ไธช็ฎ€ๆดใ€ๅฎ‰ๅ…จใ€ๅ…่ดน็š„้™ๆ€็ฝ‘็ซ™่ฏ„่ฎบ็ณป็ปŸ | A simple, safe, free comment system.", + "fork": false, + "url": "https://api.github.com/repos/imaegoo/twikoo", + "forks_url": "https://api.github.com/repos/imaegoo/twikoo/forks", + "keys_url": "https://api.github.com/repos/imaegoo/twikoo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/imaegoo/twikoo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/imaegoo/twikoo/teams", + "hooks_url": "https://api.github.com/repos/imaegoo/twikoo/hooks", + "issue_events_url": "https://api.github.com/repos/imaegoo/twikoo/issues/events{/number}", + "events_url": "https://api.github.com/repos/imaegoo/twikoo/events", + "assignees_url": "https://api.github.com/repos/imaegoo/twikoo/assignees{/user}", + "branches_url": "https://api.github.com/repos/imaegoo/twikoo/branches{/branch}", + "tags_url": "https://api.github.com/repos/imaegoo/twikoo/tags", + "blobs_url": "https://api.github.com/repos/imaegoo/twikoo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/imaegoo/twikoo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/imaegoo/twikoo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/imaegoo/twikoo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/imaegoo/twikoo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/imaegoo/twikoo/languages", + "stargazers_url": "https://api.github.com/repos/imaegoo/twikoo/stargazers", + "contributors_url": "https://api.github.com/repos/imaegoo/twikoo/contributors", + "subscribers_url": "https://api.github.com/repos/imaegoo/twikoo/subscribers", + "subscription_url": "https://api.github.com/repos/imaegoo/twikoo/subscription", + "commits_url": "https://api.github.com/repos/imaegoo/twikoo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/imaegoo/twikoo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/imaegoo/twikoo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/imaegoo/twikoo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/imaegoo/twikoo/contents/{+path}", + "compare_url": "https://api.github.com/repos/imaegoo/twikoo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/imaegoo/twikoo/merges", + "archive_url": "https://api.github.com/repos/imaegoo/twikoo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/imaegoo/twikoo/downloads", + "issues_url": "https://api.github.com/repos/imaegoo/twikoo/issues{/number}", + "pulls_url": "https://api.github.com/repos/imaegoo/twikoo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/imaegoo/twikoo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/imaegoo/twikoo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/imaegoo/twikoo/labels{/name}", + "releases_url": "https://api.github.com/repos/imaegoo/twikoo/releases{/id}", + "deployments_url": "https://api.github.com/repos/imaegoo/twikoo/deployments", + "created_at": "2020-05-24T15:13:26Z", + "updated_at": "2023-04-18T09:35:35Z", + "pushed_at": "2023-04-17T07:52:28Z", + "git_url": "git://github.com/imaegoo/twikoo.git", + "ssh_url": "git@github.com:imaegoo/twikoo.git", + "clone_url": "https://github.com/imaegoo/twikoo.git", + "svn_url": "https://github.com/imaegoo/twikoo", + "homepage": "https://twikoo.js.org", + "size": 1236, + "stargazers_count": 859, + "watchers_count": 859, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": true, + "forks_count": 146, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 110, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "cloudbase", + "comment", + "comment-system", + "hexo", + "twikoojs", + "vercel", + "vue" + ], + "visibility": "public", + "forks": 146, + "open_issues": 110, + "watchers": 859, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 146, + "subscribers_count": 7 +} diff --git a/apigh/2023-04-19/Twikoo.commit b/apigh/2023-04-19/Twikoo.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-19/Twikoo.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-19/Waline b/apigh/2023-04-19/Waline new file mode 100644 index 00000000..da76763a --- /dev/null +++ b/apigh/2023-04-19/Waline @@ -0,0 +1,157 @@ +{ + "id": 308829430, + "node_id": "MDEwOlJlcG9zaXRvcnkzMDg4Mjk0MzA=", + "name": "waline", + "full_name": "walinejs/waline", + "private": false, + "owner": { + "login": "walinejs", + "id": 76174058, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2MTc0MDU4", + "avatar_url": "https://avatars.githubusercontent.com/u/76174058?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walinejs", + "html_url": "https://github.com/walinejs", + "followers_url": "https://api.github.com/users/walinejs/followers", + "following_url": "https://api.github.com/users/walinejs/following{/other_user}", + "gists_url": "https://api.github.com/users/walinejs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walinejs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walinejs/subscriptions", + "organizations_url": "https://api.github.com/users/walinejs/orgs", + "repos_url": "https://api.github.com/users/walinejs/repos", + "events_url": "https://api.github.com/users/walinejs/events{/privacy}", + "received_events_url": "https://api.github.com/users/walinejs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/walinejs/waline", + "description": "๐Ÿ’ฌ A Simple, Safe Comment System", + "fork": false, + "url": "https://api.github.com/repos/walinejs/waline", + "forks_url": "https://api.github.com/repos/walinejs/waline/forks", + "keys_url": "https://api.github.com/repos/walinejs/waline/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/walinejs/waline/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/walinejs/waline/teams", + "hooks_url": "https://api.github.com/repos/walinejs/waline/hooks", + "issue_events_url": "https://api.github.com/repos/walinejs/waline/issues/events{/number}", + "events_url": "https://api.github.com/repos/walinejs/waline/events", + "assignees_url": "https://api.github.com/repos/walinejs/waline/assignees{/user}", + "branches_url": "https://api.github.com/repos/walinejs/waline/branches{/branch}", + "tags_url": "https://api.github.com/repos/walinejs/waline/tags", + "blobs_url": "https://api.github.com/repos/walinejs/waline/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/walinejs/waline/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/walinejs/waline/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/walinejs/waline/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/walinejs/waline/statuses/{sha}", + "languages_url": "https://api.github.com/repos/walinejs/waline/languages", + "stargazers_url": "https://api.github.com/repos/walinejs/waline/stargazers", + "contributors_url": "https://api.github.com/repos/walinejs/waline/contributors", + "subscribers_url": "https://api.github.com/repos/walinejs/waline/subscribers", + "subscription_url": "https://api.github.com/repos/walinejs/waline/subscription", + "commits_url": "https://api.github.com/repos/walinejs/waline/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/walinejs/waline/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/walinejs/waline/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/walinejs/waline/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/walinejs/waline/contents/{+path}", + "compare_url": "https://api.github.com/repos/walinejs/waline/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/walinejs/waline/merges", + "archive_url": "https://api.github.com/repos/walinejs/waline/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/walinejs/waline/downloads", + "issues_url": "https://api.github.com/repos/walinejs/waline/issues{/number}", + "pulls_url": "https://api.github.com/repos/walinejs/waline/pulls{/number}", + "milestones_url": "https://api.github.com/repos/walinejs/waline/milestones{/number}", + "notifications_url": "https://api.github.com/repos/walinejs/waline/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/walinejs/waline/labels{/name}", + "releases_url": "https://api.github.com/repos/walinejs/waline/releases{/id}", + "deployments_url": "https://api.github.com/repos/walinejs/waline/deployments", + "created_at": "2020-10-31T07:37:33Z", + "updated_at": "2023-04-17T10:03:58Z", + "pushed_at": "2023-04-18T10:41:45Z", + "git_url": "git://github.com/walinejs/waline.git", + "ssh_url": "git@github.com:walinejs/waline.git", + "clone_url": "https://github.com/walinejs/waline.git", + "svn_url": "https://github.com/walinejs/waline", + "homepage": "https://waline.js.org/en/", + "size": 55309, + "stargazers_count": 1420, + "watchers_count": 1420, + "language": "JavaScript", + "has_issues": true, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": true, + "forks_count": 266, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 28, + "license": { + "key": "gpl-2.0", + "name": "GNU General Public License v2.0", + "spdx_id": "GPL-2.0", + "url": "https://api.github.com/licenses/gpl-2.0", + "node_id": "MDc6TGljZW5zZTg=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "aliyun", + "baidu", + "blog", + "cloudbase", + "comment", + "comment-system", + "deta", + "disqus", + "leancloud", + "mongodb", + "mysql", + "netlify", + "postgresql", + "railway", + "self-hosted", + "sqlite", + "tidb", + "valine", + "vercel", + "zeabur" + ], + "visibility": "public", + "forks": 266, + "open_issues": 28, + "watchers": 1420, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "walinejs", + "id": 76174058, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc2MTc0MDU4", + "avatar_url": "https://avatars.githubusercontent.com/u/76174058?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/walinejs", + "html_url": "https://github.com/walinejs", + "followers_url": "https://api.github.com/users/walinejs/followers", + "following_url": "https://api.github.com/users/walinejs/following{/other_user}", + "gists_url": "https://api.github.com/users/walinejs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/walinejs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/walinejs/subscriptions", + "organizations_url": "https://api.github.com/users/walinejs/orgs", + "repos_url": "https://api.github.com/users/walinejs/repos", + "events_url": "https://api.github.com/users/walinejs/events{/privacy}", + "received_events_url": "https://api.github.com/users/walinejs/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 266, + "subscribers_count": 12 +} diff --git a/apigh/2023-04-19/Waline.commit b/apigh/2023-04-19/Waline.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-19/Waline.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-19/ajax_comments b/apigh/2023-04-19/ajax_comments new file mode 100644 index 00000000..509598c1 --- /dev/null +++ b/apigh/2023-04-19/ajax_comments @@ -0,0 +1,112 @@ +{ + "id": 102229556, + "node_id": "MDEwOlJlcG9zaXRvcnkxMDIyMjk1NTY=", + "name": "AJAX-Comments-System", + "full_name": "MaksimSergeev/AJAX-Comments-System", + "private": false, + "owner": { + "login": "MaksimSergeev", + "id": 16987415, + "node_id": "MDQ6VXNlcjE2OTg3NDE1", + "avatar_url": "https://avatars.githubusercontent.com/u/16987415?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MaksimSergeev", + "html_url": "https://github.com/MaksimSergeev", + "followers_url": "https://api.github.com/users/MaksimSergeev/followers", + "following_url": "https://api.github.com/users/MaksimSergeev/following{/other_user}", + "gists_url": "https://api.github.com/users/MaksimSergeev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MaksimSergeev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MaksimSergeev/subscriptions", + "organizations_url": "https://api.github.com/users/MaksimSergeev/orgs", + "repos_url": "https://api.github.com/users/MaksimSergeev/repos", + "events_url": "https://api.github.com/users/MaksimSergeev/events{/privacy}", + "received_events_url": "https://api.github.com/users/MaksimSergeev/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/MaksimSergeev/AJAX-Comments-System", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System", + "forks_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/forks", + "keys_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/teams", + "hooks_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/hooks", + "issue_events_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/issues/events{/number}", + "events_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/events", + "assignees_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/assignees{/user}", + "branches_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/branches{/branch}", + "tags_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/tags", + "blobs_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/languages", + "stargazers_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/stargazers", + "contributors_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/contributors", + "subscribers_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/subscribers", + "subscription_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/subscription", + "commits_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/contents/{+path}", + "compare_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/merges", + "archive_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/downloads", + "issues_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/issues{/number}", + "pulls_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/labels{/name}", + "releases_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/releases{/id}", + "deployments_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/deployments", + "created_at": "2017-09-02T23:37:33Z", + "updated_at": "2018-07-18T14:13:33Z", + "pushed_at": "2017-09-10T23:06:04Z", + "git_url": "git://github.com/MaksimSergeev/AJAX-Comments-System.git", + "ssh_url": "git@github.com:MaksimSergeev/AJAX-Comments-System.git", + "clone_url": "https://github.com/MaksimSergeev/AJAX-Comments-System.git", + "svn_url": "https://github.com/MaksimSergeev/AJAX-Comments-System", + "homepage": null, + "size": 40, + "stargazers_count": 1, + "watchers_count": 1, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/ajax_comments.commit b/apigh/2023-04-19/ajax_comments.commit new file mode 100644 index 00000000..d904f6d7 --- /dev/null +++ b/apigh/2023-04-19/ajax_comments.commit @@ -0,0 +1,158 @@ +{ + "sha": "c593555b39845d11726f43e2bdcfbca1947e205a", + "node_id": "MDY6Q29tbWl0MTAyMjI5NTU2OmM1OTM1NTViMzk4NDVkMTE3MjZmNDNlMmJkY2ZiY2ExOTQ3ZTIwNWE=", + "commit": { + "author": { + "name": "Maksim Sergeev", + "email": "hydroid89@gmail.com", + "date": "2017-09-10T23:05:59Z" + }, + "committer": { + "name": "Maksim Sergeev", + "email": "hydroid89@gmail.com", + "date": "2017-09-10T23:05:59Z" + }, + "message": "5", + "tree": { + "sha": "d9f7aa331b9141b32a4c0fddb3c5f98609608f60", + "url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/git/trees/d9f7aa331b9141b32a4c0fddb3c5f98609608f60" + }, + "url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/git/commits/c593555b39845d11726f43e2bdcfbca1947e205a", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/commits/c593555b39845d11726f43e2bdcfbca1947e205a", + "html_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/commit/c593555b39845d11726f43e2bdcfbca1947e205a", + "comments_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/commits/c593555b39845d11726f43e2bdcfbca1947e205a/comments", + "author": { + "login": "MaksimSergeev", + "id": 16987415, + "node_id": "MDQ6VXNlcjE2OTg3NDE1", + "avatar_url": "https://avatars.githubusercontent.com/u/16987415?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MaksimSergeev", + "html_url": "https://github.com/MaksimSergeev", + "followers_url": "https://api.github.com/users/MaksimSergeev/followers", + "following_url": "https://api.github.com/users/MaksimSergeev/following{/other_user}", + "gists_url": "https://api.github.com/users/MaksimSergeev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MaksimSergeev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MaksimSergeev/subscriptions", + "organizations_url": "https://api.github.com/users/MaksimSergeev/orgs", + "repos_url": "https://api.github.com/users/MaksimSergeev/repos", + "events_url": "https://api.github.com/users/MaksimSergeev/events{/privacy}", + "received_events_url": "https://api.github.com/users/MaksimSergeev/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "MaksimSergeev", + "id": 16987415, + "node_id": "MDQ6VXNlcjE2OTg3NDE1", + "avatar_url": "https://avatars.githubusercontent.com/u/16987415?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MaksimSergeev", + "html_url": "https://github.com/MaksimSergeev", + "followers_url": "https://api.github.com/users/MaksimSergeev/followers", + "following_url": "https://api.github.com/users/MaksimSergeev/following{/other_user}", + "gists_url": "https://api.github.com/users/MaksimSergeev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MaksimSergeev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MaksimSergeev/subscriptions", + "organizations_url": "https://api.github.com/users/MaksimSergeev/orgs", + "repos_url": "https://api.github.com/users/MaksimSergeev/repos", + "events_url": "https://api.github.com/users/MaksimSergeev/events{/privacy}", + "received_events_url": "https://api.github.com/users/MaksimSergeev/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "e6fdaf5ceb1c142665226573bbe991e605506a6f", + "url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/commits/e6fdaf5ceb1c142665226573bbe991e605506a6f", + "html_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/commit/e6fdaf5ceb1c142665226573bbe991e605506a6f" + } + ], + "stats": { + "total": 37, + "additions": 17, + "deletions": 20 + }, + "files": [ + { + "sha": "cf71e006a737dc7c1c47b91f844388e4f38fa248", + "filename": "Comment.php", + "status": "modified", + "additions": 8, + "deletions": 13, + "changes": 21, + "blob_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/blob/c593555b39845d11726f43e2bdcfbca1947e205a/Comment.php", + "raw_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/raw/c593555b39845d11726f43e2bdcfbca1947e205a/Comment.php", + "contents_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/contents/Comment.php?ref=c593555b39845d11726f43e2bdcfbca1947e205a", + "patch": "@@ -1,17 +1,14 @@\n data = $row;\n }\n \n //\tThis method outputs the XHTML markup of the comment:\n- public function markup()\n- {\n+ public function markup() {\n // Setting up an alias, so we don't have to write $this->data every time:\n $d = &$this->data;\n \n@@ -35,8 +32,7 @@ public function markup()\n }\n \n // This method is used to validate the data sent via AJAX:\n- public static function validate(&$arr)\n- {\n+ public static function validate(&$arr) {\n \n $errors = array();\n $data = array();\n@@ -71,8 +67,8 @@ public static function validate(&$arr)\n \n return true;\n }\n- public static function validateEdit(&$arr)\n- {\n+ \n+ public static function validateEdit(&$arr) {\n \n $errors = array();\n $data = array();\n@@ -97,11 +93,10 @@ public static function validateEdit(&$arr)\n }\n \n //\tThis method is used internally FILTER_CALLBACK:\n- private static function validate_text($str)\n- {\n+ private static function validate_text($str) {\n+ \n if (mb_strlen($str, 'utf8') < 1)\n return false;\n-\n // Encode all html special characters (<, >, \", & .. etc) and convert\n // the new line characters to
tags:\n $str = nl2br(htmlspecialchars($str));" + }, + { + "sha": "ef7e9dfb6c4d1a55691be8fde8a1ce79b049207e", + "filename": "Db.php", + "status": "modified", + "additions": 3, + "deletions": 4, + "changes": 7, + "blob_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/blob/c593555b39845d11726f43e2bdcfbca1947e205a/Db.php", + "raw_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/raw/c593555b39845d11726f43e2bdcfbca1947e205a/Db.php", + "contents_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/contents/Db.php?ref=c593555b39845d11726f43e2bdcfbca1947e205a", + "patch": "@@ -1,8 +1,7 @@\n beginTransaction();\n- $stmt = $db->prepare(\"SELECT body FROM comments WHERE id = '\".$_POST[\"com_id\"].\"'\");\n+ $stmt = $db->prepare(\"SELECT body FROM comments WHERE id = :id\");\n+ $stmt->bindParam(':id', $_POST[\"com_id\"], PDO::PARAM_INT);\n $stmt->execute();\n $result = $stmt->fetchAll();\n foreach ($result as $row) {" + }, + { + "sha": "381433ec6df26cd1069443b8043a9b1e38e65b7e", + "filename": "sort.php", + "status": "modified", + "additions": 1, + "deletions": 0, + "changes": 1, + "blob_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/blob/c593555b39845d11726f43e2bdcfbca1947e205a/sort.php", + "raw_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/raw/c593555b39845d11726f43e2bdcfbca1947e205a/sort.php", + "contents_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/contents/sort.php?ref=c593555b39845d11726f43e2bdcfbca1947e205a", + "patch": "@@ -7,6 +7,7 @@\n $db = Db::getConnection();\n $query = \"SELECT * FROM comments ORDER BY \";\n \n+ //probably bad practice :(\n //switch key for query:\n switch ($_POST[\"sort_id\"]) {\n case 'Name A-Z': $query .= \"name ASC\";" + }, + { + "sha": "3a3ca0c3a3fc46d06df32fe62d34d22875d4571a", + "filename": "submit.php", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/blob/c593555b39845d11726f43e2bdcfbca1947e205a/submit.php", + "raw_url": "https://github.com/MaksimSergeev/AJAX-Comments-System/raw/c593555b39845d11726f43e2bdcfbca1947e205a/submit.php", + "contents_url": "https://api.github.com/repos/MaksimSergeev/AJAX-Comments-System/contents/submit.php?ref=c593555b39845d11726f43e2bdcfbca1947e205a", + "patch": "@@ -5,8 +5,8 @@\n $arr = array();\n $validates = Comment::validate($arr);\n \n-if($validates)\n-{\n+if($validates) {\n+\t\n \t//Insert to database\n $db = Db::getConnection();\n $db -> beginTransaction();" + } + ] +} diff --git a/apigh/2023-04-19/chatter b/apigh/2023-04-19/chatter new file mode 100644 index 00000000..c8235a94 --- /dev/null +++ b/apigh/2023-04-19/chatter @@ -0,0 +1,123 @@ +{ + "id": 119311750, + "node_id": "MDEwOlJlcG9zaXRvcnkxMTkzMTE3NTA=", + "name": "chatter", + "full_name": "joealcorn/chatter", + "private": false, + "owner": { + "login": "joealcorn", + "id": 1097349, + "node_id": "MDQ6VXNlcjEwOTczNDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1097349?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joealcorn", + "html_url": "https://github.com/joealcorn", + "followers_url": "https://api.github.com/users/joealcorn/followers", + "following_url": "https://api.github.com/users/joealcorn/following{/other_user}", + "gists_url": "https://api.github.com/users/joealcorn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joealcorn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joealcorn/subscriptions", + "organizations_url": "https://api.github.com/users/joealcorn/orgs", + "repos_url": "https://api.github.com/users/joealcorn/repos", + "events_url": "https://api.github.com/users/joealcorn/events{/privacy}", + "received_events_url": "https://api.github.com/users/joealcorn/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/joealcorn/chatter", + "description": "Serverless comments for any website", + "fork": false, + "url": "https://api.github.com/repos/joealcorn/chatter", + "forks_url": "https://api.github.com/repos/joealcorn/chatter/forks", + "keys_url": "https://api.github.com/repos/joealcorn/chatter/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/joealcorn/chatter/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/joealcorn/chatter/teams", + "hooks_url": "https://api.github.com/repos/joealcorn/chatter/hooks", + "issue_events_url": "https://api.github.com/repos/joealcorn/chatter/issues/events{/number}", + "events_url": "https://api.github.com/repos/joealcorn/chatter/events", + "assignees_url": "https://api.github.com/repos/joealcorn/chatter/assignees{/user}", + "branches_url": "https://api.github.com/repos/joealcorn/chatter/branches{/branch}", + "tags_url": "https://api.github.com/repos/joealcorn/chatter/tags", + "blobs_url": "https://api.github.com/repos/joealcorn/chatter/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/joealcorn/chatter/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/joealcorn/chatter/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/joealcorn/chatter/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/joealcorn/chatter/statuses/{sha}", + "languages_url": "https://api.github.com/repos/joealcorn/chatter/languages", + "stargazers_url": "https://api.github.com/repos/joealcorn/chatter/stargazers", + "contributors_url": "https://api.github.com/repos/joealcorn/chatter/contributors", + "subscribers_url": "https://api.github.com/repos/joealcorn/chatter/subscribers", + "subscription_url": "https://api.github.com/repos/joealcorn/chatter/subscription", + "commits_url": "https://api.github.com/repos/joealcorn/chatter/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/joealcorn/chatter/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/joealcorn/chatter/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/joealcorn/chatter/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/joealcorn/chatter/contents/{+path}", + "compare_url": "https://api.github.com/repos/joealcorn/chatter/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/joealcorn/chatter/merges", + "archive_url": "https://api.github.com/repos/joealcorn/chatter/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/joealcorn/chatter/downloads", + "issues_url": "https://api.github.com/repos/joealcorn/chatter/issues{/number}", + "pulls_url": "https://api.github.com/repos/joealcorn/chatter/pulls{/number}", + "milestones_url": "https://api.github.com/repos/joealcorn/chatter/milestones{/number}", + "notifications_url": "https://api.github.com/repos/joealcorn/chatter/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/joealcorn/chatter/labels{/name}", + "releases_url": "https://api.github.com/repos/joealcorn/chatter/releases{/id}", + "deployments_url": "https://api.github.com/repos/joealcorn/chatter/deployments", + "created_at": "2018-01-29T00:34:38Z", + "updated_at": "2020-12-13T21:56:00Z", + "pushed_at": "2018-11-22T21:04:15Z", + "git_url": "git://github.com/joealcorn/chatter.git", + "ssh_url": "git@github.com:joealcorn/chatter.git", + "clone_url": "https://github.com/joealcorn/chatter.git", + "svn_url": "https://github.com/joealcorn/chatter", + "homepage": "https://joealcorn.github.io/chatter/", + "size": 18, + "stargazers_count": 8, + "watchers_count": 8, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "aws", + "aws-lambda", + "commenting", + "lambda", + "serverless", + "zappa" + ], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 8, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/chatter.commit b/apigh/2023-04-19/chatter.commit new file mode 100644 index 00000000..1c20b56b --- /dev/null +++ b/apigh/2023-04-19/chatter.commit @@ -0,0 +1,98 @@ +{ + "sha": "5c805e618bb53aae6308615227a6bdfd8a44ef1b", + "node_id": "MDY6Q29tbWl0MTE5MzExNzUwOjVjODA1ZTYxOGJiNTNhYWU2MzA4NjE1MjI3YTZiZGZkOGE0NGVmMWI=", + "commit": { + "author": { + "name": "Joe Alcorn", + "email": "joealcorn123@gmail.com", + "date": "2018-05-09T21:06:50Z" + }, + "committer": { + "name": "Joe Alcorn", + "email": "joealcorn123@gmail.com", + "date": "2018-05-09T21:06:50Z" + }, + "message": "Add MIT licence", + "tree": { + "sha": "366960a4b0dfbed279494fe5c40651dc815d52d1", + "url": "https://api.github.com/repos/joealcorn/chatter/git/trees/366960a4b0dfbed279494fe5c40651dc815d52d1" + }, + "url": "https://api.github.com/repos/joealcorn/chatter/git/commits/5c805e618bb53aae6308615227a6bdfd8a44ef1b", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/joealcorn/chatter/commits/5c805e618bb53aae6308615227a6bdfd8a44ef1b", + "html_url": "https://github.com/joealcorn/chatter/commit/5c805e618bb53aae6308615227a6bdfd8a44ef1b", + "comments_url": "https://api.github.com/repos/joealcorn/chatter/commits/5c805e618bb53aae6308615227a6bdfd8a44ef1b/comments", + "author": { + "login": "joealcorn", + "id": 1097349, + "node_id": "MDQ6VXNlcjEwOTczNDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1097349?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joealcorn", + "html_url": "https://github.com/joealcorn", + "followers_url": "https://api.github.com/users/joealcorn/followers", + "following_url": "https://api.github.com/users/joealcorn/following{/other_user}", + "gists_url": "https://api.github.com/users/joealcorn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joealcorn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joealcorn/subscriptions", + "organizations_url": "https://api.github.com/users/joealcorn/orgs", + "repos_url": "https://api.github.com/users/joealcorn/repos", + "events_url": "https://api.github.com/users/joealcorn/events{/privacy}", + "received_events_url": "https://api.github.com/users/joealcorn/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "joealcorn", + "id": 1097349, + "node_id": "MDQ6VXNlcjEwOTczNDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1097349?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joealcorn", + "html_url": "https://github.com/joealcorn", + "followers_url": "https://api.github.com/users/joealcorn/followers", + "following_url": "https://api.github.com/users/joealcorn/following{/other_user}", + "gists_url": "https://api.github.com/users/joealcorn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joealcorn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joealcorn/subscriptions", + "organizations_url": "https://api.github.com/users/joealcorn/orgs", + "repos_url": "https://api.github.com/users/joealcorn/repos", + "events_url": "https://api.github.com/users/joealcorn/events{/privacy}", + "received_events_url": "https://api.github.com/users/joealcorn/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "5611154bf9981647e58b5402eecbacbea1d9e89a", + "url": "https://api.github.com/repos/joealcorn/chatter/commits/5611154bf9981647e58b5402eecbacbea1d9e89a", + "html_url": "https://github.com/joealcorn/chatter/commit/5611154bf9981647e58b5402eecbacbea1d9e89a" + } + ], + "stats": { + "total": 7, + "additions": 7, + "deletions": 0 + }, + "files": [ + { + "sha": "6af15843caee42bae847d6b229ce19314e6feaa3", + "filename": "LICENCE", + "status": "added", + "additions": 7, + "deletions": 0, + "changes": 7, + "blob_url": "https://github.com/joealcorn/chatter/blob/5c805e618bb53aae6308615227a6bdfd8a44ef1b/LICENCE", + "raw_url": "https://github.com/joealcorn/chatter/raw/5c805e618bb53aae6308615227a6bdfd8a44ef1b/LICENCE", + "contents_url": "https://api.github.com/repos/joealcorn/chatter/contents/LICENCE?ref=5c805e618bb53aae6308615227a6bdfd8a44ef1b", + "patch": "@@ -0,0 +1,7 @@\n+Copyright 2018 Joe Alcorn\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + } + ] +} diff --git a/apigh/2023-04-19/comment_it b/apigh/2023-04-19/comment_it new file mode 100644 index 00000000..48001022 --- /dev/null +++ b/apigh/2023-04-19/comment_it @@ -0,0 +1,118 @@ +{ + "id": 43656843, + "node_id": "MDEwOlJlcG9zaXRvcnk0MzY1Njg0Mw==", + "name": "commentit", + "full_name": "jillro/commentit", + "private": false, + "owner": { + "login": "jillro", + "id": 301998, + "node_id": "MDQ6VXNlcjMwMTk5OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/301998?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jillro", + "html_url": "https://github.com/jillro", + "followers_url": "https://api.github.com/users/jillro/followers", + "following_url": "https://api.github.com/users/jillro/following{/other_user}", + "gists_url": "https://api.github.com/users/jillro/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jillro/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jillro/subscriptions", + "organizations_url": "https://api.github.com/users/jillro/orgs", + "repos_url": "https://api.github.com/users/jillro/repos", + "events_url": "https://api.github.com/users/jillro/events{/privacy}", + "received_events_url": "https://api.github.com/users/jillro/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jillro/commentit", + "description": "Comm(ent|it) : in files comments for Github Pages", + "fork": false, + "url": "https://api.github.com/repos/jillro/commentit", + "forks_url": "https://api.github.com/repos/jillro/commentit/forks", + "keys_url": "https://api.github.com/repos/jillro/commentit/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jillro/commentit/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jillro/commentit/teams", + "hooks_url": "https://api.github.com/repos/jillro/commentit/hooks", + "issue_events_url": "https://api.github.com/repos/jillro/commentit/issues/events{/number}", + "events_url": "https://api.github.com/repos/jillro/commentit/events", + "assignees_url": "https://api.github.com/repos/jillro/commentit/assignees{/user}", + "branches_url": "https://api.github.com/repos/jillro/commentit/branches{/branch}", + "tags_url": "https://api.github.com/repos/jillro/commentit/tags", + "blobs_url": "https://api.github.com/repos/jillro/commentit/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jillro/commentit/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jillro/commentit/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jillro/commentit/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jillro/commentit/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jillro/commentit/languages", + "stargazers_url": "https://api.github.com/repos/jillro/commentit/stargazers", + "contributors_url": "https://api.github.com/repos/jillro/commentit/contributors", + "subscribers_url": "https://api.github.com/repos/jillro/commentit/subscribers", + "subscription_url": "https://api.github.com/repos/jillro/commentit/subscription", + "commits_url": "https://api.github.com/repos/jillro/commentit/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jillro/commentit/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jillro/commentit/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jillro/commentit/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jillro/commentit/contents/{+path}", + "compare_url": "https://api.github.com/repos/jillro/commentit/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jillro/commentit/merges", + "archive_url": "https://api.github.com/repos/jillro/commentit/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jillro/commentit/downloads", + "issues_url": "https://api.github.com/repos/jillro/commentit/issues{/number}", + "pulls_url": "https://api.github.com/repos/jillro/commentit/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jillro/commentit/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jillro/commentit/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jillro/commentit/labels{/name}", + "releases_url": "https://api.github.com/repos/jillro/commentit/releases{/id}", + "deployments_url": "https://api.github.com/repos/jillro/commentit/deployments", + "created_at": "2015-10-04T23:34:44Z", + "updated_at": "2023-01-28T17:44:32Z", + "pushed_at": "2019-06-10T14:01:03Z", + "git_url": "git://github.com/jillro/commentit.git", + "ssh_url": "git@github.com:jillro/commentit.git", + "clone_url": "https://github.com/jillro/commentit.git", + "svn_url": "https://github.com/jillro/commentit", + "homepage": "https://commentit.io/", + "size": 158, + "stargazers_count": 94, + "watchers_count": 94, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 8, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 5, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 8, + "open_issues": 5, + "watchers": 94, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 8, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-19/comment_it.commit b/apigh/2023-04-19/comment_it.commit new file mode 100644 index 00000000..31904235 --- /dev/null +++ b/apigh/2023-04-19/comment_it.commit @@ -0,0 +1,98 @@ +{ + "sha": "3730d3674d08e6bbd81099ee73893cf719abef93", + "node_id": "MDY6Q29tbWl0NDM2NTY4NDM6MzczMGQzNjc0ZDA4ZTZiYmQ4MTA5OWVlNzM4OTNjZjcxOWFiZWY5Mw==", + "commit": { + "author": { + "name": "Jill Royer", + "email": "perso@guilro.com", + "date": "2019-06-10T14:01:02Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2019-06-10T14:01:02Z" + }, + "message": "Update index.js", + "tree": { + "sha": "7780df15c5e0fc0eb9446a659bd6a5f231ed3783", + "url": "https://api.github.com/repos/jillro/commentit/git/trees/7780df15c5e0fc0eb9446a659bd6a5f231ed3783" + }, + "url": "https://api.github.com/repos/jillro/commentit/git/commits/3730d3674d08e6bbd81099ee73893cf719abef93", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJc/mKfCRBK7hj4Ov3rIwAAdHIIAKFFcB19hjYA0+JxzEVhe9+d\nUqY5fF+1irNmLefkMN+UyvWduw/z6CQyKJRaAl1viHHCXtGv0xQQN2NYgzZHb3j2\nXxOewHlVm0FtKw7Gcle1kUdQyNv+dVlblajdV1ZKa2h9JymhOEp4fycH/N+jLPoo\nrr3xHX1E45iqCh46Mw4GxdWFdVDyLaMbo2o77rhC3hf4apTUiViaHalrDTLIg2/Z\n1Ypn7jz3SUmvax6mZ7YxuxCjdXeGEpl2omy18rdnwc61gNQIkK52yIEvbbJkwi86\nuGGO004lZgWPtraJ+cKh8Qckn6SjiplSGkD3qqBN5Q3X6QEz8qSf6+2fj37Y04k=\n=fc4k\n-----END PGP SIGNATURE-----\n", + "payload": "tree 7780df15c5e0fc0eb9446a659bd6a5f231ed3783\nparent a1b377d779c7fcaa1ce10ecb7adff55d22abadb6\nauthor Jill Royer 1560175262 +0200\ncommitter GitHub 1560175262 +0200\n\nUpdate index.js" + } + }, + "url": "https://api.github.com/repos/jillro/commentit/commits/3730d3674d08e6bbd81099ee73893cf719abef93", + "html_url": "https://github.com/jillro/commentit/commit/3730d3674d08e6bbd81099ee73893cf719abef93", + "comments_url": "https://api.github.com/repos/jillro/commentit/commits/3730d3674d08e6bbd81099ee73893cf719abef93/comments", + "author": { + "login": "jillro", + "id": 301998, + "node_id": "MDQ6VXNlcjMwMTk5OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/301998?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jillro", + "html_url": "https://github.com/jillro", + "followers_url": "https://api.github.com/users/jillro/followers", + "following_url": "https://api.github.com/users/jillro/following{/other_user}", + "gists_url": "https://api.github.com/users/jillro/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jillro/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jillro/subscriptions", + "organizations_url": "https://api.github.com/users/jillro/orgs", + "repos_url": "https://api.github.com/users/jillro/repos", + "events_url": "https://api.github.com/users/jillro/events{/privacy}", + "received_events_url": "https://api.github.com/users/jillro/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a1b377d779c7fcaa1ce10ecb7adff55d22abadb6", + "url": "https://api.github.com/repos/jillro/commentit/commits/a1b377d779c7fcaa1ce10ecb7adff55d22abadb6", + "html_url": "https://github.com/jillro/commentit/commit/a1b377d779c7fcaa1ce10ecb7adff55d22abadb6" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "a1cd8f5ab2d6d531c89961a29eb3c7b981684cae", + "filename": "controllers/index.js", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/jillro/commentit/blob/3730d3674d08e6bbd81099ee73893cf719abef93/controllers%2Findex.js", + "raw_url": "https://github.com/jillro/commentit/raw/3730d3674d08e6bbd81099ee73893cf719abef93/controllers%2Findex.js", + "contents_url": "https://api.github.com/repos/jillro/commentit/contents/controllers%2Findex.js?ref=3730d3674d08e6bbd81099ee73893cf719abef93", + "patch": "@@ -108,7 +108,7 @@ router.get('/invitation/:code', function(req, res, next) {\n * Administration route\n */\n router.get('/admin', function(req, res, next) {\n- if (!req.isAuthenticated() || 'guilro' !== req.user.username) {\n+ if (!req.isAuthenticated() || 'jillro' !== req.user.username) {\n return res.sendStatus(404);\n }\n " + } + ] +} diff --git a/apigh/2023-04-19/comment_with_reply_view b/apigh/2023-04-19/comment_with_reply_view new file mode 100644 index 00000000..0bb90925 --- /dev/null +++ b/apigh/2023-04-19/comment_with_reply_view @@ -0,0 +1,122 @@ +{ + "id": 130346390, + "node_id": "MDEwOlJlcG9zaXRvcnkxMzAzNDYzOTA=", + "name": "CommentReplyComponent", + "full_name": "Moosphan/CommentReplyComponent", + "private": false, + "owner": { + "login": "Moosphan", + "id": 31280310, + "node_id": "MDQ6VXNlcjMxMjgwMzEw", + "avatar_url": "https://avatars.githubusercontent.com/u/31280310?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Moosphan", + "html_url": "https://github.com/Moosphan", + "followers_url": "https://api.github.com/users/Moosphan/followers", + "following_url": "https://api.github.com/users/Moosphan/following{/other_user}", + "gists_url": "https://api.github.com/users/Moosphan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Moosphan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Moosphan/subscriptions", + "organizations_url": "https://api.github.com/users/Moosphan/orgs", + "repos_url": "https://api.github.com/users/Moosphan/repos", + "events_url": "https://api.github.com/users/Moosphan/events{/privacy}", + "received_events_url": "https://api.github.com/users/Moosphan/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/Moosphan/CommentReplyComponent", + "description": "ๅŸบไบŽExpandableListViewๅฎž็Žฐ่ฏ„่ฎบๅ’Œๅ›žๅค็š„ๅŠŸ่ƒฝใ€‚", + "fork": false, + "url": "https://api.github.com/repos/Moosphan/CommentReplyComponent", + "forks_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/forks", + "keys_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/teams", + "hooks_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/hooks", + "issue_events_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/issues/events{/number}", + "events_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/events", + "assignees_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/assignees{/user}", + "branches_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/branches{/branch}", + "tags_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/tags", + "blobs_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/languages", + "stargazers_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/stargazers", + "contributors_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/contributors", + "subscribers_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/subscribers", + "subscription_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/subscription", + "commits_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/contents/{+path}", + "compare_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/merges", + "archive_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/downloads", + "issues_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/issues{/number}", + "pulls_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/labels{/name}", + "releases_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/releases{/id}", + "deployments_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/deployments", + "created_at": "2018-04-20T10:17:35Z", + "updated_at": "2023-03-24T15:52:11Z", + "pushed_at": "2019-05-16T12:40:08Z", + "git_url": "git://github.com/Moosphan/CommentReplyComponent.git", + "ssh_url": "git@github.com:Moosphan/CommentReplyComponent.git", + "clone_url": "https://github.com/Moosphan/CommentReplyComponent.git", + "svn_url": "https://github.com/Moosphan/CommentReplyComponent", + "homepage": null, + "size": 15750, + "stargazers_count": 404, + "watchers_count": 404, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 99, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comment-view", + "comments-widget", + "expandable", + "expandablelistview", + "responsive-layout" + ], + "visibility": "public", + "forks": 99, + "open_issues": 0, + "watchers": 404, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 99, + "subscribers_count": 9 +} diff --git a/apigh/2023-04-19/comment_with_reply_view.commit b/apigh/2023-04-19/comment_with_reply_view.commit new file mode 100644 index 00000000..378756dd --- /dev/null +++ b/apigh/2023-04-19/comment_with_reply_view.commit @@ -0,0 +1,98 @@ +{ + "sha": "0be0cda3719cd563e52cf6201441babfd05fd3a2", + "node_id": "MDY6Q29tbWl0MTMwMzQ2MzkwOjBiZTBjZGEzNzE5Y2Q1NjNlNTJjZjYyMDE0NDFiYWJmZDA1ZmQzYTI=", + "commit": { + "author": { + "name": "suhao", + "email": "2301230182@qq.com", + "date": "2018-05-29T12:53:54Z" + }, + "committer": { + "name": "suhao", + "email": "2301230182@qq.com", + "date": "2018-05-29T12:53:54Z" + }, + "message": "ๆ›ดๆ–ฐๆ•ˆๆžœๅ›พ", + "tree": { + "sha": "dc6dd939c673313ebedc738f9ce906e77f097a11", + "url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/git/trees/dc6dd939c673313ebedc738f9ce906e77f097a11" + }, + "url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/git/commits/0be0cda3719cd563e52cf6201441babfd05fd3a2", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/commits/0be0cda3719cd563e52cf6201441babfd05fd3a2", + "html_url": "https://github.com/Moosphan/CommentReplyComponent/commit/0be0cda3719cd563e52cf6201441babfd05fd3a2", + "comments_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/commits/0be0cda3719cd563e52cf6201441babfd05fd3a2/comments", + "author": { + "login": "Moosphan", + "id": 31280310, + "node_id": "MDQ6VXNlcjMxMjgwMzEw", + "avatar_url": "https://avatars.githubusercontent.com/u/31280310?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Moosphan", + "html_url": "https://github.com/Moosphan", + "followers_url": "https://api.github.com/users/Moosphan/followers", + "following_url": "https://api.github.com/users/Moosphan/following{/other_user}", + "gists_url": "https://api.github.com/users/Moosphan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Moosphan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Moosphan/subscriptions", + "organizations_url": "https://api.github.com/users/Moosphan/orgs", + "repos_url": "https://api.github.com/users/Moosphan/repos", + "events_url": "https://api.github.com/users/Moosphan/events{/privacy}", + "received_events_url": "https://api.github.com/users/Moosphan/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Moosphan", + "id": 31280310, + "node_id": "MDQ6VXNlcjMxMjgwMzEw", + "avatar_url": "https://avatars.githubusercontent.com/u/31280310?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Moosphan", + "html_url": "https://github.com/Moosphan", + "followers_url": "https://api.github.com/users/Moosphan/followers", + "following_url": "https://api.github.com/users/Moosphan/following{/other_user}", + "gists_url": "https://api.github.com/users/Moosphan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Moosphan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Moosphan/subscriptions", + "organizations_url": "https://api.github.com/users/Moosphan/orgs", + "repos_url": "https://api.github.com/users/Moosphan/repos", + "events_url": "https://api.github.com/users/Moosphan/events{/privacy}", + "received_events_url": "https://api.github.com/users/Moosphan/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d8abe02ccb0ca42d40f330ab3f3c68cbad4af029", + "url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/commits/d8abe02ccb0ca42d40f330ab3f3c68cbad4af029", + "html_url": "https://github.com/Moosphan/CommentReplyComponent/commit/d8abe02ccb0ca42d40f330ab3f3c68cbad4af029" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "85263d616f978747c12d83d3f9496610838cde01", + "filename": "README.md", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/Moosphan/CommentReplyComponent/blob/0be0cda3719cd563e52cf6201441babfd05fd3a2/README.md", + "raw_url": "https://github.com/Moosphan/CommentReplyComponent/raw/0be0cda3719cd563e52cf6201441babfd05fd3a2/README.md", + "contents_url": "https://api.github.com/repos/Moosphan/CommentReplyComponent/contents/README.md?ref=0be0cda3719cd563e52cf6201441babfd05fd3a2", + "patch": "@@ -1,6 +1,6 @@\n # CommentWithReplyView-master\n ๅŸบไบŽExpandableListViewๅฎž็Žฐ่ฏ„่ฎบๅ’Œๅ›žๅค็š„ๅŠŸ่ƒฝใ€‚\n->![ๆ•ˆๆžœๅ›พ](https://github.com/Moosphan/CommentWithReplyView-master/blob/d44f6ea1e9e641a9304ff275a55ad8e73bd5e254/CommentWithReplyList/art/comment_sample.gif)\n+>![ๆ•ˆๆžœๅ›พ](https://github.com/Moosphan/CommentWithReplyView-master/blob/d8abe02ccb0ca42d40f330ab3f3c68cbad4af029/CommentWithReplyList/art/comment_sample.gif)\n \n ## ่ฏดๆ˜Ž\n - ๆไพ›ไบ†ๆจกๆ‹Ÿๆ•ฐๆฎ๏ผŒๅฎž็Žฐ่ฏ„่ฎบๅ’Œๅ›žๅค็š„ๆ’ๅ…ฅๆ•ฐๆฎ" + } + ] +} diff --git a/apigh/2023-04-19/commentar b/apigh/2023-04-19/commentar new file mode 100644 index 00000000..b4e1763b --- /dev/null +++ b/apigh/2023-04-19/commentar @@ -0,0 +1,132 @@ +{ + "id": 12200366, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjIwMDM2Ng==", + "name": "Commentar", + "full_name": "Commentar/Commentar", + "private": false, + "owner": { + "login": "Commentar", + "id": 5256609, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjUyNTY2MDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/5256609?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Commentar", + "html_url": "https://github.com/Commentar", + "followers_url": "https://api.github.com/users/Commentar/followers", + "following_url": "https://api.github.com/users/Commentar/following{/other_user}", + "gists_url": "https://api.github.com/users/Commentar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Commentar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Commentar/subscriptions", + "organizations_url": "https://api.github.com/users/Commentar/orgs", + "repos_url": "https://api.github.com/users/Commentar/repos", + "events_url": "https://api.github.com/users/Commentar/events{/privacy}", + "received_events_url": "https://api.github.com/users/Commentar/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/Commentar/Commentar", + "description": "PHP 5.4 commenting system", + "fork": false, + "url": "https://api.github.com/repos/Commentar/Commentar", + "forks_url": "https://api.github.com/repos/Commentar/Commentar/forks", + "keys_url": "https://api.github.com/repos/Commentar/Commentar/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Commentar/Commentar/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Commentar/Commentar/teams", + "hooks_url": "https://api.github.com/repos/Commentar/Commentar/hooks", + "issue_events_url": "https://api.github.com/repos/Commentar/Commentar/issues/events{/number}", + "events_url": "https://api.github.com/repos/Commentar/Commentar/events", + "assignees_url": "https://api.github.com/repos/Commentar/Commentar/assignees{/user}", + "branches_url": "https://api.github.com/repos/Commentar/Commentar/branches{/branch}", + "tags_url": "https://api.github.com/repos/Commentar/Commentar/tags", + "blobs_url": "https://api.github.com/repos/Commentar/Commentar/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Commentar/Commentar/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Commentar/Commentar/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Commentar/Commentar/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Commentar/Commentar/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Commentar/Commentar/languages", + "stargazers_url": "https://api.github.com/repos/Commentar/Commentar/stargazers", + "contributors_url": "https://api.github.com/repos/Commentar/Commentar/contributors", + "subscribers_url": "https://api.github.com/repos/Commentar/Commentar/subscribers", + "subscription_url": "https://api.github.com/repos/Commentar/Commentar/subscription", + "commits_url": "https://api.github.com/repos/Commentar/Commentar/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Commentar/Commentar/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Commentar/Commentar/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Commentar/Commentar/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Commentar/Commentar/contents/{+path}", + "compare_url": "https://api.github.com/repos/Commentar/Commentar/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Commentar/Commentar/merges", + "archive_url": "https://api.github.com/repos/Commentar/Commentar/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Commentar/Commentar/downloads", + "issues_url": "https://api.github.com/repos/Commentar/Commentar/issues{/number}", + "pulls_url": "https://api.github.com/repos/Commentar/Commentar/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Commentar/Commentar/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Commentar/Commentar/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Commentar/Commentar/labels{/name}", + "releases_url": "https://api.github.com/repos/Commentar/Commentar/releases{/id}", + "deployments_url": "https://api.github.com/repos/Commentar/Commentar/deployments", + "created_at": "2013-08-18T19:18:41Z", + "updated_at": "2023-01-15T03:13:15Z", + "pushed_at": "2014-07-27T02:02:51Z", + "git_url": "git://github.com/Commentar/Commentar.git", + "ssh_url": "git@github.com:Commentar/Commentar.git", + "clone_url": "https://github.com/Commentar/Commentar.git", + "svn_url": "https://github.com/Commentar/Commentar", + "homepage": null, + "size": 1003, + "stargazers_count": 47, + "watchers_count": 47, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 1, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 1, + "open_issues": 3, + "watchers": 47, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "Commentar", + "id": 5256609, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjUyNTY2MDk=", + "avatar_url": "https://avatars.githubusercontent.com/u/5256609?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Commentar", + "html_url": "https://github.com/Commentar", + "followers_url": "https://api.github.com/users/Commentar/followers", + "following_url": "https://api.github.com/users/Commentar/following{/other_user}", + "gists_url": "https://api.github.com/users/Commentar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Commentar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Commentar/subscriptions", + "organizations_url": "https://api.github.com/users/Commentar/orgs", + "repos_url": "https://api.github.com/users/Commentar/repos", + "events_url": "https://api.github.com/users/Commentar/events{/privacy}", + "received_events_url": "https://api.github.com/users/Commentar/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 1, + "subscribers_count": 8 +} diff --git a/apigh/2023-04-19/commentar.commit b/apigh/2023-04-19/commentar.commit new file mode 100644 index 00000000..d5e860cf --- /dev/null +++ b/apigh/2023-04-19/commentar.commit @@ -0,0 +1,98 @@ +{ + "sha": "afdc02bca694d7a8f6bae88495db494137fb1ece", + "node_id": "MDY6Q29tbWl0MTIyMDAzNjY6YWZkYzAyYmNhNjk0ZDdhOGY2YmFlODg0OTVkYjQ5NDEzN2ZiMWVjZQ==", + "commit": { + "author": { + "name": "PeeHaa", + "email": "info@pieterhordijk.com", + "date": "2014-07-26T23:46:54Z" + }, + "committer": { + "name": "PeeHaa", + "email": "info@pieterhordijk.com", + "date": "2014-07-26T23:46:54Z" + }, + "message": "Styled the delete confirmation box", + "tree": { + "sha": "ad29c8316cfe8e57edd31b184c2538c8f27cf423", + "url": "https://api.github.com/repos/Commentar/Commentar/git/trees/ad29c8316cfe8e57edd31b184c2538c8f27cf423" + }, + "url": "https://api.github.com/repos/Commentar/Commentar/git/commits/afdc02bca694d7a8f6bae88495db494137fb1ece", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/Commentar/Commentar/commits/afdc02bca694d7a8f6bae88495db494137fb1ece", + "html_url": "https://github.com/Commentar/Commentar/commit/afdc02bca694d7a8f6bae88495db494137fb1ece", + "comments_url": "https://api.github.com/repos/Commentar/Commentar/commits/afdc02bca694d7a8f6bae88495db494137fb1ece/comments", + "author": { + "login": "PeeHaa", + "id": 1330296, + "node_id": "MDQ6VXNlcjEzMzAyOTY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1330296?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/PeeHaa", + "html_url": "https://github.com/PeeHaa", + "followers_url": "https://api.github.com/users/PeeHaa/followers", + "following_url": "https://api.github.com/users/PeeHaa/following{/other_user}", + "gists_url": "https://api.github.com/users/PeeHaa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PeeHaa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PeeHaa/subscriptions", + "organizations_url": "https://api.github.com/users/PeeHaa/orgs", + "repos_url": "https://api.github.com/users/PeeHaa/repos", + "events_url": "https://api.github.com/users/PeeHaa/events{/privacy}", + "received_events_url": "https://api.github.com/users/PeeHaa/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "PeeHaa", + "id": 1330296, + "node_id": "MDQ6VXNlcjEzMzAyOTY=", + "avatar_url": "https://avatars.githubusercontent.com/u/1330296?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/PeeHaa", + "html_url": "https://github.com/PeeHaa", + "followers_url": "https://api.github.com/users/PeeHaa/followers", + "following_url": "https://api.github.com/users/PeeHaa/following{/other_user}", + "gists_url": "https://api.github.com/users/PeeHaa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PeeHaa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PeeHaa/subscriptions", + "organizations_url": "https://api.github.com/users/PeeHaa/orgs", + "repos_url": "https://api.github.com/users/PeeHaa/repos", + "events_url": "https://api.github.com/users/PeeHaa/events{/privacy}", + "received_events_url": "https://api.github.com/users/PeeHaa/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "f9c34917bb9626523bf7dd88f524765ec0ab20fb", + "url": "https://api.github.com/repos/Commentar/Commentar/commits/f9c34917bb9626523bf7dd88f524765ec0ab20fb", + "html_url": "https://github.com/Commentar/Commentar/commit/f9c34917bb9626523bf7dd88f524765ec0ab20fb" + } + ], + "stats": { + "total": 17, + "additions": 17, + "deletions": 0 + }, + "files": [ + { + "sha": "eb91d4ff6b63ec8f95941bdfc52332cad566c4ae", + "filename": "themes/commentar/css/style.css", + "status": "modified", + "additions": 17, + "deletions": 0, + "changes": 17, + "blob_url": "https://github.com/Commentar/Commentar/blob/afdc02bca694d7a8f6bae88495db494137fb1ece/themes%2Fcommentar%2Fcss%2Fstyle.css", + "raw_url": "https://github.com/Commentar/Commentar/raw/afdc02bca694d7a8f6bae88495db494137fb1ece/themes%2Fcommentar%2Fcss%2Fstyle.css", + "contents_url": "https://api.github.com/repos/Commentar/Commentar/contents/themes%2Fcommentar%2Fcss%2Fstyle.css?ref=afdc02bca694d7a8f6bae88495db494137fb1ece", + "patch": "@@ -250,6 +250,23 @@ ul.commentar-comments ul.commentar-comments {\n margin: 0 auto;\n }\n \n+.commentar-comments main form.delete > span {\n+ margin-right: 20px;\n+}\n+\n+.commentar-comments main form.delete .icon-delete {\n+ border: 0;\n+ font-size: 0.7em;\n+ color: #444444;\n+ display: block;\n+ display: inline;\n+ background: #dddddd;\n+ line-height: 10px;\n+ padding: 7px 10px;\n+ margin-right: 10px;\n+ cursor: pointer;\n+}\n+\n .commentar-comments article footer {\n background:#444;\n color:#FFF;" + } + ] +} diff --git a/apigh/2023-04-19/commentary b/apigh/2023-04-19/commentary new file mode 100644 index 00000000..d16e6cfc --- /dev/null +++ b/apigh/2023-04-19/commentary @@ -0,0 +1,112 @@ +{ + "id": 12523602, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjUyMzYwMg==", + "name": "commentary", + "full_name": "sdqali/commentary", + "private": false, + "owner": { + "login": "sdqali", + "id": 179015, + "node_id": "MDQ6VXNlcjE3OTAxNQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/179015?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sdqali", + "html_url": "https://github.com/sdqali", + "followers_url": "https://api.github.com/users/sdqali/followers", + "following_url": "https://api.github.com/users/sdqali/following{/other_user}", + "gists_url": "https://api.github.com/users/sdqali/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sdqali/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sdqali/subscriptions", + "organizations_url": "https://api.github.com/users/sdqali/orgs", + "repos_url": "https://api.github.com/users/sdqali/repos", + "events_url": "https://api.github.com/users/sdqali/events{/privacy}", + "received_events_url": "https://api.github.com/users/sdqali/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/sdqali/commentary", + "description": "A really simple application for Disqus like comments on a blog.", + "fork": false, + "url": "https://api.github.com/repos/sdqali/commentary", + "forks_url": "https://api.github.com/repos/sdqali/commentary/forks", + "keys_url": "https://api.github.com/repos/sdqali/commentary/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sdqali/commentary/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sdqali/commentary/teams", + "hooks_url": "https://api.github.com/repos/sdqali/commentary/hooks", + "issue_events_url": "https://api.github.com/repos/sdqali/commentary/issues/events{/number}", + "events_url": "https://api.github.com/repos/sdqali/commentary/events", + "assignees_url": "https://api.github.com/repos/sdqali/commentary/assignees{/user}", + "branches_url": "https://api.github.com/repos/sdqali/commentary/branches{/branch}", + "tags_url": "https://api.github.com/repos/sdqali/commentary/tags", + "blobs_url": "https://api.github.com/repos/sdqali/commentary/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sdqali/commentary/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sdqali/commentary/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sdqali/commentary/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sdqali/commentary/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sdqali/commentary/languages", + "stargazers_url": "https://api.github.com/repos/sdqali/commentary/stargazers", + "contributors_url": "https://api.github.com/repos/sdqali/commentary/contributors", + "subscribers_url": "https://api.github.com/repos/sdqali/commentary/subscribers", + "subscription_url": "https://api.github.com/repos/sdqali/commentary/subscription", + "commits_url": "https://api.github.com/repos/sdqali/commentary/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sdqali/commentary/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sdqali/commentary/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sdqali/commentary/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sdqali/commentary/contents/{+path}", + "compare_url": "https://api.github.com/repos/sdqali/commentary/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sdqali/commentary/merges", + "archive_url": "https://api.github.com/repos/sdqali/commentary/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sdqali/commentary/downloads", + "issues_url": "https://api.github.com/repos/sdqali/commentary/issues{/number}", + "pulls_url": "https://api.github.com/repos/sdqali/commentary/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sdqali/commentary/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sdqali/commentary/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sdqali/commentary/labels{/name}", + "releases_url": "https://api.github.com/repos/sdqali/commentary/releases{/id}", + "deployments_url": "https://api.github.com/repos/sdqali/commentary/deployments", + "created_at": "2013-09-01T16:50:16Z", + "updated_at": "2021-12-06T11:58:02Z", + "pushed_at": "2013-09-09T01:17:17Z", + "git_url": "git://github.com/sdqali/commentary.git", + "ssh_url": "git@github.com:sdqali/commentary.git", + "clone_url": "https://github.com/sdqali/commentary.git", + "svn_url": "https://github.com/sdqali/commentary", + "homepage": null, + "size": 224, + "stargazers_count": 55, + "watchers_count": 55, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 3, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 3, + "open_issues": 0, + "watchers": 55, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 3, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-19/commentary.commit b/apigh/2023-04-19/commentary.commit new file mode 100644 index 00000000..83613123 --- /dev/null +++ b/apigh/2023-04-19/commentary.commit @@ -0,0 +1,110 @@ +{ + "sha": "6302127ceec5b32f798fc90ad4aecfc32acffc7d", + "node_id": "MDY6Q29tbWl0MTI1MjM2MDI6NjMwMjEyN2NlZWM1YjMyZjc5OGZjOTBhZDRhZWNmYzMyYWNmZmM3ZA==", + "commit": { + "author": { + "name": "Sadique Ali", + "email": "sadiqalikm@gmail.com", + "date": "2013-09-09T01:13:59Z" + }, + "committer": { + "name": "Sadique Ali", + "email": "sadiqalikm@gmail.com", + "date": "2013-09-09T01:17:02Z" + }, + "message": "README.md", + "tree": { + "sha": "16a8a893eb5df3cc04919af5a56a8f2b57b3e1d8", + "url": "https://api.github.com/repos/sdqali/commentary/git/trees/16a8a893eb5df3cc04919af5a56a8f2b57b3e1d8" + }, + "url": "https://api.github.com/repos/sdqali/commentary/git/commits/6302127ceec5b32f798fc90ad4aecfc32acffc7d", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/sdqali/commentary/commits/6302127ceec5b32f798fc90ad4aecfc32acffc7d", + "html_url": "https://github.com/sdqali/commentary/commit/6302127ceec5b32f798fc90ad4aecfc32acffc7d", + "comments_url": "https://api.github.com/repos/sdqali/commentary/commits/6302127ceec5b32f798fc90ad4aecfc32acffc7d/comments", + "author": { + "login": "sdqali", + "id": 179015, + "node_id": "MDQ6VXNlcjE3OTAxNQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/179015?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sdqali", + "html_url": "https://github.com/sdqali", + "followers_url": "https://api.github.com/users/sdqali/followers", + "following_url": "https://api.github.com/users/sdqali/following{/other_user}", + "gists_url": "https://api.github.com/users/sdqali/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sdqali/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sdqali/subscriptions", + "organizations_url": "https://api.github.com/users/sdqali/orgs", + "repos_url": "https://api.github.com/users/sdqali/repos", + "events_url": "https://api.github.com/users/sdqali/events{/privacy}", + "received_events_url": "https://api.github.com/users/sdqali/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "sdqali", + "id": 179015, + "node_id": "MDQ6VXNlcjE3OTAxNQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/179015?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sdqali", + "html_url": "https://github.com/sdqali", + "followers_url": "https://api.github.com/users/sdqali/followers", + "following_url": "https://api.github.com/users/sdqali/following{/other_user}", + "gists_url": "https://api.github.com/users/sdqali/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sdqali/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sdqali/subscriptions", + "organizations_url": "https://api.github.com/users/sdqali/orgs", + "repos_url": "https://api.github.com/users/sdqali/repos", + "events_url": "https://api.github.com/users/sdqali/events{/privacy}", + "received_events_url": "https://api.github.com/users/sdqali/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7eb0b2409eb91803f22c8b5c4abb164de0819250", + "url": "https://api.github.com/repos/sdqali/commentary/commits/7eb0b2409eb91803f22c8b5c4abb164de0819250", + "html_url": "https://github.com/sdqali/commentary/commit/7eb0b2409eb91803f22c8b5c4abb164de0819250" + } + ], + "stats": { + "total": 28, + "additions": 28, + "deletions": 0 + }, + "files": [ + { + "sha": "e025240f633da4da5afdfc1fc986062f802d2773", + "filename": "README.md", + "status": "added", + "additions": 26, + "deletions": 0, + "changes": 26, + "blob_url": "https://github.com/sdqali/commentary/blob/6302127ceec5b32f798fc90ad4aecfc32acffc7d/README.md", + "raw_url": "https://github.com/sdqali/commentary/raw/6302127ceec5b32f798fc90ad4aecfc32acffc7d/README.md", + "contents_url": "https://api.github.com/repos/sdqali/commentary/contents/README.md?ref=6302127ceec5b32f798fc90ad4aecfc32acffc7d", + "patch": "@@ -0,0 +1,26 @@\n+# Commentary\n+\n+Add comments to your blog.\n+\n+## Setup\n+* Edit `config/production.yml` to add your site. Specify a name and the domain where the site will be hosted. Example configuration will be like this:\n+\n+```\n+name: Blog\n+domain: blog.sdqali.in\n+```\n+\n+* Run `RACK_ENV=production setup.rb`\n+* Start the server with `RACK_ENV=production app.rb`\n+* Add the following to your HTML pages or templates. `selector` is the CSS selector for the DOM element where comments will be rendered.\n+\n+```html\n+\n+\n+\n+\n+```\n\\ No newline at end of file" + }, + { + "sha": "cd1acf22d55e839fe0b2e0784c525a3b8b455ece", + "filename": "setup.rb", + "status": "modified", + "additions": 2, + "deletions": 0, + "changes": 2, + "blob_url": "https://github.com/sdqali/commentary/blob/6302127ceec5b32f798fc90ad4aecfc32acffc7d/setup.rb", + "raw_url": "https://github.com/sdqali/commentary/raw/6302127ceec5b32f798fc90ad4aecfc32acffc7d/setup.rb", + "contents_url": "https://api.github.com/repos/sdqali/commentary/contents/setup.rb?ref=6302127ceec5b32f798fc90ad4aecfc32acffc7d", + "patch": "@@ -1,3 +1,5 @@\n+#! /usr/bin/env ruby\n+\n require \"yaml\"\n require_relative \"app\"\n " + } + ] +} diff --git a/apigh/2023-04-19/commentics b/apigh/2023-04-19/commentics new file mode 100644 index 00000000..f89a3a48 --- /dev/null +++ b/apigh/2023-04-19/commentics @@ -0,0 +1,118 @@ +{ + "id": 72925477, + "node_id": "MDEwOlJlcG9zaXRvcnk3MjkyNTQ3Nw==", + "name": "commentics", + "full_name": "commentics/commentics", + "private": false, + "owner": { + "login": "commentics", + "id": 3671618, + "node_id": "MDQ6VXNlcjM2NzE2MTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3671618?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/commentics", + "html_url": "https://github.com/commentics", + "followers_url": "https://api.github.com/users/commentics/followers", + "following_url": "https://api.github.com/users/commentics/following{/other_user}", + "gists_url": "https://api.github.com/users/commentics/gists{/gist_id}", + "starred_url": "https://api.github.com/users/commentics/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/commentics/subscriptions", + "organizations_url": "https://api.github.com/users/commentics/orgs", + "repos_url": "https://api.github.com/users/commentics/repos", + "events_url": "https://api.github.com/users/commentics/events{/privacy}", + "received_events_url": "https://api.github.com/users/commentics/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/commentics/commentics", + "description": "Commentics - A free PHP comment script", + "fork": false, + "url": "https://api.github.com/repos/commentics/commentics", + "forks_url": "https://api.github.com/repos/commentics/commentics/forks", + "keys_url": "https://api.github.com/repos/commentics/commentics/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/commentics/commentics/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/commentics/commentics/teams", + "hooks_url": "https://api.github.com/repos/commentics/commentics/hooks", + "issue_events_url": "https://api.github.com/repos/commentics/commentics/issues/events{/number}", + "events_url": "https://api.github.com/repos/commentics/commentics/events", + "assignees_url": "https://api.github.com/repos/commentics/commentics/assignees{/user}", + "branches_url": "https://api.github.com/repos/commentics/commentics/branches{/branch}", + "tags_url": "https://api.github.com/repos/commentics/commentics/tags", + "blobs_url": "https://api.github.com/repos/commentics/commentics/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/commentics/commentics/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/commentics/commentics/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/commentics/commentics/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/commentics/commentics/statuses/{sha}", + "languages_url": "https://api.github.com/repos/commentics/commentics/languages", + "stargazers_url": "https://api.github.com/repos/commentics/commentics/stargazers", + "contributors_url": "https://api.github.com/repos/commentics/commentics/contributors", + "subscribers_url": "https://api.github.com/repos/commentics/commentics/subscribers", + "subscription_url": "https://api.github.com/repos/commentics/commentics/subscription", + "commits_url": "https://api.github.com/repos/commentics/commentics/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/commentics/commentics/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/commentics/commentics/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/commentics/commentics/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/commentics/commentics/contents/{+path}", + "compare_url": "https://api.github.com/repos/commentics/commentics/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/commentics/commentics/merges", + "archive_url": "https://api.github.com/repos/commentics/commentics/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/commentics/commentics/downloads", + "issues_url": "https://api.github.com/repos/commentics/commentics/issues{/number}", + "pulls_url": "https://api.github.com/repos/commentics/commentics/pulls{/number}", + "milestones_url": "https://api.github.com/repos/commentics/commentics/milestones{/number}", + "notifications_url": "https://api.github.com/repos/commentics/commentics/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/commentics/commentics/labels{/name}", + "releases_url": "https://api.github.com/repos/commentics/commentics/releases{/id}", + "deployments_url": "https://api.github.com/repos/commentics/commentics/deployments", + "created_at": "2016-11-05T12:45:14Z", + "updated_at": "2023-03-27T06:43:39Z", + "pushed_at": "2023-04-10T13:27:54Z", + "git_url": "git://github.com/commentics/commentics.git", + "ssh_url": "git@github.com:commentics/commentics.git", + "clone_url": "https://github.com/commentics/commentics.git", + "svn_url": "https://github.com/commentics/commentics", + "homepage": "https://commentics.com", + "size": 15591, + "stargazers_count": 48, + "watchers_count": 48, + "language": "PHP", + "has_issues": false, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 13, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 4, + "license": { + "key": "gpl-3.0", + "name": "GNU General Public License v3.0", + "spdx_id": "GPL-3.0", + "url": "https://api.github.com/licenses/gpl-3.0", + "node_id": "MDc6TGljZW5zZTk=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 13, + "open_issues": 4, + "watchers": 48, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 13, + "subscribers_count": 5 +} diff --git a/apigh/2023-04-19/commentics.commit b/apigh/2023-04-19/commentics.commit new file mode 100644 index 00000000..7c90423b --- /dev/null +++ b/apigh/2023-04-19/commentics.commit @@ -0,0 +1,146 @@ +{ + "sha": "8b98cf97cc1cb21187bd968741548b9e0d6d6811", + "node_id": "C_kwDOBFjBJdoAKDhiOThjZjk3Y2MxY2IyMTE4N2JkOTY4NzQxNTQ4YjllMGQ2ZDY4MTE", + "commit": { + "author": { + "name": "Steven", + "email": "support@commentics.com", + "date": "2023-01-21T10:25:39Z" + }, + "committer": { + "name": "Steven", + "email": "support@commentics.com", + "date": "2023-01-21T10:25:39Z" + }, + "message": "Updating version", + "tree": { + "sha": "883c90d04943ac8591d843ab02cff9fa90b67258", + "url": "https://api.github.com/repos/commentics/commentics/git/trees/883c90d04943ac8591d843ab02cff9fa90b67258" + }, + "url": "https://api.github.com/repos/commentics/commentics/git/commits/8b98cf97cc1cb21187bd968741548b9e0d6d6811", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/commentics/commentics/commits/8b98cf97cc1cb21187bd968741548b9e0d6d6811", + "html_url": "https://github.com/commentics/commentics/commit/8b98cf97cc1cb21187bd968741548b9e0d6d6811", + "comments_url": "https://api.github.com/repos/commentics/commentics/commits/8b98cf97cc1cb21187bd968741548b9e0d6d6811/comments", + "author": { + "login": "commentics", + "id": 3671618, + "node_id": "MDQ6VXNlcjM2NzE2MTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3671618?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/commentics", + "html_url": "https://github.com/commentics", + "followers_url": "https://api.github.com/users/commentics/followers", + "following_url": "https://api.github.com/users/commentics/following{/other_user}", + "gists_url": "https://api.github.com/users/commentics/gists{/gist_id}", + "starred_url": "https://api.github.com/users/commentics/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/commentics/subscriptions", + "organizations_url": "https://api.github.com/users/commentics/orgs", + "repos_url": "https://api.github.com/users/commentics/repos", + "events_url": "https://api.github.com/users/commentics/events{/privacy}", + "received_events_url": "https://api.github.com/users/commentics/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "commentics", + "id": 3671618, + "node_id": "MDQ6VXNlcjM2NzE2MTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3671618?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/commentics", + "html_url": "https://github.com/commentics", + "followers_url": "https://api.github.com/users/commentics/followers", + "following_url": "https://api.github.com/users/commentics/following{/other_user}", + "gists_url": "https://api.github.com/users/commentics/gists{/gist_id}", + "starred_url": "https://api.github.com/users/commentics/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/commentics/subscriptions", + "organizations_url": "https://api.github.com/users/commentics/orgs", + "repos_url": "https://api.github.com/users/commentics/repos", + "events_url": "https://api.github.com/users/commentics/events{/privacy}", + "received_events_url": "https://api.github.com/users/commentics/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "daf0b2189ec2daa20e1b4a046e2204f476c2b85a", + "url": "https://api.github.com/repos/commentics/commentics/commits/daf0b2189ec2daa20e1b4a046e2204f476c2b85a", + "html_url": "https://github.com/commentics/commentics/commit/daf0b2189ec2daa20e1b4a046e2204f476c2b85a" + } + ], + "stats": { + "total": 57, + "additions": 53, + "deletions": 4 + }, + "files": [ + { + "sha": "83014d370d3a9cc6fdc45208cb5b4973d3ad66fd", + "filename": "README.txt", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/commentics/commentics/blob/8b98cf97cc1cb21187bd968741548b9e0d6d6811/README.txt", + "raw_url": "https://github.com/commentics/commentics/raw/8b98cf97cc1cb21187bd968741548b9e0d6d6811/README.txt", + "contents_url": "https://api.github.com/repos/commentics/commentics/contents/README.txt?ref=8b98cf97cc1cb21187bd968741548b9e0d6d6811", + "patch": "@@ -2,7 +2,7 @@ Project: Commentics\n \n Website: https://commentics.com\n \n-Version: v4.3 (29th January 2022)\n+Version: v4.4 (21st January 2023)\n \n Description: Integrates into your website to allow visitors to submit comments\n " + }, + { + "sha": "94b68285f004d20c76f1b03965664e39ce47ba6f", + "filename": "comments/backend/index.php", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/commentics/commentics/blob/8b98cf97cc1cb21187bd968741548b9e0d6d6811/comments%2Fbackend%2Findex.php", + "raw_url": "https://github.com/commentics/commentics/raw/8b98cf97cc1cb21187bd968741548b9e0d6d6811/comments%2Fbackend%2Findex.php", + "contents_url": "https://api.github.com/repos/commentics/commentics/contents/comments%2Fbackend%2Findex.php?ref=8b98cf97cc1cb21187bd968741548b9e0d6d6811", + "patch": "@@ -1,7 +1,7 @@\n ", + "tree": { + "sha": "de799e2399cdc1af61b44958a9ac86ae07b5fd59", + "url": "https://api.github.com/repos/adtac/commento/git/trees/de799e2399cdc1af61b44958a9ac86ae07b5fd59" + }, + "url": "https://api.github.com/repos/adtac/commento/git/commits/a4c5cc8b9e5749dd50ef01f94c08dd7944a6d9c1", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/adtac/commento/commits/a4c5cc8b9e5749dd50ef01f94c08dd7944a6d9c1", + "html_url": "https://github.com/adtac/commento/commit/a4c5cc8b9e5749dd50ef01f94c08dd7944a6d9c1", + "comments_url": "https://api.github.com/repos/adtac/commento/commits/a4c5cc8b9e5749dd50ef01f94c08dd7944a6d9c1/comments", + "author": { + "login": "adtac", + "id": 7521600, + "node_id": "MDQ6VXNlcjc1MjE2MDA=", + "avatar_url": "https://avatars.githubusercontent.com/u/7521600?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/adtac", + "html_url": "https://github.com/adtac", + "followers_url": "https://api.github.com/users/adtac/followers", + "following_url": "https://api.github.com/users/adtac/following{/other_user}", + "gists_url": "https://api.github.com/users/adtac/gists{/gist_id}", + "starred_url": "https://api.github.com/users/adtac/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/adtac/subscriptions", + "organizations_url": "https://api.github.com/users/adtac/orgs", + "repos_url": "https://api.github.com/users/adtac/repos", + "events_url": "https://api.github.com/users/adtac/events{/privacy}", + "received_events_url": "https://api.github.com/users/adtac/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "adtac", + "id": 7521600, + "node_id": "MDQ6VXNlcjc1MjE2MDA=", + "avatar_url": "https://avatars.githubusercontent.com/u/7521600?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/adtac", + "html_url": "https://github.com/adtac", + "followers_url": "https://api.github.com/users/adtac/followers", + "following_url": "https://api.github.com/users/adtac/following{/other_user}", + "gists_url": "https://api.github.com/users/adtac/gists{/gist_id}", + "starred_url": "https://api.github.com/users/adtac/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/adtac/subscriptions", + "organizations_url": "https://api.github.com/users/adtac/orgs", + "repos_url": "https://api.github.com/users/adtac/repos", + "events_url": "https://api.github.com/users/adtac/events{/privacy}", + "received_events_url": "https://api.github.com/users/adtac/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "fc83eed2215ce4f6763e6efe3e91e0dc9099ffd5", + "url": "https://api.github.com/repos/adtac/commento/commits/fc83eed2215ce4f6763e6efe3e91e0dc9099ffd5", + "html_url": "https://github.com/adtac/commento/commit/fc83eed2215ce4f6763e6efe3e91e0dc9099ffd5" + } + ], + "stats": { + "total": 8, + "additions": 6, + "deletions": 2 + }, + "files": [ + { + "sha": "a8600050c08ad35616b50b714c78101d44663505", + "filename": "frontend/js/commento.js", + "status": "modified", + "additions": 6, + "deletions": 2, + "changes": 8, + "blob_url": "https://github.com/adtac/commento/blob/a4c5cc8b9e5749dd50ef01f94c08dd7944a6d9c1/frontend%2Fjs%2Fcommento.js", + "raw_url": "https://github.com/adtac/commento/raw/a4c5cc8b9e5749dd50ef01f94c08dd7944a6d9c1/frontend%2Fjs%2Fcommento.js", + "contents_url": "https://api.github.com/repos/adtac/commento/contents/frontend%2Fjs%2Fcommento.js?ref=a4c5cc8b9e5749dd50ef01f94c08dd7944a6d9c1", + "patch": "@@ -2105,9 +2105,13 @@\n function loadHash() {\n if (window.location.hash) {\n if (window.location.hash.startsWith(\"#commento-\")) {\n- var el = $(ID_CARD + window.location.hash.split(\"-\")[1]);\n+ var id = window.location.hash.split(\"-\")[1];\n+ var el = $(ID_CARD + id);\n if (el === null) {\n- errorShow(\"The comment you're looking for no longer exists. Perhaps it was deleted by the commenter or a moderator?\");\n+ if (id.length === 64) {\n+ // A hack to make sure it's a valid ID before showing the user a message.\n+ errorShow(\"The comment you're looking for no longer exists or was deleted.\");\n+ }\n return;\n }\n " + } + ] +} diff --git a/apigh/2023-04-19/comments_app b/apigh/2023-04-19/comments_app new file mode 100644 index 00000000..9f30b26e --- /dev/null +++ b/apigh/2023-04-19/comments_app @@ -0,0 +1,127 @@ +{ + "id": 90336403, + "node_id": "MDEwOlJlcG9zaXRvcnk5MDMzNjQwMw==", + "name": "comments", + "full_name": "dyu/comments", + "private": false, + "owner": { + "login": "dyu", + "id": 79355, + "node_id": "MDQ6VXNlcjc5MzU1", + "avatar_url": "https://avatars.githubusercontent.com/u/79355?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dyu", + "html_url": "https://github.com/dyu", + "followers_url": "https://api.github.com/users/dyu/followers", + "following_url": "https://api.github.com/users/dyu/following{/other_user}", + "gists_url": "https://api.github.com/users/dyu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dyu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dyu/subscriptions", + "organizations_url": "https://api.github.com/users/dyu/orgs", + "repos_url": "https://api.github.com/users/dyu/repos", + "events_url": "https://api.github.com/users/dyu/events{/privacy}", + "received_events_url": "https://api.github.com/users/dyu/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/dyu/comments", + "description": "A real-time, markdown-enabled comment engine powered by leveldb with oauth support", + "fork": false, + "url": "https://api.github.com/repos/dyu/comments", + "forks_url": "https://api.github.com/repos/dyu/comments/forks", + "keys_url": "https://api.github.com/repos/dyu/comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dyu/comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dyu/comments/teams", + "hooks_url": "https://api.github.com/repos/dyu/comments/hooks", + "issue_events_url": "https://api.github.com/repos/dyu/comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/dyu/comments/events", + "assignees_url": "https://api.github.com/repos/dyu/comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/dyu/comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/dyu/comments/tags", + "blobs_url": "https://api.github.com/repos/dyu/comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dyu/comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dyu/comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dyu/comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dyu/comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dyu/comments/languages", + "stargazers_url": "https://api.github.com/repos/dyu/comments/stargazers", + "contributors_url": "https://api.github.com/repos/dyu/comments/contributors", + "subscribers_url": "https://api.github.com/repos/dyu/comments/subscribers", + "subscription_url": "https://api.github.com/repos/dyu/comments/subscription", + "commits_url": "https://api.github.com/repos/dyu/comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dyu/comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dyu/comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dyu/comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dyu/comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/dyu/comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dyu/comments/merges", + "archive_url": "https://api.github.com/repos/dyu/comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dyu/comments/downloads", + "issues_url": "https://api.github.com/repos/dyu/comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/dyu/comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dyu/comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dyu/comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dyu/comments/labels{/name}", + "releases_url": "https://api.github.com/repos/dyu/comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/dyu/comments/deployments", + "created_at": "2017-05-05T04:18:16Z", + "updated_at": "2022-01-03T17:44:46Z", + "pushed_at": "2021-11-25T17:37:45Z", + "git_url": "git://github.com/dyu/comments.git", + "ssh_url": "git@github.com:dyu/comments.git", + "clone_url": "https://github.com/dyu/comments.git", + "svn_url": "https://github.com/dyu/comments", + "homepage": "https://dyu.github.io/comments/", + "size": 828, + "stargazers_count": 60, + "watchers_count": 60, + "language": "HTML", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 4, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting", + "comments", + "discussion", + "markdown", + "oauth2", + "real-time", + "self-hosted", + "static-blog", + "static-site", + "sveltejs" + ], + "visibility": "public", + "forks": 4, + "open_issues": 3, + "watchers": 60, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 4, + "subscribers_count": 5 +} diff --git a/apigh/2023-04-19/comments_app.commit b/apigh/2023-04-19/comments_app.commit new file mode 100644 index 00000000..51cdadfd --- /dev/null +++ b/apigh/2023-04-19/comments_app.commit @@ -0,0 +1,98 @@ +{ + "sha": "cfd5c258277453e55043d0710122afbeb50eade6", + "node_id": "MDY6Q29tbWl0OTAzMzY0MDM6Y2ZkNWMyNTgyNzc0NTNlNTUwNDNkMDcxMDEyMmFmYmViNTBlYWRlNg==", + "commit": { + "author": { + "name": "dyu", + "email": "david.yu.ftw@gmail.com", + "date": "2019-01-20T18:57:15Z" + }, + "committer": { + "name": "dyu", + "email": "david.yu.ftw@gmail.com", + "date": "2019-01-20T18:57:15Z" + }, + "message": "fix dl link", + "tree": { + "sha": "17b3e3c49ac4dd208a5b18c7c6cf1f4f310ec423", + "url": "https://api.github.com/repos/dyu/comments/git/trees/17b3e3c49ac4dd208a5b18c7c6cf1f4f310ec423" + }, + "url": "https://api.github.com/repos/dyu/comments/git/commits/cfd5c258277453e55043d0710122afbeb50eade6", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/dyu/comments/commits/cfd5c258277453e55043d0710122afbeb50eade6", + "html_url": "https://github.com/dyu/comments/commit/cfd5c258277453e55043d0710122afbeb50eade6", + "comments_url": "https://api.github.com/repos/dyu/comments/commits/cfd5c258277453e55043d0710122afbeb50eade6/comments", + "author": { + "login": "dyu", + "id": 79355, + "node_id": "MDQ6VXNlcjc5MzU1", + "avatar_url": "https://avatars.githubusercontent.com/u/79355?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dyu", + "html_url": "https://github.com/dyu", + "followers_url": "https://api.github.com/users/dyu/followers", + "following_url": "https://api.github.com/users/dyu/following{/other_user}", + "gists_url": "https://api.github.com/users/dyu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dyu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dyu/subscriptions", + "organizations_url": "https://api.github.com/users/dyu/orgs", + "repos_url": "https://api.github.com/users/dyu/repos", + "events_url": "https://api.github.com/users/dyu/events{/privacy}", + "received_events_url": "https://api.github.com/users/dyu/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "dyu", + "id": 79355, + "node_id": "MDQ6VXNlcjc5MzU1", + "avatar_url": "https://avatars.githubusercontent.com/u/79355?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dyu", + "html_url": "https://github.com/dyu", + "followers_url": "https://api.github.com/users/dyu/followers", + "following_url": "https://api.github.com/users/dyu/following{/other_user}", + "gists_url": "https://api.github.com/users/dyu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dyu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dyu/subscriptions", + "organizations_url": "https://api.github.com/users/dyu/orgs", + "repos_url": "https://api.github.com/users/dyu/repos", + "events_url": "https://api.github.com/users/dyu/events{/privacy}", + "received_events_url": "https://api.github.com/users/dyu/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "eeba43aa4f411805dbdc0c9431fa7e08f2f2f203", + "url": "https://api.github.com/repos/dyu/comments/commits/eeba43aa4f411805dbdc0c9431fa7e08f2f2f203", + "html_url": "https://github.com/dyu/comments/commit/eeba43aa4f411805dbdc0c9431fa7e08f2f2f203" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "e2c09c15d82b4c19ba84da68532824f778bc92f0", + "filename": "README.md", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/dyu/comments/blob/cfd5c258277453e55043d0710122afbeb50eade6/README.md", + "raw_url": "https://github.com/dyu/comments/raw/cfd5c258277453e55043d0710122afbeb50eade6/README.md", + "contents_url": "https://api.github.com/repos/dyu/comments/contents/README.md?ref=cfd5c258277453e55043d0710122afbeb50eade6", + "patch": "@@ -4,7 +4,7 @@ A real-time comment engine with support for anonymous or authenticated posts\n ### Quickstart\n ```sh\n mkdir -p target/standalone && cd target/standalone\n-wget https://unpkg.com/dyu-comments@0.6.0/bin/comments-linux-standalone-x64.tar.gz\n+wget https://cdn.jsdelivr.net/npm/dyu-comments@0.6.0/bin/comments-linux-standalone-x64.tar.gz\n tar -xzf comments-linux-standalone-x64.tar.gz\n ./start.sh\n ```" + } + ] +} diff --git a/apigh/2023-04-19/comments_vivalaakam b/apigh/2023-04-19/comments_vivalaakam new file mode 100644 index 00000000..3f943222 --- /dev/null +++ b/apigh/2023-04-19/comments_vivalaakam @@ -0,0 +1,112 @@ +{ + "id": 22027703, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjAyNzcwMw==", + "name": "comments", + "full_name": "vivalaakam/comments", + "private": false, + "owner": { + "login": "vivalaakam", + "id": 758872, + "node_id": "MDQ6VXNlcjc1ODg3Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/758872?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vivalaakam", + "html_url": "https://github.com/vivalaakam", + "followers_url": "https://api.github.com/users/vivalaakam/followers", + "following_url": "https://api.github.com/users/vivalaakam/following{/other_user}", + "gists_url": "https://api.github.com/users/vivalaakam/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vivalaakam/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vivalaakam/subscriptions", + "organizations_url": "https://api.github.com/users/vivalaakam/orgs", + "repos_url": "https://api.github.com/users/vivalaakam/repos", + "events_url": "https://api.github.com/users/vivalaakam/events{/privacy}", + "received_events_url": "https://api.github.com/users/vivalaakam/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/vivalaakam/comments", + "description": "ะฟั€ะพัั‚ะตะฝัŒะบะฐั ัะธัั‚ะตะผะฐ ะบะพะผะผะตะฝั‚ะฐั€ะธะตะฒ ั ะฒะพะทะผะพะถะฝะพัั‚ัŒัŽ ัƒะบะฐะทะฐั‚ัŒ ั‡ะตั€ะตะท # ะพะฟั€ะตะดะตะปะตะฝะฝั‹ั… ะปะธั†, ะฟั€ะพะดัƒะบั‚ะพะฒ, ะธะปะธ ะบะพะผะฟะฐะฝะธะน", + "fork": false, + "url": "https://api.github.com/repos/vivalaakam/comments", + "forks_url": "https://api.github.com/repos/vivalaakam/comments/forks", + "keys_url": "https://api.github.com/repos/vivalaakam/comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vivalaakam/comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vivalaakam/comments/teams", + "hooks_url": "https://api.github.com/repos/vivalaakam/comments/hooks", + "issue_events_url": "https://api.github.com/repos/vivalaakam/comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/vivalaakam/comments/events", + "assignees_url": "https://api.github.com/repos/vivalaakam/comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/vivalaakam/comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/vivalaakam/comments/tags", + "blobs_url": "https://api.github.com/repos/vivalaakam/comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vivalaakam/comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vivalaakam/comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vivalaakam/comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vivalaakam/comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vivalaakam/comments/languages", + "stargazers_url": "https://api.github.com/repos/vivalaakam/comments/stargazers", + "contributors_url": "https://api.github.com/repos/vivalaakam/comments/contributors", + "subscribers_url": "https://api.github.com/repos/vivalaakam/comments/subscribers", + "subscription_url": "https://api.github.com/repos/vivalaakam/comments/subscription", + "commits_url": "https://api.github.com/repos/vivalaakam/comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vivalaakam/comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vivalaakam/comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vivalaakam/comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/vivalaakam/comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vivalaakam/comments/merges", + "archive_url": "https://api.github.com/repos/vivalaakam/comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vivalaakam/comments/downloads", + "issues_url": "https://api.github.com/repos/vivalaakam/comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/vivalaakam/comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vivalaakam/comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vivalaakam/comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vivalaakam/comments/labels{/name}", + "releases_url": "https://api.github.com/repos/vivalaakam/comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/vivalaakam/comments/deployments", + "created_at": "2014-07-20T06:44:16Z", + "updated_at": "2015-05-24T11:54:30Z", + "pushed_at": "2015-05-24T11:54:30Z", + "git_url": "git://github.com/vivalaakam/comments.git", + "ssh_url": "git@github.com:vivalaakam/comments.git", + "clone_url": "https://github.com/vivalaakam/comments.git", + "svn_url": "https://github.com/vivalaakam/comments", + "homepage": null, + "size": 468, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/comments_vivalaakam.commit b/apigh/2023-04-19/comments_vivalaakam.commit new file mode 100644 index 00000000..3fc403a0 --- /dev/null +++ b/apigh/2023-04-19/comments_vivalaakam.commit @@ -0,0 +1,497 @@ +{ + "sha": "2fb714060fa770507bded29e731f70692be81919", + "node_id": "MDY6Q29tbWl0MjIwMjc3MDM6MmZiNzE0MDYwZmE3NzA1MDdiZGVkMjllNzMxZjcwNjkyYmU4MTkxOQ==", + "commit": { + "author": { + "name": "vivalaakam", + "email": "vivalaakam@gmail.com", + "date": "2015-05-24T11:54:15Z" + }, + "committer": { + "name": "vivalaakam", + "email": "vivalaakam@gmail.com", + "date": "2015-05-24T11:54:15Z" + }, + "message": "add grunt", + "tree": { + "sha": "c24de907bd4cb0f3eae828ac25be2b0507eb2c5a", + "url": "https://api.github.com/repos/vivalaakam/comments/git/trees/c24de907bd4cb0f3eae828ac25be2b0507eb2c5a" + }, + "url": "https://api.github.com/repos/vivalaakam/comments/git/commits/2fb714060fa770507bded29e731f70692be81919", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/vivalaakam/comments/commits/2fb714060fa770507bded29e731f70692be81919", + "html_url": "https://github.com/vivalaakam/comments/commit/2fb714060fa770507bded29e731f70692be81919", + "comments_url": "https://api.github.com/repos/vivalaakam/comments/commits/2fb714060fa770507bded29e731f70692be81919/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "url": "https://api.github.com/repos/vivalaakam/comments/commits/e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "html_url": "https://github.com/vivalaakam/comments/commit/e7cc397ceb34a764286ef981027f4fa4e5962d0a" + } + ], + "stats": { + "total": 11172, + "additions": 271, + "deletions": 10901 + }, + "files": [ + { + "sha": "ec060be847caf3e5b9adbaa33c8a82e3efe9f128", + "filename": ".gitignore", + "status": "added", + "additions": 8, + "deletions": 0, + "changes": 8, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/.gitignore", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/.gitignore", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/.gitignore?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -0,0 +1,8 @@\n+node_modules\n+bower_components\n+tmp\n+.DS_Store\n+public/images\n+public/fonts\n+public/javascripts\n+public/stylesheets" + }, + { + "sha": "3e742232ef55a3f4032466bf07b88705124cb4c1", + "filename": "Gruntfile.js", + "status": "added", + "additions": 92, + "deletions": 0, + "changes": 92, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/Gruntfile.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/Gruntfile.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/Gruntfile.js?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -0,0 +1,92 @@\n+/*jslint node: true */\n+\"use strict\";\n+\n+\n+module.exports = function(grunt) {\n+\n+ grunt.initConfig({\n+ pkg: grunt.file.readJSON('package.json'),\n+ connect: {\n+ server: {\n+ options: {\n+ hostname: 'localhost',\n+ port: 3000,\n+ base: './public'\n+ }\n+ }\n+ },\n+ watch: {\n+ taskName: {\n+ options: { // Live reload is now specific to this task\n+ livereload: true\n+ },\n+ files: [ // Files to livereload on\n+ \"app/*.js\",\n+ \"views/*.html\"\n+ ],\n+ tasks: ['html2js', 'concat'],\n+ }\n+ },\n+ less: {\n+ development: {\n+ options: {\n+ compress: false,\n+ yuicompress: false,\n+ optimization: 2\n+ },\n+ files: {\n+ \"./public/stylesheets/style.css\": \"./less/app.less\" // destination file and source file\n+ }\n+ }\n+ },\n+ html2js: {\n+ options: {\n+ rename: function(name) {\n+ return name.replace('../', '');\n+ }\n+ },\n+ dist: {\n+ src: ['views/*.html'],\n+ dest: 'tmp/templates.js',\n+ },\n+ },\n+ copy: {\n+ main: {\n+ files: [{\n+ expand: true,\n+ flatten: true,\n+ src: ['bower_components/bootstrap/fonts/**'],\n+ dest: 'public/fonts',\n+ filter: 'isFile',\n+ }],\n+ },\n+ },\n+ concat: {\n+ dist: {\n+ src: [\n+ 'bower_components/underscore/underscore.js',\n+ 'bower_components/jquery/dist/jquery.js',\n+ 'bower_components/chosen/chosen.jquery.min.js',\n+ 'bower_components/angular/angular.js',\n+ 'bower_components/angular-cookies/angular-cookies.js',\n+ 'bower_components/angular-route/angular-route.js',\n+ 'bower_components/angular-sanitize/angular-sanitize.js',\n+ 'app/*.js',\n+ 'tmp/*.js'\n+ ],\n+ dest: 'public/javascripts/main.js'\n+ }\n+ },\n+ });\n+\n+ grunt.loadNpmTasks('grunt-contrib-connect');\n+ grunt.loadNpmTasks('grunt-contrib-concat');\n+ grunt.loadNpmTasks('grunt-contrib-watch');\n+ grunt.loadNpmTasks('grunt-contrib-less');\n+ grunt.loadNpmTasks('grunt-contrib-copy');\n+ grunt.loadNpmTasks('grunt-html2js');\n+\n+\n+ grunt.registerTask('default', ['less:development', 'html2js', 'concat', 'copy', 'connect:server', 'watch']);\n+\n+};" + }, + { + "sha": "54449b29309c0be0df9ce823ba631e4d5ed12e94", + "filename": "amakarov.json", + "status": "removed", + "additions": 0, + "deletions": 12, + "changes": 12, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/amakarov.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/amakarov.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/amakarov.json?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "patch": "@@ -1,12 +0,0 @@\n-{\n- \"login\": \"amakarov\",\n- \"role\": \"admin\",\n- \"name\": \"ะœะฐะบะฐั€ะพะฒ ะะฝะดั€ะตะน\",\n- \"password\": \"pass\",\n- \"modules\": {\n- \"module1\": \"auditor\",\n- \"module2\": \"unit\",\n- \"module3\": \"admin\"\n-\n- }\n-}" + }, + { + "sha": "2106d2b303224f7d8d0c1410144c9bab147f920f", + "filename": "app/app.js", + "status": "renamed", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/app%2Fapp.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/app%2Fapp.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/app%2Fapp.js?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -1,4 +1,4 @@\n-var app = angular.module('app', ['ngRoute' , 'ngSanitize'])\n+var app = angular.module('app', ['ngRoute' , 'ngSanitize', 'templates-dist'])\n .config(['$routeProvider', '$locationProvider', '$httpProvider',\n function($routeProvider, $locationProvider, $httpProvider) {\n $routeProvider", + "previous_filename": "js/app.js" + }, + { + "sha": "a0153b6257e1678f9abf02db05382c1ece5ba3d5", + "filename": "app/controllers.js", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/app%2Fcontrollers.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/app%2Fcontrollers.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/app%2Fcontrollers.js?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "js/controllers.js" + }, + { + "sha": "e964d45a9341d411e8fa894e500db379a1848edd", + "filename": "app/directives.js", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/app%2Fdirectives.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/app%2Fdirectives.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/app%2Fdirectives.js?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "js/directives.js" + }, + { + "sha": "824413a06cee4754f2c61d7cac275c1d39b24832", + "filename": "app/services.js", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/app%2Fservices.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/app%2Fservices.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/app%2Fservices.js?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "js/services.js" + }, + { + "sha": "03365ef59e6b76a3ceabc76682dc57adba5a9e98", + "filename": "bower.json", + "status": "added", + "additions": 18, + "deletions": 0, + "changes": 18, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/bower.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/bower.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/bower.json?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -0,0 +1,18 @@\n+{\n+ \"name\": \"comment\",\n+ \"version\": \"0.0.1\",\n+ \"homepage\": \"https://github.com/vivalaakam/comments\",\n+ \"authors\": [\n+ \"vivalaakam \"\n+ ],\n+ \"license\": \"MIT\",\n+ \"dependencies\": {\n+ \"angular\": \"~1.3\",\n+ \"angular-route\": \"~1.3\",\n+ \"angular-cookies\": \"~1.3\",\n+ \"angular-sanitize\": \"~1.3\",\n+ \"jquery\": \"~2\",\n+ \"bootstrap\": \"~3\",\n+ \"underscore\" : \"~1.8\"\n+ }\n+}" + }, + { + "sha": "11fcc9baf93b77ba1ab12ba64c31f4e93811f651", + "filename": "css/vendor/bootstrap-theme.css", + "status": "removed", + "additions": 0, + "deletions": 347, + "changes": 347, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/css%2Fvendor%2Fbootstrap-theme.css", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/css%2Fvendor%2Fbootstrap-theme.css", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/css%2Fvendor%2Fbootstrap-theme.css?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "patch": "@@ -1,347 +0,0 @@\n-/*!\n- * Bootstrap v3.1.0 (http://getbootstrap.com)\n- * Copyright 2011-2014 Twitter, Inc.\n- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n- */\n-\n-.btn-default,\n-.btn-primary,\n-.btn-success,\n-.btn-info,\n-.btn-warning,\n-.btn-danger {\n- text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n-}\n-.btn-default:active,\n-.btn-primary:active,\n-.btn-success:active,\n-.btn-info:active,\n-.btn-warning:active,\n-.btn-danger:active,\n-.btn-default.active,\n-.btn-primary.active,\n-.btn-success.active,\n-.btn-info.active,\n-.btn-warning.active,\n-.btn-danger.active {\n- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n-}\n-.btn:active,\n-.btn.active {\n- background-image: none;\n-}\n-.btn-default {\n- text-shadow: 0 1px 0 #fff;\n- background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n- background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n- border-color: #dbdbdb;\n- border-color: #ccc;\n-}\n-.btn-default:hover,\n-.btn-default:focus {\n- background-color: #e0e0e0;\n- background-position: 0 -15px;\n-}\n-.btn-default:active,\n-.btn-default.active {\n- background-color: #e0e0e0;\n- border-color: #dbdbdb;\n-}\n-.btn-primary {\n- background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n- background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n- border-color: #2b669a;\n-}\n-.btn-primary:hover,\n-.btn-primary:focus {\n- background-color: #2d6ca2;\n- background-position: 0 -15px;\n-}\n-.btn-primary:active,\n-.btn-primary.active {\n- background-color: #2d6ca2;\n- border-color: #2b669a;\n-}\n-.btn-success {\n- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n- border-color: #3e8f3e;\n-}\n-.btn-success:hover,\n-.btn-success:focus {\n- background-color: #419641;\n- background-position: 0 -15px;\n-}\n-.btn-success:active,\n-.btn-success.active {\n- background-color: #419641;\n- border-color: #3e8f3e;\n-}\n-.btn-info {\n- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n- border-color: #28a4c9;\n-}\n-.btn-info:hover,\n-.btn-info:focus {\n- background-color: #2aabd2;\n- background-position: 0 -15px;\n-}\n-.btn-info:active,\n-.btn-info.active {\n- background-color: #2aabd2;\n- border-color: #28a4c9;\n-}\n-.btn-warning {\n- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n- border-color: #e38d13;\n-}\n-.btn-warning:hover,\n-.btn-warning:focus {\n- background-color: #eb9316;\n- background-position: 0 -15px;\n-}\n-.btn-warning:active,\n-.btn-warning.active {\n- background-color: #eb9316;\n- border-color: #e38d13;\n-}\n-.btn-danger {\n- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n- border-color: #b92c28;\n-}\n-.btn-danger:hover,\n-.btn-danger:focus {\n- background-color: #c12e2a;\n- background-position: 0 -15px;\n-}\n-.btn-danger:active,\n-.btn-danger.active {\n- background-color: #c12e2a;\n- border-color: #b92c28;\n-}\n-.thumbnail,\n-.img-thumbnail {\n- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n-}\n-.dropdown-menu > li > a:hover,\n-.dropdown-menu > li > a:focus {\n- background-color: #e8e8e8;\n- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.dropdown-menu > .active > a,\n-.dropdown-menu > .active > a:hover,\n-.dropdown-menu > .active > a:focus {\n- background-color: #357ebd;\n- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.navbar-default {\n- background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n- background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n- border-radius: 4px;\n- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n-}\n-.navbar-default .navbar-nav > .active > a {\n- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);\n- background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);\n- background-repeat: repeat-x;\n- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n-}\n-.navbar-brand,\n-.navbar-nav > li > a {\n- text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n-}\n-.navbar-inverse {\n- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n- background-repeat: repeat-x;\n-}\n-.navbar-inverse .navbar-nav > .active > a {\n- background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);\n- background-image: linear-gradient(to bottom, #222 0%, #282828 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);\n- background-repeat: repeat-x;\n- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n- box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n-}\n-.navbar-inverse .navbar-brand,\n-.navbar-inverse .navbar-nav > li > a {\n- text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n-}\n-.navbar-static-top,\n-.navbar-fixed-top,\n-.navbar-fixed-bottom {\n- border-radius: 0;\n-}\n-.alert {\n- text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n-}\n-.alert-success {\n- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n- background-repeat: repeat-x;\n- border-color: #b2dba1;\n-}\n-.alert-info {\n- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n- background-repeat: repeat-x;\n- border-color: #9acfea;\n-}\n-.alert-warning {\n- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n- background-repeat: repeat-x;\n- border-color: #f5e79e;\n-}\n-.alert-danger {\n- background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n- background-repeat: repeat-x;\n- border-color: #dca7a7;\n-}\n-.progress {\n- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.progress-bar {\n- background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);\n- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.progress-bar-success {\n- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.progress-bar-info {\n- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.progress-bar-warning {\n- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.progress-bar-danger {\n- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.list-group {\n- border-radius: 4px;\n- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n- box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n-}\n-.list-group-item.active,\n-.list-group-item.active:hover,\n-.list-group-item.active:focus {\n- text-shadow: 0 -1px 0 #3071a9;\n- background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);\n- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n- background-repeat: repeat-x;\n- border-color: #3278b3;\n-}\n-.panel {\n- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n- box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n-}\n-.panel-default > .panel-heading {\n- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.panel-primary > .panel-heading {\n- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.panel-success > .panel-heading {\n- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.panel-info > .panel-heading {\n- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.panel-warning > .panel-heading {\n- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.panel-danger > .panel-heading {\n- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n- background-repeat: repeat-x;\n-}\n-.well {\n- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n- background-repeat: repeat-x;\n- border-color: #dcdcdc;\n- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n- box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n-}\n-/*# sourceMappingURL=bootstrap-theme.css.map */" + }, + { + "sha": "29c13196d8a61a3a00f2a08a7294f0ca94f7c030", + "filename": "css/vendor/bootstrap-theme.css.map", + "status": "removed", + "additions": 0, + "deletions": 1, + "changes": 1, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/css%2Fvendor%2Fbootstrap-theme.css.map", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/css%2Fvendor%2Fbootstrap-theme.css.map", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/css%2Fvendor%2Fbootstrap-theme.css.map?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "patch": "@@ -1 +0,0 @@\n-{\"version\":3,\"sources\":[\"less/theme.less\",\"less/mixins.less\"],\"names\":[],\"mappings\":\"AAeA;AACA;AACA;AACA;AACA;AACA;EACE,wCAAA;ECqGA,2FAAA;EACQ,mFAAA;;ADjGR,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;AACD,YAAC;AAAD,YAAC;AAAD,YAAC;AAAD,SAAC;AAAD,YAAC;AAAD,WAAC;EC+FD,wDAAA;EACQ,gDAAA;;ADpER,IAAC;AACD,IAAC;EACC,sBAAA;;AAKJ;EC8PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED/TA,2BAAA;EACA,qBAAA;EAyB2C,yBAAA;EAA2B,kBAAA;;AAvBtE,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAeJ;EC6PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED/TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAgBJ;EC4PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED/TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAiBJ;EC2PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED/TA,2BAAA;EACA,qBAAA;;AAEA,SAAC;AACD,SAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,SAAC;AACD,SAAC;EACC,yBAAA;EACA,qBAAA;;AAkBJ;EC0PI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED/TA,2BAAA;EACA,qBAAA;;AAEA,YAAC;AACD,YAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,YAAC;AACD,YAAC;EACC,yBAAA;EACA,qBAAA;;AAmBJ;ECyPI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EAEA,sHAAA;EAoCF,mEAAA;ED/TA,2BAAA;EACA,qBAAA;;AAEA,WAAC;AACD,WAAC;EACC,yBAAA;EACA,4BAAA;;AAGF,WAAC;AACD,WAAC;EACC,yBAAA;EACA,qBAAA;;AA2BJ;AACA;EC8CE,kDAAA;EACQ,0CAAA;;ADrCV,cAAe,KAAK,IAAG;AACvB,cAAe,KAAK,IAAG;ECqOnB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EDtOF,yBAAA;;AAEF,cAAe,UAAU;AACzB,cAAe,UAAU,IAAG;AAC5B,cAAe,UAAU,IAAG;EC+NxB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EDhOF,yBAAA;;AAUF;ECmNI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;EDvPA,kBAAA;ECcA,2FAAA;EACQ,mFAAA;;ADlBV,eAOE,YAAY,UAAU;EC4MpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EArMF,wDAAA;EACQ,gDAAA;;ADNV;AACA,WAAY,KAAK;EACf,8CAAA;;AAIF;ECiMI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EAoCF,mEAAA;;ADxOF,eAIE,YAAY,UAAU;EC6LpB,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;EArMF,uDAAA;EACQ,+CAAA;;ADAV,eASE;AATF,eAUE,YAAY,KAAK;EACf,yCAAA;;AAKJ;AACA;AACA;EACE,gBAAA;;AAUF;EACE,6CAAA;EC/BA,0FAAA;EACQ,kFAAA;;AD0CV;ECuJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9JF,qBAAA;;AAKF;ECsJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9JF,qBAAA;;AAMF;ECqJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9JF,qBAAA;;AAOF;ECoJI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED9JF,qBAAA;;AAgBF;EC2II,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADpIJ;ECiII,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADnIJ;ECgII,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADlIJ;EC+HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADjIJ;EC8HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADhIJ;EC6HI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADxHJ;EACE,kBAAA;EC9EA,kDAAA;EACQ,0CAAA;;ADgFV,gBAAgB;AAChB,gBAAgB,OAAO;AACvB,gBAAgB,OAAO;EACrB,6BAAA;EC8GE,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED/GF,qBAAA;;AAUF;EChGE,iDAAA;EACQ,yCAAA;;ADyGV,cAAe;ECwFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD1FJ,cAAe;ECuFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADzFJ,cAAe;ECsFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADxFJ,WAAY;ECqFR,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADvFJ,cAAe;ECoFX,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;ADtFJ,aAAc;ECmFV,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;;AD9EJ;EC2EI,kBAAkB,sDAAlB;EACA,kBAAkB,oDAAlB;EACA,2BAAA;EACA,sHAAA;ED5EF,qBAAA;ECzHA,yFAAA;EACQ,iFAAA\",\"sourcesContent\":[\"\\n//\\n// Load core variables and mixins\\n// --------------------------------------------------\\n\\n@import \\\"variables.less\\\";\\n@import \\\"mixins.less\\\";\\n\\n\\n\\n//\\n// Buttons\\n// --------------------------------------------------\\n\\n// Common styles\\n.btn-default,\\n.btn-primary,\\n.btn-success,\\n.btn-info,\\n.btn-warning,\\n.btn-danger {\\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\\n .box-shadow(@shadow);\\n\\n // Reset the shadow\\n &:active,\\n &.active {\\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\\n }\\n}\\n\\n// Mixin for generating new styles\\n.btn-styles(@btn-color: #555) {\\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\\n background-repeat: repeat-x;\\n border-color: darken(@btn-color, 14%);\\n\\n &:hover,\\n &:focus {\\n background-color: darken(@btn-color, 12%);\\n background-position: 0 -15px;\\n }\\n\\n &:active,\\n &.active {\\n background-color: darken(@btn-color, 12%);\\n border-color: darken(@btn-color, 14%);\\n }\\n}\\n\\n// Common styles\\n.btn {\\n // Remove the gradient for the pressed/active state\\n &:active,\\n &.active {\\n background-image: none;\\n }\\n}\\n\\n// Apply the mixin to the buttons\\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\\n.btn-primary { .btn-styles(@btn-primary-bg); }\\n.btn-success { .btn-styles(@btn-success-bg); }\\n.btn-info { .btn-styles(@btn-info-bg); }\\n.btn-warning { .btn-styles(@btn-warning-bg); }\\n.btn-danger { .btn-styles(@btn-danger-bg); }\\n\\n\\n\\n//\\n// Images\\n// --------------------------------------------------\\n\\n.thumbnail,\\n.img-thumbnail {\\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\\n}\\n\\n\\n\\n//\\n// Dropdowns\\n// --------------------------------------------------\\n\\n.dropdown-menu > li > a:hover,\\n.dropdown-menu > li > a:focus {\\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\\n background-color: darken(@dropdown-link-hover-bg, 5%);\\n}\\n.dropdown-menu > .active > a,\\n.dropdown-menu > .active > a:hover,\\n.dropdown-menu > .active > a:focus {\\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\\n background-color: darken(@dropdown-link-active-bg, 5%);\\n}\\n\\n\\n\\n//\\n// Navbar\\n// --------------------------------------------------\\n\\n// Default navbar\\n.navbar-default {\\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\\n border-radius: @navbar-border-radius;\\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\\n .box-shadow(@shadow);\\n\\n .navbar-nav > .active > a {\\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\\n }\\n}\\n.navbar-brand,\\n.navbar-nav > li > a {\\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\\n}\\n\\n// Inverted navbar\\n.navbar-inverse {\\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\\n\\n .navbar-nav > .active > a {\\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\\n }\\n\\n .navbar-brand,\\n .navbar-nav > li > a {\\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\\n }\\n}\\n\\n// Undo rounded corners in static and fixed navbars\\n.navbar-static-top,\\n.navbar-fixed-top,\\n.navbar-fixed-bottom {\\n border-radius: 0;\\n}\\n\\n\\n\\n//\\n// Alerts\\n// --------------------------------------------------\\n\\n// Common styles\\n.alert {\\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\\n .box-shadow(@shadow);\\n}\\n\\n// Mixin for generating new styles\\n.alert-styles(@color) {\\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\\n border-color: darken(@color, 15%);\\n}\\n\\n// Apply the mixin to the alerts\\n.alert-success { .alert-styles(@alert-success-bg); }\\n.alert-info { .alert-styles(@alert-info-bg); }\\n.alert-warning { .alert-styles(@alert-warning-bg); }\\n.alert-danger { .alert-styles(@alert-danger-bg); }\\n\\n\\n\\n//\\n// Progress bars\\n// --------------------------------------------------\\n\\n// Give the progress background some depth\\n.progress {\\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\\n}\\n\\n// Mixin for generating new styles\\n.progress-bar-styles(@color) {\\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\\n}\\n\\n// Apply the mixin to the progress bars\\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\\n\\n\\n\\n//\\n// List groups\\n// --------------------------------------------------\\n\\n.list-group {\\n border-radius: @border-radius-base;\\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\\n}\\n.list-group-item.active,\\n.list-group-item.active:hover,\\n.list-group-item.active:focus {\\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\\n border-color: darken(@list-group-active-border, 7.5%);\\n}\\n\\n\\n\\n//\\n// Panels\\n// --------------------------------------------------\\n\\n// Common styles\\n.panel {\\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\\n}\\n\\n// Mixin for generating new styles\\n.panel-heading-styles(@color) {\\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\\n}\\n\\n// Apply the mixin to the panel headings only\\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\\n\\n\\n\\n//\\n// Wells\\n// --------------------------------------------------\\n\\n.well {\\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\\n border-color: darken(@well-bg, 10%);\\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\\n .box-shadow(@shadow);\\n}\\n\",\"//\\n// Mixins\\n// --------------------------------------------------\\n\\n\\n// Utilities\\n// -------------------------\\n\\n// Clearfix\\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\\n//\\n// For modern browsers\\n// 1. The space content is one way to avoid an Opera bug when the\\n// contenteditable attribute is included anywhere else in the document.\\n// Otherwise it causes space to appear at the top and bottom of elements\\n// that are clearfixed.\\n// 2. The use of `table` rather than `block` is only necessary if using\\n// `:before` to contain the top-margins of child elements.\\n.clearfix() {\\n &:before,\\n &:after {\\n content: \\\" \\\"; // 1\\n display: table; // 2\\n }\\n &:after {\\n clear: both;\\n }\\n}\\n\\n// WebKit-style focus\\n.tab-focus() {\\n // Default\\n outline: thin dotted;\\n // WebKit\\n outline: 5px auto -webkit-focus-ring-color;\\n outline-offset: -2px;\\n}\\n\\n// Center-align a block level element\\n.center-block() {\\n display: block;\\n margin-left: auto;\\n margin-right: auto;\\n}\\n\\n// Sizing shortcuts\\n.size(@width; @height) {\\n width: @width;\\n height: @height;\\n}\\n.square(@size) {\\n .size(@size; @size);\\n}\\n\\n// Placeholder text\\n.placeholder(@color: @input-color-placeholder) {\\n &:-moz-placeholder { color: @color; } // Firefox 4-18\\n &::-moz-placeholder { color: @color; // Firefox 19+\\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\\n}\\n\\n// Text overflow\\n// Requires inline-block or block for proper styling\\n.text-overflow() {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n\\n// CSS image replacement\\n//\\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\\n// mixins being reused as classes with the same name, this doesn't hold up. As\\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\\n// that we cannot chain the mixins together in Less, so they are repeated.\\n//\\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\\n\\n// Deprecated as of v3.0.1 (will be removed in v4)\\n.hide-text() {\\n font: ~\\\"0/0\\\" a;\\n color: transparent;\\n text-shadow: none;\\n background-color: transparent;\\n border: 0;\\n}\\n// New mixin to use as of v3.0.1\\n.text-hide() {\\n .hide-text();\\n}\\n\\n\\n\\n// CSS3 PROPERTIES\\n// --------------------------------------------------\\n\\n// Single side border-radius\\n.border-top-radius(@radius) {\\n border-top-right-radius: @radius;\\n border-top-left-radius: @radius;\\n}\\n.border-right-radius(@radius) {\\n border-bottom-right-radius: @radius;\\n border-top-right-radius: @radius;\\n}\\n.border-bottom-radius(@radius) {\\n border-bottom-right-radius: @radius;\\n border-bottom-left-radius: @radius;\\n}\\n.border-left-radius(@radius) {\\n border-bottom-left-radius: @radius;\\n border-top-left-radius: @radius;\\n}\\n\\n// Drop shadows\\n//\\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\\n// supported browsers that have box shadow capabilities now support the\\n// standard `box-shadow` property.\\n.box-shadow(@shadow) {\\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\\n box-shadow: @shadow;\\n}\\n\\n// Transitions\\n.transition(@transition) {\\n -webkit-transition: @transition;\\n transition: @transition;\\n}\\n.transition-property(@transition-property) {\\n -webkit-transition-property: @transition-property;\\n transition-property: @transition-property;\\n}\\n.transition-delay(@transition-delay) {\\n -webkit-transition-delay: @transition-delay;\\n transition-delay: @transition-delay;\\n}\\n.transition-duration(@transition-duration) {\\n -webkit-transition-duration: @transition-duration;\\n transition-duration: @transition-duration;\\n}\\n.transition-transform(@transition) {\\n -webkit-transition: -webkit-transform @transition;\\n -moz-transition: -moz-transform @transition;\\n -o-transition: -o-transform @transition;\\n transition: transform @transition;\\n}\\n\\n// Transformations\\n.rotate(@degrees) {\\n -webkit-transform: rotate(@degrees);\\n -ms-transform: rotate(@degrees); // IE9 only\\n transform: rotate(@degrees);\\n}\\n.scale(@ratio; @ratio-y...) {\\n -webkit-transform: scale(@ratio, @ratio-y);\\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\\n transform: scale(@ratio, @ratio-y);\\n}\\n.translate(@x; @y) {\\n -webkit-transform: translate(@x, @y);\\n -ms-transform: translate(@x, @y); // IE9 only\\n transform: translate(@x, @y);\\n}\\n.skew(@x; @y) {\\n -webkit-transform: skew(@x, @y);\\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\\n transform: skew(@x, @y);\\n}\\n.translate3d(@x; @y; @z) {\\n -webkit-transform: translate3d(@x, @y, @z);\\n transform: translate3d(@x, @y, @z);\\n}\\n\\n.rotateX(@degrees) {\\n -webkit-transform: rotateX(@degrees);\\n -ms-transform: rotateX(@degrees); // IE9 only\\n transform: rotateX(@degrees);\\n}\\n.rotateY(@degrees) {\\n -webkit-transform: rotateY(@degrees);\\n -ms-transform: rotateY(@degrees); // IE9 only\\n transform: rotateY(@degrees);\\n}\\n.perspective(@perspective) {\\n -webkit-perspective: @perspective;\\n -moz-perspective: @perspective;\\n perspective: @perspective;\\n}\\n.perspective-origin(@perspective) {\\n -webkit-perspective-origin: @perspective;\\n -moz-perspective-origin: @perspective;\\n perspective-origin: @perspective;\\n}\\n.transform-origin(@origin) {\\n -webkit-transform-origin: @origin;\\n -moz-transform-origin: @origin;\\n -ms-transform-origin: @origin; // IE9 only\\n transform-origin: @origin;\\n}\\n\\n// Animations\\n.animation(@animation) {\\n -webkit-animation: @animation;\\n animation: @animation;\\n}\\n.animation-name(@name) {\\n -webkit-animation-name: @name;\\n animation-name: @name;\\n}\\n.animation-duration(@duration) {\\n -webkit-animation-duration: @duration;\\n animation-duration: @duration;\\n}\\n.animation-timing-function(@timing-function) {\\n -webkit-animation-timing-function: @timing-function;\\n animation-timing-function: @timing-function;\\n}\\n.animation-delay(@delay) {\\n -webkit-animation-delay: @delay;\\n animation-delay: @delay;\\n}\\n.animation-iteration-count(@iteration-count) {\\n -webkit-animation-iteration-count: @iteration-count;\\n animation-iteration-count: @iteration-count;\\n}\\n.animation-direction(@direction) {\\n -webkit-animation-direction: @direction;\\n animation-direction: @direction;\\n}\\n\\n// Backface visibility\\n// Prevent browsers from flickering when using CSS 3D transforms.\\n// Default value is `visible`, but can be changed to `hidden`\\n.backface-visibility(@visibility){\\n -webkit-backface-visibility: @visibility;\\n -moz-backface-visibility: @visibility;\\n backface-visibility: @visibility;\\n}\\n\\n// Box sizing\\n.box-sizing(@boxmodel) {\\n -webkit-box-sizing: @boxmodel;\\n -moz-box-sizing: @boxmodel;\\n box-sizing: @boxmodel;\\n}\\n\\n// User select\\n// For selecting text on the page\\n.user-select(@select) {\\n -webkit-user-select: @select;\\n -moz-user-select: @select;\\n -ms-user-select: @select; // IE10+\\n -o-user-select: @select;\\n user-select: @select;\\n}\\n\\n// Resize anything\\n.resizable(@direction) {\\n resize: @direction; // Options: horizontal, vertical, both\\n overflow: auto; // Safari fix\\n}\\n\\n// CSS3 Content Columns\\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\\n -webkit-column-count: @column-count;\\n -moz-column-count: @column-count;\\n column-count: @column-count;\\n -webkit-column-gap: @column-gap;\\n -moz-column-gap: @column-gap;\\n column-gap: @column-gap;\\n}\\n\\n// Optional hyphenation\\n.hyphens(@mode: auto) {\\n word-wrap: break-word;\\n -webkit-hyphens: @mode;\\n -moz-hyphens: @mode;\\n -ms-hyphens: @mode; // IE10+\\n -o-hyphens: @mode;\\n hyphens: @mode;\\n}\\n\\n// Opacity\\n.opacity(@opacity) {\\n opacity: @opacity;\\n // IE8 filter\\n @opacity-ie: (@opacity * 100);\\n filter: ~\\\"alpha(opacity=@{opacity-ie})\\\";\\n}\\n\\n\\n\\n// GRADIENTS\\n// --------------------------------------------------\\n\\n#gradient {\\n\\n // Horizontal gradient, from left to right\\n //\\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\\n // Color stops are not available in IE9 and below.\\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\\n background-repeat: repeat-x;\\n filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\\\",argb(@start-color),argb(@end-color))); // IE9 and down\\n }\\n\\n // Vertical gradient, from top to bottom\\n //\\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\\n // Color stops are not available in IE9 and below.\\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\\n background-repeat: repeat-x;\\n filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\\\",argb(@start-color),argb(@end-color))); // IE9 and down\\n }\\n\\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\\n background-repeat: repeat-x;\\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\\n }\\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\\n background-repeat: no-repeat;\\n filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\\\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\\n }\\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\\n background-repeat: no-repeat;\\n filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\\\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\\n }\\n .radial(@inner-color: #555; @outer-color: #333) {\\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\\n background-image: radial-gradient(circle, @inner-color, @outer-color);\\n background-repeat: no-repeat;\\n }\\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\\n }\\n}\\n\\n// Reset filters for IE\\n//\\n// When you need to remove a gradient background, do not forget to use this to reset\\n// the IE filter for IE9 and below.\\n.reset-filter() {\\n filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\\\"));\\n}\\n\\n\\n\\n// Retina images\\n//\\n// Short retina mixin for setting background-image and -size\\n\\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\\n background-image: url(\\\"@{file-1x}\\\");\\n\\n @media\\n only screen and (-webkit-min-device-pixel-ratio: 2),\\n only screen and ( min--moz-device-pixel-ratio: 2),\\n only screen and ( -o-min-device-pixel-ratio: 2/1),\\n only screen and ( min-device-pixel-ratio: 2),\\n only screen and ( min-resolution: 192dpi),\\n only screen and ( min-resolution: 2dppx) {\\n background-image: url(\\\"@{file-2x}\\\");\\n background-size: @width-1x @height-1x;\\n }\\n}\\n\\n\\n// Responsive image\\n//\\n// Keep images from scaling beyond the width of their parents.\\n\\n.img-responsive(@display: block) {\\n display: @display;\\n max-width: 100%; // Part 1: Set a maximum relative to the parent\\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\\n}\\n\\n\\n// COMPONENT MIXINS\\n// --------------------------------------------------\\n\\n// Horizontal dividers\\n// -------------------------\\n// Dividers (basically an hr) within dropdowns and nav lists\\n.nav-divider(@color: #e5e5e5) {\\n height: 1px;\\n margin: ((@line-height-computed / 2) - 1) 0;\\n overflow: hidden;\\n background-color: @color;\\n}\\n\\n// Panels\\n// -------------------------\\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\\n border-color: @border;\\n\\n & > .panel-heading {\\n color: @heading-text-color;\\n background-color: @heading-bg-color;\\n border-color: @heading-border;\\n\\n + .panel-collapse .panel-body {\\n border-top-color: @border;\\n }\\n }\\n & > .panel-footer {\\n + .panel-collapse .panel-body {\\n border-bottom-color: @border;\\n }\\n }\\n}\\n\\n// Alerts\\n// -------------------------\\n.alert-variant(@background; @border; @text-color) {\\n background-color: @background;\\n border-color: @border;\\n color: @text-color;\\n\\n hr {\\n border-top-color: darken(@border, 5%);\\n }\\n .alert-link {\\n color: darken(@text-color, 10%);\\n }\\n}\\n\\n// Tables\\n// -------------------------\\n.table-row-variant(@state; @background) {\\n // Exact selectors below required to override `.table-striped` and prevent\\n // inheritance to nested tables.\\n .table > thead > tr,\\n .table > tbody > tr,\\n .table > tfoot > tr {\\n > td.@{state},\\n > th.@{state},\\n &.@{state} > td,\\n &.@{state} > th {\\n background-color: @background;\\n }\\n }\\n\\n // Hover states for `.table-hover`\\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\\n .table-hover > tbody > tr {\\n > td.@{state}:hover,\\n > th.@{state}:hover,\\n &.@{state}:hover > td,\\n &.@{state}:hover > th {\\n background-color: darken(@background, 5%);\\n }\\n }\\n}\\n\\n// List Groups\\n// -------------------------\\n.list-group-item-variant(@state; @background; @color) {\\n .list-group-item-@{state} {\\n color: @color;\\n background-color: @background;\\n\\n a& {\\n color: @color;\\n\\n .list-group-item-heading { color: inherit; }\\n\\n &:hover,\\n &:focus {\\n color: @color;\\n background-color: darken(@background, 5%);\\n }\\n &.active,\\n &.active:hover,\\n &.active:focus {\\n color: #fff;\\n background-color: @color;\\n border-color: @color;\\n }\\n }\\n }\\n}\\n\\n// Button variants\\n// -------------------------\\n// Easily pump out default styles, as well as :hover, :focus, :active,\\n// and disabled options for all buttons\\n.button-variant(@color; @background; @border) {\\n color: @color;\\n background-color: @background;\\n border-color: @border;\\n\\n &:hover,\\n &:focus,\\n &:active,\\n &.active,\\n .open .dropdown-toggle& {\\n color: @color;\\n background-color: darken(@background, 8%);\\n border-color: darken(@border, 12%);\\n }\\n &:active,\\n &.active,\\n .open .dropdown-toggle& {\\n background-image: none;\\n }\\n &.disabled,\\n &[disabled],\\n fieldset[disabled] & {\\n &,\\n &:hover,\\n &:focus,\\n &:active,\\n &.active {\\n background-color: @background;\\n border-color: @border;\\n }\\n }\\n\\n .badge {\\n color: @background;\\n background-color: @color;\\n }\\n}\\n\\n// Button sizes\\n// -------------------------\\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\\n padding: @padding-vertical @padding-horizontal;\\n font-size: @font-size;\\n line-height: @line-height;\\n border-radius: @border-radius;\\n}\\n\\n// Pagination\\n// -------------------------\\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\\n > li {\\n > a,\\n > span {\\n padding: @padding-vertical @padding-horizontal;\\n font-size: @font-size;\\n }\\n &:first-child {\\n > a,\\n > span {\\n .border-left-radius(@border-radius);\\n }\\n }\\n &:last-child {\\n > a,\\n > span {\\n .border-right-radius(@border-radius);\\n }\\n }\\n }\\n}\\n\\n// Labels\\n// -------------------------\\n.label-variant(@color) {\\n background-color: @color;\\n &[href] {\\n &:hover,\\n &:focus {\\n background-color: darken(@color, 10%);\\n }\\n }\\n}\\n\\n// Contextual backgrounds\\n// -------------------------\\n.bg-variant(@color) {\\n background-color: @color;\\n a&:hover {\\n background-color: darken(@color, 10%);\\n }\\n}\\n\\n// Typography\\n// -------------------------\\n.text-emphasis-variant(@color) {\\n color: @color;\\n a&:hover {\\n color: darken(@color, 10%);\\n }\\n}\\n\\n// Navbar vertical align\\n// -------------------------\\n// Vertically center elements in the navbar.\\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\\n.navbar-vertical-align(@element-height) {\\n margin-top: ((@navbar-height - @element-height) / 2);\\n margin-bottom: ((@navbar-height - @element-height) / 2);\\n}\\n\\n// Progress bars\\n// -------------------------\\n.progress-bar-variant(@color) {\\n background-color: @color;\\n .progress-striped & {\\n #gradient > .striped();\\n }\\n}\\n\\n// Responsive utilities\\n// -------------------------\\n// More easily include all the states for responsive-utilities.less.\\n.responsive-visibility() {\\n display: block !important;\\n table& { display: table; }\\n tr& { display: table-row !important; }\\n th&,\\n td& { display: table-cell !important; }\\n}\\n\\n.responsive-invisibility() {\\n &,\\n tr&,\\n th&,\\n td& { display: none !important; }\\n}\\n\\n\\n// Grid System\\n// -----------\\n\\n// Centered container element\\n.container-fixed() {\\n margin-right: auto;\\n margin-left: auto;\\n padding-left: (@grid-gutter-width / 2);\\n padding-right: (@grid-gutter-width / 2);\\n &:extend(.clearfix all);\\n}\\n\\n// Creates a wrapper for a series of columns\\n.make-row(@gutter: @grid-gutter-width) {\\n margin-left: (@gutter / -2);\\n margin-right: (@gutter / -2);\\n &:extend(.clearfix all);\\n}\\n\\n// Generate the extra small columns\\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\\n position: relative;\\n float: left;\\n width: percentage((@columns / @grid-columns));\\n min-height: 1px;\\n padding-left: (@gutter / 2);\\n padding-right: (@gutter / 2);\\n}\\n.make-xs-column-offset(@columns) {\\n @media (min-width: @screen-xs-min) {\\n margin-left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-xs-column-push(@columns) {\\n @media (min-width: @screen-xs-min) {\\n left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-xs-column-pull(@columns) {\\n @media (min-width: @screen-xs-min) {\\n right: percentage((@columns / @grid-columns));\\n }\\n}\\n\\n\\n// Generate the small columns\\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\\n position: relative;\\n min-height: 1px;\\n padding-left: (@gutter / 2);\\n padding-right: (@gutter / 2);\\n\\n @media (min-width: @screen-sm-min) {\\n float: left;\\n width: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-sm-column-offset(@columns) {\\n @media (min-width: @screen-sm-min) {\\n margin-left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-sm-column-push(@columns) {\\n @media (min-width: @screen-sm-min) {\\n left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-sm-column-pull(@columns) {\\n @media (min-width: @screen-sm-min) {\\n right: percentage((@columns / @grid-columns));\\n }\\n}\\n\\n\\n// Generate the medium columns\\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\\n position: relative;\\n min-height: 1px;\\n padding-left: (@gutter / 2);\\n padding-right: (@gutter / 2);\\n\\n @media (min-width: @screen-md-min) {\\n float: left;\\n width: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-md-column-offset(@columns) {\\n @media (min-width: @screen-md-min) {\\n margin-left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-md-column-push(@columns) {\\n @media (min-width: @screen-md-min) {\\n left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-md-column-pull(@columns) {\\n @media (min-width: @screen-md-min) {\\n right: percentage((@columns / @grid-columns));\\n }\\n}\\n\\n\\n// Generate the large columns\\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\\n position: relative;\\n min-height: 1px;\\n padding-left: (@gutter / 2);\\n padding-right: (@gutter / 2);\\n\\n @media (min-width: @screen-lg-min) {\\n float: left;\\n width: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-lg-column-offset(@columns) {\\n @media (min-width: @screen-lg-min) {\\n margin-left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-lg-column-push(@columns) {\\n @media (min-width: @screen-lg-min) {\\n left: percentage((@columns / @grid-columns));\\n }\\n}\\n.make-lg-column-pull(@columns) {\\n @media (min-width: @screen-lg-min) {\\n right: percentage((@columns / @grid-columns));\\n }\\n}\\n\\n\\n// Framework grid generation\\n//\\n// Used only by Bootstrap to generate the correct number of grid classes given\\n// any value of `@grid-columns`.\\n\\n.make-grid-columns() {\\n // Common styles for all sizes of grid columns, widths 1-12\\n .col(@index) when (@index = 1) { // initial\\n @item: ~\\\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\\\";\\n .col((@index + 1), @item);\\n }\\n .col(@index, @list) when (@index =< @grid-columns) { // general; \\\"=<\\\" isn't a typo\\n @item: ~\\\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\\\";\\n .col((@index + 1), ~\\\"@{list}, @{item}\\\");\\n }\\n .col(@index, @list) when (@index > @grid-columns) { // terminal\\n @{list} {\\n position: relative;\\n // Prevent columns from collapsing when empty\\n min-height: 1px;\\n // Inner gutter via padding\\n padding-left: (@grid-gutter-width / 2);\\n padding-right: (@grid-gutter-width / 2);\\n }\\n }\\n .col(1); // kickstart it\\n}\\n\\n.make-grid-columns-float(@class) {\\n .col(@index) when (@index = 1) { // initial\\n @item: ~\\\".col-@{class}-@{index}\\\";\\n .col((@index + 1), @item);\\n }\\n .col(@index, @list) when (@index =< @grid-columns) { // general\\n @item: ~\\\".col-@{class}-@{index}\\\";\\n .col((@index + 1), ~\\\"@{list}, @{item}\\\");\\n }\\n .col(@index, @list) when (@index > @grid-columns) { // terminal\\n @{list} {\\n float: left;\\n }\\n }\\n .col(1); // kickstart it\\n}\\n\\n.calc-grid(@index, @class, @type) when (@type = width) and (@index > 0) {\\n .col-@{class}-@{index} {\\n width: percentage((@index / @grid-columns));\\n }\\n}\\n.calc-grid(@index, @class, @type) when (@type = push) {\\n .col-@{class}-push-@{index} {\\n left: percentage((@index / @grid-columns));\\n }\\n}\\n.calc-grid(@index, @class, @type) when (@type = pull) {\\n .col-@{class}-pull-@{index} {\\n right: percentage((@index / @grid-columns));\\n }\\n}\\n.calc-grid(@index, @class, @type) when (@type = offset) {\\n .col-@{class}-offset-@{index} {\\n margin-left: percentage((@index / @grid-columns));\\n }\\n}\\n\\n// Basic looping in LESS\\n.make-grid(@index, @class, @type) when (@index >= 0) {\\n .calc-grid(@index, @class, @type);\\n // next iteration\\n .make-grid((@index - 1), @class, @type);\\n}\\n\\n\\n// Form validation states\\n//\\n// Used in forms.less to generate the form validation CSS for warnings, errors,\\n// and successes.\\n\\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\\n // Color the label and help text\\n .help-block,\\n .control-label,\\n .radio,\\n .checkbox,\\n .radio-inline,\\n .checkbox-inline {\\n color: @text-color;\\n }\\n // Set the border and box shadow on specific inputs to match\\n .form-control {\\n border-color: @border-color;\\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\\n &:focus {\\n border-color: darken(@border-color, 10%);\\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\\n .box-shadow(@shadow);\\n }\\n }\\n // Set validation states also for addons\\n .input-group-addon {\\n color: @text-color;\\n border-color: @border-color;\\n background-color: @background-color;\\n }\\n // Optional feedback icon\\n .form-control-feedback {\\n color: @text-color;\\n }\\n}\\n\\n// Form control focus state\\n//\\n// Generate a customized focus state and for any input with the specified color,\\n// which defaults to the `@input-focus-border` variable.\\n//\\n// We highly encourage you to not customize the default value, but instead use\\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\\n// WebKit's default styles, but applicable to a wider range of browsers. Its\\n// usability and accessibility should be taken into account with any change.\\n//\\n// Example usage: change the default blue border and shadow to white for better\\n// contrast against a dark gray background.\\n\\n.form-control-focus(@color: @input-border-focus) {\\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\\n &:focus {\\n border-color: @color;\\n outline: 0;\\n .box-shadow(~\\\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\\\");\\n }\\n}\\n\\n// Form control sizing\\n//\\n// Relative text size, padding, and border-radii changes for form controls. For\\n// horizontal sizing, wrap controls in the predefined grid classes. `
    ');\n- } else {\n- this.container.html('' + this.default_text + '
      ');\n- }\n- this.form_field_jq.hide().after(this.container);\n- this.dropdown = this.container.find('div.chosen-drop').first();\n- this.search_field = this.container.find('input').first();\n- this.search_results = this.container.find('ul.chosen-results').first();\n- this.search_field_scale();\n- this.search_no_results = this.container.find('li.no-results').first();\n- if (this.is_multiple) {\n- this.search_choices = this.container.find('ul.chosen-choices').first();\n- this.search_container = this.container.find('li.search-field').first();\n- } else {\n- this.search_container = this.container.find('div.chosen-search').first();\n- this.selected_item = this.container.find('.chosen-single').first();\n- }\n- this.results_build();\n- this.set_tab_index();\n- this.set_label_behavior();\n- return this.form_field_jq.trigger(\"chosen:ready\", {\n- chosen: this\n- });\n- };\n-\n- Chosen.prototype.register_observers = function() {\n- var _this = this;\n-\n- this.container.bind('mousedown.chosen', function(evt) {\n- _this.container_mousedown(evt);\n- });\n- this.container.bind('mouseup.chosen', function(evt) {\n- _this.container_mouseup(evt);\n- });\n- this.container.bind('mouseenter.chosen', function(evt) {\n- _this.mouse_enter(evt);\n- });\n- this.container.bind('mouseleave.chosen', function(evt) {\n- _this.mouse_leave(evt);\n- });\n- this.search_results.bind('mouseup.chosen', function(evt) {\n- _this.search_results_mouseup(evt);\n- });\n- this.search_results.bind('mouseover.chosen', function(evt) {\n- _this.search_results_mouseover(evt);\n- });\n- this.search_results.bind('mouseout.chosen', function(evt) {\n- _this.search_results_mouseout(evt);\n- });\n- this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {\n- _this.search_results_mousewheel(evt);\n- });\n- this.form_field_jq.bind(\"chosen:updated.chosen\", function(evt) {\n- _this.results_update_field(evt);\n- });\n- this.form_field_jq.bind(\"chosen:activate.chosen\", function(evt) {\n- _this.activate_field(evt);\n- });\n- this.form_field_jq.bind(\"chosen:open.chosen\", function(evt) {\n- _this.container_mousedown(evt);\n- });\n- this.search_field.bind('blur.chosen', function(evt) {\n- _this.input_blur(evt);\n- });\n- this.search_field.bind('keyup.chosen', function(evt) {\n- _this.keyup_checker(evt);\n- });\n- this.search_field.bind('keydown.chosen', function(evt) {\n- _this.keydown_checker(evt);\n- });\n- this.search_field.bind('focus.chosen', function(evt) {\n- _this.input_focus(evt);\n- });\n- if (this.is_multiple) {\n- return this.search_choices.bind('click.chosen', function(evt) {\n- _this.choices_click(evt);\n- });\n- } else {\n- return this.container.bind('click.chosen', function(evt) {\n- evt.preventDefault();\n- });\n- }\n- };\n-\n- Chosen.prototype.destroy = function() {\n- $(document).unbind(\"click.chosen\", this.click_test_action);\n- if (this.search_field[0].tabIndex) {\n- this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;\n- }\n- this.container.remove();\n- this.form_field_jq.removeData('chosen');\n- return this.form_field_jq.show();\n- };\n-\n- Chosen.prototype.search_field_disabled = function() {\n- this.is_disabled = this.form_field_jq[0].disabled;\n- if (this.is_disabled) {\n- this.container.addClass('chosen-disabled');\n- this.search_field[0].disabled = true;\n- if (!this.is_multiple) {\n- this.selected_item.unbind(\"focus.chosen\", this.activate_action);\n- }\n- return this.close_field();\n- } else {\n- this.container.removeClass('chosen-disabled');\n- this.search_field[0].disabled = false;\n- if (!this.is_multiple) {\n- return this.selected_item.bind(\"focus.chosen\", this.activate_action);\n- }\n- }\n- };\n-\n- Chosen.prototype.container_mousedown = function(evt) {\n- if (!this.is_disabled) {\n- if (evt && evt.type === \"mousedown\" && !this.results_showing) {\n- evt.preventDefault();\n- }\n- if (!((evt != null) && ($(evt.target)).hasClass(\"search-choice-close\"))) {\n- if (!this.active_field) {\n- if (this.is_multiple) {\n- this.search_field.val(\"\");\n- }\n- $(document).bind('click.chosen', this.click_test_action);\n- this.results_show();\n- } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents(\"a.chosen-single\").length)) {\n- evt.preventDefault();\n- this.results_toggle();\n- }\n- return this.activate_field();\n- }\n- }\n- };\n-\n- Chosen.prototype.container_mouseup = function(evt) {\n- if (evt.target.nodeName === \"ABBR\" && !this.is_disabled) {\n- return this.results_reset(evt);\n- }\n- };\n-\n- Chosen.prototype.search_results_mousewheel = function(evt) {\n- var delta, _ref1, _ref2;\n-\n- delta = -((_ref1 = evt.originalEvent) != null ? _ref1.wheelDelta : void 0) || ((_ref2 = evt.originialEvent) != null ? _ref2.detail : void 0);\n- if (delta != null) {\n- evt.preventDefault();\n- if (evt.type === 'DOMMouseScroll') {\n- delta = delta * 40;\n- }\n- return this.search_results.scrollTop(delta + this.search_results.scrollTop());\n- }\n- };\n-\n- Chosen.prototype.blur_test = function(evt) {\n- if (!this.active_field && this.container.hasClass(\"chosen-container-active\")) {\n- return this.close_field();\n- }\n- };\n-\n- Chosen.prototype.close_field = function() {\n- $(document).unbind(\"click.chosen\", this.click_test_action);\n- this.active_field = false;\n- this.results_hide();\n- this.container.removeClass(\"chosen-container-active\");\n- this.clear_backstroke();\n- this.show_search_field_default();\n- return this.search_field_scale();\n- };\n-\n- Chosen.prototype.activate_field = function() {\n- this.container.addClass(\"chosen-container-active\");\n- this.active_field = true;\n- this.search_field.val(this.search_field.val());\n- return this.search_field.focus();\n- };\n-\n- Chosen.prototype.test_active_click = function(evt) {\n- if (this.container.is($(evt.target).closest('.chosen-container'))) {\n- return this.active_field = true;\n- } else {\n- return this.close_field();\n- }\n- };\n-\n- Chosen.prototype.results_build = function() {\n- this.parsing = true;\n- this.selected_option_count = null;\n- this.results_data = SelectParser.select_to_array(this.form_field);\n- if (this.is_multiple) {\n- this.search_choices.find(\"li.search-choice\").remove();\n- } else if (!this.is_multiple) {\n- this.single_set_selected_text();\n- if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {\n- this.search_field[0].readOnly = true;\n- this.container.addClass(\"chosen-container-single-nosearch\");\n- } else {\n- this.search_field[0].readOnly = false;\n- this.container.removeClass(\"chosen-container-single-nosearch\");\n- }\n- }\n- this.update_results_content(this.results_option_build({\n- first: true\n- }));\n- this.search_field_disabled();\n- this.show_search_field_default();\n- this.search_field_scale();\n- return this.parsing = false;\n- };\n-\n- Chosen.prototype.result_do_highlight = function(el) {\n- var high_bottom, high_top, maxHeight, visible_bottom, visible_top;\n-\n- if (el.length) {\n- this.result_clear_highlight();\n- this.result_highlight = el;\n- this.result_highlight.addClass(\"highlighted\");\n- maxHeight = parseInt(this.search_results.css(\"maxHeight\"), 10);\n- visible_top = this.search_results.scrollTop();\n- visible_bottom = maxHeight + visible_top;\n- high_top = this.result_highlight.position().top + this.search_results.scrollTop();\n- high_bottom = high_top + this.result_highlight.outerHeight();\n- if (high_bottom >= visible_bottom) {\n- return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);\n- } else if (high_top < visible_top) {\n- return this.search_results.scrollTop(high_top);\n- }\n- }\n- };\n-\n- Chosen.prototype.result_clear_highlight = function() {\n- if (this.result_highlight) {\n- this.result_highlight.removeClass(\"highlighted\");\n- }\n- return this.result_highlight = null;\n- };\n-\n- Chosen.prototype.results_show = function() {\n- if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n- this.form_field_jq.trigger(\"chosen:maxselected\", {\n- chosen: this\n- });\n- return false;\n- }\n- this.container.addClass(\"chosen-with-drop\");\n- this.form_field_jq.trigger(\"chosen:showing_dropdown\", {\n- chosen: this\n- });\n- this.results_showing = true;\n- this.search_field.focus();\n- this.search_field.val(this.search_field.val());\n- return this.winnow_results();\n- };\n-\n- Chosen.prototype.update_results_content = function(content) {\n- return this.search_results.html(content);\n- };\n-\n- Chosen.prototype.results_hide = function() {\n- if (this.results_showing) {\n- this.result_clear_highlight();\n- this.container.removeClass(\"chosen-with-drop\");\n- this.form_field_jq.trigger(\"chosen:hiding_dropdown\", {\n- chosen: this\n- });\n- }\n- return this.results_showing = false;\n- };\n-\n- Chosen.prototype.set_tab_index = function(el) {\n- var ti;\n-\n- if (this.form_field.tabIndex) {\n- ti = this.form_field.tabIndex;\n- this.form_field.tabIndex = -1;\n- return this.search_field[0].tabIndex = ti;\n- }\n- };\n-\n- Chosen.prototype.set_label_behavior = function() {\n- var _this = this;\n-\n- this.form_field_label = this.form_field_jq.parents(\"label\");\n- if (!this.form_field_label.length && this.form_field.id.length) {\n- this.form_field_label = $(\"label[for='\" + this.form_field.id + \"']\");\n- }\n- if (this.form_field_label.length > 0) {\n- return this.form_field_label.bind('click.chosen', function(evt) {\n- if (_this.is_multiple) {\n- return _this.container_mousedown(evt);\n- } else {\n- return _this.activate_field();\n- }\n- });\n- }\n- };\n-\n- Chosen.prototype.show_search_field_default = function() {\n- if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {\n- this.search_field.val(this.default_text);\n- return this.search_field.addClass(\"default\");\n- } else {\n- this.search_field.val(\"\");\n- return this.search_field.removeClass(\"default\");\n- }\n- };\n-\n- Chosen.prototype.search_results_mouseup = function(evt) {\n- var target;\n-\n- target = $(evt.target).hasClass(\"active-result\") ? $(evt.target) : $(evt.target).parents(\".active-result\").first();\n- if (target.length) {\n- this.result_highlight = target;\n- this.result_select(evt);\n- return this.search_field.focus();\n- }\n- };\n-\n- Chosen.prototype.search_results_mouseover = function(evt) {\n- var target;\n-\n- target = $(evt.target).hasClass(\"active-result\") ? $(evt.target) : $(evt.target).parents(\".active-result\").first();\n- if (target) {\n- return this.result_do_highlight(target);\n- }\n- };\n-\n- Chosen.prototype.search_results_mouseout = function(evt) {\n- if ($(evt.target).hasClass(\"active-result\" || $(evt.target).parents('.active-result').first())) {\n- return this.result_clear_highlight();\n- }\n- };\n-\n- Chosen.prototype.choice_build = function(item) {\n- var choice, close_link,\n- _this = this;\n-\n- choice = $('
    • ', {\n- \"class\": \"search-choice\"\n- }).html(\"\" + item.html + \"\");\n- if (item.disabled) {\n- choice.addClass('search-choice-disabled');\n- } else {\n- close_link = $('', {\n- \"class\": 'search-choice-close',\n- 'data-option-array-index': item.array_index\n- });\n- close_link.bind('click.chosen', function(evt) {\n- return _this.choice_destroy_link_click(evt);\n- });\n- choice.append(close_link);\n- }\n- return this.search_container.before(choice);\n- };\n-\n- Chosen.prototype.choice_destroy_link_click = function(evt) {\n- evt.preventDefault();\n- evt.stopPropagation();\n- if (!this.is_disabled) {\n- return this.choice_destroy($(evt.target));\n- }\n- };\n-\n- Chosen.prototype.choice_destroy = function(link) {\n- if (this.result_deselect(link[0].getAttribute(\"data-option-array-index\"))) {\n- this.show_search_field_default();\n- if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {\n- this.results_hide();\n- }\n- link.parents('li').first().remove();\n- return this.search_field_scale();\n- }\n- };\n-\n- Chosen.prototype.results_reset = function() {\n- this.form_field.options[0].selected = true;\n- this.selected_option_count = null;\n- this.single_set_selected_text();\n- this.show_search_field_default();\n- this.results_reset_cleanup();\n- this.form_field_jq.trigger(\"change\");\n- if (this.active_field) {\n- return this.results_hide();\n- }\n- };\n-\n- Chosen.prototype.results_reset_cleanup = function() {\n- this.current_selectedIndex = this.form_field.selectedIndex;\n- return this.selected_item.find(\"abbr\").remove();\n- };\n-\n- Chosen.prototype.result_select = function(evt) {\n- var high, item, selected_index;\n-\n- if (this.result_highlight) {\n- high = this.result_highlight;\n- this.result_clear_highlight();\n- if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n- this.form_field_jq.trigger(\"chosen:maxselected\", {\n- chosen: this\n- });\n- return false;\n- }\n- if (this.is_multiple) {\n- high.removeClass(\"active-result\");\n- } else {\n- if (this.result_single_selected) {\n- this.result_single_selected.removeClass(\"result-selected\");\n- selected_index = this.result_single_selected[0].getAttribute('data-option-array-index');\n- this.results_data[selected_index].selected = false;\n- }\n- this.result_single_selected = high;\n- }\n- high.addClass(\"result-selected\");\n- item = this.results_data[high[0].getAttribute(\"data-option-array-index\")];\n- item.selected = true;\n- this.form_field.options[item.options_index].selected = true;\n- this.selected_option_count = null;\n- if (this.is_multiple) {\n- this.choice_build(item);\n- } else {\n- this.single_set_selected_text(item.text);\n- }\n- if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {\n- this.results_hide();\n- }\n- this.search_field.val(\"\");\n- if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {\n- this.form_field_jq.trigger(\"change\", {\n- 'selected': this.form_field.options[item.options_index].value\n- });\n- }\n- this.current_selectedIndex = this.form_field.selectedIndex;\n- return this.search_field_scale();\n- }\n- };\n-\n- Chosen.prototype.single_set_selected_text = function(text) {\n- if (text == null) {\n- text = this.default_text;\n- }\n- if (text === this.default_text) {\n- this.selected_item.addClass(\"chosen-default\");\n- } else {\n- this.single_deselect_control_build();\n- this.selected_item.removeClass(\"chosen-default\");\n- }\n- return this.selected_item.find(\"span\").text(text);\n- };\n-\n- Chosen.prototype.result_deselect = function(pos) {\n- var result_data;\n-\n- result_data = this.results_data[pos];\n- if (!this.form_field.options[result_data.options_index].disabled) {\n- result_data.selected = false;\n- this.form_field.options[result_data.options_index].selected = false;\n- this.selected_option_count = null;\n- this.result_clear_highlight();\n- if (this.results_showing) {\n- this.winnow_results();\n- }\n- this.form_field_jq.trigger(\"change\", {\n- deselected: this.form_field.options[result_data.options_index].value\n- });\n- this.search_field_scale();\n- return true;\n- } else {\n- return false;\n- }\n- };\n-\n- Chosen.prototype.single_deselect_control_build = function() {\n- if (!this.allow_single_deselect) {\n- return;\n- }\n- if (!this.selected_item.find(\"abbr\").length) {\n- this.selected_item.find(\"span\").first().after(\"\");\n- }\n- return this.selected_item.addClass(\"chosen-single-with-deselect\");\n- };\n-\n- Chosen.prototype.get_search_text = function() {\n- if (this.search_field.val() === this.default_text) {\n- return \"\";\n- } else {\n- return $('
      ').text($.trim(this.search_field.val())).html();\n- }\n- };\n-\n- Chosen.prototype.winnow_results_set_highlight = function() {\n- var do_high, selected_results;\n-\n- selected_results = !this.is_multiple ? this.search_results.find(\".result-selected.active-result\") : [];\n- do_high = selected_results.length ? selected_results.first() : this.search_results.find(\".active-result\").first();\n- if (do_high != null) {\n- return this.result_do_highlight(do_high);\n- }\n- };\n-\n- Chosen.prototype.no_results = function(terms) {\n- var no_results_html;\n-\n- no_results_html = $('
    • ' + this.results_none_found + ' \"\"
    • ');\n- no_results_html.find(\"span\").first().html(terms);\n- return this.search_results.append(no_results_html);\n- };\n-\n- Chosen.prototype.no_results_clear = function() {\n- return this.search_results.find(\".no-results\").remove();\n- };\n-\n- Chosen.prototype.keydown_arrow = function() {\n- var next_sib;\n-\n- if (this.results_showing && this.result_highlight) {\n- next_sib = this.result_highlight.nextAll(\"li.active-result\").first();\n- if (next_sib) {\n- return this.result_do_highlight(next_sib);\n- }\n- } else {\n- return this.results_show();\n- }\n- };\n-\n- Chosen.prototype.keyup_arrow = function() {\n- var prev_sibs;\n-\n- if (!this.results_showing && !this.is_multiple) {\n- return this.results_show();\n- } else if (this.result_highlight) {\n- prev_sibs = this.result_highlight.prevAll(\"li.active-result\");\n- if (prev_sibs.length) {\n- return this.result_do_highlight(prev_sibs.first());\n- } else {\n- if (this.choices_count() > 0) {\n- this.results_hide();\n- }\n- return this.result_clear_highlight();\n- }\n- }\n- };\n-\n- Chosen.prototype.keydown_backstroke = function() {\n- var next_available_destroy;\n-\n- if (this.pending_backstroke) {\n- this.choice_destroy(this.pending_backstroke.find(\"a\").first());\n- return this.clear_backstroke();\n- } else {\n- next_available_destroy = this.search_container.siblings(\"li.search-choice\").last();\n- if (next_available_destroy.length && !next_available_destroy.hasClass(\"search-choice-disabled\")) {\n- this.pending_backstroke = next_available_destroy;\n- if (this.single_backstroke_delete) {\n- return this.keydown_backstroke();\n- } else {\n- return this.pending_backstroke.addClass(\"search-choice-focus\");\n- }\n- }\n- }\n- };\n-\n- Chosen.prototype.clear_backstroke = function() {\n- if (this.pending_backstroke) {\n- this.pending_backstroke.removeClass(\"search-choice-focus\");\n- }\n- return this.pending_backstroke = null;\n- };\n-\n- Chosen.prototype.keydown_checker = function(evt) {\n- var stroke, _ref1;\n-\n- stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;\n- this.search_field_scale();\n- if (stroke !== 8 && this.pending_backstroke) {\n- this.clear_backstroke();\n- }\n- switch (stroke) {\n- case 8:\n- this.backstroke_length = this.search_field.val().length;\n- break;\n- case 9:\n- if (this.results_showing && !this.is_multiple) {\n- this.result_select(evt);\n- }\n- this.mouse_on_container = false;\n- break;\n- case 13:\n- evt.preventDefault();\n- break;\n- case 38:\n- evt.preventDefault();\n- this.keyup_arrow();\n- break;\n- case 40:\n- evt.preventDefault();\n- this.keydown_arrow();\n- break;\n- }\n- };\n-\n- Chosen.prototype.search_field_scale = function() {\n- var div, f_width, h, style, style_block, styles, w, _i, _len;\n-\n- if (this.is_multiple) {\n- h = 0;\n- w = 0;\n- style_block = \"position:absolute; left: -1000px; top: -1000px; display:none;\";\n- styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];\n- for (_i = 0, _len = styles.length; _i < _len; _i++) {\n- style = styles[_i];\n- style_block += style + \":\" + this.search_field.css(style) + \";\";\n- }\n- div = $('
      ', {\n- 'style': style_block\n- });\n- div.text(this.search_field.val());\n- $('body').append(div);\n- w = div.width() + 25;\n- div.remove();\n- f_width = this.container.outerWidth();\n- if (w > f_width - 10) {\n- w = f_width - 10;\n- }\n- return this.search_field.css({\n- 'width': w + 'px'\n- });\n- }\n- };\n-\n- return Chosen;\n-\n- })(AbstractChosen);\n-\n-}).call(this);" + }, + { + "sha": "83589daa707a25a1fb3e4112075d382e9a1611ab", + "filename": "js/vendor/jquery-1.8.3.min.js", + "status": "removed", + "additions": 0, + "deletions": 2, + "changes": 2, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Fjquery-1.8.3.min.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Fjquery-1.8.3.min.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/js%2Fvendor%2Fjquery-1.8.3.min.js?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "patch": "@@ -1,2 +0,0 @@\n-/*! jQuery v1.8.3 jquery.com | jquery.org/license */\r\n-(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i=\"data-\"+n.replace(P,\"-$1\").toLowerCase();r=e.getAttribute(i);if(typeof r==\"string\"){try{r=r===\"true\"?!0:r===\"false\"?!1:r===\"null\"?null:+r+\"\"===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t===\"data\"&&v.isEmptyObject(e[t]))continue;if(t!==\"toJSON\")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t==\"string\"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r\").appendTo(i.body),n=t.css(\"display\");t.remove();if(n===\"none\"||n===\"\"){Pt=i.body.appendChild(Pt||v.extend(i.createElement(\"iframe\"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(\"\"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,\"display\"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+\"[\"+(typeof i==\"object\"?t:\"\")+\"]\",i,n,r)});else if(!n&&v.type(t)===\"object\")for(i in t)fn(e+\"[\"+i+\"]\",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!=\"string\"&&(n=t,t=\"*\");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\\w\\-]*)$)/,E=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,S=/^[\\],:{}\\s]*$/,x=/(?:^|:|,)(?:\\s*\\[)+/g,T=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,N=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/g,C=/^-ms-/,k=/-([\\da-z])/gi,L=function(e,t){return(t+\"\").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener(\"DOMContentLoaded\",A,!1),v.ready()):i.readyState===\"complete\"&&(i.detachEvent(\"onreadystatechange\",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e==\"string\"){e.charAt(0)===\"<\"&&e.charAt(e.length-1)===\">\"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:\"\",jquery:\"1.8.3\",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t===\"find\"?r.selector=this.selector+(this.selector?\" \":\"\")+n:t&&(r.selector=this.selector+\".\"+t+\"(\"+n+\")\"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),\"slice\",l.call(arguments).join(\",\"))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u==\"boolean\"&&(l=u,u=arguments[1]||{},a=2),typeof u!=\"object\"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger(\"ready\").off(\"ready\")},isFunction:function(e){return v.type(e)===\"function\"},isArray:Array.isArray||function(e){return v.type(e)===\"array\"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||\"object\"},isPlainObject:function(e){if(!e||v.type(e)!==\"object\"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,\"constructor\")&&!p.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!=\"string\"?null:(typeof t==\"boolean\"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!=\"string\")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,\"@\").replace(N,\"]\").replace(x,\"\")))return(new Function(\"return \"+t))();v.error(\"Invalid JSON: \"+t)},parseXML:function(n){var r,i;if(!n||typeof n!=\"string\")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,\"text/xml\")):(r=new ActiveXObject(\"Microsoft.XMLDOM\"),r.async=\"false\",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName(\"parsererror\").length)&&v.error(\"Invalid XML: \"+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,\"ms-\").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",v.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",v.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",v.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+\"With\"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+\"With\"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
      a\",n=p.getElementsByTagName(\"*\"),r=p.getElementsByTagName(\"a\")[0];if(!n||!r||!n.length)return{};s=i.createElement(\"select\"),o=s.appendChild(i.createElement(\"option\")),u=p.getElementsByTagName(\"input\")[0],r.style.cssText=\"top:1px;float:left;opacity:.5\",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName(\"tbody\").length,htmlSerialize:!!p.getElementsByTagName(\"link\").length,style:/top/.test(r.getAttribute(\"style\")),hrefNormalized:r.getAttribute(\"href\")===\"/a\",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value===\"on\",optSelected:o.selected,getSetAttribute:p.className!==\"t\",enctype:!!i.createElement(\"form\").enctype,html5Clone:i.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav>\",boxModel:i.compatMode===\"CSS1Compat\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent(\"onclick\",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent(\"onclick\"),p.detachEvent(\"onclick\",h)),u=i.createElement(\"input\"),u.value=\"t\",u.setAttribute(\"type\",\"radio\"),t.radioValue=u.value===\"t\",u.setAttribute(\"checked\",\"checked\"),u.setAttribute(\"name\",\"t\"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f=\"on\"+l,c=f in p,c||(p.setAttribute(f,\"return;\"),c=typeof p[f]==\"function\"),t[l+\"Bubbles\"]=c;return v(function(){var n,r,s,o,u=\"padding:0;margin:0;border:0;display:block;overflow:hidden;\",a=i.getElementsByTagName(\"body\")[0];if(!a)return;n=i.createElement(\"div\"),n.style.cssText=\"visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px\",a.insertBefore(n,a.firstChild),r=i.createElement(\"div\"),n.appendChild(r),r.innerHTML=\"
      t
      \",s=r.getElementsByTagName(\"td\"),s[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",c=s[0].offsetHeight===0,s[0].style.display=\"\",s[1].style.display=\"none\",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML=\"\",r.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!==\"1%\",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:\"4px\"}).width===\"4px\",o=i.createElement(\"div\"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width=\"0\",r.style.width=\"1px\",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!=\"undefined\"&&(r.innerHTML=\"\",r.style.cssText=u+\"width:1px;padding:1px;display:inline;zoom:1\",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display=\"block\",r.style.overflow=\"visible\",r.innerHTML=\"
      \",r.firstChild.style.width=\"5px\",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:\"jQuery\"+(v.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n==\"string\",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n==\"object\"||typeof n==\"function\")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(\" \")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i===\"inprogress\"&&(i=n.shift(),r--),i&&(t===\"fx\"&&n.unshift(\"inprogress\"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks(\"once memory\").add(function(){v.removeData(e,t+\"queue\",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!=\"string\"&&(n=e,e=\"fx\",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e==\"string\"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(\" \"+n[s]+\" \",\" \");i.className=e?v.trim(r):\"\"}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t==\"boolean\";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n===\"string\"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?\"addClass\":\"removeClass\"](i)}else if(n===\"undefined\"||n===\"boolean\")this.className&&v._data(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":v._data(this,\"__className__\")||\"\"})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&\"get\"in n&&(r=n.get(s,\"value\"))!==t?r:(r=s.value,typeof r==\"string\"?r.replace(R,\"\"):r==null?\"\":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s=\"\":typeof s==\"number\"?s+=\"\":v.isArray(s)&&(s=v.map(s,function(e){return e==null?\"\":e+\"\"})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!(\"set\"in n)||n.set(this,s,\"value\")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type===\"select-one\"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute==\"undefined\")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&\"set\"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+\"\"),r)}return o&&\"get\"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\\.]*|)(?:\\.(.+)|)$/,K=/(?:^|\\s)hover(\\.\\S+|)\\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,\"mouseenter$1 mouseleave$1\")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v==\"undefined\"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(\" \");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(\".\")>=0&&(b=y.split(\".\"),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n==\"object\"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join(\".\"),n.namespace_re=n.namespace?new RegExp(\"(^|\\\\.)\"+b.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,h=y.indexOf(\":\")<0?\"on\"+y:\"\";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!=\"string\")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,\"$1\"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n===\"input\"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n===\"input\"||n===\"button\")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+\" \"];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j,\" \");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir===\"parentNode\",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+\" \"+o+\" \",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a==\"string\"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[\" \"],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join(\"\").replace(j,\"$1\"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w=\"0\",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG(\"*\",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type===\"ID\"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,\"\"),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,\"\"),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join(\"\");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p=\"undefined\",d=(\"sizcache\"+Math.random()).replace(\".\",\"\"),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+\" \"]=r},e)},k=C(),L=C(),A=C(),O=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[-\\\\w]|[^\\\\x00-\\\\xa0])+\",_=M.replace(\"w\",\"w#\"),D=\"([*^$|!~]?=)\",P=\"\\\\[\"+O+\"*(\"+M+\")\"+O+\"*(?:\"+D+O+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+_+\")|)|)\"+O+\"*\\\\]\",H=\":(\"+M+\")(?:\\\\((?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\2|([^()[\\\\]]*|(?:(?:\"+P+\")|[^:]|\\\\\\\\.)*|.*))\\\\)|)\",B=\":(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+O+\"*((?:-\\\\d)?\\\\d*)\"+O+\"*\\\\)|)(?=[^-]|$)\",j=new RegExp(\"^\"+O+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+O+\"+$\",\"g\"),F=new RegExp(\"^\"+O+\"*,\"+O+\"*\"),I=new RegExp(\"^\"+O+\"*([\\\\x20\\\\t\\\\r\\\\n\\\\f>+~])\"+O+\"*\"),q=new RegExp(H),R=/^(?:#([\\w\\-]+)|(\\w+)|\\.([\\w\\-]+))$/,U=/^:not/,z=/[\\x20\\t\\r\\n\\f]*[+~]/,W=/:not\\($/,X=/h\\d/i,V=/input|select|textarea|button/i,$=/\\\\(?!\\\\)/g,J={ID:new RegExp(\"^#(\"+M+\")\"),CLASS:new RegExp(\"^\\\\.(\"+M+\")\"),NAME:new RegExp(\"^\\\\[name=['\\\"]?(\"+M+\")['\\\"]?\\\\]\"),TAG:new RegExp(\"^(\"+M.replace(\"w\",\"w*\")+\")\"),ATTR:new RegExp(\"^\"+P),PSEUDO:new RegExp(\"^\"+H),POS:new RegExp(B,\"i\"),CHILD:new RegExp(\"^:(only|nth|first|last)-child(?:\\\\(\"+O+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+O+\"*(?:([+-]|)\"+O+\"*(\\\\d+)|))\"+O+\"*\\\\)|)\",\"i\"),needsContext:new RegExp(\"^\"+O+\"*[>+~]|\"+B,\"i\")},K=function(e){var t=g.createElement(\"div\");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),G=K(function(e){return e.innerHTML=\"\",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute(\"href\")===\"#\"}),Y=K(function(e){e.innerHTML=\"\";var t=typeof e.lastChild.getAttribute(\"multiple\");return t!==\"boolean\"&&t!==\"string\"}),Z=K(function(e){return e.innerHTML=\"\",!e.getElementsByClassName||!e.getElementsByClassName(\"e\").length?!1:(e.lastChild.className=\"e\",e.getElementsByClassName(\"e\").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML=\"
      \",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent==\"string\")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!==\"HTML\":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]==\"boolean\"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute(\"href\",2)},type:function(e){return e.getAttribute(\"type\")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode(\"id\").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e===\"*\"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,\"\"),e[3]=(e[4]||e[5]||\"\").replace($,\"\"),e[2]===\"~=\"&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]===\"nth\"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]===\"even\"||e[2]===\"odd\")),e[4]=+(e[6]+e[7]||e[2]===\"odd\")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(\")\",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,\"\"),function(t){return t.getAttribute(\"id\")===e}}:function(e){return e=e.replace($,\"\"),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode(\"id\");return n&&n.value===e}},TAG:function(e){return e===\"*\"?function(){return!0}:(e=e.replace($,\"\").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+\" \"];return t||(t=new RegExp(\"(^|\"+O+\")\"+e+\"(\"+O+\"|$)\"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t===\"!=\":t?(s+=\"\",t===\"=\"?s===n:t===\"!=\"?s!==n:t===\"^=\"?n&&s.indexOf(n)===0:t===\"*=\"?n&&s.indexOf(n)>-1:t===\"$=\"?n&&s.substr(s.length-n.length)===n:t===\"~=\"?(\" \"+s+\" \").indexOf(n)>-1:t===\"|=\"?s===n||s.substr(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r){return e===\"nth\"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case\"only\":case\"first\":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e===\"first\")return!0;n=t;case\"last\":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error(\"unsupported pseudo: \"+e);return r[d]?r(t):r.length>1?(n=[e,e,\"\",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,\"$1\"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t===\"input\"&&!!e.checked||t===\"option\"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>\"@\"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()===\"input\"&&(t=e.type)===\"text\"&&((n=e.getAttribute(\"type\"))==null||n.toLowerCase()===t)},radio:rt(\"radio\"),checkbox:rt(\"checkbox\"),file:rt(\"file\"),password:rt(\"password\"),image:rt(\"image\"),submit:it(\"submit\"),reset:it(\"reset\"),button:function(e){var t=e.nodeName.toLowerCase();return t===\"input\"&&e.type===\"button\"||t===\"button\"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r\",e.querySelectorAll(\"[selected]\").length||i.push(\"\\\\[\"+O+\"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\"),e.querySelectorAll(\":checked\").length||i.push(\":checked\")}),K(function(e){e.innerHTML=\"

      \",e.querySelectorAll(\"[test^='']\").length&&i.push(\"[*^$]=\"+O+\"*(?:\\\"\\\"|'')\"),e.innerHTML=\"\",e.querySelectorAll(\":enabled\").length||i.push(\":enabled\",\":disabled\")}),i=new RegExp(i.join(\"|\")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!==\"object\"){a=ut(e),(l=r.getAttribute(\"id\"))?c=l.replace(n,\"\\\\$&\"):r.setAttribute(\"id\",c),c=\"[id='\"+c+\"'] \",f=a.length;while(f--)a[f]=c+a[f].join(\"\");h=z.test(e)&&r.parentNode||r,p=a.join(\",\")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute(\"id\")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,\"div\");try{u.call(t,\"[test!='']:sizzle\"),s.push(\"!=\",H)}catch(n){}}),s=new RegExp(s.join(\"|\")),nt.matchesSelector=function(t,n){n=n.replace(r,\"='$1']\");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[\":\"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\\[\\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!=\"string\")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!=\"string\"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,\"closest\",e)},index:function(e){return e?typeof e==\"string\"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e==\"string\"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return v.dir(e,\"parentNode\",n)},next:function(e){return at(e,\"nextSibling\")},prev:function(e){return at(e,\"previousSibling\")},nextAll:function(e){return v.dir(e,\"nextSibling\")},prevAll:function(e){return v.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return v.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return v.dir(e,\"previousSibling\",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r==\"string\"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(\",\"))}}),v.extend({filter:function(e,t,n){return n&&(e=\":not(\"+e+\")\"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ht=/ jQuery\\d+=\"(?:null|\\d+)\"/g,pt=/^\\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,vt=/<([\\w:]+)/,mt=/]\",\"i\"),Et=/^(?:checkbox|radio)$/,St=/checked\\s*(?:[^=]|=\\s*.checked.)/i,xt=/\\/(java|ecma)script/i,Tt=/^\\s*\\s*$/g,Nt={option:[1,\"\"],legend:[1,\"
      \",\"
      \"],thead:[1,\"\",\"
      \"],tr:[2,\"\",\"
      \"],td:[3,\"\",\"
      \"],col:[2,\"\",\"
      \"],area:[1,\"\",\"\"],_default:[0,\"\",\"\"]},Ct=lt(i),kt=Ct.appendChild(i.createElement(\"div\"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,\"X
      \",\"
      \"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,\"body\")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),\"before\",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),\"after\",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName(\"*\")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName(\"*\"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,\"\"):t;if(typeof e==\"string\"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=e.replace(dt,\"<$1>\");try{for(;r1&&typeof f==\"string\"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,\"tr\");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment==\"undefined\")t=i;for(s=0;(u=e[s])!=null;s++){typeof u==\"number\"&&(u+=\"\");if(!u)continue;if(typeof u==\"string\")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement(\"div\"),y.appendChild(c),u=u.replace(dt,\"<$1>\"),a=(vt.exec(u)||[\"\",\"\"])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a===\"table\"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===\"\"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],\"tbody\")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,\"input\")?_t(u):typeof u.getElementsByTagName!=\"undefined\"&&v.grep(u.getElementsByTagName(\"input\"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,\"script\")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!=\"undefined\"&&(g=v.grep(v.merge([],u.getElementsByTagName(\"script\")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \\/]([\\w.]+)/.exec(e)||/(webkit)[ \\/]([\\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(e)||/(msie) ([\\w.]+)/.exec(e)||e.indexOf(\"compatible\")<0&&/(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(e)||[];return{browser:t[1]||\"\",version:t[2]||\"0\"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\\([^)]*\\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp(\"^(\"+m+\")(.*)$\",\"i\"),Ut=new RegExp(\"^(\"+m+\")(?!px)[a-z%]+$\",\"i\"),zt=new RegExp(\"^([-+])=(\"+m+\")\",\"i\"),Wt={BODY:\"block\"},Xt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Vt={letterSpacing:0,fontWeight:400},$t=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Jt=[\"Webkit\",\"O\",\"Moz\",\"ms\"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e==\"boolean\";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,\"opacity\");return n===\"\"?\"1\":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":v.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&\"get\"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o===\"string\"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o=\"number\");if(r==null||o===\"number\"&&isNaN(r))return;o===\"number\"&&!v.cssNumber[a]&&(r+=\"px\");if(!u||!(\"set\"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&\"get\"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s===\"normal\"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===\"\"&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t===\"fontSize\"?\"1em\":i,i=s.pixelLeft+\"px\",s.left=n,r&&(e.runtimeStyle.left=r)),i===\"\"?\"auto\":i}),v.each([\"height\",\"width\"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,\"display\"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,\"boxSizing\")===\"border-box\"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?\"alpha(opacity=\"+t*100+\")\":\"\",s=r&&r.filter||n.filter||\"\";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,\"\"))===\"\"&&n.removeAttribute){n.removeAttribute(\"filter\");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+\" \"+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:\"inline-block\"},function(){if(t)return Dt(e,\"marginRight\")})}}),!v.support.pixelPosition&&v.fn.position&&v.each([\"top\",\"left\"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+\"px\":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,\"display\"))===\"none\"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n==\"string\"?n.split(\" \"):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\\[\\]$/,on=/\\r?\\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,\"\\r\\n\")}}):{name:t.name,value:n.replace(on,\"\\r\\n\")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?\"\":t,i[i.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join(\"&\").replace(rn,\"+\")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,dn=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\\/\\//,gn=/\\?/,yn=/)<[^<]*)*<\\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=[\"*/\"]+[\"*\"];try{cn=s.href}catch(Nn){cn=i.createElement(\"a\"),cn.href=\"\",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!=\"string\"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(\" \");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n==\"object\"&&(s=\"POST\"),v.ajax({url:e,type:s,dataType:\"html\",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v(\"
      \").append(e.replace(yn,\"\")).find(i):e)}),this},v.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each([\"get\",\"post\"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,\"script\")},getJSON:function(e,t,n){return v.get(e,t,n,\"json\")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":e.String,\"text html\":!0,\"text json\":v.parseJSON,\"text xml\":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||\"\",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader(\"Last-Modified\"),S&&(v.lastModified[r]=S),S=x.getResponseHeader(\"Etag\"),S&&(v.etag[r]=S)),e===304?(T=\"notmodified\",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T=\"error\",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+\"\",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger(\"ajax\"+(l?\"Success\":\"Error\"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger(\"ajaxComplete\",[x,c]),--v.active||v.event.trigger(\"ajaxStop\"))}typeof e==\"object\"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks(\"once memory\"),g=c.statusCode||{},b={},w={},E=0,S=\"canceled\",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+\"\").replace(hn,\"\").replace(mn,ln[1]+\"//\"),c.dataTypes=v.trim(c.dataType||\"*\").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]===\"http:\"?80:443))==(ln[3]||(ln[1]===\"http:\"?80:443)))),c.data&&c.processData&&typeof c.data!=\"string\"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger(\"ajaxStart\");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?\"&\":\"?\")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,\"$1_=\"+N);c.url=C+(C===c.url?(gn.test(c.url)?\"&\":\"?\")+\"_=\"+N:\"\")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader(\"Content-Type\",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader(\"If-Modified-Since\",v.lastModified[r]),v.etag[r]&&x.setRequestHeader(\"If-None-Match\",v.etag[r])),x.setRequestHeader(\"Accept\",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!==\"*\"?\", \"+Tn+\"; q=0.01\":\"\"):c.accepts[\"*\"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S=\"abort\";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,\"No Transport\");else{x.readyState=1,f&&p.trigger(\"ajaxSend\",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort(\"timeout\")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\\?/,Dn=/(=)\\?(?=&|$)|\\?\\?/,Pn=v.now();v.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Mn.pop()||v.expando+\"_\"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter(\"json jsonp\",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a==\"string\"&&!(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Dn.test(a);if(n.dataTypes[0]===\"jsonp\"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,\"$1\"+s):h?n.data=a.replace(Dn,\"$1\"+s):l&&(n.url+=(_n.test(f)?\"&\":\"?\")+n.jsonp+\"=\"+s),n.converters[\"script json\"]=function(){return u||v.error(s+\" was not called\"),u[0]},n.dataTypes[0]=\"json\",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),\"script\"}),v.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter(\"script\",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),v.ajaxTransport(\"script\",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName(\"head\")[0]||i.documentElement;return{send:function(s,o){n=i.createElement(\"script\"),n.async=\"async\",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,\"success\")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&\"withCredentials\"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i[\"X-Requested-With\"]&&(i[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=\"\"}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp(\"^(?:([-+])=|)(\"+m+\")([a-z%]*)$\",\"i\"),Wn=/queueHooks$/,Xn=[Gn],Vn={\"*\":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?\"\":\"px\");if(r!==\"px\"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||\".5\",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),\"using\"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,\"marginTop\"))||0,n.left-=parseFloat(v.css(e,\"marginLeft\"))||0,r.top+=parseFloat(v.css(t[0],\"borderTopWidth\"))||0,r.left+=parseFloat(v.css(t[0],\"borderLeftWidth\"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,\"position\")===\"static\")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:\"height\",Width:\"width\"},function(e,n){v.each({padding:\"inner\"+e,content:n,\"\":\"outer\"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!=\"boolean\"),u=r||(i===!0||s===!0?\"margin\":\"border\");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement[\"client\"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body[\"scroll\"+e],s[\"scroll\"+e],n.body[\"offset\"+e],s[\"offset\"+e],s[\"client\"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define==\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){return v})})(window);\n\\ No newline at end of file" + }, + { + "sha": "db8fe7bf484336b81645637e58291970980ead5d", + "filename": "js/vendor/jquery-ui.min.js", + "status": "removed", + "additions": 0, + "deletions": 5, + "changes": 5, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Fjquery-ui.min.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Fjquery-ui.min.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/js%2Fvendor%2Fjquery-ui.min.js?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a" + }, + { + "sha": "32ca0c1b1425e622a0bf7dc8b9cf97a96eb1a418", + "filename": "js/vendor/underscore.js", + "status": "removed", + "additions": 0, + "deletions": 1227, + "changes": 1227, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Funderscore.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Funderscore.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/js%2Fvendor%2Funderscore.js?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "patch": "@@ -1,1227 +0,0 @@\n-// Underscore.js 1.4.4\n-// ===================\n-\n-// > http://underscorejs.org\n-// > (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.\n-// > Underscore may be freely distributed under the MIT license.\n-\n-// Baseline setup\n-// --------------\n-(function() {\n-\n- // Establish the root object, `window` in the browser, or `global` on the server.\n- var root = this;\n-\n- // Save the previous value of the `_` variable.\n- var previousUnderscore = root._;\n-\n- // Establish the object that gets returned to break out of a loop iteration.\n- var breaker = {};\n-\n- // Save bytes in the minified (but not gzipped) version:\n- var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n-\n- // Create quick reference variables for speed access to core prototypes.\n- var push = ArrayProto.push,\n- slice = ArrayProto.slice,\n- concat = ArrayProto.concat,\n- toString = ObjProto.toString,\n- hasOwnProperty = ObjProto.hasOwnProperty;\n-\n- // All **ECMAScript 5** native function implementations that we hope to use\n- // are declared here.\n- var\n- nativeForEach = ArrayProto.forEach,\n- nativeMap = ArrayProto.map,\n- nativeReduce = ArrayProto.reduce,\n- nativeReduceRight = ArrayProto.reduceRight,\n- nativeFilter = ArrayProto.filter,\n- nativeEvery = ArrayProto.every,\n- nativeSome = ArrayProto.some,\n- nativeIndexOf = ArrayProto.indexOf,\n- nativeLastIndexOf = ArrayProto.lastIndexOf,\n- nativeIsArray = Array.isArray,\n- nativeKeys = Object.keys,\n- nativeBind = FuncProto.bind;\n-\n- // Create a safe reference to the Underscore object for use below.\n- var _ = function(obj) {\n- if (obj instanceof _) return obj;\n- if (!(this instanceof _)) return new _(obj);\n- this._wrapped = obj;\n- };\n-\n- // Export the Underscore object for **Node.js**, with\n- // backwards-compatibility for the old `require()` API. If we're in\n- // the browser, add `_` as a global object via a string identifier,\n- // for Closure Compiler \"advanced\" mode.\n- if (typeof exports !== 'undefined') {\n- if (typeof module !== 'undefined' && module.exports) {\n- exports = module.exports = _;\n- }\n- exports._ = _;\n- } else {\n- root._ = _;\n- }\n-\n- // Current version.\n- _.VERSION = '1.4.4';\n-\n- // Collection Functions\n- // --------------------\n-\n- // The cornerstone, an `each` implementation, aka `forEach`.\n- // Handles objects with the built-in `forEach`, arrays, and raw objects.\n- // Delegates to **ECMAScript 5**'s native `forEach` if available.\n- var each = _.each = _.forEach = function(obj, iterator, context) {\n- if (obj == null) return;\n- if (nativeForEach && obj.forEach === nativeForEach) {\n- obj.forEach(iterator, context);\n- } else if (obj.length === +obj.length) {\n- for (var i = 0, l = obj.length; i < l; i++) {\n- if (iterator.call(context, obj[i], i, obj) === breaker) return;\n- }\n- } else {\n- for (var key in obj) {\n- if (_.has(obj, key)) {\n- if (iterator.call(context, obj[key], key, obj) === breaker) return;\n- }\n- }\n- }\n- };\n-\n- // Return the results of applying the iterator to each element.\n- // Delegates to **ECMAScript 5**'s native `map` if available.\n- _.map = _.collect = function(obj, iterator, context) {\n- var results = [];\n- if (obj == null) return results;\n- if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n- each(obj, function(value, index, list) {\n- results[results.length] = iterator.call(context, value, index, list);\n- });\n- return results;\n- };\n-\n- var reduceError = 'Reduce of empty array with no initial value';\n-\n- // **Reduce** builds up a single result from a list of values, aka `inject`,\n- // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n- _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n- var initial = arguments.length > 2;\n- if (obj == null) obj = [];\n- if (nativeReduce && obj.reduce === nativeReduce) {\n- if (context) iterator = _.bind(iterator, context);\n- return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n- }\n- each(obj, function(value, index, list) {\n- if (!initial) {\n- memo = value;\n- initial = true;\n- } else {\n- memo = iterator.call(context, memo, value, index, list);\n- }\n- });\n- if (!initial) throw new TypeError(reduceError);\n- return memo;\n- };\n-\n- // The right-associative version of reduce, also known as `foldr`.\n- // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n- _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n- var initial = arguments.length > 2;\n- if (obj == null) obj = [];\n- if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n- if (context) iterator = _.bind(iterator, context);\n- return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n- }\n- var length = obj.length;\n- if (length !== +length) {\n- var keys = _.keys(obj);\n- length = keys.length;\n- }\n- each(obj, function(value, index, list) {\n- index = keys ? keys[--length] : --length;\n- if (!initial) {\n- memo = obj[index];\n- initial = true;\n- } else {\n- memo = iterator.call(context, memo, obj[index], index, list);\n- }\n- });\n- if (!initial) throw new TypeError(reduceError);\n- return memo;\n- };\n-\n- // Return the first value which passes a truth test. Aliased as `detect`.\n- _.find = _.detect = function(obj, iterator, context) {\n- var result;\n- any(obj, function(value, index, list) {\n- if (iterator.call(context, value, index, list)) {\n- result = value;\n- return true;\n- }\n- });\n- return result;\n- };\n-\n- // Return all the elements that pass a truth test.\n- // Delegates to **ECMAScript 5**'s native `filter` if available.\n- // Aliased as `select`.\n- _.filter = _.select = function(obj, iterator, context) {\n- var results = [];\n- if (obj == null) return results;\n- if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n- each(obj, function(value, index, list) {\n- if (iterator.call(context, value, index, list)) results[results.length] = value;\n- });\n- return results;\n- };\n-\n- // Return all the elements for which a truth test fails.\n- _.reject = function(obj, iterator, context) {\n- return _.filter(obj, function(value, index, list) {\n- return !iterator.call(context, value, index, list);\n- }, context);\n- };\n-\n- // Determine whether all of the elements match a truth test.\n- // Delegates to **ECMAScript 5**'s native `every` if available.\n- // Aliased as `all`.\n- _.every = _.all = function(obj, iterator, context) {\n- iterator || (iterator = _.identity);\n- var result = true;\n- if (obj == null) return result;\n- if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n- each(obj, function(value, index, list) {\n- if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n- });\n- return !!result;\n- };\n-\n- // Determine if at least one element in the object matches a truth test.\n- // Delegates to **ECMAScript 5**'s native `some` if available.\n- // Aliased as `any`.\n- var any = _.some = _.any = function(obj, iterator, context) {\n- iterator || (iterator = _.identity);\n- var result = false;\n- if (obj == null) return result;\n- if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n- each(obj, function(value, index, list) {\n- if (result || (result = iterator.call(context, value, index, list))) return breaker;\n- });\n- return !!result;\n- };\n-\n- // Determine if the array or object contains a given value (using `===`).\n- // Aliased as `include`.\n- _.contains = _.include = function(obj, target) {\n- if (obj == null) return false;\n- if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n- return any(obj, function(value) {\n- return value === target;\n- });\n- };\n-\n- // Invoke a method (with arguments) on every item in a collection.\n- _.invoke = function(obj, method) {\n- var args = slice.call(arguments, 2);\n- var isFunc = _.isFunction(method);\n- return _.map(obj, function(value) {\n- return (isFunc ? method : value[method]).apply(value, args);\n- });\n- };\n-\n- // Convenience version of a common use case of `map`: fetching a property.\n- _.pluck = function(obj, key) {\n- return _.map(obj, function(value){ return value[key]; });\n- };\n-\n- // Convenience version of a common use case of `filter`: selecting only objects\n- // containing specific `key:value` pairs.\n- _.where = function(obj, attrs, first) {\n- if (_.isEmpty(attrs)) return first ? null : [];\n- return _[first ? 'find' : 'filter'](obj, function(value) {\n- for (var key in attrs) {\n- if (attrs[key] !== value[key]) return false;\n- }\n- return true;\n- });\n- };\n-\n- // Convenience version of a common use case of `find`: getting the first object\n- // containing specific `key:value` pairs.\n- _.findWhere = function(obj, attrs) {\n- return _.where(obj, attrs, true);\n- };\n-\n- // Return the maximum element or (element-based computation).\n- // Can't optimize arrays of integers longer than 65,535 elements.\n- // See: https://bugs.webkit.org/show_bug.cgi?id=80797\n- _.max = function(obj, iterator, context) {\n- if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n- return Math.max.apply(Math, obj);\n- }\n- if (!iterator && _.isEmpty(obj)) return -Infinity;\n- var result = {computed : -Infinity, value: -Infinity};\n- each(obj, function(value, index, list) {\n- var computed = iterator ? iterator.call(context, value, index, list) : value;\n- computed >= result.computed && (result = {value : value, computed : computed});\n- });\n- return result.value;\n- };\n-\n- // Return the minimum element (or element-based computation).\n- _.min = function(obj, iterator, context) {\n- if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n- return Math.min.apply(Math, obj);\n- }\n- if (!iterator && _.isEmpty(obj)) return Infinity;\n- var result = {computed : Infinity, value: Infinity};\n- each(obj, function(value, index, list) {\n- var computed = iterator ? iterator.call(context, value, index, list) : value;\n- computed < result.computed && (result = {value : value, computed : computed});\n- });\n- return result.value;\n- };\n-\n- // Shuffle an array.\n- _.shuffle = function(obj) {\n- var rand;\n- var index = 0;\n- var shuffled = [];\n- each(obj, function(value) {\n- rand = _.random(index++);\n- shuffled[index - 1] = shuffled[rand];\n- shuffled[rand] = value;\n- });\n- return shuffled;\n- };\n-\n- // An internal function to generate lookup iterators.\n- var lookupIterator = function(value) {\n- return _.isFunction(value) ? value : function(obj){ return obj[value]; };\n- };\n-\n- // Sort the object's values by a criterion produced by an iterator.\n- _.sortBy = function(obj, value, context) {\n- var iterator = lookupIterator(value);\n- return _.pluck(_.map(obj, function(value, index, list) {\n- return {\n- value : value,\n- index : index,\n- criteria : iterator.call(context, value, index, list)\n- };\n- }).sort(function(left, right) {\n- var a = left.criteria;\n- var b = right.criteria;\n- if (a !== b) {\n- if (a > b || a === void 0) return 1;\n- if (a < b || b === void 0) return -1;\n- }\n- return left.index < right.index ? -1 : 1;\n- }), 'value');\n- };\n-\n- // An internal function used for aggregate \"group by\" operations.\n- var group = function(obj, value, context, behavior) {\n- var result = {};\n- var iterator = lookupIterator(value || _.identity);\n- each(obj, function(value, index) {\n- var key = iterator.call(context, value, index, obj);\n- behavior(result, key, value);\n- });\n- return result;\n- };\n-\n- // Groups the object's values by a criterion. Pass either a string attribute\n- // to group by, or a function that returns the criterion.\n- _.groupBy = function(obj, value, context) {\n- return group(obj, value, context, function(result, key, value) {\n- (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n- });\n- };\n-\n- // Counts instances of an object that group by a certain criterion. Pass\n- // either a string attribute to count by, or a function that returns the\n- // criterion.\n- _.countBy = function(obj, value, context) {\n- return group(obj, value, context, function(result, key) {\n- if (!_.has(result, key)) result[key] = 0;\n- result[key]++;\n- });\n- };\n-\n- // Use a comparator function to figure out the smallest index at which\n- // an object should be inserted so as to maintain order. Uses binary search.\n- _.sortedIndex = function(array, obj, iterator, context) {\n- iterator = iterator == null ? _.identity : lookupIterator(iterator);\n- var value = iterator.call(context, obj);\n- var low = 0, high = array.length;\n- while (low < high) {\n- var mid = (low + high) >>> 1;\n- iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n- }\n- return low;\n- };\n-\n- // Safely convert anything iterable into a real, live array.\n- _.toArray = function(obj) {\n- if (!obj) return [];\n- if (_.isArray(obj)) return slice.call(obj);\n- if (obj.length === +obj.length) return _.map(obj, _.identity);\n- return _.values(obj);\n- };\n-\n- // Return the number of elements in an object.\n- _.size = function(obj) {\n- if (obj == null) return 0;\n- return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\n- };\n-\n- // Array Functions\n- // ---------------\n-\n- // Get the first element of an array. Passing **n** will return the first N\n- // values in the array. Aliased as `head` and `take`. The **guard** check\n- // allows it to work with `_.map`.\n- _.first = _.head = _.take = function(array, n, guard) {\n- if (array == null) return void 0;\n- return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n- };\n-\n- // Returns everything but the last entry of the array. Especially useful on\n- // the arguments object. Passing **n** will return all the values in\n- // the array, excluding the last N. The **guard** check allows it to work with\n- // `_.map`.\n- _.initial = function(array, n, guard) {\n- return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n- };\n-\n- // Get the last element of an array. Passing **n** will return the last N\n- // values in the array. The **guard** check allows it to work with `_.map`.\n- _.last = function(array, n, guard) {\n- if (array == null) return void 0;\n- if ((n != null) && !guard) {\n- return slice.call(array, Math.max(array.length - n, 0));\n- } else {\n- return array[array.length - 1];\n- }\n- };\n-\n- // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n- // Especially useful on the arguments object. Passing an **n** will return\n- // the rest N values in the array. The **guard**\n- // check allows it to work with `_.map`.\n- _.rest = _.tail = _.drop = function(array, n, guard) {\n- return slice.call(array, (n == null) || guard ? 1 : n);\n- };\n-\n- // Trim out all falsy values from an array.\n- _.compact = function(array) {\n- return _.filter(array, _.identity);\n- };\n-\n- // Internal implementation of a recursive `flatten` function.\n- var flatten = function(input, shallow, output) {\n- each(input, function(value) {\n- if (_.isArray(value)) {\n- shallow ? push.apply(output, value) : flatten(value, shallow, output);\n- } else {\n- output.push(value);\n- }\n- });\n- return output;\n- };\n-\n- // Return a completely flattened version of an array.\n- _.flatten = function(array, shallow) {\n- return flatten(array, shallow, []);\n- };\n-\n- // Return a version of the array that does not contain the specified value(s).\n- _.without = function(array) {\n- return _.difference(array, slice.call(arguments, 1));\n- };\n-\n- // Produce a duplicate-free version of the array. If the array has already\n- // been sorted, you have the option of using a faster algorithm.\n- // Aliased as `unique`.\n- _.uniq = _.unique = function(array, isSorted, iterator, context) {\n- if (_.isFunction(isSorted)) {\n- context = iterator;\n- iterator = isSorted;\n- isSorted = false;\n- }\n- var initial = iterator ? _.map(array, iterator, context) : array;\n- var results = [];\n- var seen = [];\n- each(initial, function(value, index) {\n- if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n- seen.push(value);\n- results.push(array[index]);\n- }\n- });\n- return results;\n- };\n-\n- // Produce an array that contains the union: each distinct element from all of\n- // the passed-in arrays.\n- _.union = function() {\n- return _.uniq(concat.apply(ArrayProto, arguments));\n- };\n-\n- // Produce an array that contains every item shared between all the\n- // passed-in arrays.\n- _.intersection = function(array) {\n- var rest = slice.call(arguments, 1);\n- return _.filter(_.uniq(array), function(item) {\n- return _.every(rest, function(other) {\n- return _.indexOf(other, item) >= 0;\n- });\n- });\n- };\n-\n- // Take the difference between one array and a number of other arrays.\n- // Only the elements present in just the first array will remain.\n- _.difference = function(array) {\n- var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n- return _.filter(array, function(value){ return !_.contains(rest, value); });\n- };\n-\n- // Zip together multiple lists into a single array -- elements that share\n- // an index go together.\n- _.zip = function() {\n- var args = slice.call(arguments);\n- var length = _.max(_.pluck(args, 'length'));\n- var results = new Array(length);\n- for (var i = 0; i < length; i++) {\n- results[i] = _.pluck(args, \"\" + i);\n- }\n- return results;\n- };\n-\n- // Converts lists into objects. Pass either a single array of `[key, value]`\n- // pairs, or two parallel arrays of the same length -- one of keys, and one of\n- // the corresponding values.\n- _.object = function(list, values) {\n- if (list == null) return {};\n- var result = {};\n- for (var i = 0, l = list.length; i < l; i++) {\n- if (values) {\n- result[list[i]] = values[i];\n- } else {\n- result[list[i][0]] = list[i][1];\n- }\n- }\n- return result;\n- };\n-\n- // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n- // we need this function. Return the position of the first occurrence of an\n- // item in an array, or -1 if the item is not included in the array.\n- // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n- // If the array is large and already in sort order, pass `true`\n- // for **isSorted** to use binary search.\n- _.indexOf = function(array, item, isSorted) {\n- if (array == null) return -1;\n- var i = 0, l = array.length;\n- if (isSorted) {\n- if (typeof isSorted == 'number') {\n- i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);\n- } else {\n- i = _.sortedIndex(array, item);\n- return array[i] === item ? i : -1;\n- }\n- }\n- if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n- for (; i < l; i++) if (array[i] === item) return i;\n- return -1;\n- };\n-\n- // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n- _.lastIndexOf = function(array, item, from) {\n- if (array == null) return -1;\n- var hasIndex = from != null;\n- if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n- return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n- }\n- var i = (hasIndex ? from : array.length);\n- while (i--) if (array[i] === item) return i;\n- return -1;\n- };\n-\n- // Generate an integer Array containing an arithmetic progression. A port of\n- // the native Python `range()` function. See\n- // [the Python documentation](http://docs.python.org/library/functions.html#range).\n- _.range = function(start, stop, step) {\n- if (arguments.length <= 1) {\n- stop = start || 0;\n- start = 0;\n- }\n- step = arguments[2] || 1;\n-\n- var len = Math.max(Math.ceil((stop - start) / step), 0);\n- var idx = 0;\n- var range = new Array(len);\n-\n- while(idx < len) {\n- range[idx++] = start;\n- start += step;\n- }\n-\n- return range;\n- };\n-\n- // Function (ahem) Functions\n- // ------------------\n-\n- // Create a function bound to a given object (assigning `this`, and arguments,\n- // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n- // available.\n- _.bind = function(func, context) {\n- if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n- var args = slice.call(arguments, 2);\n- return function() {\n- return func.apply(context, args.concat(slice.call(arguments)));\n- };\n- };\n-\n- // Partially apply a function by creating a version that has had some of its\n- // arguments pre-filled, without changing its dynamic `this` context.\n- _.partial = function(func) {\n- var args = slice.call(arguments, 1);\n- return function() {\n- return func.apply(this, args.concat(slice.call(arguments)));\n- };\n- };\n-\n- // Bind all of an object's methods to that object. Useful for ensuring that\n- // all callbacks defined on an object belong to it.\n- _.bindAll = function(obj) {\n- var funcs = slice.call(arguments, 1);\n- if (funcs.length === 0) funcs = _.functions(obj);\n- each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n- return obj;\n- };\n-\n- // Memoize an expensive function by storing its results.\n- _.memoize = function(func, hasher) {\n- var memo = {};\n- hasher || (hasher = _.identity);\n- return function() {\n- var key = hasher.apply(this, arguments);\n- return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n- };\n- };\n-\n- // Delays a function for the given number of milliseconds, and then calls\n- // it with the arguments supplied.\n- _.delay = function(func, wait) {\n- var args = slice.call(arguments, 2);\n- return setTimeout(function(){ return func.apply(null, args); }, wait);\n- };\n-\n- // Defers a function, scheduling it to run after the current call stack has\n- // cleared.\n- _.defer = function(func) {\n- return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n- };\n-\n- // Returns a function, that, when invoked, will only be triggered at most once\n- // during a given window of time.\n- _.throttle = function(func, wait) {\n- var context, args, timeout, result;\n- var previous = 0;\n- var later = function() {\n- previous = new Date;\n- timeout = null;\n- result = func.apply(context, args);\n- };\n- return function() {\n- var now = new Date;\n- var remaining = wait - (now - previous);\n- context = this;\n- args = arguments;\n- if (remaining <= 0) {\n- clearTimeout(timeout);\n- timeout = null;\n- previous = now;\n- result = func.apply(context, args);\n- } else if (!timeout) {\n- timeout = setTimeout(later, remaining);\n- }\n- return result;\n- };\n- };\n-\n- // Returns a function, that, as long as it continues to be invoked, will not\n- // be triggered. The function will be called after it stops being called for\n- // N milliseconds. If `immediate` is passed, trigger the function on the\n- // leading edge, instead of the trailing.\n- _.debounce = function(func, wait, immediate) {\n- var timeout, result;\n- return function() {\n- var context = this, args = arguments;\n- var later = function() {\n- timeout = null;\n- if (!immediate) result = func.apply(context, args);\n- };\n- var callNow = immediate && !timeout;\n- clearTimeout(timeout);\n- timeout = setTimeout(later, wait);\n- if (callNow) result = func.apply(context, args);\n- return result;\n- };\n- };\n-\n- // Returns a function that will be executed at most one time, no matter how\n- // often you call it. Useful for lazy initialization.\n- _.once = function(func) {\n- var ran = false, memo;\n- return function() {\n- if (ran) return memo;\n- ran = true;\n- memo = func.apply(this, arguments);\n- func = null;\n- return memo;\n- };\n- };\n-\n- // Returns the first function passed as an argument to the second,\n- // allowing you to adjust arguments, run code before and after, and\n- // conditionally execute the original function.\n- _.wrap = function(func, wrapper) {\n- return function() {\n- var args = [func];\n- push.apply(args, arguments);\n- return wrapper.apply(this, args);\n- };\n- };\n-\n- // Returns a function that is the composition of a list of functions, each\n- // consuming the return value of the function that follows.\n- _.compose = function() {\n- var funcs = arguments;\n- return function() {\n- var args = arguments;\n- for (var i = funcs.length - 1; i >= 0; i--) {\n- args = [funcs[i].apply(this, args)];\n- }\n- return args[0];\n- };\n- };\n-\n- // Returns a function that will only be executed after being called N times.\n- _.after = function(times, func) {\n- if (times <= 0) return func();\n- return function() {\n- if (--times < 1) {\n- return func.apply(this, arguments);\n- }\n- };\n- };\n-\n- // Object Functions\n- // ----------------\n-\n- // Retrieve the names of an object's properties.\n- // Delegates to **ECMAScript 5**'s native `Object.keys`\n- _.keys = nativeKeys || function(obj) {\n- if (obj !== Object(obj)) throw new TypeError('Invalid object');\n- var keys = [];\n- for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n- return keys;\n- };\n-\n- // Retrieve the values of an object's properties.\n- _.values = function(obj) {\n- var values = [];\n- for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);\n- return values;\n- };\n-\n- // Convert an object into a list of `[key, value]` pairs.\n- _.pairs = function(obj) {\n- var pairs = [];\n- for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);\n- return pairs;\n- };\n-\n- // Invert the keys and values of an object. The values must be serializable.\n- _.invert = function(obj) {\n- var result = {};\n- for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;\n- return result;\n- };\n-\n- // Return a sorted list of the function names available on the object.\n- // Aliased as `methods`\n- _.functions = _.methods = function(obj) {\n- var names = [];\n- for (var key in obj) {\n- if (_.isFunction(obj[key])) names.push(key);\n- }\n- return names.sort();\n- };\n-\n- // Extend a given object with all the properties in passed-in object(s).\n- _.extend = function(obj) {\n- each(slice.call(arguments, 1), function(source) {\n- if (source) {\n- for (var prop in source) {\n- obj[prop] = source[prop];\n- }\n- }\n- });\n- return obj;\n- };\n-\n- // Return a copy of the object only containing the whitelisted properties.\n- _.pick = function(obj) {\n- var copy = {};\n- var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n- each(keys, function(key) {\n- if (key in obj) copy[key] = obj[key];\n- });\n- return copy;\n- };\n-\n- // Return a copy of the object without the blacklisted properties.\n- _.omit = function(obj) {\n- var copy = {};\n- var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n- for (var key in obj) {\n- if (!_.contains(keys, key)) copy[key] = obj[key];\n- }\n- return copy;\n- };\n-\n- // Fill in a given object with default properties.\n- _.defaults = function(obj) {\n- each(slice.call(arguments, 1), function(source) {\n- if (source) {\n- for (var prop in source) {\n- if (obj[prop] == null) obj[prop] = source[prop];\n- }\n- }\n- });\n- return obj;\n- };\n-\n- // Create a (shallow-cloned) duplicate of an object.\n- _.clone = function(obj) {\n- if (!_.isObject(obj)) return obj;\n- return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n- };\n-\n- // Invokes interceptor with the obj, and then returns obj.\n- // The primary purpose of this method is to \"tap into\" a method chain, in\n- // order to perform operations on intermediate results within the chain.\n- _.tap = function(obj, interceptor) {\n- interceptor(obj);\n- return obj;\n- };\n-\n- // Internal recursive comparison function for `isEqual`.\n- var eq = function(a, b, aStack, bStack) {\n- // Identical objects are equal. `0 === -0`, but they aren't identical.\n- // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n- if (a === b) return a !== 0 || 1 / a == 1 / b;\n- // A strict comparison is necessary because `null == undefined`.\n- if (a == null || b == null) return a === b;\n- // Unwrap any wrapped objects.\n- if (a instanceof _) a = a._wrapped;\n- if (b instanceof _) b = b._wrapped;\n- // Compare `[[Class]]` names.\n- var className = toString.call(a);\n- if (className != toString.call(b)) return false;\n- switch (className) {\n- // Strings, numbers, dates, and booleans are compared by value.\n- case '[object String]':\n- // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n- // equivalent to `new String(\"5\")`.\n- return a == String(b);\n- case '[object Number]':\n- // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n- // other numeric values.\n- return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n- case '[object Date]':\n- case '[object Boolean]':\n- // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n- // millisecond representations. Note that invalid dates with millisecond representations\n- // of `NaN` are not equivalent.\n- return +a == +b;\n- // RegExps are compared by their source patterns and flags.\n- case '[object RegExp]':\n- return a.source == b.source &&\n- a.global == b.global &&\n- a.multiline == b.multiline &&\n- a.ignoreCase == b.ignoreCase;\n- }\n- if (typeof a != 'object' || typeof b != 'object') return false;\n- // Assume equality for cyclic structures. The algorithm for detecting cyclic\n- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n- var length = aStack.length;\n- while (length--) {\n- // Linear search. Performance is inversely proportional to the number of\n- // unique nested structures.\n- if (aStack[length] == a) return bStack[length] == b;\n- }\n- // Add the first object to the stack of traversed objects.\n- aStack.push(a);\n- bStack.push(b);\n- var size = 0, result = true;\n- // Recursively compare objects and arrays.\n- if (className == '[object Array]') {\n- // Compare array lengths to determine if a deep comparison is necessary.\n- size = a.length;\n- result = size == b.length;\n- if (result) {\n- // Deep compare the contents, ignoring non-numeric properties.\n- while (size--) {\n- if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n- }\n- }\n- } else {\n- // Objects with different constructors are not equivalent, but `Object`s\n- // from different frames are.\n- var aCtor = a.constructor, bCtor = b.constructor;\n- if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n- _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n- return false;\n- }\n- // Deep compare objects.\n- for (var key in a) {\n- if (_.has(a, key)) {\n- // Count the expected number of properties.\n- size++;\n- // Deep compare each member.\n- if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n- }\n- }\n- // Ensure that both objects contain the same number of properties.\n- if (result) {\n- for (key in b) {\n- if (_.has(b, key) && !(size--)) break;\n- }\n- result = !size;\n- }\n- }\n- // Remove the first object from the stack of traversed objects.\n- aStack.pop();\n- bStack.pop();\n- return result;\n- };\n-\n- // Perform a deep comparison to check if two objects are equal.\n- _.isEqual = function(a, b) {\n- return eq(a, b, [], []);\n- };\n-\n- // Is a given array, string, or object empty?\n- // An \"empty\" object has no enumerable own-properties.\n- _.isEmpty = function(obj) {\n- if (obj == null) return true;\n- if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n- for (var key in obj) if (_.has(obj, key)) return false;\n- return true;\n- };\n-\n- // Is a given value a DOM element?\n- _.isElement = function(obj) {\n- return !!(obj && obj.nodeType === 1);\n- };\n-\n- // Is a given value an array?\n- // Delegates to ECMA5's native Array.isArray\n- _.isArray = nativeIsArray || function(obj) {\n- return toString.call(obj) == '[object Array]';\n- };\n-\n- // Is a given variable an object?\n- _.isObject = function(obj) {\n- return obj === Object(obj);\n- };\n-\n- // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\n- each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {\n- _['is' + name] = function(obj) {\n- return toString.call(obj) == '[object ' + name + ']';\n- };\n- });\n-\n- // Define a fallback version of the method in browsers (ahem, IE), where\n- // there isn't any inspectable \"Arguments\" type.\n- if (!_.isArguments(arguments)) {\n- _.isArguments = function(obj) {\n- return !!(obj && _.has(obj, 'callee'));\n- };\n- }\n-\n- // Optimize `isFunction` if appropriate.\n- if (typeof (/./) !== 'function') {\n- _.isFunction = function(obj) {\n- return typeof obj === 'function';\n- };\n- }\n-\n- // Is a given object a finite number?\n- _.isFinite = function(obj) {\n- return isFinite(obj) && !isNaN(parseFloat(obj));\n- };\n-\n- // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n- _.isNaN = function(obj) {\n- return _.isNumber(obj) && obj != +obj;\n- };\n-\n- // Is a given value a boolean?\n- _.isBoolean = function(obj) {\n- return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n- };\n-\n- // Is a given value equal to null?\n- _.isNull = function(obj) {\n- return obj === null;\n- };\n-\n- // Is a given variable undefined?\n- _.isUndefined = function(obj) {\n- return obj === void 0;\n- };\n-\n- // Shortcut function for checking if an object has a given property directly\n- // on itself (in other words, not on a prototype).\n- _.has = function(obj, key) {\n- return hasOwnProperty.call(obj, key);\n- };\n-\n- // Utility Functions\n- // -----------------\n-\n- // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n- // previous owner. Returns a reference to the Underscore object.\n- _.noConflict = function() {\n- root._ = previousUnderscore;\n- return this;\n- };\n-\n- // Keep the identity function around for default iterators.\n- _.identity = function(value) {\n- return value;\n- };\n-\n- // Run a function **n** times.\n- _.times = function(n, iterator, context) {\n- var accum = Array(n);\n- for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n- return accum;\n- };\n-\n- // Return a random integer between min and max (inclusive).\n- _.random = function(min, max) {\n- if (max == null) {\n- max = min;\n- min = 0;\n- }\n- return min + Math.floor(Math.random() * (max - min + 1));\n- };\n-\n- // List of HTML entities for escaping.\n- var entityMap = {\n- escape: {\n- '&': '&',\n- '<': '<',\n- '>': '>',\n- '\"': '"',\n- \"'\": ''',\n- '/': '/'\n- }\n- };\n- entityMap.unescape = _.invert(entityMap.escape);\n-\n- // Regexes containing the keys and values listed immediately above.\n- var entityRegexes = {\n- escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\n- unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\n- };\n-\n- // Functions for escaping and unescaping strings to/from HTML interpolation.\n- _.each(['escape', 'unescape'], function(method) {\n- _[method] = function(string) {\n- if (string == null) return '';\n- return ('' + string).replace(entityRegexes[method], function(match) {\n- return entityMap[method][match];\n- });\n- };\n- });\n-\n- // If the value of the named property is a function then invoke it;\n- // otherwise, return it.\n- _.result = function(object, property) {\n- if (object == null) return null;\n- var value = object[property];\n- return _.isFunction(value) ? value.call(object) : value;\n- };\n-\n- // Add your own custom functions to the Underscore object.\n- _.mixin = function(obj) {\n- each(_.functions(obj), function(name){\n- var func = _[name] = obj[name];\n- _.prototype[name] = function() {\n- var args = [this._wrapped];\n- push.apply(args, arguments);\n- return result.call(this, func.apply(_, args));\n- };\n- });\n- };\n-\n- // Generate a unique integer id (unique within the entire client session).\n- // Useful for temporary DOM ids.\n- var idCounter = 0;\n- _.uniqueId = function(prefix) {\n- var id = ++idCounter + '';\n- return prefix ? prefix + id : id;\n- };\n-\n- // By default, Underscore uses ERB-style template delimiters, change the\n- // following template settings to use alternative delimiters.\n- _.templateSettings = {\n- evaluate : /<%([\\s\\S]+?)%>/g,\n- interpolate : /<%=([\\s\\S]+?)%>/g,\n- escape : /<%-([\\s\\S]+?)%>/g\n- };\n-\n- // When customizing `templateSettings`, if you don't want to define an\n- // interpolation, evaluation or escaping regex, we need one that is\n- // guaranteed not to match.\n- var noMatch = /(.)^/;\n-\n- // Certain characters need to be escaped so that they can be put into a\n- // string literal.\n- var escapes = {\n- \"'\": \"'\",\n- '\\\\': '\\\\',\n- '\\r': 'r',\n- '\\n': 'n',\n- '\\t': 't',\n- '\\u2028': 'u2028',\n- '\\u2029': 'u2029'\n- };\n-\n- var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n-\n- // JavaScript micro-templating, similar to John Resig's implementation.\n- // Underscore templating handles arbitrary delimiters, preserves whitespace,\n- // and correctly escapes quotes within interpolated code.\n- _.template = function(text, data, settings) {\n- var render;\n- settings = _.defaults({}, settings, _.templateSettings);\n-\n- // Combine delimiters into one regular expression via alternation.\n- var matcher = new RegExp([\n- (settings.escape || noMatch).source,\n- (settings.interpolate || noMatch).source,\n- (settings.evaluate || noMatch).source\n- ].join('|') + '|$', 'g');\n-\n- // Compile the template source, escaping string literals appropriately.\n- var index = 0;\n- var source = \"__p+='\";\n- text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n- source += text.slice(index, offset)\n- .replace(escaper, function(match) { return '\\\\' + escapes[match]; });\n-\n- if (escape) {\n- source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n- }\n- if (interpolate) {\n- source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n- }\n- if (evaluate) {\n- source += \"';\\n\" + evaluate + \"\\n__p+='\";\n- }\n- index = offset + match.length;\n- return match;\n- });\n- source += \"';\\n\";\n-\n- // If a variable is not specified, place data values in local scope.\n- if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n-\n- source = \"var __t,__p='',__j=Array.prototype.join,\" +\n- \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n- source + \"return __p;\\n\";\n-\n- try {\n- render = new Function(settings.variable || 'obj', '_', source);\n- } catch (e) {\n- e.source = source;\n- throw e;\n- }\n-\n- if (data) return render(data, _);\n- var template = function(data) {\n- return render.call(this, data, _);\n- };\n-\n- // Provide the compiled function source as a convenience for precompilation.\n- template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n-\n- return template;\n- };\n-\n- // Add a \"chain\" function, which will delegate to the wrapper.\n- _.chain = function(obj) {\n- return _(obj).chain();\n- };\n-\n- // OOP\n- // ---------------\n- // If Underscore is called as a function, it returns a wrapped object that\n- // can be used OO-style. This wrapper holds altered versions of all the\n- // underscore functions. Wrapped objects may be chained.\n-\n- // Helper function to continue chaining intermediate results.\n- var result = function(obj) {\n- return this._chain ? _(obj).chain() : obj;\n- };\n-\n- // Add all of the Underscore functions to the wrapper object.\n- _.mixin(_);\n-\n- // Add all mutator Array functions to the wrapper.\n- each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n- var method = ArrayProto[name];\n- _.prototype[name] = function() {\n- var obj = this._wrapped;\n- method.apply(obj, arguments);\n- if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\n- return result.call(this, obj);\n- };\n- });\n-\n- // Add all accessor Array functions to the wrapper.\n- each(['concat', 'join', 'slice'], function(name) {\n- var method = ArrayProto[name];\n- _.prototype[name] = function() {\n- return result.call(this, method.apply(this._wrapped, arguments));\n- };\n- });\n-\n- _.extend(_.prototype, {\n-\n- // Start chaining a wrapped Underscore object.\n- chain: function() {\n- this._chain = true;\n- return this;\n- },\n-\n- // Extracts the result from a wrapped and chained object.\n- value: function() {\n- return this._wrapped;\n- }\n-\n- });\n-\n-}).call(this);" + }, + { + "sha": "c8c80d1846c6c51d69cb3ec3fecb1874dd916741", + "filename": "less/app.less", + "status": "renamed", + "additions": 114, + "deletions": 113, + "changes": 227, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/less%2Fapp.less", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/less%2Fapp.less", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/less%2Fapp.less?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -1,113 +1,114 @@\n-.check_list .closed span.text {\r\n- text-decoration: line-through;\r\n- color: #808080;\r\n-}\r\n-\r\n-.check_list {\r\n- list-style: none;\r\n-}\r\n-\r\n-.check_list li {\r\n- padding: 2px;\r\n- min-height: 25px;\r\n-}\r\n-\r\n-.check_list .input-sm {\r\n- height: 22px;\r\n- padding: 2px 5px;\r\n-}\r\n-\r\n-.check_list .check_add {\r\n- margin-left: 15px;\r\n- margin-right: 15px;\r\n- width: 237px;\r\n-}\r\n-\r\n-.comment-form {\r\n- padding-top: 10px;\r\n-}\r\n-\r\n-.chosen-container-multi .chosen-choices li.search-field input[type=\"text\"] {\r\n- height: 24px;\r\n-}\r\n-\r\n-#message {\r\n- min-height: 40px;\r\n- border: 1px solid #E3E3E3;\r\n- border-radius: 4px;\r\n- padding: 8px;\r\n- outline: none;\r\n-}\r\n-#message:active , #message:focus {\r\n- border: 1px solid blue;\r\n-}\r\n-\r\n-blockquote.comment {\r\n- padding: 30px 15px 15px;\r\n- margin: 0 5px 15px;\r\n- font-size: 14px;\r\n- position: relative;\r\n-}\r\n-\r\n-blockquote.comment .author {\r\n- position: absolute;\r\n- top: 10px;\r\n- left: 10px;\r\n- font-size: 12px;\r\n- font-weight: 700;\r\n- color: #BBB;\r\n-}\r\n-\r\n-blockquote.comment .author a , \r\n-blockquote.comment span.author {\r\n- text-decoration: none;\r\n- color: #BBB;\r\n-}\r\n-\r\n-.bs-callout {\r\n- margin: 20px 0;\r\n- padding: 20px;\r\n- border-left: 3px solid #eee\r\n-}\r\n-\r\n-.bs-callout h4 {\r\n- margin-top: 0;\r\n- margin-bottom: 5px\r\n-}\r\n-\r\n-.bs-callout p:last-child {\r\n- margin-bottom: 0\r\n-}\r\n-\r\n-.bs-callout code {\r\n- background-color: #fff;\r\n- border-radius: 3px\r\n-}\r\n-\r\n-.bs-callout-danger {\r\n- background-color: #fdf7f7;\r\n- border-color: #d9534f\r\n-}\r\n-\r\n-.bs-callout-danger h4 {\r\n- color: #d9534f\r\n-}\r\n-\r\n-.bs-callout-warning {\r\n- background-color: #fcf8f2;\r\n- border-color: #f0ad4e\r\n-}\r\n-\r\n-.bs-callout-warning h4 {\r\n- color: #f0ad4e\r\n-}\r\n-\r\n-.bs-callout-info {\r\n- background-color: #f4f8fa;\r\n- border-color: #5bc0de\r\n-}\r\n-\r\n-.docs {\r\n- border: 1px solid #AAA;\r\n- margin: 5px 0px;\r\n-}\n\\ No newline at end of file\n+@import \"../bower_components/bootstrap/less/bootstrap.less\";\n+.check_list .closed span.text {\n+ text-decoration: line-through;\n+ color: #808080;\n+}\n+\n+.check_list {\n+ list-style: none;\n+}\n+\n+.check_list li {\n+ padding: 2px;\n+ min-height: 25px;\n+}\n+\n+.check_list .input-sm {\n+ height: 22px;\n+ padding: 2px 5px;\n+}\n+\n+.check_list .check_add {\n+ margin-left: 15px;\n+ margin-right: 15px;\n+ width: 237px;\n+}\n+\n+.comment-form {\n+ padding-top: 10px;\n+}\n+\n+.chosen-container-multi .chosen-choices li.search-field input[type=\"text\"] {\n+ height: 24px;\n+}\n+\n+#message {\n+ min-height: 40px;\n+ border: 1px solid #E3E3E3;\n+ border-radius: 4px;\n+ padding: 8px;\n+ outline: none;\n+}\n+#message:active , #message:focus {\n+ border: 1px solid blue;\n+}\n+\n+blockquote.comment {\n+ padding: 30px 15px 15px;\n+ margin: 0 5px 15px;\n+ font-size: 14px;\n+ position: relative;\n+}\n+\n+blockquote.comment .author {\n+ position: absolute;\n+ top: 10px;\n+ left: 10px;\n+ font-size: 12px;\n+ font-weight: 700;\n+ color: #BBB;\n+}\n+\n+blockquote.comment .author a ,\n+blockquote.comment span.author {\n+ text-decoration: none;\n+ color: #BBB;\n+}\n+\n+.bs-callout {\n+ margin: 20px 0;\n+ padding: 20px;\n+ border-left: 3px solid #eee\n+}\n+\n+.bs-callout h4 {\n+ margin-top: 0;\n+ margin-bottom: 5px\n+}\n+\n+.bs-callout p:last-child {\n+ margin-bottom: 0\n+}\n+\n+.bs-callout code {\n+ background-color: #fff;\n+ border-radius: 3px\n+}\n+\n+.bs-callout-danger {\n+ background-color: #fdf7f7;\n+ border-color: #d9534f\n+}\n+\n+.bs-callout-danger h4 {\n+ color: #d9534f\n+}\n+\n+.bs-callout-warning {\n+ background-color: #fcf8f2;\n+ border-color: #f0ad4e\n+}\n+\n+.bs-callout-warning h4 {\n+ color: #f0ad4e\n+}\n+\n+.bs-callout-info {\n+ background-color: #f4f8fa;\n+ border-color: #5bc0de\n+}\n+\n+.docs {\n+ border: 1px solid #AAA;\n+ margin: 5px 0px;\n+}", + "previous_filename": "css/style.css" + }, + { + "sha": "263b5c6d1c96c8b1c4c6cf15b7fe7901adb4a1f1", + "filename": "package.json", + "status": "added", + "additions": 20, + "deletions": 0, + "changes": 20, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/package.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/package.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/package.json?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -0,0 +1,20 @@\n+{\n+ \"name\": \"comments\",\n+ \"version\": \"0.0.1\",\n+ \"scripts\": {\n+ \"start\": \"grunt\",\n+ \"postinstall\": \"npm run build\",\n+ \"build\": \"bower install\"\n+ },\n+ \"devDependencies\": {\n+ \"grunt\": \"~0.4.5\",\n+ \"grunt-cli\": \"~0.1.13\",\n+ \"grunt-contrib-connect\": \"~0.8.0\",\n+ \"grunt-contrib-watch\": \"~0.6.1\",\n+ \"grunt-html2js\": \"~0.2.7\",\n+ \"grunt-contrib-concat\": \">=0.1.3\",\n+ \"grunt-contrib-less\": \">=1.0.0\",\n+ \"grunt-contrib-copy\": \"~0.8\",\n+ \"bower\": \"latest\"\n+ }\n+}" + }, + { + "sha": "803cbe4409462a0122b59f5baac08a7f116424e5", + "filename": "public/index.html", + "status": "added", + "additions": 18, + "deletions": 0, + "changes": 18, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Findex.html", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Findex.html", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Findex.html?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -0,0 +1,18 @@\n+\n+\n+\n+\n+ TODO supply a title\n+ \n+ \n+ \n+\n+\n+\n+
      \n+
      \n+
      \n+ \n+\n+\n+" + }, + { + "sha": "2dce1ea778f69a369b731c4571198de07f8bae39", + "filename": "public/json/comments.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fcomments.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fcomments.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fcomments.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/comments.json" + }, + { + "sha": "f96e4d22af97c8fff027ca5f7e782432bd474209", + "filename": "public/json/data.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fdata.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fdata.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fdata.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/data.json" + }, + { + "sha": "2427c59eca3089e0880675e27fe136fec7f7f2f8", + "filename": "public/json/products.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fproducts.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fproducts.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fproducts.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/products.json" + }, + { + "sha": "6212fd34761ce27ad31b20adfbfc4d80b9c1cf46", + "filename": "public/json/suppliers.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fsuppliers.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fsuppliers.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fsuppliers.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/suppliers.json" + }, + { + "sha": "c9858c3023c4a260eff3a286acca8a0e17c99e48", + "filename": "public/json/users.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fusers.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fusers.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fusers.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/users.json" + } + ] +} diff --git a/apigh/2023-04-19/coralproject_talk b/apigh/2023-04-19/coralproject_talk new file mode 100644 index 00000000..b2f91b7a --- /dev/null +++ b/apigh/2023-04-19/coralproject_talk @@ -0,0 +1,145 @@ +{ + "id": 72454242, + "node_id": "MDEwOlJlcG9zaXRvcnk3MjQ1NDI0Mg==", + "name": "talk", + "full_name": "coralproject/talk", + "private": false, + "owner": { + "login": "coralproject", + "id": 9255912, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjkyNTU5MTI=", + "avatar_url": "https://avatars.githubusercontent.com/u/9255912?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/coralproject", + "html_url": "https://github.com/coralproject", + "followers_url": "https://api.github.com/users/coralproject/followers", + "following_url": "https://api.github.com/users/coralproject/following{/other_user}", + "gists_url": "https://api.github.com/users/coralproject/gists{/gist_id}", + "starred_url": "https://api.github.com/users/coralproject/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/coralproject/subscriptions", + "organizations_url": "https://api.github.com/users/coralproject/orgs", + "repos_url": "https://api.github.com/users/coralproject/repos", + "events_url": "https://api.github.com/users/coralproject/events{/privacy}", + "received_events_url": "https://api.github.com/users/coralproject/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/coralproject/talk", + "description": "A better commenting experience from Vox Media", + "fork": false, + "url": "https://api.github.com/repos/coralproject/talk", + "forks_url": "https://api.github.com/repos/coralproject/talk/forks", + "keys_url": "https://api.github.com/repos/coralproject/talk/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/coralproject/talk/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/coralproject/talk/teams", + "hooks_url": "https://api.github.com/repos/coralproject/talk/hooks", + "issue_events_url": "https://api.github.com/repos/coralproject/talk/issues/events{/number}", + "events_url": "https://api.github.com/repos/coralproject/talk/events", + "assignees_url": "https://api.github.com/repos/coralproject/talk/assignees{/user}", + "branches_url": "https://api.github.com/repos/coralproject/talk/branches{/branch}", + "tags_url": "https://api.github.com/repos/coralproject/talk/tags", + "blobs_url": "https://api.github.com/repos/coralproject/talk/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/coralproject/talk/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/coralproject/talk/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/coralproject/talk/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/coralproject/talk/statuses/{sha}", + "languages_url": "https://api.github.com/repos/coralproject/talk/languages", + "stargazers_url": "https://api.github.com/repos/coralproject/talk/stargazers", + "contributors_url": "https://api.github.com/repos/coralproject/talk/contributors", + "subscribers_url": "https://api.github.com/repos/coralproject/talk/subscribers", + "subscription_url": "https://api.github.com/repos/coralproject/talk/subscription", + "commits_url": "https://api.github.com/repos/coralproject/talk/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/coralproject/talk/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/coralproject/talk/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/coralproject/talk/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/coralproject/talk/contents/{+path}", + "compare_url": "https://api.github.com/repos/coralproject/talk/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/coralproject/talk/merges", + "archive_url": "https://api.github.com/repos/coralproject/talk/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/coralproject/talk/downloads", + "issues_url": "https://api.github.com/repos/coralproject/talk/issues{/number}", + "pulls_url": "https://api.github.com/repos/coralproject/talk/pulls{/number}", + "milestones_url": "https://api.github.com/repos/coralproject/talk/milestones{/number}", + "notifications_url": "https://api.github.com/repos/coralproject/talk/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/coralproject/talk/labels{/name}", + "releases_url": "https://api.github.com/repos/coralproject/talk/releases{/id}", + "deployments_url": "https://api.github.com/repos/coralproject/talk/deployments", + "created_at": "2016-10-31T16:14:05Z", + "updated_at": "2023-04-17T13:30:57Z", + "pushed_at": "2023-04-18T22:05:51Z", + "git_url": "git://github.com/coralproject/talk.git", + "ssh_url": "git@github.com:coralproject/talk.git", + "clone_url": "https://github.com/coralproject/talk.git", + "svn_url": "https://github.com/coralproject/talk", + "homepage": "https://coralproject.net", + "size": 65761, + "stargazers_count": 1820, + "watchers_count": 1820, + "language": "TypeScript", + "has_issues": true, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 342, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 50, + "license": { + "key": "other", + "name": "Other", + "spdx_id": "NOASSERTION", + "url": null, + "node_id": "MDc6TGljZW5zZTA=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comments", + "comments-widget", + "graphql", + "javascript", + "journalism", + "nodejs", + "react", + "typescript" + ], + "visibility": "public", + "forks": 342, + "open_issues": 50, + "watchers": 1820, + "default_branch": "develop", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "coralproject", + "id": 9255912, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjkyNTU5MTI=", + "avatar_url": "https://avatars.githubusercontent.com/u/9255912?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/coralproject", + "html_url": "https://github.com/coralproject", + "followers_url": "https://api.github.com/users/coralproject/followers", + "following_url": "https://api.github.com/users/coralproject/following{/other_user}", + "gists_url": "https://api.github.com/users/coralproject/gists{/gist_id}", + "starred_url": "https://api.github.com/users/coralproject/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/coralproject/subscriptions", + "organizations_url": "https://api.github.com/users/coralproject/orgs", + "repos_url": "https://api.github.com/users/coralproject/repos", + "events_url": "https://api.github.com/users/coralproject/events{/privacy}", + "received_events_url": "https://api.github.com/users/coralproject/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 342, + "subscribers_count": 52 +} diff --git a/apigh/2023-04-19/coralproject_talk.commit b/apigh/2023-04-19/coralproject_talk.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-19/coralproject_talk.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-19/discourse b/apigh/2023-04-19/discourse new file mode 100644 index 00000000..0b59c1e0 --- /dev/null +++ b/apigh/2023-04-19/discourse @@ -0,0 +1,144 @@ +{ + "id": 7569578, + "node_id": "MDEwOlJlcG9zaXRvcnk3NTY5NTc4", + "name": "discourse", + "full_name": "discourse/discourse", + "private": false, + "owner": { + "login": "discourse", + "id": 3220138, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMyMjAxMzg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3220138?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/discourse", + "html_url": "https://github.com/discourse", + "followers_url": "https://api.github.com/users/discourse/followers", + "following_url": "https://api.github.com/users/discourse/following{/other_user}", + "gists_url": "https://api.github.com/users/discourse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/discourse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/discourse/subscriptions", + "organizations_url": "https://api.github.com/users/discourse/orgs", + "repos_url": "https://api.github.com/users/discourse/repos", + "events_url": "https://api.github.com/users/discourse/events{/privacy}", + "received_events_url": "https://api.github.com/users/discourse/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/discourse/discourse", + "description": "A platform for community discussion. Free, open, simple.", + "fork": false, + "url": "https://api.github.com/repos/discourse/discourse", + "forks_url": "https://api.github.com/repos/discourse/discourse/forks", + "keys_url": "https://api.github.com/repos/discourse/discourse/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/discourse/discourse/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/discourse/discourse/teams", + "hooks_url": "https://api.github.com/repos/discourse/discourse/hooks", + "issue_events_url": "https://api.github.com/repos/discourse/discourse/issues/events{/number}", + "events_url": "https://api.github.com/repos/discourse/discourse/events", + "assignees_url": "https://api.github.com/repos/discourse/discourse/assignees{/user}", + "branches_url": "https://api.github.com/repos/discourse/discourse/branches{/branch}", + "tags_url": "https://api.github.com/repos/discourse/discourse/tags", + "blobs_url": "https://api.github.com/repos/discourse/discourse/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/discourse/discourse/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/discourse/discourse/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/discourse/discourse/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/discourse/discourse/statuses/{sha}", + "languages_url": "https://api.github.com/repos/discourse/discourse/languages", + "stargazers_url": "https://api.github.com/repos/discourse/discourse/stargazers", + "contributors_url": "https://api.github.com/repos/discourse/discourse/contributors", + "subscribers_url": "https://api.github.com/repos/discourse/discourse/subscribers", + "subscription_url": "https://api.github.com/repos/discourse/discourse/subscription", + "commits_url": "https://api.github.com/repos/discourse/discourse/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/discourse/discourse/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/discourse/discourse/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/discourse/discourse/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/discourse/discourse/contents/{+path}", + "compare_url": "https://api.github.com/repos/discourse/discourse/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/discourse/discourse/merges", + "archive_url": "https://api.github.com/repos/discourse/discourse/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/discourse/discourse/downloads", + "issues_url": "https://api.github.com/repos/discourse/discourse/issues{/number}", + "pulls_url": "https://api.github.com/repos/discourse/discourse/pulls{/number}", + "milestones_url": "https://api.github.com/repos/discourse/discourse/milestones{/number}", + "notifications_url": "https://api.github.com/repos/discourse/discourse/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/discourse/discourse/labels{/name}", + "releases_url": "https://api.github.com/repos/discourse/discourse/releases{/id}", + "deployments_url": "https://api.github.com/repos/discourse/discourse/deployments", + "created_at": "2013-01-12T00:25:55Z", + "updated_at": "2023-04-19T01:23:25Z", + "pushed_at": "2023-04-19T00:09:31Z", + "git_url": "git://github.com/discourse/discourse.git", + "ssh_url": "git@github.com:discourse/discourse.git", + "clone_url": "https://github.com/discourse/discourse.git", + "svn_url": "https://github.com/discourse/discourse", + "homepage": "https://www.discourse.org", + "size": 579535, + "stargazers_count": 37722, + "watchers_count": 37722, + "language": "Ruby", + "has_issues": false, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 7948, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 68, + "license": { + "key": "gpl-2.0", + "name": "GNU General Public License v2.0", + "spdx_id": "GPL-2.0", + "url": "https://api.github.com/licenses/gpl-2.0", + "node_id": "MDc6TGljZW5zZTg=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "discourse", + "ember", + "forum", + "javascript", + "postgresql", + "rails", + "ruby" + ], + "visibility": "public", + "forks": 7948, + "open_issues": 68, + "watchers": 37722, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "discourse", + "id": 3220138, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMyMjAxMzg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3220138?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/discourse", + "html_url": "https://github.com/discourse", + "followers_url": "https://api.github.com/users/discourse/followers", + "following_url": "https://api.github.com/users/discourse/following{/other_user}", + "gists_url": "https://api.github.com/users/discourse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/discourse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/discourse/subscriptions", + "organizations_url": "https://api.github.com/users/discourse/orgs", + "repos_url": "https://api.github.com/users/discourse/repos", + "events_url": "https://api.github.com/users/discourse/events{/privacy}", + "received_events_url": "https://api.github.com/users/discourse/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 7948, + "subscribers_count": 897 +} diff --git a/apigh/2023-04-19/discourse.commit b/apigh/2023-04-19/discourse.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-19/discourse.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-19/diskuto b/apigh/2023-04-19/diskuto new file mode 100644 index 00000000..8336473e --- /dev/null +++ b/apigh/2023-04-19/diskuto @@ -0,0 +1,142 @@ +{ + "id": 84876210, + "node_id": "MDEwOlJlcG9zaXRvcnk4NDg3NjIxMA==", + "name": "diskuto", + "full_name": "rejectedsoftware/diskuto", + "private": false, + "owner": { + "login": "rejectedsoftware", + "id": 1661098, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjE2NjEwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1661098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rejectedsoftware", + "html_url": "https://github.com/rejectedsoftware", + "followers_url": "https://api.github.com/users/rejectedsoftware/followers", + "following_url": "https://api.github.com/users/rejectedsoftware/following{/other_user}", + "gists_url": "https://api.github.com/users/rejectedsoftware/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rejectedsoftware/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rejectedsoftware/subscriptions", + "organizations_url": "https://api.github.com/users/rejectedsoftware/orgs", + "repos_url": "https://api.github.com/users/rejectedsoftware/repos", + "events_url": "https://api.github.com/users/rejectedsoftware/events{/privacy}", + "received_events_url": "https://api.github.com/users/rejectedsoftware/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/rejectedsoftware/diskuto", + "description": "An embeddable comment engine", + "fork": false, + "url": "https://api.github.com/repos/rejectedsoftware/diskuto", + "forks_url": "https://api.github.com/repos/rejectedsoftware/diskuto/forks", + "keys_url": "https://api.github.com/repos/rejectedsoftware/diskuto/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rejectedsoftware/diskuto/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rejectedsoftware/diskuto/teams", + "hooks_url": "https://api.github.com/repos/rejectedsoftware/diskuto/hooks", + "issue_events_url": "https://api.github.com/repos/rejectedsoftware/diskuto/issues/events{/number}", + "events_url": "https://api.github.com/repos/rejectedsoftware/diskuto/events", + "assignees_url": "https://api.github.com/repos/rejectedsoftware/diskuto/assignees{/user}", + "branches_url": "https://api.github.com/repos/rejectedsoftware/diskuto/branches{/branch}", + "tags_url": "https://api.github.com/repos/rejectedsoftware/diskuto/tags", + "blobs_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rejectedsoftware/diskuto/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rejectedsoftware/diskuto/languages", + "stargazers_url": "https://api.github.com/repos/rejectedsoftware/diskuto/stargazers", + "contributors_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contributors", + "subscribers_url": "https://api.github.com/repos/rejectedsoftware/diskuto/subscribers", + "subscription_url": "https://api.github.com/repos/rejectedsoftware/diskuto/subscription", + "commits_url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rejectedsoftware/diskuto/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rejectedsoftware/diskuto/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contents/{+path}", + "compare_url": "https://api.github.com/repos/rejectedsoftware/diskuto/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rejectedsoftware/diskuto/merges", + "archive_url": "https://api.github.com/repos/rejectedsoftware/diskuto/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rejectedsoftware/diskuto/downloads", + "issues_url": "https://api.github.com/repos/rejectedsoftware/diskuto/issues{/number}", + "pulls_url": "https://api.github.com/repos/rejectedsoftware/diskuto/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rejectedsoftware/diskuto/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rejectedsoftware/diskuto/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rejectedsoftware/diskuto/labels{/name}", + "releases_url": "https://api.github.com/repos/rejectedsoftware/diskuto/releases{/id}", + "deployments_url": "https://api.github.com/repos/rejectedsoftware/diskuto/deployments", + "created_at": "2017-03-13T21:26:59Z", + "updated_at": "2023-03-10T21:03:11Z", + "pushed_at": "2023-03-10T08:49:46Z", + "git_url": "git://github.com/rejectedsoftware/diskuto.git", + "ssh_url": "git@github.com:rejectedsoftware/diskuto.git", + "clone_url": "https://github.com/rejectedsoftware/diskuto.git", + "svn_url": "https://github.com/rejectedsoftware/diskuto", + "homepage": "", + "size": 381, + "stargazers_count": 36, + "watchers_count": 36, + "language": "D", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 2, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comments-widget", + "discussion", + "dlang", + "vibe", + "web" + ], + "visibility": "public", + "forks": 2, + "open_issues": 8, + "watchers": 36, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "rejectedsoftware", + "id": 1661098, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjE2NjEwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1661098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rejectedsoftware", + "html_url": "https://github.com/rejectedsoftware", + "followers_url": "https://api.github.com/users/rejectedsoftware/followers", + "following_url": "https://api.github.com/users/rejectedsoftware/following{/other_user}", + "gists_url": "https://api.github.com/users/rejectedsoftware/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rejectedsoftware/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rejectedsoftware/subscriptions", + "organizations_url": "https://api.github.com/users/rejectedsoftware/orgs", + "repos_url": "https://api.github.com/users/rejectedsoftware/repos", + "events_url": "https://api.github.com/users/rejectedsoftware/events{/privacy}", + "received_events_url": "https://api.github.com/users/rejectedsoftware/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 2, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-19/diskuto.commit b/apigh/2023-04-19/diskuto.commit new file mode 100644 index 00000000..1faf006e --- /dev/null +++ b/apigh/2023-04-19/diskuto.commit @@ -0,0 +1,115 @@ +{ + "sha": "5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "node_id": "C_kwDOBQ8bstoAKDVhNzI1NDA1YzhjZTdmYjdkZDEwYmMwYzkyMDNhMmEzMzgyY2MxOGI", + "commit": { + "author": { + "name": "Sรถnke Ludwig", + "email": "sludwig@outerproduct.org", + "date": "2023-03-10T08:49:05Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-03-10T08:49:05Z" + }, + "message": "Merge pull request #16 from rejectedsoftware/comment_index\n\nAdd a comment database index", + "tree": { + "sha": "8b40e94d952e86d16fc18c382b3ba376864016c7", + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/trees/8b40e94d952e86d16fc18c382b3ba376864016c7" + }, + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/commits/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJkCu8BCRBK7hj4Ov3rIwAA1GsIAGMbvCuHVRIy+MwIYgm0ZEru\n4fLLcS5uaEdXq2iSWLFboFNx2/z7ZQO7RxCYvrRJQbeQbKP65TYkuNHweeBnWeiN\nZP9Lq4IRX6yEotgPNol88bCUEm1Pt90iIi3/2u2FlF+UmqPSx9WbrY9ewzWVCZNz\nmExIBwrvTPtriru53+uSonNT5D26ECyz4aloVLU/Ov3/znK1rL2dGUK9ZTFxuYVO\n8J33maIhCSC3Lr2Dk9j3pnKNKfPaYje4MYiIUBFN6lcuBfE9l0/uoK8hiVP3ecQy\njGJmmQsS7Ko64rpabob56VbWeBGR/YixJ34S2+AkVy0GWwIypcUgjRJxvGAH+2E=\n=d1Xb\n-----END PGP SIGNATURE-----\n", + "payload": "tree 8b40e94d952e86d16fc18c382b3ba376864016c7\nparent 642b88f6c0fa9e692a870a1451ad6549eda861ea\nparent ee12c25a103b5173c13dab0c92d83488d7b61aee\nauthor Sรถnke Ludwig 1678438145 +0100\ncommitter GitHub 1678438145 +0100\n\nMerge pull request #16 from rejectedsoftware/comment_index\n\nAdd a comment database index" + } + }, + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "html_url": "https://github.com/rejectedsoftware/diskuto/commit/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "comments_url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/comments", + "author": { + "login": "s-ludwig", + "id": 1645969, + "node_id": "MDQ6VXNlcjE2NDU5Njk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1645969?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/s-ludwig", + "html_url": "https://github.com/s-ludwig", + "followers_url": "https://api.github.com/users/s-ludwig/followers", + "following_url": "https://api.github.com/users/s-ludwig/following{/other_user}", + "gists_url": "https://api.github.com/users/s-ludwig/gists{/gist_id}", + "starred_url": "https://api.github.com/users/s-ludwig/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/s-ludwig/subscriptions", + "organizations_url": "https://api.github.com/users/s-ludwig/orgs", + "repos_url": "https://api.github.com/users/s-ludwig/repos", + "events_url": "https://api.github.com/users/s-ludwig/events{/privacy}", + "received_events_url": "https://api.github.com/users/s-ludwig/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "642b88f6c0fa9e692a870a1451ad6549eda861ea", + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/642b88f6c0fa9e692a870a1451ad6549eda861ea", + "html_url": "https://github.com/rejectedsoftware/diskuto/commit/642b88f6c0fa9e692a870a1451ad6549eda861ea" + }, + { + "sha": "ee12c25a103b5173c13dab0c92d83488d7b61aee", + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/ee12c25a103b5173c13dab0c92d83488d7b61aee", + "html_url": "https://github.com/rejectedsoftware/diskuto/commit/ee12c25a103b5173c13dab0c92d83488d7b61aee" + } + ], + "stats": { + "total": 33, + "additions": 32, + "deletions": 1 + }, + "files": [ + { + "sha": "ca8dd25e2d1c14eabb26c0395ab864cc2583db76", + "filename": ".github/workflows/ci.yml", + "status": "added", + "additions": 27, + "deletions": 0, + "changes": 27, + "blob_url": "https://github.com/rejectedsoftware/diskuto/blob/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/.github%2Fworkflows%2Fci.yml", + "raw_url": "https://github.com/rejectedsoftware/diskuto/raw/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/.github%2Fworkflows%2Fci.yml", + "contents_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contents/.github%2Fworkflows%2Fci.yml?ref=5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "patch": "@@ -0,0 +1,27 @@\n+name: CI\n+on: [push, pull_request]\n+jobs:\n+ test:\n+ name: CI\n+ runs-on: ubuntu-latest\n+ strategy:\n+ matrix:\n+ dc: [dmd-latest, ldc-latest]\n+ steps:\n+ - uses: actions/checkout@v2\n+ - name: Install D Compiler\n+ uses: dlang-community/setup-dlang@v1\n+ with:\n+ compiler: ${{ matrix.dc }}\n+\n+ - uses: actions/cache@v2\n+ with:\n+ path: ~/.dub\n+ key: ${{ matrix.dc }}-dub-${{ hashFiles('**/dub.selections.json') }}\n+ restore-keys: |\n+ ${{ matrix.dc }}-dub-\n+\n+ - name: Run Tests\n+ run: |\n+ dub build\n+ dub test" + }, + { + "sha": "8f9d95d114628f2355d1eada6a77134fc9a1aed6", + "filename": "source/diskuto/commentstores/mongodb.d", + "status": "modified", + "additions": 5, + "deletions": 1, + "changes": 6, + "blob_url": "https://github.com/rejectedsoftware/diskuto/blob/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/source%2Fdiskuto%2Fcommentstores%2Fmongodb.d", + "raw_url": "https://github.com/rejectedsoftware/diskuto/raw/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/source%2Fdiskuto%2Fcommentstores%2Fmongodb.d", + "contents_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contents/source%2Fdiskuto%2Fcommentstores%2Fmongodb.d?ref=5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "patch": "@@ -31,6 +31,8 @@ class MongoDBCommentStore : DiskutoCommentStore {\n \t\t// upgrade old status field\n \t\tm_comments.update([\"status\": cast(int)StoredComment.Status.active], [\"$set\": [\"status\": \"active\"]], UpdateFlags.multiUpdate);\n \t\tm_comments.update([\"status\": cast(int)StoredComment.Status.disabled], [\"$set\": [\"status\": \"disabled\"]], UpdateFlags.multiUpdate);\n+\n+\t\tm_comments.createIndex([\"topic\": 1, \"status\": 1]);\n \t}\n \n \tStoredComment.ID postComment(StoredComment comment)\n@@ -43,7 +45,9 @@ class MongoDBCommentStore : DiskutoCommentStore {\n \n \tStoredComment getComment(StoredComment.ID comment)\n \t{\n-\t\treturn cast(StoredComment)m_comments.findOne!(MongoStruct!StoredComment)([\"_id\": BsonObjectID.fromString(comment)]);\n+\t\tauto ret = m_comments.findOne!(MongoStruct!StoredComment)([\"_id\": BsonObjectID.fromString(comment)]);\n+\t\tif (ret.isNull) throw new Exception(\"Unknown commend ID: \" ~ comment);\n+\t\treturn cast(StoredComment)ret.get;\n \t}\n \n \tvoid setCommentStatus(StoredComment.ID id, StoredComment.Status status)" + } + ] +} diff --git a/apigh/2023-04-19/e_comments b/apigh/2023-04-19/e_comments new file mode 100644 index 00000000..58c147d5 --- /dev/null +++ b/apigh/2023-04-19/e_comments @@ -0,0 +1,123 @@ +{ + "id": 16458160, + "node_id": "MDEwOlJlcG9zaXRvcnkxNjQ1ODE2MA==", + "name": "e-comments", + "full_name": "skx/e-comments", + "private": false, + "owner": { + "login": "skx", + "id": 735291, + "node_id": "MDQ6VXNlcjczNTI5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/735291?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skx", + "html_url": "https://github.com/skx", + "followers_url": "https://api.github.com/users/skx/followers", + "following_url": "https://api.github.com/users/skx/following{/other_user}", + "gists_url": "https://api.github.com/users/skx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skx/subscriptions", + "organizations_url": "https://api.github.com/users/skx/orgs", + "repos_url": "https://api.github.com/users/skx/repos", + "events_url": "https://api.github.com/users/skx/events{/privacy}", + "received_events_url": "https://api.github.com/users/skx/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/skx/e-comments", + "description": "External comments for static HTML pages, a lightweight self-hosted disqus alternative.", + "fork": false, + "url": "https://api.github.com/repos/skx/e-comments", + "forks_url": "https://api.github.com/repos/skx/e-comments/forks", + "keys_url": "https://api.github.com/repos/skx/e-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/skx/e-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/skx/e-comments/teams", + "hooks_url": "https://api.github.com/repos/skx/e-comments/hooks", + "issue_events_url": "https://api.github.com/repos/skx/e-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/skx/e-comments/events", + "assignees_url": "https://api.github.com/repos/skx/e-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/skx/e-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/skx/e-comments/tags", + "blobs_url": "https://api.github.com/repos/skx/e-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/skx/e-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/skx/e-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/skx/e-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/skx/e-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/skx/e-comments/languages", + "stargazers_url": "https://api.github.com/repos/skx/e-comments/stargazers", + "contributors_url": "https://api.github.com/repos/skx/e-comments/contributors", + "subscribers_url": "https://api.github.com/repos/skx/e-comments/subscribers", + "subscription_url": "https://api.github.com/repos/skx/e-comments/subscription", + "commits_url": "https://api.github.com/repos/skx/e-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/skx/e-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/skx/e-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/skx/e-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/skx/e-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/skx/e-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/skx/e-comments/merges", + "archive_url": "https://api.github.com/repos/skx/e-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/skx/e-comments/downloads", + "issues_url": "https://api.github.com/repos/skx/e-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/skx/e-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/skx/e-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/skx/e-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/skx/e-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/skx/e-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/skx/e-comments/deployments", + "created_at": "2014-02-02T16:39:53Z", + "updated_at": "2022-10-30T20:38:33Z", + "pushed_at": "2018-01-23T17:30:47Z", + "git_url": "git://github.com/skx/e-comments.git", + "ssh_url": "git@github.com:skx/e-comments.git", + "clone_url": "https://github.com/skx/e-comments.git", + "svn_url": "https://github.com/skx/e-comments", + "homepage": "", + "size": 98, + "stargazers_count": 101, + "watchers_count": 101, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "disqus", + "external-comments", + "redis", + "ruby", + "self-hosted", + "sqlite" + ], + "visibility": "public", + "forks": 6, + "open_issues": 0, + "watchers": 101, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 6, + "subscribers_count": 9 +} diff --git a/apigh/2023-04-19/e_comments.commit b/apigh/2023-04-19/e_comments.commit new file mode 100644 index 00000000..6916f7fd --- /dev/null +++ b/apigh/2023-04-19/e_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "node_id": "MDY6Q29tbWl0MTY0NTgxNjA6ZmVkNWRiNzI3ZTNmYTI5NGI2OTk4YTBkMzNiNmY3YTNhMmMwZjdlNQ==", + "commit": { + "author": { + "name": "Steve Kemp", + "email": "steve@steve.org.uk", + "date": "2018-01-23T17:30:41Z" + }, + "committer": { + "name": "Steve Kemp", + "email": "steve@steve.org.uk", + "date": "2018-01-23T17:30:41Z" + }, + "message": "Removed link to online demo", + "tree": { + "sha": "317bf5432513c3c3c50e1805b52376e5c61d440a", + "url": "https://api.github.com/repos/skx/e-comments/git/trees/317bf5432513c3c3c50e1805b52376e5c61d440a" + }, + "url": "https://api.github.com/repos/skx/e-comments/git/commits/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/skx/e-comments/commits/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "html_url": "https://github.com/skx/e-comments/commit/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "comments_url": "https://api.github.com/repos/skx/e-comments/commits/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5/comments", + "author": { + "login": "skx", + "id": 735291, + "node_id": "MDQ6VXNlcjczNTI5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/735291?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skx", + "html_url": "https://github.com/skx", + "followers_url": "https://api.github.com/users/skx/followers", + "following_url": "https://api.github.com/users/skx/following{/other_user}", + "gists_url": "https://api.github.com/users/skx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skx/subscriptions", + "organizations_url": "https://api.github.com/users/skx/orgs", + "repos_url": "https://api.github.com/users/skx/repos", + "events_url": "https://api.github.com/users/skx/events{/privacy}", + "received_events_url": "https://api.github.com/users/skx/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "skx", + "id": 735291, + "node_id": "MDQ6VXNlcjczNTI5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/735291?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skx", + "html_url": "https://github.com/skx", + "followers_url": "https://api.github.com/users/skx/followers", + "following_url": "https://api.github.com/users/skx/following{/other_user}", + "gists_url": "https://api.github.com/users/skx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skx/subscriptions", + "organizations_url": "https://api.github.com/users/skx/orgs", + "repos_url": "https://api.github.com/users/skx/repos", + "events_url": "https://api.github.com/users/skx/events{/privacy}", + "received_events_url": "https://api.github.com/users/skx/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7a743e2b77d8b48907e7a9c56839acb8b4b3b342", + "url": "https://api.github.com/repos/skx/e-comments/commits/7a743e2b77d8b48907e7a9c56839acb8b4b3b342", + "html_url": "https://github.com/skx/e-comments/commit/7a743e2b77d8b48907e7a9c56839acb8b4b3b342" + } + ], + "stats": { + "total": 13, + "additions": 3, + "deletions": 10 + }, + "files": [ + { + "sha": "40a1f3f5831d1f7a456d160846247e338664ff9c", + "filename": "README.md", + "status": "modified", + "additions": 3, + "deletions": 10, + "changes": 13, + "blob_url": "https://github.com/skx/e-comments/blob/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5/README.md", + "raw_url": "https://github.com/skx/e-comments/raw/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5/README.md", + "contents_url": "https://api.github.com/repos/skx/e-comments/contents/README.md?ref=fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "patch": "@@ -39,7 +39,7 @@ Run-time (client-side) dependencies:\n * mustache.js\n * Included in this repository.\n \n-This server was originally written for my [server optimization guide](https://tweaked.io/) but since it seemed like a generally-useful piece of code it was moved into its own repository.\n+This server was originally written for a server optimization guide but since it seemed like a generally-useful piece of code it was moved into its own repository.\n \n ### Contents\n \n@@ -51,8 +51,7 @@ This server was originally written for my [server optimization guide](https://tw\n * [Advanced Usage](#advanced-usage)\n * [Theming](#theming)\n * [Alternative Solutions](#alternative-systems)\n-* [Online Demo](#online-demo)\n- * [Running Locally](#running-locally)\n+* [Running Locally](#running-locally)\n \n \n ## The Comment Server\n@@ -255,13 +254,7 @@ I'm open to pull-requests adding more formatting options, if you have something\n * Ruby-on-rails-based.\n * [No longer maintained](https://github.com/phusion/juvia/issues/65).\n \n-## Online Demo\n-\n-There is a live online demo you can view here:\n-\n-* https://tweaked.io/guide/demo/\n-\n-### Running Locally\n+## Running Locally\n \n Providing you have the dependencies installed you can run the same\n demo locally:" + } + ] +} diff --git a/apigh/2023-04-19/easy_page_comments b/apigh/2023-04-19/easy_page_comments new file mode 100644 index 00000000..d1c28bad --- /dev/null +++ b/apigh/2023-04-19/easy_page_comments @@ -0,0 +1,112 @@ +{ + "id": 2671789, + "node_id": "MDEwOlJlcG9zaXRvcnkyNjcxNzg5", + "name": "EasyPageComments", + "full_name": "Pomax/EasyPageComments", + "private": false, + "owner": { + "login": "Pomax", + "id": 177243, + "node_id": "MDQ6VXNlcjE3NzI0Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/177243?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Pomax", + "html_url": "https://github.com/Pomax", + "followers_url": "https://api.github.com/users/Pomax/followers", + "following_url": "https://api.github.com/users/Pomax/following{/other_user}", + "gists_url": "https://api.github.com/users/Pomax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Pomax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Pomax/subscriptions", + "organizations_url": "https://api.github.com/users/Pomax/orgs", + "repos_url": "https://api.github.com/users/Pomax/repos", + "events_url": "https://api.github.com/users/Pomax/events{/privacy}", + "received_events_url": "https://api.github.com/users/Pomax/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/Pomax/EasyPageComments", + "description": "A simple instant-comments-section for pages based on PHP at the server, and _optionally_ JavaScript at the front end", + "fork": false, + "url": "https://api.github.com/repos/Pomax/EasyPageComments", + "forks_url": "https://api.github.com/repos/Pomax/EasyPageComments/forks", + "keys_url": "https://api.github.com/repos/Pomax/EasyPageComments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Pomax/EasyPageComments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Pomax/EasyPageComments/teams", + "hooks_url": "https://api.github.com/repos/Pomax/EasyPageComments/hooks", + "issue_events_url": "https://api.github.com/repos/Pomax/EasyPageComments/issues/events{/number}", + "events_url": "https://api.github.com/repos/Pomax/EasyPageComments/events", + "assignees_url": "https://api.github.com/repos/Pomax/EasyPageComments/assignees{/user}", + "branches_url": "https://api.github.com/repos/Pomax/EasyPageComments/branches{/branch}", + "tags_url": "https://api.github.com/repos/Pomax/EasyPageComments/tags", + "blobs_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Pomax/EasyPageComments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Pomax/EasyPageComments/languages", + "stargazers_url": "https://api.github.com/repos/Pomax/EasyPageComments/stargazers", + "contributors_url": "https://api.github.com/repos/Pomax/EasyPageComments/contributors", + "subscribers_url": "https://api.github.com/repos/Pomax/EasyPageComments/subscribers", + "subscription_url": "https://api.github.com/repos/Pomax/EasyPageComments/subscription", + "commits_url": "https://api.github.com/repos/Pomax/EasyPageComments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Pomax/EasyPageComments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Pomax/EasyPageComments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Pomax/EasyPageComments/contents/{+path}", + "compare_url": "https://api.github.com/repos/Pomax/EasyPageComments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Pomax/EasyPageComments/merges", + "archive_url": "https://api.github.com/repos/Pomax/EasyPageComments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Pomax/EasyPageComments/downloads", + "issues_url": "https://api.github.com/repos/Pomax/EasyPageComments/issues{/number}", + "pulls_url": "https://api.github.com/repos/Pomax/EasyPageComments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Pomax/EasyPageComments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Pomax/EasyPageComments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Pomax/EasyPageComments/labels{/name}", + "releases_url": "https://api.github.com/repos/Pomax/EasyPageComments/releases{/id}", + "deployments_url": "https://api.github.com/repos/Pomax/EasyPageComments/deployments", + "created_at": "2011-10-29T17:51:36Z", + "updated_at": "2021-02-17T18:16:34Z", + "pushed_at": "2019-01-21T17:09:47Z", + "git_url": "git://github.com/Pomax/EasyPageComments.git", + "ssh_url": "git@github.com:Pomax/EasyPageComments.git", + "clone_url": "https://github.com/Pomax/EasyPageComments.git", + "svn_url": "https://github.com/Pomax/EasyPageComments", + "homepage": "", + "size": 43, + "stargazers_count": 17, + "watchers_count": 17, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 11, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 4, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 11, + "open_issues": 4, + "watchers": 17, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 11, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-19/easy_page_comments.commit b/apigh/2023-04-19/easy_page_comments.commit new file mode 100644 index 00000000..8483705f --- /dev/null +++ b/apigh/2023-04-19/easy_page_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "c436d8a7f5855426fe6406522c47edae97296ab6", + "node_id": "MDY6Q29tbWl0MjY3MTc4OTpjNDM2ZDhhN2Y1ODU1NDI2ZmU2NDA2NTIyYzQ3ZWRhZTk3Mjk2YWI2", + "commit": { + "author": { + "name": "Pomax", + "email": "pomax@nihongoresources.com", + "date": "2019-01-21T17:09:47Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2019-01-21T17:09:47Z" + }, + "message": "Update README.md", + "tree": { + "sha": "99ef37c704b4bbb6da4753ed474855f6be3c7226", + "url": "https://api.github.com/repos/Pomax/EasyPageComments/git/trees/99ef37c704b4bbb6da4753ed474855f6be3c7226" + }, + "url": "https://api.github.com/repos/Pomax/EasyPageComments/git/commits/c436d8a7f5855426fe6406522c47edae97296ab6", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJcRfzbCRBK7hj4Ov3rIwAAdHIIAGs6o2wklMqoUNqi/Mb+bNEI\nfcwvuhRxuSjfSCM6ZITtYimzLugPMilnY92huNe4/gf7npCh1YaXRt9hq/sRyNb6\n0k3Qwf5jCYM/zWf5mWOqTEQSXs4A+mlHPPN7X3Ml3NB0CGkMOpmTEdQxDzsO3lfT\ndH59dTEElS0LOKsbl2rxMqdD0mAjpBrmgmwfoHSQrH/DC7OyFpKlKjqX045jwKNs\nPNk/6H/5ikkxOOhKh7J3RDeLpIeIpbYAFYezxWBo/IAtzciw5tlvNN6HeGMsi0wO\nuv/9UGq0wmMvaJoqA/7Ja6EQeitH4svBih2gLDDT3gJd/8pqRfg4A1X4kcZsrXo=\n=v/+E\n-----END PGP SIGNATURE-----\n", + "payload": "tree 99ef37c704b4bbb6da4753ed474855f6be3c7226\nparent 138aa137a6a6936a87ba5487b31529b82d7852bc\nauthor Pomax 1548090587 -0800\ncommitter GitHub 1548090587 -0800\n\nUpdate README.md" + } + }, + "url": "https://api.github.com/repos/Pomax/EasyPageComments/commits/c436d8a7f5855426fe6406522c47edae97296ab6", + "html_url": "https://github.com/Pomax/EasyPageComments/commit/c436d8a7f5855426fe6406522c47edae97296ab6", + "comments_url": "https://api.github.com/repos/Pomax/EasyPageComments/commits/c436d8a7f5855426fe6406522c47edae97296ab6/comments", + "author": { + "login": "Pomax", + "id": 177243, + "node_id": "MDQ6VXNlcjE3NzI0Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/177243?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Pomax", + "html_url": "https://github.com/Pomax", + "followers_url": "https://api.github.com/users/Pomax/followers", + "following_url": "https://api.github.com/users/Pomax/following{/other_user}", + "gists_url": "https://api.github.com/users/Pomax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Pomax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Pomax/subscriptions", + "organizations_url": "https://api.github.com/users/Pomax/orgs", + "repos_url": "https://api.github.com/users/Pomax/repos", + "events_url": "https://api.github.com/users/Pomax/events{/privacy}", + "received_events_url": "https://api.github.com/users/Pomax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "138aa137a6a6936a87ba5487b31529b82d7852bc", + "url": "https://api.github.com/repos/Pomax/EasyPageComments/commits/138aa137a6a6936a87ba5487b31529b82d7852bc", + "html_url": "https://github.com/Pomax/EasyPageComments/commit/138aa137a6a6936a87ba5487b31529b82d7852bc" + } + ], + "stats": { + "total": 6, + "additions": 6, + "deletions": 0 + }, + "files": [ + { + "sha": "c7775ee8e35b6fa15009478210a80ad0a6e466a5", + "filename": "README.md", + "status": "modified", + "additions": 6, + "deletions": 0, + "changes": 6, + "blob_url": "https://github.com/Pomax/EasyPageComments/blob/c436d8a7f5855426fe6406522c47edae97296ab6/README.md", + "raw_url": "https://github.com/Pomax/EasyPageComments/raw/c436d8a7f5855426fe6406522c47edae97296ab6/README.md", + "contents_url": "https://api.github.com/repos/Pomax/EasyPageComments/contents/README.md?ref=c436d8a7f5855426fe6406522c47edae97296ab6", + "patch": "@@ -1,3 +1,9 @@\n+# THIS PROJECT IS NO LONGER MAINTAINED\n+\n+I wrote this in 2011, for a version of PHP that no longer exists. If you're considering using this package for your PHP user management, please, *please* look for a newer, better thing first.\n+\n+---\n+\n # EasyPageComments\n \n (c) 2011 Mike \"Pomax\" Kamermans" + } + ] +} diff --git a/apigh/2023-04-19/glosa b/apigh/2023-04-19/glosa new file mode 100644 index 00000000..cfc22a39 --- /dev/null +++ b/apigh/2023-04-19/glosa @@ -0,0 +1,144 @@ +{ + "id": 244964861, + "node_id": "MDEwOlJlcG9zaXRvcnkyNDQ5NjQ4NjE=", + "name": "glosa-server", + "full_name": "glosa/glosa-server", + "private": false, + "owner": { + "login": "glosa", + "id": 63453299, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjYzNDUzMjk5", + "avatar_url": "https://avatars.githubusercontent.com/u/63453299?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/glosa", + "html_url": "https://github.com/glosa", + "followers_url": "https://api.github.com/users/glosa/followers", + "following_url": "https://api.github.com/users/glosa/following{/other_user}", + "gists_url": "https://api.github.com/users/glosa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glosa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glosa/subscriptions", + "organizations_url": "https://api.github.com/users/glosa/orgs", + "repos_url": "https://api.github.com/users/glosa/repos", + "events_url": "https://api.github.com/users/glosa/events{/privacy}", + "received_events_url": "https://api.github.com/users/glosa/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/glosa/glosa-server", + "description": "Comments for static sites. Clone of Disqus, but faster, Opensource and sexy.", + "fork": false, + "url": "https://api.github.com/repos/glosa/glosa-server", + "forks_url": "https://api.github.com/repos/glosa/glosa-server/forks", + "keys_url": "https://api.github.com/repos/glosa/glosa-server/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/glosa/glosa-server/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/glosa/glosa-server/teams", + "hooks_url": "https://api.github.com/repos/glosa/glosa-server/hooks", + "issue_events_url": "https://api.github.com/repos/glosa/glosa-server/issues/events{/number}", + "events_url": "https://api.github.com/repos/glosa/glosa-server/events", + "assignees_url": "https://api.github.com/repos/glosa/glosa-server/assignees{/user}", + "branches_url": "https://api.github.com/repos/glosa/glosa-server/branches{/branch}", + "tags_url": "https://api.github.com/repos/glosa/glosa-server/tags", + "blobs_url": "https://api.github.com/repos/glosa/glosa-server/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/glosa/glosa-server/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/glosa/glosa-server/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/glosa/glosa-server/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/glosa/glosa-server/statuses/{sha}", + "languages_url": "https://api.github.com/repos/glosa/glosa-server/languages", + "stargazers_url": "https://api.github.com/repos/glosa/glosa-server/stargazers", + "contributors_url": "https://api.github.com/repos/glosa/glosa-server/contributors", + "subscribers_url": "https://api.github.com/repos/glosa/glosa-server/subscribers", + "subscription_url": "https://api.github.com/repos/glosa/glosa-server/subscription", + "commits_url": "https://api.github.com/repos/glosa/glosa-server/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/glosa/glosa-server/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/glosa/glosa-server/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/glosa/glosa-server/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/{+path}", + "compare_url": "https://api.github.com/repos/glosa/glosa-server/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/glosa/glosa-server/merges", + "archive_url": "https://api.github.com/repos/glosa/glosa-server/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/glosa/glosa-server/downloads", + "issues_url": "https://api.github.com/repos/glosa/glosa-server/issues{/number}", + "pulls_url": "https://api.github.com/repos/glosa/glosa-server/pulls{/number}", + "milestones_url": "https://api.github.com/repos/glosa/glosa-server/milestones{/number}", + "notifications_url": "https://api.github.com/repos/glosa/glosa-server/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/glosa/glosa-server/labels{/name}", + "releases_url": "https://api.github.com/repos/glosa/glosa-server/releases{/id}", + "deployments_url": "https://api.github.com/repos/glosa/glosa-server/deployments", + "created_at": "2020-03-04T17:40:40Z", + "updated_at": "2023-02-27T03:49:57Z", + "pushed_at": "2021-02-22T22:13:32Z", + "git_url": "git://github.com/glosa/glosa-server.git", + "ssh_url": "git@github.com:glosa/glosa-server.git", + "clone_url": "https://github.com/glosa/glosa-server.git", + "svn_url": "https://github.com/glosa/glosa-server", + "homepage": "", + "size": 30660, + "stargazers_count": 77, + "watchers_count": 77, + "language": "HTML", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "clojure", + "comment", + "comments-manager", + "comments-system", + "disqus", + "java", + "opensource" + ], + "visibility": "public", + "forks": 6, + "open_issues": 0, + "watchers": 77, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "glosa", + "id": 63453299, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjYzNDUzMjk5", + "avatar_url": "https://avatars.githubusercontent.com/u/63453299?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/glosa", + "html_url": "https://github.com/glosa", + "followers_url": "https://api.github.com/users/glosa/followers", + "following_url": "https://api.github.com/users/glosa/following{/other_user}", + "gists_url": "https://api.github.com/users/glosa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glosa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glosa/subscriptions", + "organizations_url": "https://api.github.com/users/glosa/orgs", + "repos_url": "https://api.github.com/users/glosa/repos", + "events_url": "https://api.github.com/users/glosa/events{/privacy}", + "received_events_url": "https://api.github.com/users/glosa/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 6, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-19/glosa.commit b/apigh/2023-04-19/glosa.commit new file mode 100644 index 00000000..881f4a23 --- /dev/null +++ b/apigh/2023-04-19/glosa.commit @@ -0,0 +1,151 @@ +{ + "sha": "5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "node_id": "MDY6Q29tbWl0MjQ0OTY0ODYxOjVmNGI5MWVlYWRmZTBkZmU4MDliMGViN2Y4NWZlMjQyZmRiYjMzNGE=", + "commit": { + "author": { + "name": "Andros Fenollosa", + "email": "tanrax@users.noreply.github.com", + "date": "2021-02-22T22:11:57Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-02-22T22:11:57Z" + }, + "message": "Merge pull request #9 from glosa/develop\n\nFix Delete request", + "tree": { + "sha": "2ebb7a4c8fc1a9ff628b29fea060974a4c2c049b", + "url": "https://api.github.com/repos/glosa/glosa-server/git/trees/2ebb7a4c8fc1a9ff628b29fea060974a4c2c049b" + }, + "url": "https://api.github.com/repos/glosa/glosa-server/git/commits/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJgNCwtCRBK7hj4Ov3rIwAAdHIIAG7ybudp78eEuTuq4UdchM8K\n2rmNlffcyEHQQ//LLFS37J7PoOq5nVNa4A3FjzEDVFSGFpQ7ytvvm8STKhx14dnE\ntfsXdlVi060+ayceFa5td6y1oF64AmviEMzM4Tpjnlx1yYbEgCwDDtyKVHfiBTae\nrUsjAEFzK6P4Cuh+f2zGsfUBj/RIsqFvDYRw0PNoU3mEawky+Z8Rf2PXPO+hLb3x\nu4Q+kUhJHReqf62W1acOwSc3uLqb1syuQ64oISJCmGvlI6PZQ/D8MAl3q2efaKGR\nn+zIb51FK3p3WHZyUzCxp8t5MD2As+yLEDzik2tW3BwcR37szrX18RSwg0ceCIg=\n=8A2t\n-----END PGP SIGNATURE-----\n", + "payload": "tree 2ebb7a4c8fc1a9ff628b29fea060974a4c2c049b\nparent 2822a326cea46abc7f5b0d00b6da6261866ee86f\nparent e926379f543ba9b0b18a41e53fe7d91cae2ad970\nauthor Andros Fenollosa 1614031917 +0100\ncommitter GitHub 1614031917 +0100\n\nMerge pull request #9 from glosa/develop\n\nFix Delete request" + } + }, + "url": "https://api.github.com/repos/glosa/glosa-server/commits/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "html_url": "https://github.com/glosa/glosa-server/commit/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "comments_url": "https://api.github.com/repos/glosa/glosa-server/commits/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/comments", + "author": { + "login": "tanrax", + "id": 4553672, + "node_id": "MDQ6VXNlcjQ1NTM2NzI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4553672?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tanrax", + "html_url": "https://github.com/tanrax", + "followers_url": "https://api.github.com/users/tanrax/followers", + "following_url": "https://api.github.com/users/tanrax/following{/other_user}", + "gists_url": "https://api.github.com/users/tanrax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tanrax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tanrax/subscriptions", + "organizations_url": "https://api.github.com/users/tanrax/orgs", + "repos_url": "https://api.github.com/users/tanrax/repos", + "events_url": "https://api.github.com/users/tanrax/events{/privacy}", + "received_events_url": "https://api.github.com/users/tanrax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "2822a326cea46abc7f5b0d00b6da6261866ee86f", + "url": "https://api.github.com/repos/glosa/glosa-server/commits/2822a326cea46abc7f5b0d00b6da6261866ee86f", + "html_url": "https://github.com/glosa/glosa-server/commit/2822a326cea46abc7f5b0d00b6da6261866ee86f" + }, + { + "sha": "e926379f543ba9b0b18a41e53fe7d91cae2ad970", + "url": "https://api.github.com/repos/glosa/glosa-server/commits/e926379f543ba9b0b18a41e53fe7d91cae2ad970", + "html_url": "https://github.com/glosa/glosa-server/commit/e926379f543ba9b0b18a41e53fe7d91cae2ad970" + } + ], + "stats": { + "total": 24, + "additions": 11, + "deletions": 13 + }, + "files": [ + { + "sha": "ebc1d19308b7f61ef10d80fdea5e729fde883fba", + "filename": "README.md", + "status": "modified", + "additions": 2, + "deletions": 4, + "changes": 6, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/README.md", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/README.md", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/README.md?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -532,7 +532,7 @@ Delete a comment for ID. [Authorization required](#authorization).\n **Method**: `DELETE`\n \n ``` sh\n-/api/v1/comments/\n+/api/v1/comments/{id}\n ```\n \n | Param | Value | Description |\n@@ -544,9 +544,7 @@ Delete a comment for ID. [Authorization required](#authorization).\n Delete comment with id `1234`.\n \n ``` sh\n-curl -XDELETE -H \"Authorization: Bearer mysecret\" -H \"Content-type: application/json\" -d '{\n- \"id\": 1234\n-}' 'http://localhost:4000/api/v1/comments/\n+curl -XDELETE -H \"Authorization: Bearer mysecret\" -H \"Content-type: application/json\" http://localhost:4000/api/v1/comments/1234\n ```\n \n ##### Success response" + }, + { + "sha": "8149fcd485663e24111bd580a431d29de113c7db", + "filename": "project.clj", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/project.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/project.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/project.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -1,4 +1,4 @@\n-(defproject glosa \"1.3.6\"\n+(defproject glosa \"1.3.8\"\n :description \"glosa\"\n :url \"https://github.com/tanrax/glosa\"\n :license {:name \"EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0\"" + }, + { + "sha": "6bad908e7fa694ec5a368bd3ac199887c67c8890", + "filename": "src/glosa/core.clj", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fcore.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fcore.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/src%2Fglosa%2Fcore.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -13,7 +13,7 @@\n (wrap-defaults (assoc-in site-defaults [:security :anti-forgery] false))\n (wrap-cors\n :access-control-allow-origin [(re-pattern (if (config :debug) \".*\" (config :domain-cli)))]\n- :access-control-allow-methods [:get :post])\n+ :access-control-allow-methods [:get :post :put :delete])\n (#(if (config :debug) (wrap-reload %) %))))\n \n (defn -main [& args]" + }, + { + "sha": "6949d2b2b870f8c4501190d70e172be3e085dea2", + "filename": "src/glosa/urls.clj", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Furls.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Furls.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/src%2Fglosa%2Furls.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -22,7 +22,7 @@\n (POST \"/comments/latest/:pag\" [] view-private/get-latest-comments)\n (POST \"/threads/search/:query\" [] view-private/get-search-threads)\n (PUT \"/comments/\" [] view-private/update-comment)\n- (DELETE \"/comments/\" [] view-private/delete-comment)))\n+ (DELETE \"/comments/:id\" [] view-private/delete-comment)))\n \n (defroutes resources-routes\n ;; Resources (statics)" + }, + { + "sha": "4d81edcca0760f3ba9abc07647ff88ec3b00b2e8", + "filename": "src/glosa/views/private.clj", + "status": "modified", + "additions": 6, + "deletions": 6, + "changes": 12, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fviews%2Fprivate.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fviews%2Fprivate.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/src%2Fglosa%2Fviews%2Fprivate.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -38,10 +38,10 @@\n (response-401 req))))\n \n (defn delete-comment\n-\"Delete one comment\"\n-[req]\n-(let [id (:id (get-JSON req))]\n- (if (check-bearer-token req)\n- (render-JSON req {:deleted (database/delete-comment id) :id (bigint id)})\n- (response-401 req))))\n+ \"Delete one comment\"\n+ [req]\n+ (let [id (-> req :params :id)]\n+ (if (check-bearer-token req)\n+ (render-JSON req {:deleted (database/delete-comment id) :id (bigint id)})\n+ (response-401 req))))\n " + } + ] +} diff --git a/apigh/2023-04-19/gotell b/apigh/2023-04-19/gotell new file mode 100644 index 00000000..598f2e30 --- /dev/null +++ b/apigh/2023-04-19/gotell @@ -0,0 +1,138 @@ +{ + "id": 68969663, + "node_id": "MDEwOlJlcG9zaXRvcnk2ODk2OTY2Mw==", + "name": "gotell", + "full_name": "netlify/gotell", + "private": false, + "owner": { + "login": "netlify", + "id": 7892489, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc4OTI0ODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7892489?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/netlify", + "html_url": "https://github.com/netlify", + "followers_url": "https://api.github.com/users/netlify/followers", + "following_url": "https://api.github.com/users/netlify/following{/other_user}", + "gists_url": "https://api.github.com/users/netlify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/netlify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/netlify/subscriptions", + "organizations_url": "https://api.github.com/users/netlify/orgs", + "repos_url": "https://api.github.com/users/netlify/repos", + "events_url": "https://api.github.com/users/netlify/events{/privacy}", + "received_events_url": "https://api.github.com/users/netlify/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/netlify/gotell", + "description": "Netlify Comments is an API and build tool for handling large amounts of comments for JAMstack products", + "fork": false, + "url": "https://api.github.com/repos/netlify/gotell", + "forks_url": "https://api.github.com/repos/netlify/gotell/forks", + "keys_url": "https://api.github.com/repos/netlify/gotell/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/netlify/gotell/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/netlify/gotell/teams", + "hooks_url": "https://api.github.com/repos/netlify/gotell/hooks", + "issue_events_url": "https://api.github.com/repos/netlify/gotell/issues/events{/number}", + "events_url": "https://api.github.com/repos/netlify/gotell/events", + "assignees_url": "https://api.github.com/repos/netlify/gotell/assignees{/user}", + "branches_url": "https://api.github.com/repos/netlify/gotell/branches{/branch}", + "tags_url": "https://api.github.com/repos/netlify/gotell/tags", + "blobs_url": "https://api.github.com/repos/netlify/gotell/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/netlify/gotell/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/netlify/gotell/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/netlify/gotell/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/netlify/gotell/statuses/{sha}", + "languages_url": "https://api.github.com/repos/netlify/gotell/languages", + "stargazers_url": "https://api.github.com/repos/netlify/gotell/stargazers", + "contributors_url": "https://api.github.com/repos/netlify/gotell/contributors", + "subscribers_url": "https://api.github.com/repos/netlify/gotell/subscribers", + "subscription_url": "https://api.github.com/repos/netlify/gotell/subscription", + "commits_url": "https://api.github.com/repos/netlify/gotell/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/netlify/gotell/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/netlify/gotell/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/netlify/gotell/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/netlify/gotell/contents/{+path}", + "compare_url": "https://api.github.com/repos/netlify/gotell/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/netlify/gotell/merges", + "archive_url": "https://api.github.com/repos/netlify/gotell/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/netlify/gotell/downloads", + "issues_url": "https://api.github.com/repos/netlify/gotell/issues{/number}", + "pulls_url": "https://api.github.com/repos/netlify/gotell/pulls{/number}", + "milestones_url": "https://api.github.com/repos/netlify/gotell/milestones{/number}", + "notifications_url": "https://api.github.com/repos/netlify/gotell/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/netlify/gotell/labels{/name}", + "releases_url": "https://api.github.com/repos/netlify/gotell/releases{/id}", + "deployments_url": "https://api.github.com/repos/netlify/gotell/deployments", + "created_at": "2016-09-22T23:11:29Z", + "updated_at": "2023-03-01T09:17:31Z", + "pushed_at": "2021-08-20T19:19:23Z", + "git_url": "git://github.com/netlify/gotell.git", + "ssh_url": "git@github.com:netlify/gotell.git", + "clone_url": "https://github.com/netlify/gotell.git", + "svn_url": "https://github.com/netlify/gotell", + "homepage": null, + "size": 58, + "stargazers_count": 277, + "watchers_count": 277, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 19, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 19, + "open_issues": 8, + "watchers": 277, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "netlify", + "id": 7892489, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc4OTI0ODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7892489?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/netlify", + "html_url": "https://github.com/netlify", + "followers_url": "https://api.github.com/users/netlify/followers", + "following_url": "https://api.github.com/users/netlify/following{/other_user}", + "gists_url": "https://api.github.com/users/netlify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/netlify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/netlify/subscriptions", + "organizations_url": "https://api.github.com/users/netlify/orgs", + "repos_url": "https://api.github.com/users/netlify/repos", + "events_url": "https://api.github.com/users/netlify/events{/privacy}", + "received_events_url": "https://api.github.com/users/netlify/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 19, + "subscribers_count": 17 +} diff --git a/apigh/2023-04-19/gotell.commit b/apigh/2023-04-19/gotell.commit new file mode 100644 index 00000000..c2afadee --- /dev/null +++ b/apigh/2023-04-19/gotell.commit @@ -0,0 +1,98 @@ +{ + "sha": "034af979ddb085e742d6e1288740b8443661a1e6", + "node_id": "MDY6Q29tbWl0Njg5Njk2NjM6MDM0YWY5NzlkZGIwODVlNzQyZDZlMTI4ODc0MGI4NDQzNjYxYTFlNg==", + "commit": { + "author": { + "name": "Marcus Weiner", + "email": "marcus@netlify.com", + "date": "2019-09-11T17:48:49Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2019-09-11T17:48:49Z" + }, + "message": "Truncate commit message if first paragraph is over 256 chars (#15)", + "tree": { + "sha": "a105ba66365a8fdc304e76f81732ca6f8c35353e", + "url": "https://api.github.com/repos/netlify/gotell/git/trees/a105ba66365a8fdc304e76f81732ca6f8c35353e" + }, + "url": "https://api.github.com/repos/netlify/gotell/git/commits/034af979ddb085e742d6e1288740b8443661a1e6", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJdeTOBCRBK7hj4Ov3rIwAAdHIIAKOG2eK0RhZzuh+dm4brZW2l\nhcT/qqxTu5W/VQqVGuMiRAo6TCT+WEXnhLVmFCnZ9tMpkvz2v5LzpW7b7xw37R48\nmSX/RmvqVlnlmgyLLTa/lAAUlg4PfRu9YzjapnrxhnwdnEX1Ww8a7JRtlnuh7eRX\ntgUMOif0qOoeyyGJ6tTYAfH1o11GNS0iAkPExaOMyAMHQBFACdbml5qBV2o/yPw/\noGNYUdzh6QFzpDK0vXvPaPk/Z5AVyog6DRAiu+ZrbZyyPUuMe+xZ1EIJmnHUB7pq\nUkGWje6yiiRyx5Rgh1fbyV2O8kB2nc+WenWAI43IiH4CXA+Sm4WMO2CkFN5Qqd0=\n=HRx3\n-----END PGP SIGNATURE-----\n", + "payload": "tree a105ba66365a8fdc304e76f81732ca6f8c35353e\nparent 54c777f322a694c916e170c7fc521985f32d898d\nauthor Marcus Weiner 1568224129 +0200\ncommitter GitHub 1568224129 +0200\n\nTruncate commit message if first paragraph is over 256 chars (#15)\n\n" + } + }, + "url": "https://api.github.com/repos/netlify/gotell/commits/034af979ddb085e742d6e1288740b8443661a1e6", + "html_url": "https://github.com/netlify/gotell/commit/034af979ddb085e742d6e1288740b8443661a1e6", + "comments_url": "https://api.github.com/repos/netlify/gotell/commits/034af979ddb085e742d6e1288740b8443661a1e6/comments", + "author": { + "login": "mraerino", + "id": 4941459, + "node_id": "MDQ6VXNlcjQ5NDE0NTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/4941459?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mraerino", + "html_url": "https://github.com/mraerino", + "followers_url": "https://api.github.com/users/mraerino/followers", + "following_url": "https://api.github.com/users/mraerino/following{/other_user}", + "gists_url": "https://api.github.com/users/mraerino/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mraerino/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mraerino/subscriptions", + "organizations_url": "https://api.github.com/users/mraerino/orgs", + "repos_url": "https://api.github.com/users/mraerino/repos", + "events_url": "https://api.github.com/users/mraerino/events{/privacy}", + "received_events_url": "https://api.github.com/users/mraerino/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "54c777f322a694c916e170c7fc521985f32d898d", + "url": "https://api.github.com/repos/netlify/gotell/commits/54c777f322a694c916e170c7fc521985f32d898d", + "html_url": "https://github.com/netlify/gotell/commit/54c777f322a694c916e170c7fc521985f32d898d" + } + ], + "stats": { + "total": 6, + "additions": 4, + "deletions": 2 + }, + "files": [ + { + "sha": "20e0dfdca41f8ea2f799af677effae9f88084272", + "filename": "api/server.go", + "status": "modified", + "additions": 4, + "deletions": 2, + "changes": 6, + "blob_url": "https://github.com/netlify/gotell/blob/034af979ddb085e742d6e1288740b8443661a1e6/api%2Fserver.go", + "raw_url": "https://github.com/netlify/gotell/raw/034af979ddb085e742d6e1288740b8443661a1e6/api%2Fserver.go", + "contents_url": "https://api.github.com/repos/netlify/gotell/contents/api%2Fserver.go?ref=034af979ddb085e742d6e1288740b8443661a1e6", + "patch": "@@ -108,6 +108,10 @@ func (s *Server) postComment(ctx context.Context, w http.ResponseWriter, req *ht\n \t\tfmt.Sprintf(\"%v-%v.json\", (time.Now().UnixNano()/1000000), name),\n \t)\n \n+\tmessage := firstParagraph\n+\tif len(message) > 255 {\n+\t\tmessage = message[:255]\n+\t}\n \tcontent, _ := json.Marshal(comment)\n \tbranch := \"master\"\n \n@@ -129,7 +133,6 @@ func (s *Server) postComment(ctx context.Context, w http.ResponseWriter, req *ht\n \t\t\tjsonError(w, fmt.Sprintf(\"Failed to create comment branch: %v\", err), 500)\n \t\t\treturn\n \t\t}\n-\t\tmessage := firstParagraph\n \t\t_, _, err = s.client.Repositories.CreateFile(ctx, parts[0], parts[1], pathname, &github.RepositoryContentFileOptions{\n \t\t\tMessage: &message,\n \t\t\tContent: content,\n@@ -152,7 +155,6 @@ func (s *Server) postComment(ctx context.Context, w http.ResponseWriter, req *ht\n \t\t\treturn\n \t\t}\n \t} else {\n-\t\tmessage := firstParagraph\n \t\t_, _, err = s.client.Repositories.CreateFile(ctx, parts[0], parts[1], pathname, &github.RepositoryContentFileOptions{\n \t\t\tMessage: &message,\n \t\t\tContent: content," + } + ] +} diff --git a/apigh/2023-04-19/hashover b/apigh/2023-04-19/hashover new file mode 100644 index 00000000..1ba48d68 --- /dev/null +++ b/apigh/2023-04-19/hashover @@ -0,0 +1,118 @@ +{ + "id": 18091549, + "node_id": "MDEwOlJlcG9zaXRvcnkxODA5MTU0OQ==", + "name": "hashover", + "full_name": "jacobwb/hashover", + "private": false, + "owner": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jacobwb/hashover", + "description": "Free and Open Source PHP Comment System", + "fork": false, + "url": "https://api.github.com/repos/jacobwb/hashover", + "forks_url": "https://api.github.com/repos/jacobwb/hashover/forks", + "keys_url": "https://api.github.com/repos/jacobwb/hashover/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jacobwb/hashover/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jacobwb/hashover/teams", + "hooks_url": "https://api.github.com/repos/jacobwb/hashover/hooks", + "issue_events_url": "https://api.github.com/repos/jacobwb/hashover/issues/events{/number}", + "events_url": "https://api.github.com/repos/jacobwb/hashover/events", + "assignees_url": "https://api.github.com/repos/jacobwb/hashover/assignees{/user}", + "branches_url": "https://api.github.com/repos/jacobwb/hashover/branches{/branch}", + "tags_url": "https://api.github.com/repos/jacobwb/hashover/tags", + "blobs_url": "https://api.github.com/repos/jacobwb/hashover/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jacobwb/hashover/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jacobwb/hashover/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jacobwb/hashover/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jacobwb/hashover/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jacobwb/hashover/languages", + "stargazers_url": "https://api.github.com/repos/jacobwb/hashover/stargazers", + "contributors_url": "https://api.github.com/repos/jacobwb/hashover/contributors", + "subscribers_url": "https://api.github.com/repos/jacobwb/hashover/subscribers", + "subscription_url": "https://api.github.com/repos/jacobwb/hashover/subscription", + "commits_url": "https://api.github.com/repos/jacobwb/hashover/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jacobwb/hashover/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jacobwb/hashover/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jacobwb/hashover/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jacobwb/hashover/contents/{+path}", + "compare_url": "https://api.github.com/repos/jacobwb/hashover/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jacobwb/hashover/merges", + "archive_url": "https://api.github.com/repos/jacobwb/hashover/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jacobwb/hashover/downloads", + "issues_url": "https://api.github.com/repos/jacobwb/hashover/issues{/number}", + "pulls_url": "https://api.github.com/repos/jacobwb/hashover/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jacobwb/hashover/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jacobwb/hashover/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jacobwb/hashover/labels{/name}", + "releases_url": "https://api.github.com/repos/jacobwb/hashover/releases{/id}", + "deployments_url": "https://api.github.com/repos/jacobwb/hashover/deployments", + "created_at": "2014-03-25T07:00:12Z", + "updated_at": "2023-04-05T05:22:51Z", + "pushed_at": "2022-03-02T06:17:57Z", + "git_url": "git://github.com/jacobwb/hashover.git", + "ssh_url": "git@github.com:jacobwb/hashover.git", + "clone_url": "https://github.com/jacobwb/hashover.git", + "svn_url": "https://github.com/jacobwb/hashover", + "homepage": "http://tildehash.com/?page=hashover", + "size": 124, + "stargazers_count": 243, + "watchers_count": 243, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 28, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 5, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 28, + "open_issues": 5, + "watchers": 243, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 28, + "subscribers_count": 22 +} diff --git a/apigh/2023-04-19/hashover.commit b/apigh/2023-04-19/hashover.commit new file mode 100644 index 00000000..b105fc29 --- /dev/null +++ b/apigh/2023-04-19/hashover.commit @@ -0,0 +1,98 @@ +{ + "sha": "19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "node_id": "C_kwDOARQOHdoAKDE5YmRmMTE4OWZmMzM5ZWJiMGM1M2E0Mjg2MTNlYWQ3YzMxNmExZWI", + "commit": { + "author": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-03-02T06:16:14Z" + }, + "committer": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-03-02T06:16:14Z" + }, + "message": "Addressing #34", + "tree": { + "sha": "9ffa73fe3ec5027450916f1617e1c335dff466b0", + "url": "https://api.github.com/repos/jacobwb/hashover/git/trees/9ffa73fe3ec5027450916f1617e1c335dff466b0" + }, + "url": "https://api.github.com/repos/jacobwb/hashover/git/commits/19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCAAdFiEEq4pVVPF17yxZ5cYw5kqpM55vbrAFAmIfC7YACgkQ5kqpM55v\nbrBooA/9HI5Ls4yK0EnpsFkNnnycU/gAGoe94VrkKN26/l1AB4pqvz5rya4fAkJV\n+G8Y0zRTJiboGJ30ITtvf+AX9eIvhpX/aALwMLUxcMMFpHgt4KkO9ej/DccHJdlh\nOFnLFfgnjV2KbNmhP8dgQeA2jSI3dD2ezTuzxpLFi035QmMuu/Ks/d7V5/cEgrUt\neqKYM8so+rtv5QOK2BUqeA5kEVP7EhZDRejAF+NBXiiIf8XuGR6jhPOf656/LSUc\neHkKU6nG+9CJL3gDPFBXi71RZjBGyXbbIruaglEMB+WDbBx4YbaLpD/2qH8sCsoI\nKXR0gBVAYFxicPt9J2FRH0tzkJrvK2mkumlFeYiWUAcHmuKIuAKg8nJGRl+M46wS\nEuLWXFhCzwciQF7aj0CWr/SIs06p20gnSBWXQaO83ink/oVjQveUuj/o75Ax2Ztg\nwAeYkaZdxrD9sOHfZYosy4x4opjF87mjSYEX/wTgYcepJ3TviO8o+Cg28oo2rE9Y\nE6MYpxQgT/yKFXMBJ2L7n0NnpmO9qBX/mfQCRQaWfQ9HJvhPOnQAOfypbAoXBOBP\nxCkuUmQjlT/4pAt30rOkUCihkUzpvMDlKa4HLrQpOEJsg2qOcFIGbtnmLBmGLLZw\nuX0ZzWhN/jXyKp/+N3L63ULnt1NXIBXhLBpz3EndQtCam5R6UmM=\n=OTh1\n-----END PGP SIGNATURE-----", + "payload": "tree 9ffa73fe3ec5027450916f1617e1c335dff466b0\nparent 1eb12da19474c18137a93e0d195d729f60317494\nauthor Jacob Barkdull 1646201774 -0800\ncommitter Jacob Barkdull 1646201774 -0800\n\nAddressing #34\n" + } + }, + "url": "https://api.github.com/repos/jacobwb/hashover/commits/19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "html_url": "https://github.com/jacobwb/hashover/commit/19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "comments_url": "https://api.github.com/repos/jacobwb/hashover/commits/19bdf1189ff339ebb0c53a428613ead7c316a1eb/comments", + "author": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1eb12da19474c18137a93e0d195d729f60317494", + "url": "https://api.github.com/repos/jacobwb/hashover/commits/1eb12da19474c18137a93e0d195d729f60317494", + "html_url": "https://github.com/jacobwb/hashover/commit/1eb12da19474c18137a93e0d195d729f60317494" + } + ], + "stats": { + "total": 6, + "additions": 3, + "deletions": 3 + }, + "files": [ + { + "sha": "8ed72c1e97f3e348ed00f075aebf75af800dcd09", + "filename": "scripts/encryption.php", + "status": "modified", + "additions": 3, + "deletions": 3, + "changes": 6, + "blob_url": "https://github.com/jacobwb/hashover/blob/19bdf1189ff339ebb0c53a428613ead7c316a1eb/scripts%2Fencryption.php", + "raw_url": "https://github.com/jacobwb/hashover/raw/19bdf1189ff339ebb0c53a428613ead7c316a1eb/scripts%2Fencryption.php", + "contents_url": "https://api.github.com/repos/jacobwb/hashover/contents/scripts%2Fencryption.php?ref=19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "patch": "@@ -27,13 +27,13 @@ function encrypt($string) {\n \t\t$k = array();\n \n \t\tfor ($i2 = 0; $i2 < $kl; $i2++) {\n-\t\t\t$k[$i2] = ord($encryption_key{$i2}) & 0x1F;\n+\t\t\t$k[$i2] = ord($encryption_key[$i2]) & 0x1F;\n \t\t}\n \t\t$j = 0;\n \n \t\tfor ($i2 = 0; $i2 < strlen($str); $i2++) {\n-\t\t\t$e = ord($str{$i2});\n-\t\t\t$str{$i2} = $e & 0xE0 ? chr($e^$k[$j]) : chr($e);\n+\t\t\t$e = ord($str[$i2]);\n+\t\t\t$str[$i2] = $e & 0xE0 ? chr($e^$k[$j]) : chr($e);\n \t\t\t$j++; $j = $j == $kl ? 0 : $j;\n \t\t}\n \t\treturn $str;" + } + ] +} diff --git a/apigh/2023-04-19/hashover2 b/apigh/2023-04-19/hashover2 new file mode 100644 index 00000000..655db5d3 --- /dev/null +++ b/apigh/2023-04-19/hashover2 @@ -0,0 +1,129 @@ +{ + "id": 18096322, + "node_id": "MDEwOlJlcG9zaXRvcnkxODA5NjMyMg==", + "name": "hashover-next", + "full_name": "jacobwb/hashover-next", + "private": false, + "owner": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jacobwb/hashover-next", + "description": "This branch will be HashOver 2.0", + "fork": false, + "url": "https://api.github.com/repos/jacobwb/hashover-next", + "forks_url": "https://api.github.com/repos/jacobwb/hashover-next/forks", + "keys_url": "https://api.github.com/repos/jacobwb/hashover-next/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jacobwb/hashover-next/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jacobwb/hashover-next/teams", + "hooks_url": "https://api.github.com/repos/jacobwb/hashover-next/hooks", + "issue_events_url": "https://api.github.com/repos/jacobwb/hashover-next/issues/events{/number}", + "events_url": "https://api.github.com/repos/jacobwb/hashover-next/events", + "assignees_url": "https://api.github.com/repos/jacobwb/hashover-next/assignees{/user}", + "branches_url": "https://api.github.com/repos/jacobwb/hashover-next/branches{/branch}", + "tags_url": "https://api.github.com/repos/jacobwb/hashover-next/tags", + "blobs_url": "https://api.github.com/repos/jacobwb/hashover-next/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jacobwb/hashover-next/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jacobwb/hashover-next/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jacobwb/hashover-next/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jacobwb/hashover-next/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jacobwb/hashover-next/languages", + "stargazers_url": "https://api.github.com/repos/jacobwb/hashover-next/stargazers", + "contributors_url": "https://api.github.com/repos/jacobwb/hashover-next/contributors", + "subscribers_url": "https://api.github.com/repos/jacobwb/hashover-next/subscribers", + "subscription_url": "https://api.github.com/repos/jacobwb/hashover-next/subscription", + "commits_url": "https://api.github.com/repos/jacobwb/hashover-next/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jacobwb/hashover-next/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jacobwb/hashover-next/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jacobwb/hashover-next/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jacobwb/hashover-next/contents/{+path}", + "compare_url": "https://api.github.com/repos/jacobwb/hashover-next/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jacobwb/hashover-next/merges", + "archive_url": "https://api.github.com/repos/jacobwb/hashover-next/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jacobwb/hashover-next/downloads", + "issues_url": "https://api.github.com/repos/jacobwb/hashover-next/issues{/number}", + "pulls_url": "https://api.github.com/repos/jacobwb/hashover-next/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jacobwb/hashover-next/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jacobwb/hashover-next/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jacobwb/hashover-next/labels{/name}", + "releases_url": "https://api.github.com/repos/jacobwb/hashover-next/releases{/id}", + "deployments_url": "https://api.github.com/repos/jacobwb/hashover-next/deployments", + "created_at": "2014-03-25T10:21:16Z", + "updated_at": "2023-04-14T05:53:32Z", + "pushed_at": "2022-11-19T20:43:27Z", + "git_url": "git://github.com/jacobwb/hashover-next.git", + "ssh_url": "git@github.com:jacobwb/hashover-next.git", + "clone_url": "https://github.com/jacobwb/hashover-next.git", + "svn_url": "https://github.com/jacobwb/hashover-next", + "homepage": "", + "size": 2838, + "stargazers_count": 409, + "watchers_count": 409, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 89, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 103, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "agpl", + "comments", + "free-software", + "freesoftware", + "hashover", + "javascript", + "json", + "open-source", + "opensource", + "php", + "sql", + "xml" + ], + "visibility": "public", + "forks": 89, + "open_issues": 103, + "watchers": 409, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 89, + "subscribers_count": 25 +} diff --git a/apigh/2023-04-19/hashover2.commit b/apigh/2023-04-19/hashover2.commit new file mode 100644 index 00000000..799a097f --- /dev/null +++ b/apigh/2023-04-19/hashover2.commit @@ -0,0 +1,110 @@ +{ + "sha": "58c7b12f2e2146786760c8a308fe90559f12bcff", + "node_id": "C_kwDOARQgwtoAKDU4YzdiMTJmMmUyMTQ2Nzg2NzYwYzhhMzA4ZmU5MDU1OWYxMmJjZmY", + "commit": { + "author": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-11-19T20:42:19Z" + }, + "committer": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-11-19T20:42:19Z" + }, + "message": "Set thread name in likes and edit info scripts, closes #338", + "tree": { + "sha": "41010df14da9cae224416894d003ffe8030e88b7", + "url": "https://api.github.com/repos/jacobwb/hashover-next/git/trees/41010df14da9cae224416894d003ffe8030e88b7" + }, + "url": "https://api.github.com/repos/jacobwb/hashover-next/git/commits/58c7b12f2e2146786760c8a308fe90559f12bcff", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCAAdFiEEq4pVVPF17yxZ5cYw5kqpM55vbrAFAmN5P+kACgkQ5kqpM55v\nbrDfrg/+OlvitQoIheB5aZfWoIKx4unHR+bWVyhnQ6aLFpTcXDlaJpTBv0mqJUIQ\nxA+rTkC+2orSGSYw2Dc8/CV6fsUy2NcEUPfCEc1+KeB/mnY0UkaL/f4s+5x1yDp4\nKOeuWzEa+3E8AjRQa4LzcYDFf35vllqioT5XfXHxJNGCkxBmoSmlKhW4ixgFjn6z\nZwAu3a8g58VGDTJG481uAlNcnE90Vuk+jku3E1gk32W+VVY1Np5uBvQc+fymn8Cc\nOuojJmq8Hz7Gi5eZcVOrRtI13w3kYZR1nu1l/AFFpB8vFZUhzh9EvnYPGddzAjRT\naJODmDuO7Sme8G39hlwviTGbsHPvDjkUQowmGu5LiaTdluPnbxuXhpYBGchj7ykC\nuAENL+3PI3PDNk8A+R2kBWZ08XsjOojoGptKbY2aF3uROyFbIo9NisYaAgb9Vt8R\nuRkSLo40HSi4E/qkAG/qa4SVoq1WQiA+GNgY6aRgQJSomTqcGbBKYDvkHrwkhw9n\nz9iAaBdEewq/c7XvbajuarW5AuHEj1SatTbE23fC+KoinrF+mPxm2ThHA+rAwi0z\n35kz7lAEBxdCYPr3CPQB8sT24jcHZzZn+jXKANCBiqMA/hgdri4/p8N+3yXJh0sy\ntrsHPA+J+TDJ+ARkTIB4rWQ3Mdg8TReWsCEIiC4gy+EW1XuSa9I=\n=51ZT\n-----END PGP SIGNATURE-----", + "payload": "tree 41010df14da9cae224416894d003ffe8030e88b7\nparent 3a4f29a1d26b020dd7c52a94155de571fb9714fb\nauthor Jacob Barkdull 1668890539 -0800\ncommitter Jacob Barkdull 1668890539 -0800\n\nSet thread name in likes and edit info scripts, closes #338\n" + } + }, + "url": "https://api.github.com/repos/jacobwb/hashover-next/commits/58c7b12f2e2146786760c8a308fe90559f12bcff", + "html_url": "https://github.com/jacobwb/hashover-next/commit/58c7b12f2e2146786760c8a308fe90559f12bcff", + "comments_url": "https://api.github.com/repos/jacobwb/hashover-next/commits/58c7b12f2e2146786760c8a308fe90559f12bcff/comments", + "author": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "3a4f29a1d26b020dd7c52a94155de571fb9714fb", + "url": "https://api.github.com/repos/jacobwb/hashover-next/commits/3a4f29a1d26b020dd7c52a94155de571fb9714fb", + "html_url": "https://github.com/jacobwb/hashover-next/commit/3a4f29a1d26b020dd7c52a94155de571fb9714fb" + } + ], + "stats": { + "total": 6, + "additions": 6, + "deletions": 0 + }, + "files": [ + { + "sha": "bc67b06b38690bc4984e0ecd6c5d7c24778f8278", + "filename": "backend/comment-info.php", + "status": "modified", + "additions": 3, + "deletions": 0, + "changes": 3, + "blob_url": "https://github.com/jacobwb/hashover-next/blob/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Fcomment-info.php", + "raw_url": "https://github.com/jacobwb/hashover-next/raw/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Fcomment-info.php", + "contents_url": "https://api.github.com/repos/jacobwb/hashover-next/contents/backend%2Fcomment-info.php?ref=58c7b12f2e2146786760c8a308fe90559f12bcff", + "patch": "@@ -117,6 +117,9 @@ function get_json_response ($hashover)\n \t// Set page URL from POST/GET data\n \t$hashover->setup->setPageURL ('request');\n \n+\t// Set thread name from POST/GET data\n+\t$hashover->setup->setThreadName ('request');\n+\n \t// Initiate comment processing\n \t$hashover->initiate ();\n " + }, + { + "sha": "73f6d415262ea6335bc95f1085c579e54aec2e29", + "filename": "backend/like.php", + "status": "modified", + "additions": 3, + "deletions": 0, + "changes": 3, + "blob_url": "https://github.com/jacobwb/hashover-next/blob/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Flike.php", + "raw_url": "https://github.com/jacobwb/hashover-next/raw/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Flike.php", + "contents_url": "https://api.github.com/repos/jacobwb/hashover-next/contents/backend%2Flike.php?ref=58c7b12f2e2146786760c8a308fe90559f12bcff", + "patch": "@@ -173,6 +173,9 @@ function get_json_response ($hashover)\n \t// Set page URL from POST/GET data\n \t$hashover->setup->setPageURL ('request');\n \n+\t// Set thread name from POST/GET data\n+\t$hashover->setup->setThreadName ('request');\n+\n \t// Initiate comment processing\n \t$hashover->initiate ();\n " + } + ] +} diff --git a/apigh/2023-04-19/isso b/apigh/2023-04-19/isso new file mode 100644 index 00000000..d397e45a --- /dev/null +++ b/apigh/2023-04-19/isso @@ -0,0 +1,122 @@ +{ + "id": 6268419, + "node_id": "MDEwOlJlcG9zaXRvcnk2MjY4NDE5", + "name": "isso", + "full_name": "posativ/isso", + "private": false, + "owner": { + "login": "posativ", + "id": 337602, + "node_id": "MDQ6VXNlcjMzNzYwMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/337602?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/posativ", + "html_url": "https://github.com/posativ", + "followers_url": "https://api.github.com/users/posativ/followers", + "following_url": "https://api.github.com/users/posativ/following{/other_user}", + "gists_url": "https://api.github.com/users/posativ/gists{/gist_id}", + "starred_url": "https://api.github.com/users/posativ/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/posativ/subscriptions", + "organizations_url": "https://api.github.com/users/posativ/orgs", + "repos_url": "https://api.github.com/users/posativ/repos", + "events_url": "https://api.github.com/users/posativ/events{/privacy}", + "received_events_url": "https://api.github.com/users/posativ/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/posativ/isso", + "description": "a Disqus alternative", + "fork": false, + "url": "https://api.github.com/repos/posativ/isso", + "forks_url": "https://api.github.com/repos/posativ/isso/forks", + "keys_url": "https://api.github.com/repos/posativ/isso/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/posativ/isso/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/posativ/isso/teams", + "hooks_url": "https://api.github.com/repos/posativ/isso/hooks", + "issue_events_url": "https://api.github.com/repos/posativ/isso/issues/events{/number}", + "events_url": "https://api.github.com/repos/posativ/isso/events", + "assignees_url": "https://api.github.com/repos/posativ/isso/assignees{/user}", + "branches_url": "https://api.github.com/repos/posativ/isso/branches{/branch}", + "tags_url": "https://api.github.com/repos/posativ/isso/tags", + "blobs_url": "https://api.github.com/repos/posativ/isso/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/posativ/isso/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/posativ/isso/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/posativ/isso/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/posativ/isso/statuses/{sha}", + "languages_url": "https://api.github.com/repos/posativ/isso/languages", + "stargazers_url": "https://api.github.com/repos/posativ/isso/stargazers", + "contributors_url": "https://api.github.com/repos/posativ/isso/contributors", + "subscribers_url": "https://api.github.com/repos/posativ/isso/subscribers", + "subscription_url": "https://api.github.com/repos/posativ/isso/subscription", + "commits_url": "https://api.github.com/repos/posativ/isso/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/posativ/isso/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/posativ/isso/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/posativ/isso/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/posativ/isso/contents/{+path}", + "compare_url": "https://api.github.com/repos/posativ/isso/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/posativ/isso/merges", + "archive_url": "https://api.github.com/repos/posativ/isso/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/posativ/isso/downloads", + "issues_url": "https://api.github.com/repos/posativ/isso/issues{/number}", + "pulls_url": "https://api.github.com/repos/posativ/isso/pulls{/number}", + "milestones_url": "https://api.github.com/repos/posativ/isso/milestones{/number}", + "notifications_url": "https://api.github.com/repos/posativ/isso/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/posativ/isso/labels{/name}", + "releases_url": "https://api.github.com/repos/posativ/isso/releases{/id}", + "deployments_url": "https://api.github.com/repos/posativ/isso/deployments", + "created_at": "2012-10-17T20:46:45Z", + "updated_at": "2023-04-18T08:50:31Z", + "pushed_at": "2023-04-18T06:57:33Z", + "git_url": "git://github.com/posativ/isso.git", + "ssh_url": "git@github.com:posativ/isso.git", + "clone_url": "https://github.com/posativ/isso.git", + "svn_url": "https://github.com/posativ/isso", + "homepage": "https://isso-comments.de", + "size": 3704, + "stargazers_count": 4778, + "watchers_count": 4778, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": true, + "forks_count": 429, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 70, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting", + "disqus", + "javascript", + "self-hosted", + "sqlite3" + ], + "visibility": "public", + "forks": 429, + "open_issues": 70, + "watchers": 4778, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 429, + "subscribers_count": 92 +} diff --git a/apigh/2023-04-19/isso.commit b/apigh/2023-04-19/isso.commit new file mode 100644 index 00000000..ed1c8ed1 --- /dev/null +++ b/apigh/2023-04-19/isso.commit @@ -0,0 +1,103 @@ +{ + "sha": "64374a8af978f1cfd4a91875c18a309122c7d9ca", + "node_id": "C_kwDOAF-mA9oAKDY0Mzc0YThhZjk3OGYxY2ZkNGE5MTg3NWMxOGEzMDkxMjJjN2Q5Y2E", + "commit": { + "author": { + "name": "ix5", + "email": "ix5@users.noreply.github.com", + "date": "2023-03-10T03:09:40Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-03-10T03:09:40Z" + }, + "message": "Merge pull request #947 from 123wowow123/patch-1\n\ndocs: testing-client: Fix typo in make command", + "tree": { + "sha": "e2a7c32169fd0dcb9748b636d9d8a97b12210b20", + "url": "https://api.github.com/repos/posativ/isso/git/trees/e2a7c32169fd0dcb9748b636d9d8a97b12210b20" + }, + "url": "https://api.github.com/repos/posativ/isso/git/commits/64374a8af978f1cfd4a91875c18a309122c7d9ca", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJkCp90CRBK7hj4Ov3rIwAAy9EIACEctWSqI2ZDEXnpwEcsL+cm\nZolwQZZR3bqJxJ0IaffB4k4lfghWxOTplwwITC5iMgoxbghyuq+8Y2YdjwJdmwAZ\niCIy2fL4Fya6ut7fMbB8fgpUfvPx7e3FeBSpRP7uw/bLZoS4yaBRmRUh5TQh2tFK\nGNRHnP5K5CL/59MxxqbsoE03OkLIIKU2wiy+nh7+NhPTWHYkVlDelEBHOEHfHN4+\nh4jbp00wOZ8AxYd0BB6XAp6jMeI6RkCXY9vGxQFFxFS+//UYE4Am4vVQAMANeLxo\nsW1Op1BT9Tri0si4f1a4a92K025k2eekcA37kmLxPHLNVsPyr1QFXv8I2sHmHfw=\n=bQvu\n-----END PGP SIGNATURE-----\n", + "payload": "tree e2a7c32169fd0dcb9748b636d9d8a97b12210b20\nparent 6e23ab6f119560c5745760ee0e91276ec43b6c75\nparent 6925be70d5a87145abe0f752a86a3b0e526ba493\nauthor ix5 1678417780 +0100\ncommitter GitHub 1678417780 +0100\n\nMerge pull request #947 from 123wowow123/patch-1\n\ndocs: testing-client: Fix typo in make command" + } + }, + "url": "https://api.github.com/repos/posativ/isso/commits/64374a8af978f1cfd4a91875c18a309122c7d9ca", + "html_url": "https://github.com/posativ/isso/commit/64374a8af978f1cfd4a91875c18a309122c7d9ca", + "comments_url": "https://api.github.com/repos/posativ/isso/commits/64374a8af978f1cfd4a91875c18a309122c7d9ca/comments", + "author": { + "login": "ix5", + "id": 10212877, + "node_id": "MDQ6VXNlcjEwMjEyODc3", + "avatar_url": "https://avatars.githubusercontent.com/u/10212877?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ix5", + "html_url": "https://github.com/ix5", + "followers_url": "https://api.github.com/users/ix5/followers", + "following_url": "https://api.github.com/users/ix5/following{/other_user}", + "gists_url": "https://api.github.com/users/ix5/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ix5/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ix5/subscriptions", + "organizations_url": "https://api.github.com/users/ix5/orgs", + "repos_url": "https://api.github.com/users/ix5/repos", + "events_url": "https://api.github.com/users/ix5/events{/privacy}", + "received_events_url": "https://api.github.com/users/ix5/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "6e23ab6f119560c5745760ee0e91276ec43b6c75", + "url": "https://api.github.com/repos/posativ/isso/commits/6e23ab6f119560c5745760ee0e91276ec43b6c75", + "html_url": "https://github.com/posativ/isso/commit/6e23ab6f119560c5745760ee0e91276ec43b6c75" + }, + { + "sha": "6925be70d5a87145abe0f752a86a3b0e526ba493", + "url": "https://api.github.com/repos/posativ/isso/commits/6925be70d5a87145abe0f752a86a3b0e526ba493", + "html_url": "https://github.com/posativ/isso/commit/6925be70d5a87145abe0f752a86a3b0e526ba493" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "39cf244b534da871618389c83f47faa263ed1dd6", + "filename": "docs/docs/technical-docs/testing-client.rst", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/posativ/isso/blob/64374a8af978f1cfd4a91875c18a309122c7d9ca/docs%2Fdocs%2Ftechnical-docs%2Ftesting-client.rst", + "raw_url": "https://github.com/posativ/isso/raw/64374a8af978f1cfd4a91875c18a309122c7d9ca/docs%2Fdocs%2Ftechnical-docs%2Ftesting-client.rst", + "contents_url": "https://api.github.com/repos/posativ/isso/contents/docs%2Fdocs%2Ftechnical-docs%2Ftesting-client.rst?ref=64374a8af978f1cfd4a91875c18a309122c7d9ca", + "patch": "@@ -34,7 +34,7 @@ Then run the unit tests:\n \n .. code-block:: bash\n \n- $ npm run tests-unit\n+ $ npm run test-unit\n \n You should receive output that looks similar to the following:\n " + } + ] +} diff --git a/apigh/2023-04-19/jamstack_comments_engine b/apigh/2023-04-19/jamstack_comments_engine new file mode 100644 index 00000000..b6cd498a --- /dev/null +++ b/apigh/2023-04-19/jamstack_comments_engine @@ -0,0 +1,116 @@ +{ + "id": 126199142, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjYxOTkxNDI=", + "name": "jamstack-comments-engine", + "full_name": "philhawksworth/jamstack-comments-engine", + "private": false, + "owner": { + "login": "philhawksworth", + "id": 5865, + "node_id": "MDQ6VXNlcjU4NjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/5865?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/philhawksworth", + "html_url": "https://github.com/philhawksworth", + "followers_url": "https://api.github.com/users/philhawksworth/followers", + "following_url": "https://api.github.com/users/philhawksworth/following{/other_user}", + "gists_url": "https://api.github.com/users/philhawksworth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/philhawksworth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/philhawksworth/subscriptions", + "organizations_url": "https://api.github.com/users/philhawksworth/orgs", + "repos_url": "https://api.github.com/users/philhawksworth/repos", + "events_url": "https://api.github.com/users/philhawksworth/events{/privacy}", + "received_events_url": "https://api.github.com/users/philhawksworth/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/philhawksworth/jamstack-comments-engine", + "description": "An example of a comments engine you could add to any JAMstack site hosted on Netlify", + "fork": false, + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine", + "forks_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/forks", + "keys_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/teams", + "hooks_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/hooks", + "issue_events_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/issues/events{/number}", + "events_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/events", + "assignees_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/assignees{/user}", + "branches_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/branches{/branch}", + "tags_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/tags", + "blobs_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/statuses/{sha}", + "languages_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/languages", + "stargazers_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/stargazers", + "contributors_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/contributors", + "subscribers_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/subscribers", + "subscription_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/subscription", + "commits_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/contents/{+path}", + "compare_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/merges", + "archive_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/downloads", + "issues_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/issues{/number}", + "pulls_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/pulls{/number}", + "milestones_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/milestones{/number}", + "notifications_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/labels{/name}", + "releases_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/releases{/id}", + "deployments_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/deployments", + "created_at": "2018-03-21T15:21:06Z", + "updated_at": "2023-04-01T00:45:10Z", + "pushed_at": "2023-01-09T22:22:38Z", + "git_url": "git://github.com/philhawksworth/jamstack-comments-engine.git", + "ssh_url": "git@github.com:philhawksworth/jamstack-comments-engine.git", + "clone_url": "https://github.com/philhawksworth/jamstack-comments-engine.git", + "svn_url": "https://github.com/philhawksworth/jamstack-comments-engine", + "homepage": "https://jamstack-comments.netlify.com/", + "size": 1745, + "stargazers_count": 150, + "watchers_count": 150, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 21, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comments", + "jamstack", + "netlify", + "slack", + "static-site" + ], + "visibility": "public", + "forks": 41, + "open_issues": 21, + "watchers": 150, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 41, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-19/jamstack_comments_engine.commit b/apigh/2023-04-19/jamstack_comments_engine.commit new file mode 100644 index 00000000..95576e17 --- /dev/null +++ b/apigh/2023-04-19/jamstack_comments_engine.commit @@ -0,0 +1,98 @@ +{ + "sha": "5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "node_id": "MDY6Q29tbWl0MTI2MTk5MTQyOjVkZDQ3Yzk0MDExYzUzMTFiZjk5YzIxZGNkYmU2Y2VkMTdkNWE1MGY=", + "commit": { + "author": { + "name": "Phil Hawksworth", + "email": "phil@netlify.com", + "date": "2020-07-09T12:17:43Z" + }, + "committer": { + "name": "Phil Hawksworth", + "email": "phil@netlify.com", + "date": "2020-07-09T12:17:43Z" + }, + "message": "revert but hardcode handler", + "tree": { + "sha": "82afd134dde0c5dd45a13e406b874ada75866bae", + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/trees/82afd134dde0c5dd45a13e406b874ada75866bae" + }, + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/commits/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "html_url": "https://github.com/philhawksworth/jamstack-comments-engine/commit/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "comments_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f/comments", + "author": { + "login": "philhawksworth", + "id": 5865, + "node_id": "MDQ6VXNlcjU4NjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/5865?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/philhawksworth", + "html_url": "https://github.com/philhawksworth", + "followers_url": "https://api.github.com/users/philhawksworth/followers", + "following_url": "https://api.github.com/users/philhawksworth/following{/other_user}", + "gists_url": "https://api.github.com/users/philhawksworth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/philhawksworth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/philhawksworth/subscriptions", + "organizations_url": "https://api.github.com/users/philhawksworth/orgs", + "repos_url": "https://api.github.com/users/philhawksworth/repos", + "events_url": "https://api.github.com/users/philhawksworth/events{/privacy}", + "received_events_url": "https://api.github.com/users/philhawksworth/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "philhawksworth", + "id": 5865, + "node_id": "MDQ6VXNlcjU4NjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/5865?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/philhawksworth", + "html_url": "https://github.com/philhawksworth", + "followers_url": "https://api.github.com/users/philhawksworth/followers", + "following_url": "https://api.github.com/users/philhawksworth/following{/other_user}", + "gists_url": "https://api.github.com/users/philhawksworth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/philhawksworth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/philhawksworth/subscriptions", + "organizations_url": "https://api.github.com/users/philhawksworth/orgs", + "repos_url": "https://api.github.com/users/philhawksworth/repos", + "events_url": "https://api.github.com/users/philhawksworth/events{/privacy}", + "received_events_url": "https://api.github.com/users/philhawksworth/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "83732fcfd0739073adcb67232e92f509afa011cc", + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits/83732fcfd0739073adcb67232e92f509afa011cc", + "html_url": "https://github.com/philhawksworth/jamstack-comments-engine/commit/83732fcfd0739073adcb67232e92f509afa011cc" + } + ], + "stats": { + "total": 10, + "additions": 3, + "deletions": 7 + }, + "files": [ + { + "sha": "1885346a783d6f32fee233cfc727b53558026595", + "filename": "src/functions/comment-handler.js", + "status": "modified", + "additions": 3, + "deletions": 7, + "changes": 10, + "blob_url": "https://github.com/philhawksworth/jamstack-comments-engine/blob/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f/src%2Ffunctions%2Fcomment-handler.js", + "raw_url": "https://github.com/philhawksworth/jamstack-comments-engine/raw/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f/src%2Ffunctions%2Fcomment-handler.js", + "contents_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/contents/src%2Ffunctions%2Fcomment-handler.js?ref=5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "patch": "@@ -4,13 +4,8 @@ var request = require(\"request\");\n \n // populate environment variables locally.\n require('dotenv').config()\n-const {\n- SLACK_WEBHOOK_URL\n-} = process.env;\n-\n-// hardcoding this for a moment... TODO: replace request with somethign that follows redirects\n-const URL = \"https://jamstack-comments.netlify.com/\"\n \n+const URL = \"https://jamstack-comments.netlify.com\";\n \n /*\n Our serverless function handler\n@@ -21,6 +16,7 @@ export function handler(event, context, callback) {\n var body = JSON.parse(event.body);\n \n // prepare call to the Slack API\n+ var slackURL = process.env.SLACK_WEBHOOK_URL\n var slackPayload = {\n \"text\": \"New comment on \" + URL,\n \t \"attachments\": [\n@@ -54,7 +50,7 @@ export function handler(event, context, callback) {\n };\n \n // post the notification to Slack\n- request.post({url:SLACK_WEBHOOK_URL, json: slackPayload}, function(err, httpResponse, body) {\n+ request.post({url:slackURL, json: slackPayload}, function(err, httpResponse, body) {\n var msg;\n if (err) {\n msg = 'Post to Slack failed:' + err;" + } + ] +} diff --git a/apigh/2023-04-19/jekyll_aws_comments b/apigh/2023-04-19/jekyll_aws_comments new file mode 100644 index 00000000..4a7c8e63 --- /dev/null +++ b/apigh/2023-04-19/jekyll_aws_comments @@ -0,0 +1,123 @@ +{ + "id": 52218241, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjIxODI0MQ==", + "name": "jekyll-aws-comments", + "full_name": "ummels/jekyll-aws-comments", + "private": false, + "owner": { + "login": "ummels", + "id": 287491, + "node_id": "MDQ6VXNlcjI4NzQ5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/287491?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ummels", + "html_url": "https://github.com/ummels", + "followers_url": "https://api.github.com/users/ummels/followers", + "following_url": "https://api.github.com/users/ummels/following{/other_user}", + "gists_url": "https://api.github.com/users/ummels/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ummels/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ummels/subscriptions", + "organizations_url": "https://api.github.com/users/ummels/orgs", + "repos_url": "https://api.github.com/users/ummels/repos", + "events_url": "https://api.github.com/users/ummels/events{/privacy}", + "received_events_url": "https://api.github.com/users/ummels/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/ummels/jekyll-aws-comments", + "description": "Static comments for Jekyll with AWS Lambda and GitHub.", + "fork": false, + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments", + "forks_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/forks", + "keys_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/teams", + "hooks_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/hooks", + "issue_events_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/events", + "assignees_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/tags", + "blobs_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/languages", + "stargazers_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/stargazers", + "contributors_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/contributors", + "subscribers_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/subscribers", + "subscription_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/subscription", + "commits_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/merges", + "archive_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/downloads", + "issues_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/deployments", + "created_at": "2016-02-21T17:25:51Z", + "updated_at": "2018-09-30T01:49:22Z", + "pushed_at": "2017-04-25T20:56:37Z", + "git_url": "git://github.com/ummels/jekyll-aws-comments.git", + "ssh_url": "git@github.com:ummels/jekyll-aws-comments.git", + "clone_url": "https://github.com/ummels/jekyll-aws-comments.git", + "svn_url": "https://github.com/ummels/jekyll-aws-comments", + "homepage": "http://ummels.github.io/jekyll-aws-comments/", + "size": 32, + "stargazers_count": 17, + "watchers_count": 17, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 2, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "isc", + "name": "ISC License", + "spdx_id": "ISC", + "url": "https://api.github.com/licenses/isc", + "node_id": "MDc6TGljZW5zZTEw" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "aws", + "aws-lambda", + "comments", + "github", + "jeyll", + "nodejs" + ], + "visibility": "public", + "forks": 2, + "open_issues": 0, + "watchers": 17, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 2, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/jekyll_aws_comments.commit b/apigh/2023-04-19/jekyll_aws_comments.commit new file mode 100644 index 00000000..9cfb2df0 --- /dev/null +++ b/apigh/2023-04-19/jekyll_aws_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "e51eb3522f6959a843668c02252df890da5c7d14", + "node_id": "MDY6Q29tbWl0NTIyMTgyNDE6ZTUxZWIzNTIyZjY5NTlhODQzNjY4YzAyMjUyZGY4OTBkYTVjN2QxNA==", + "commit": { + "author": { + "name": "Michael Ummels", + "email": "michael@ummels.de", + "date": "2017-04-25T20:40:54Z" + }, + "committer": { + "name": "Michael Ummels", + "email": "michael@ummels.de", + "date": "2017-04-25T20:41:40Z" + }, + "message": "Fix commit title", + "tree": { + "sha": "64c2494f837586fd7f6965b2c485a3c203ad5445", + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/trees/64c2494f837586fd7f6965b2c485a3c203ad5445" + }, + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/commits/e51eb3522f6959a843668c02252df890da5c7d14", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits/e51eb3522f6959a843668c02252df890da5c7d14", + "html_url": "https://github.com/ummels/jekyll-aws-comments/commit/e51eb3522f6959a843668c02252df890da5c7d14", + "comments_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits/e51eb3522f6959a843668c02252df890da5c7d14/comments", + "author": { + "login": "ummels", + "id": 287491, + "node_id": "MDQ6VXNlcjI4NzQ5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/287491?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ummels", + "html_url": "https://github.com/ummels", + "followers_url": "https://api.github.com/users/ummels/followers", + "following_url": "https://api.github.com/users/ummels/following{/other_user}", + "gists_url": "https://api.github.com/users/ummels/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ummels/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ummels/subscriptions", + "organizations_url": "https://api.github.com/users/ummels/orgs", + "repos_url": "https://api.github.com/users/ummels/repos", + "events_url": "https://api.github.com/users/ummels/events{/privacy}", + "received_events_url": "https://api.github.com/users/ummels/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "ummels", + "id": 287491, + "node_id": "MDQ6VXNlcjI4NzQ5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/287491?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ummels", + "html_url": "https://github.com/ummels", + "followers_url": "https://api.github.com/users/ummels/followers", + "following_url": "https://api.github.com/users/ummels/following{/other_user}", + "gists_url": "https://api.github.com/users/ummels/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ummels/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ummels/subscriptions", + "organizations_url": "https://api.github.com/users/ummels/orgs", + "repos_url": "https://api.github.com/users/ummels/repos", + "events_url": "https://api.github.com/users/ummels/events{/privacy}", + "received_events_url": "https://api.github.com/users/ummels/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "6974a6f74f9d30b887ea18516c2053bd1bfae231", + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits/6974a6f74f9d30b887ea18516c2053bd1bfae231", + "html_url": "https://github.com/ummels/jekyll-aws-comments/commit/6974a6f74f9d30b887ea18516c2053bd1bfae231" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "45a1ed8311cce515267d06e72b080b343d48d48e", + "filename": "comments.js", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/ummels/jekyll-aws-comments/blob/e51eb3522f6959a843668c02252df890da5c7d14/comments.js", + "raw_url": "https://github.com/ummels/jekyll-aws-comments/raw/e51eb3522f6959a843668c02252df890da5c7d14/comments.js", + "contents_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/contents/comments.js?ref=e51eb3522f6959a843668c02252df890da5c7d14", + "patch": "@@ -36,7 +36,7 @@ Comments.prototype.submit = function(event) {\n .then(() => // Create pull request\n repo.pulls.create({\n title: 'New comment from ' + name,\n- body: name + ' commented on \\'' + event.postId + '\\'.',\n+ body: name + ' commented on \\'' + event.pageId + '\\'.',\n head: branch,\n base: base\n }))" + } + ] +} diff --git a/apigh/2023-04-19/jekyll_blog_comments b/apigh/2023-04-19/jekyll_blog_comments new file mode 100644 index 00000000..451a089d --- /dev/null +++ b/apigh/2023-04-19/jekyll_blog_comments @@ -0,0 +1,142 @@ +{ + "id": 128683274, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjg2ODMyNzQ=", + "name": "jekyll-blog-comments", + "full_name": "Azure-Functions/jekyll-blog-comments", + "private": false, + "owner": { + "login": "Azure-Functions", + "id": 39969417, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM5OTY5NDE3", + "avatar_url": "https://avatars.githubusercontent.com/u/39969417?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Azure-Functions", + "html_url": "https://github.com/Azure-Functions", + "followers_url": "https://api.github.com/users/Azure-Functions/followers", + "following_url": "https://api.github.com/users/Azure-Functions/following{/other_user}", + "gists_url": "https://api.github.com/users/Azure-Functions/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Azure-Functions/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Azure-Functions/subscriptions", + "organizations_url": "https://api.github.com/users/Azure-Functions/orgs", + "repos_url": "https://api.github.com/users/Azure-Functions/repos", + "events_url": "https://api.github.com/users/Azure-Functions/events{/privacy}", + "received_events_url": "https://api.github.com/users/Azure-Functions/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/Azure-Functions/jekyll-blog-comments", + "description": "Create pull requests for blog comments posted via a form (v1 function)", + "fork": false, + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments", + "forks_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/forks", + "keys_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/teams", + "hooks_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/hooks", + "issue_events_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/events", + "assignees_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/tags", + "blobs_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/languages", + "stargazers_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/stargazers", + "contributors_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/contributors", + "subscribers_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/subscribers", + "subscription_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/subscription", + "commits_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/merges", + "archive_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/downloads", + "issues_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/deployments", + "created_at": "2018-04-08T21:26:36Z", + "updated_at": "2023-04-16T03:31:18Z", + "pushed_at": "2021-07-01T07:29:27Z", + "git_url": "git://github.com/Azure-Functions/jekyll-blog-comments.git", + "ssh_url": "git@github.com:Azure-Functions/jekyll-blog-comments.git", + "clone_url": "https://github.com/Azure-Functions/jekyll-blog-comments.git", + "svn_url": "https://github.com/Azure-Functions/jekyll-blog-comments", + "homepage": "", + "size": 89, + "stargazers_count": 20, + "watchers_count": 20, + "language": "C#", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 44, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "azure-functions", + "blog", + "comments", + "jekyll", + "pull-requests" + ], + "visibility": "public", + "forks": 44, + "open_issues": 0, + "watchers": 20, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "Azure-Functions", + "id": 39969417, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM5OTY5NDE3", + "avatar_url": "https://avatars.githubusercontent.com/u/39969417?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Azure-Functions", + "html_url": "https://github.com/Azure-Functions", + "followers_url": "https://api.github.com/users/Azure-Functions/followers", + "following_url": "https://api.github.com/users/Azure-Functions/following{/other_user}", + "gists_url": "https://api.github.com/users/Azure-Functions/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Azure-Functions/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Azure-Functions/subscriptions", + "organizations_url": "https://api.github.com/users/Azure-Functions/orgs", + "repos_url": "https://api.github.com/users/Azure-Functions/repos", + "events_url": "https://api.github.com/users/Azure-Functions/events{/privacy}", + "received_events_url": "https://api.github.com/users/Azure-Functions/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 44, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-19/jekyll_blog_comments.commit b/apigh/2023-04-19/jekyll_blog_comments.commit new file mode 100644 index 00000000..89d51acc --- /dev/null +++ b/apigh/2023-04-19/jekyll_blog_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "83d9cac50be836e03391c976243763f398adb463", + "node_id": "MDY6Q29tbWl0MTI4NjgzMjc0OjgzZDljYWM1MGJlODM2ZTAzMzkxYzk3NjI0Mzc2M2YzOThhZGI0NjM=", + "commit": { + "author": { + "name": "Damien Guard", + "email": "damieng@gmail.com", + "date": "2021-07-01T07:29:27Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-07-01T07:29:27Z" + }, + "message": "Update README.md", + "tree": { + "sha": "ff362826b3483ea14b32b94c51ed044fdf75aa74", + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/trees/ff362826b3483ea14b32b94c51ed044fdf75aa74" + }, + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/commits/83d9cac50be836e03391c976243763f398adb463", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJg3W7XCRBK7hj4Ov3rIwAA8xUIAESdtFXdy+ZUT7NnaLOpdSXz\n2o7zGSJSqyhoy7O/+ALebb+Q6seZIVlJav5fBAozA1ByrRZu01NBfDH4vA8L8wPe\nVGDwYTk2z3vfiWZn5cZmFQXUa1rF3NPEBjWonsrCyAuEHP+UG6HhK1xtXxkM6zPL\ngF5H1oU3IAnrfKzNE5/U07GYlrmL3VRTiWZilCe3HRGEjzm9JXcUYaew3Nl2vPVi\ni8tb1xyRvDA5Ect9OfJbIUxqGj+w66onejXj4d85HtEQtMddQfFHxwGHXbMOSrLE\nZ0Xxaw1B5YYXE66b2v4guJtbS3Nznje4guuZPomVeD/2EWaKYyAxqx3N+iw2l/M=\n=TtLn\n-----END PGP SIGNATURE-----\n", + "payload": "tree ff362826b3483ea14b32b94c51ed044fdf75aa74\nparent ec667dfe72453462c7f10b72df49e72fbc1c88fd\nauthor Damien Guard 1625124567 +0100\ncommitter GitHub 1625124567 +0100\n\nUpdate README.md" + } + }, + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits/83d9cac50be836e03391c976243763f398adb463", + "html_url": "https://github.com/Azure-Functions/jekyll-blog-comments/commit/83d9cac50be836e03391c976243763f398adb463", + "comments_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits/83d9cac50be836e03391c976243763f398adb463/comments", + "author": { + "login": "damieng", + "id": 118951, + "node_id": "MDQ6VXNlcjExODk1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/118951?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/damieng", + "html_url": "https://github.com/damieng", + "followers_url": "https://api.github.com/users/damieng/followers", + "following_url": "https://api.github.com/users/damieng/following{/other_user}", + "gists_url": "https://api.github.com/users/damieng/gists{/gist_id}", + "starred_url": "https://api.github.com/users/damieng/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/damieng/subscriptions", + "organizations_url": "https://api.github.com/users/damieng/orgs", + "repos_url": "https://api.github.com/users/damieng/repos", + "events_url": "https://api.github.com/users/damieng/events{/privacy}", + "received_events_url": "https://api.github.com/users/damieng/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ec667dfe72453462c7f10b72df49e72fbc1c88fd", + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits/ec667dfe72453462c7f10b72df49e72fbc1c88fd", + "html_url": "https://github.com/Azure-Functions/jekyll-blog-comments/commit/ec667dfe72453462c7f10b72df49e72fbc1c88fd" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "1b2bd1f820f78ac6e2cc9d0ee75f5604902cf18f", + "filename": "README.md", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/Azure-Functions/jekyll-blog-comments/blob/83d9cac50be836e03391c976243763f398adb463/README.md", + "raw_url": "https://github.com/Azure-Functions/jekyll-blog-comments/raw/83d9cac50be836e03391c976243763f398adb463/README.md", + "contents_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/contents/README.md?ref=83d9cac50be836e03391c976243763f398adb463", + "patch": "@@ -24,4 +24,4 @@ To set this up, you'll need to have an [Azure Portal account](https://portal.azu\n | `CommentFallbackCommitEmail` | The email address to use for GitHub commits and PR's if the form does not supply one.\n | `SentimentAnalysis.SubscriptionKey` | Subscription Key for Microsoft Azure Recognition, if you don't want to use, just leave empty.\n | `SentimentAnalysis.Region` | Region for your Subscription key (E.g.: westus)\n-| `SentimentAlaysis.Lang` | Language for comment, [find lang code here](https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/language-support)\n\\ No newline at end of file\n+| `SentimentAnalysis.Lang` | Language for comment, [find lang code here](https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/language-support)" + } + ] +} diff --git a/apigh/2023-04-19/jekyll_static_comments b/apigh/2023-04-19/jekyll_static_comments new file mode 100644 index 00000000..49bf0b5d --- /dev/null +++ b/apigh/2023-04-19/jekyll_static_comments @@ -0,0 +1,118 @@ +{ + "id": 2070097, + "node_id": "MDEwOlJlcG9zaXRvcnkyMDcwMDk3", + "name": "jekyll-static-comments", + "full_name": "mpalmer/jekyll-static-comments", + "private": false, + "owner": { + "login": "mpalmer", + "id": 357, + "node_id": "MDQ6VXNlcjM1Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/357?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mpalmer", + "html_url": "https://github.com/mpalmer", + "followers_url": "https://api.github.com/users/mpalmer/followers", + "following_url": "https://api.github.com/users/mpalmer/following{/other_user}", + "gists_url": "https://api.github.com/users/mpalmer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mpalmer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mpalmer/subscriptions", + "organizations_url": "https://api.github.com/users/mpalmer/orgs", + "repos_url": "https://api.github.com/users/mpalmer/repos", + "events_url": "https://api.github.com/users/mpalmer/events{/privacy}", + "received_events_url": "https://api.github.com/users/mpalmer/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/mpalmer/jekyll-static-comments", + "description": "A plugin for Jekyll to implement a static-file based comments system", + "fork": false, + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments", + "forks_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/forks", + "keys_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/teams", + "hooks_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/hooks", + "issue_events_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/events", + "assignees_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/tags", + "blobs_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/languages", + "stargazers_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/stargazers", + "contributors_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/contributors", + "subscribers_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/subscribers", + "subscription_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/subscription", + "commits_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/merges", + "archive_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/downloads", + "issues_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/deployments", + "created_at": "2011-07-19T02:55:53Z", + "updated_at": "2023-02-08T21:04:30Z", + "pushed_at": "2016-02-15T04:14:38Z", + "git_url": "git://github.com/mpalmer/jekyll-static-comments.git", + "ssh_url": "git@github.com:mpalmer/jekyll-static-comments.git", + "clone_url": "https://github.com/mpalmer/jekyll-static-comments.git", + "svn_url": "https://github.com/mpalmer/jekyll-static-comments", + "homepage": "http://theshed.hezmatt.org/jekyll-static-comments/", + "size": 161, + "stargazers_count": 191, + "watchers_count": 191, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 34, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "gpl-3.0", + "name": "GNU General Public License v3.0", + "spdx_id": "GPL-3.0", + "url": "https://api.github.com/licenses/gpl-3.0", + "node_id": "MDc6TGljZW5zZTk=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 34, + "open_issues": 8, + "watchers": 191, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 34, + "subscribers_count": 11 +} diff --git a/apigh/2023-04-19/jekyll_static_comments.commit b/apigh/2023-04-19/jekyll_static_comments.commit new file mode 100644 index 00000000..cff2003a --- /dev/null +++ b/apigh/2023-04-19/jekyll_static_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "node_id": "MDY6Q29tbWl0MjA3MDA5Nzo0YjMwYmQ2MmQ5MzdkMmJhNmU3ZjE2ZmM1ZmU4MDgyYWJiMGQzZjFl", + "commit": { + "author": { + "name": "Matt Palmer", + "email": "mpalmer@hezmatt.org", + "date": "2014-02-11T22:47:43Z" + }, + "committer": { + "name": "Matt Palmer", + "email": "mpalmer@hezmatt.org", + "date": "2014-02-11T22:48:33Z" + }, + "message": "Pass through any args given to to_liquid", + "tree": { + "sha": "e9a655bf938a39f0df0ebcc89ce0dab5dafdec0b", + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/trees/e9a655bf938a39f0df0ebcc89ce0dab5dafdec0b" + }, + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/commits/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "html_url": "https://github.com/mpalmer/jekyll-static-comments/commit/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "comments_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e/comments", + "author": { + "login": "mpalmer", + "id": 357, + "node_id": "MDQ6VXNlcjM1Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/357?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mpalmer", + "html_url": "https://github.com/mpalmer", + "followers_url": "https://api.github.com/users/mpalmer/followers", + "following_url": "https://api.github.com/users/mpalmer/following{/other_user}", + "gists_url": "https://api.github.com/users/mpalmer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mpalmer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mpalmer/subscriptions", + "organizations_url": "https://api.github.com/users/mpalmer/orgs", + "repos_url": "https://api.github.com/users/mpalmer/repos", + "events_url": "https://api.github.com/users/mpalmer/events{/privacy}", + "received_events_url": "https://api.github.com/users/mpalmer/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "mpalmer", + "id": 357, + "node_id": "MDQ6VXNlcjM1Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/357?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mpalmer", + "html_url": "https://github.com/mpalmer", + "followers_url": "https://api.github.com/users/mpalmer/followers", + "following_url": "https://api.github.com/users/mpalmer/following{/other_user}", + "gists_url": "https://api.github.com/users/mpalmer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mpalmer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mpalmer/subscriptions", + "organizations_url": "https://api.github.com/users/mpalmer/orgs", + "repos_url": "https://api.github.com/users/mpalmer/repos", + "events_url": "https://api.github.com/users/mpalmer/events{/privacy}", + "received_events_url": "https://api.github.com/users/mpalmer/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ef2507a8112e0a5d984c1648f2c20850a129830a", + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits/ef2507a8112e0a5d984c1648f2c20850a129830a", + "html_url": "https://github.com/mpalmer/jekyll-static-comments/commit/ef2507a8112e0a5d984c1648f2c20850a129830a" + } + ], + "stats": { + "total": 4, + "additions": 2, + "deletions": 2 + }, + "files": [ + { + "sha": "86c00f2175fe7d789262447fe3e210315d3aafd8", + "filename": "static_comments.rb", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/mpalmer/jekyll-static-comments/blob/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e/static_comments.rb", + "raw_url": "https://github.com/mpalmer/jekyll-static-comments/raw/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e/static_comments.rb", + "contents_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/contents/static_comments.rb?ref=4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "patch": "@@ -21,8 +21,8 @@\n class Jekyll::Post\n \talias :to_liquid_without_comments :to_liquid\n \t\n-\tdef to_liquid\n-\t\tdata = to_liquid_without_comments\n+\tdef to_liquid(*args)\n+\t\tdata = to_liquid_without_comments(*args)\n \t\tdata['comments'] = StaticComments::find_for_post(self)\n \t\tdata['comment_count'] = data['comments'].length\n \t\tdata" + } + ] +} diff --git a/apigh/2023-04-19/jekyll_webmention_io b/apigh/2023-04-19/jekyll_webmention_io new file mode 100644 index 00000000..fb5f46b7 --- /dev/null +++ b/apigh/2023-04-19/jekyll_webmention_io @@ -0,0 +1,118 @@ +{ + "id": 26774428, + "node_id": "MDEwOlJlcG9zaXRvcnkyNjc3NDQyOA==", + "name": "jekyll-webmention_io", + "full_name": "aarongustafson/jekyll-webmention_io", + "private": false, + "owner": { + "login": "aarongustafson", + "id": 75736, + "node_id": "MDQ6VXNlcjc1NzM2", + "avatar_url": "https://avatars.githubusercontent.com/u/75736?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/aarongustafson", + "html_url": "https://github.com/aarongustafson", + "followers_url": "https://api.github.com/users/aarongustafson/followers", + "following_url": "https://api.github.com/users/aarongustafson/following{/other_user}", + "gists_url": "https://api.github.com/users/aarongustafson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aarongustafson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aarongustafson/subscriptions", + "organizations_url": "https://api.github.com/users/aarongustafson/orgs", + "repos_url": "https://api.github.com/users/aarongustafson/repos", + "events_url": "https://api.github.com/users/aarongustafson/events{/privacy}", + "received_events_url": "https://api.github.com/users/aarongustafson/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/aarongustafson/jekyll-webmention_io", + "description": "A Jekyll Plugin for rendering Webmentions via Webmention.io", + "fork": false, + "url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io", + "forks_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/forks", + "keys_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/teams", + "hooks_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/hooks", + "issue_events_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/issues/events{/number}", + "events_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/events", + "assignees_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/assignees{/user}", + "branches_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/branches{/branch}", + "tags_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/tags", + "blobs_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/statuses/{sha}", + "languages_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/languages", + "stargazers_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/stargazers", + "contributors_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/contributors", + "subscribers_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/subscribers", + "subscription_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/subscription", + "commits_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/contents/{+path}", + "compare_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/merges", + "archive_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/downloads", + "issues_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/issues{/number}", + "pulls_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/pulls{/number}", + "milestones_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/milestones{/number}", + "notifications_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/labels{/name}", + "releases_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/releases{/id}", + "deployments_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/deployments", + "created_at": "2014-11-17T19:56:36Z", + "updated_at": "2023-03-19T21:12:51Z", + "pushed_at": "2023-04-12T12:11:57Z", + "git_url": "git://github.com/aarongustafson/jekyll-webmention_io.git", + "ssh_url": "git@github.com:aarongustafson/jekyll-webmention_io.git", + "clone_url": "https://github.com/aarongustafson/jekyll-webmention_io.git", + "svn_url": "https://github.com/aarongustafson/jekyll-webmention_io", + "homepage": "https://aarongustafson.github.io/jekyll-webmention_io/", + "size": 447, + "stargazers_count": 135, + "watchers_count": 135, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "has_discussions": false, + "forks_count": 27, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 6, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 27, + "open_issues": 6, + "watchers": 135, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 27, + "subscribers_count": 14 +} diff --git a/apigh/2023-04-19/jekyll_webmention_io.commit b/apigh/2023-04-19/jekyll_webmention_io.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-19/jekyll_webmention_io.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-19/jp_comment b/apigh/2023-04-19/jp_comment new file mode 100644 index 00000000..f19647e2 --- /dev/null +++ b/apigh/2023-04-19/jp_comment @@ -0,0 +1,4 @@ +{ + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/reference/repos#get-a-repository" +} diff --git a/apigh/2023-04-19/jp_comment.commit b/apigh/2023-04-19/jp_comment.commit new file mode 100644 index 00000000..5834b547 --- /dev/null +++ b/apigh/2023-04-19/jp_comment.commit @@ -0,0 +1,4 @@ +{ + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-19/jskomment b/apigh/2023-04-19/jskomment new file mode 100644 index 00000000..ed24010f --- /dev/null +++ b/apigh/2023-04-19/jskomment @@ -0,0 +1,112 @@ +{ + "id": 15030920, + "node_id": "MDEwOlJlcG9zaXRvcnkxNTAzMDkyMA==", + "name": "jskomment", + "full_name": "monperrus/jskomment", + "private": false, + "owner": { + "login": "monperrus", + "id": 803666, + "node_id": "MDQ6VXNlcjgwMzY2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/803666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/monperrus", + "html_url": "https://github.com/monperrus", + "followers_url": "https://api.github.com/users/monperrus/followers", + "following_url": "https://api.github.com/users/monperrus/following{/other_user}", + "gists_url": "https://api.github.com/users/monperrus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/monperrus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/monperrus/subscriptions", + "organizations_url": "https://api.github.com/users/monperrus/orgs", + "repos_url": "https://api.github.com/users/monperrus/repos", + "events_url": "https://api.github.com/users/monperrus/events{/privacy}", + "received_events_url": "https://api.github.com/users/monperrus/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/monperrus/jskomment", + "description": "open source AJAX commenting system", + "fork": false, + "url": "https://api.github.com/repos/monperrus/jskomment", + "forks_url": "https://api.github.com/repos/monperrus/jskomment/forks", + "keys_url": "https://api.github.com/repos/monperrus/jskomment/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/monperrus/jskomment/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/monperrus/jskomment/teams", + "hooks_url": "https://api.github.com/repos/monperrus/jskomment/hooks", + "issue_events_url": "https://api.github.com/repos/monperrus/jskomment/issues/events{/number}", + "events_url": "https://api.github.com/repos/monperrus/jskomment/events", + "assignees_url": "https://api.github.com/repos/monperrus/jskomment/assignees{/user}", + "branches_url": "https://api.github.com/repos/monperrus/jskomment/branches{/branch}", + "tags_url": "https://api.github.com/repos/monperrus/jskomment/tags", + "blobs_url": "https://api.github.com/repos/monperrus/jskomment/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/monperrus/jskomment/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/monperrus/jskomment/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/monperrus/jskomment/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/monperrus/jskomment/statuses/{sha}", + "languages_url": "https://api.github.com/repos/monperrus/jskomment/languages", + "stargazers_url": "https://api.github.com/repos/monperrus/jskomment/stargazers", + "contributors_url": "https://api.github.com/repos/monperrus/jskomment/contributors", + "subscribers_url": "https://api.github.com/repos/monperrus/jskomment/subscribers", + "subscription_url": "https://api.github.com/repos/monperrus/jskomment/subscription", + "commits_url": "https://api.github.com/repos/monperrus/jskomment/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/monperrus/jskomment/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/monperrus/jskomment/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/monperrus/jskomment/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/{+path}", + "compare_url": "https://api.github.com/repos/monperrus/jskomment/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/monperrus/jskomment/merges", + "archive_url": "https://api.github.com/repos/monperrus/jskomment/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/monperrus/jskomment/downloads", + "issues_url": "https://api.github.com/repos/monperrus/jskomment/issues{/number}", + "pulls_url": "https://api.github.com/repos/monperrus/jskomment/pulls{/number}", + "milestones_url": "https://api.github.com/repos/monperrus/jskomment/milestones{/number}", + "notifications_url": "https://api.github.com/repos/monperrus/jskomment/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/monperrus/jskomment/labels{/name}", + "releases_url": "https://api.github.com/repos/monperrus/jskomment/releases{/id}", + "deployments_url": "https://api.github.com/repos/monperrus/jskomment/deployments", + "created_at": "2013-12-08T20:39:08Z", + "updated_at": "2023-03-12T21:36:40Z", + "pushed_at": "2023-03-12T21:37:26Z", + "git_url": "git://github.com/monperrus/jskomment.git", + "ssh_url": "git@github.com:monperrus/jskomment.git", + "clone_url": "https://github.com/monperrus/jskomment.git", + "svn_url": "https://github.com/monperrus/jskomment", + "homepage": null, + "size": 31, + "stargazers_count": 36, + "watchers_count": 36, + "language": "JavaScript", + "has_issues": false, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 6, + "open_issues": 1, + "watchers": 36, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 6, + "subscribers_count": 7 +} diff --git a/apigh/2023-04-19/jskomment.commit b/apigh/2023-04-19/jskomment.commit new file mode 100644 index 00000000..453bb3e4 --- /dev/null +++ b/apigh/2023-04-19/jskomment.commit @@ -0,0 +1,122 @@ +{ + "sha": "89a810517d17e2310bfba4050ea35b683ee43184", + "node_id": "C_kwDOAOVaiNoAKDg5YTgxMDUxN2QxN2UyMzEwYmZiYTQwNTBlYTM1YjY4M2VlNDMxODQ", + "commit": { + "author": { + "name": "Martin Monperrus", + "email": "martin.monperrus@gnieh.org", + "date": "2023-03-12T21:35:54Z" + }, + "committer": { + "name": "Martin Monperrus", + "email": "martin.monperrus@gnieh.org", + "date": "2023-03-12T21:36:25Z" + }, + "message": "@monperrus at work", + "tree": { + "sha": "43cba55c606b853b68885843e5174d99f0172ea6", + "url": "https://api.github.com/repos/monperrus/jskomment/git/trees/43cba55c606b853b68885843e5174d99f0172ea6" + }, + "url": "https://api.github.com/repos/monperrus/jskomment/git/commits/89a810517d17e2310bfba4050ea35b683ee43184", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/monperrus/jskomment/commits/89a810517d17e2310bfba4050ea35b683ee43184", + "html_url": "https://github.com/monperrus/jskomment/commit/89a810517d17e2310bfba4050ea35b683ee43184", + "comments_url": "https://api.github.com/repos/monperrus/jskomment/commits/89a810517d17e2310bfba4050ea35b683ee43184/comments", + "author": { + "login": "monperrus", + "id": 803666, + "node_id": "MDQ6VXNlcjgwMzY2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/803666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/monperrus", + "html_url": "https://github.com/monperrus", + "followers_url": "https://api.github.com/users/monperrus/followers", + "following_url": "https://api.github.com/users/monperrus/following{/other_user}", + "gists_url": "https://api.github.com/users/monperrus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/monperrus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/monperrus/subscriptions", + "organizations_url": "https://api.github.com/users/monperrus/orgs", + "repos_url": "https://api.github.com/users/monperrus/repos", + "events_url": "https://api.github.com/users/monperrus/events{/privacy}", + "received_events_url": "https://api.github.com/users/monperrus/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "monperrus", + "id": 803666, + "node_id": "MDQ6VXNlcjgwMzY2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/803666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/monperrus", + "html_url": "https://github.com/monperrus", + "followers_url": "https://api.github.com/users/monperrus/followers", + "following_url": "https://api.github.com/users/monperrus/following{/other_user}", + "gists_url": "https://api.github.com/users/monperrus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/monperrus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/monperrus/subscriptions", + "organizations_url": "https://api.github.com/users/monperrus/orgs", + "repos_url": "https://api.github.com/users/monperrus/repos", + "events_url": "https://api.github.com/users/monperrus/events{/privacy}", + "received_events_url": "https://api.github.com/users/monperrus/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "47ea032a88850425093ff2a9c9a6a12b726d0b98", + "url": "https://api.github.com/repos/monperrus/jskomment/commits/47ea032a88850425093ff2a9c9a6a12b726d0b98", + "html_url": "https://github.com/monperrus/jskomment/commit/47ea032a88850425093ff2a9c9a6a12b726d0b98" + } + ], + "stats": { + "total": 37, + "additions": 22, + "deletions": 15 + }, + "files": [ + { + "sha": "60ba1f26a635b5add1e62df42ab45d5bc0008ccd", + "filename": "client/jskomment-core.js", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/monperrus/jskomment/blob/89a810517d17e2310bfba4050ea35b683ee43184/client%2Fjskomment-core.js", + "raw_url": "https://github.com/monperrus/jskomment/raw/89a810517d17e2310bfba4050ea35b683ee43184/client%2Fjskomment-core.js", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/client%2Fjskomment-core.js?ref=89a810517d17e2310bfba4050ea35b683ee43184", + "patch": "@@ -51,7 +51,7 @@ JSKOMMENT.format_function = JSKOMMENT_CONFIG.format_function || function (str) {\n \n // the default function that returns the primary key of comments (the URL minus the anchor)\n JSKOMMENT.get_comment_key_function = JSKOMMENT_CONFIG.get_comment_key_function || function () {\n- return document.location.href.split('#')[0];\n+ return document.location.href.replace('https:','http:').split('#')[0];\n };\n \n \n@@ -270,7 +270,7 @@ JSKOMMENT.createAddCommentElement = function (text, k) {\n +'
      New comment from :
      '\n +'
      Email (optional, for pingback): :
      '\n +''\n- +'
      '\n +''); \n \n form.submit(" + }, + { + "sha": "0cafff9abcdb28731c3b04a7a50ac122d892475f", + "filename": "server/jskomment.php", + "status": "modified", + "additions": 19, + "deletions": 12, + "changes": 31, + "blob_url": "https://github.com/monperrus/jskomment/blob/89a810517d17e2310bfba4050ea35b683ee43184/server%2Fjskomment.php", + "raw_url": "https://github.com/monperrus/jskomment/raw/89a810517d17e2310bfba4050ea35b683ee43184/server%2Fjskomment.php", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/server%2Fjskomment.php?ref=89a810517d17e2310bfba4050ea35b683ee43184", + "patch": "@@ -1,4 +1,4 @@\n-
      A comment has been posted on \".$result['title'].\":

      \".\n+ \"> A comment has been posted on \".$result['title'].\"

      \".\n str_replace(\"\\n\",\"
      \",htmlentities($comment['comment'])), \n- \"From: \".JSKOMMENT_EMAIL.\"\\r\\n\".\n+ \"From: <\".JSKOMMENT_EMAIL.\">\\r\\n\".\n+ \"Reply-to: <\".$result['email'].\">\\r\\n\".\n \"MIME-Version: 1.0\" . \"\\r\\n\" .\n \"Content-type: text/html; charset=UTF-8\" . \"\\r\\n\"\n );\n@@ -233,4 +240,4 @@ function main() {\n \n main();\n \n-?>\n\\ No newline at end of file\n+?>" + }, + { + "sha": "4254d09cac1f357ff59296e634c47e1e23db7fe5", + "filename": "test.html", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/monperrus/jskomment/blob/89a810517d17e2310bfba4050ea35b683ee43184/test.html", + "raw_url": "https://github.com/monperrus/jskomment/raw/89a810517d17e2310bfba4050ea35b683ee43184/test.html", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/test.html?ref=89a810517d17e2310bfba4050ea35b683ee43184", + "patch": "@@ -2,7 +2,7 @@\n \n JSKOMMENT Test\n \n-\n+\n \n \n " + } + ] +} diff --git a/apigh/2023-04-19/just_comments b/apigh/2023-04-19/just_comments new file mode 100644 index 00000000..f392166a --- /dev/null +++ b/apigh/2023-04-19/just_comments @@ -0,0 +1,138 @@ +{ + "id": 198278341, + "node_id": "MDEwOlJlcG9zaXRvcnkxOTgyNzgzNDE=", + "name": "jc-server", + "full_name": "JustComments/jc-server", + "private": false, + "owner": { + "login": "JustComments", + "id": 36104652, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM2MTA0NjUy", + "avatar_url": "https://avatars.githubusercontent.com/u/36104652?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/JustComments", + "html_url": "https://github.com/JustComments", + "followers_url": "https://api.github.com/users/JustComments/followers", + "following_url": "https://api.github.com/users/JustComments/following{/other_user}", + "gists_url": "https://api.github.com/users/JustComments/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JustComments/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JustComments/subscriptions", + "organizations_url": "https://api.github.com/users/JustComments/orgs", + "repos_url": "https://api.github.com/users/JustComments/repos", + "events_url": "https://api.github.com/users/JustComments/events{/privacy}", + "received_events_url": "https://api.github.com/users/JustComments/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/JustComments/jc-server", + "description": "Basic open-source implementation of the server for JustComments", + "fork": false, + "url": "https://api.github.com/repos/JustComments/jc-server", + "forks_url": "https://api.github.com/repos/JustComments/jc-server/forks", + "keys_url": "https://api.github.com/repos/JustComments/jc-server/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/JustComments/jc-server/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/JustComments/jc-server/teams", + "hooks_url": "https://api.github.com/repos/JustComments/jc-server/hooks", + "issue_events_url": "https://api.github.com/repos/JustComments/jc-server/issues/events{/number}", + "events_url": "https://api.github.com/repos/JustComments/jc-server/events", + "assignees_url": "https://api.github.com/repos/JustComments/jc-server/assignees{/user}", + "branches_url": "https://api.github.com/repos/JustComments/jc-server/branches{/branch}", + "tags_url": "https://api.github.com/repos/JustComments/jc-server/tags", + "blobs_url": "https://api.github.com/repos/JustComments/jc-server/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/JustComments/jc-server/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/JustComments/jc-server/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/JustComments/jc-server/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/JustComments/jc-server/statuses/{sha}", + "languages_url": "https://api.github.com/repos/JustComments/jc-server/languages", + "stargazers_url": "https://api.github.com/repos/JustComments/jc-server/stargazers", + "contributors_url": "https://api.github.com/repos/JustComments/jc-server/contributors", + "subscribers_url": "https://api.github.com/repos/JustComments/jc-server/subscribers", + "subscription_url": "https://api.github.com/repos/JustComments/jc-server/subscription", + "commits_url": "https://api.github.com/repos/JustComments/jc-server/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/JustComments/jc-server/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/JustComments/jc-server/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/JustComments/jc-server/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/JustComments/jc-server/contents/{+path}", + "compare_url": "https://api.github.com/repos/JustComments/jc-server/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/JustComments/jc-server/merges", + "archive_url": "https://api.github.com/repos/JustComments/jc-server/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/JustComments/jc-server/downloads", + "issues_url": "https://api.github.com/repos/JustComments/jc-server/issues{/number}", + "pulls_url": "https://api.github.com/repos/JustComments/jc-server/pulls{/number}", + "milestones_url": "https://api.github.com/repos/JustComments/jc-server/milestones{/number}", + "notifications_url": "https://api.github.com/repos/JustComments/jc-server/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/JustComments/jc-server/labels{/name}", + "releases_url": "https://api.github.com/repos/JustComments/jc-server/releases{/id}", + "deployments_url": "https://api.github.com/repos/JustComments/jc-server/deployments", + "created_at": "2019-07-22T18:13:02Z", + "updated_at": "2022-08-28T19:40:36Z", + "pushed_at": "2022-12-10T23:17:35Z", + "git_url": "git://github.com/JustComments/jc-server.git", + "ssh_url": "git@github.com:JustComments/jc-server.git", + "clone_url": "https://github.com/JustComments/jc-server.git", + "svn_url": "https://github.com/JustComments/jc-server", + "homepage": "https://just-comments.com", + "size": 46, + "stargazers_count": 20, + "watchers_count": 20, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 4, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 5, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 4, + "open_issues": 5, + "watchers": 20, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "JustComments", + "id": 36104652, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM2MTA0NjUy", + "avatar_url": "https://avatars.githubusercontent.com/u/36104652?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/JustComments", + "html_url": "https://github.com/JustComments", + "followers_url": "https://api.github.com/users/JustComments/followers", + "following_url": "https://api.github.com/users/JustComments/following{/other_user}", + "gists_url": "https://api.github.com/users/JustComments/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JustComments/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JustComments/subscriptions", + "organizations_url": "https://api.github.com/users/JustComments/orgs", + "repos_url": "https://api.github.com/users/JustComments/repos", + "events_url": "https://api.github.com/users/JustComments/events{/privacy}", + "received_events_url": "https://api.github.com/users/JustComments/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 4, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/just_comments.commit b/apigh/2023-04-19/just_comments.commit new file mode 100644 index 00000000..21e67f75 --- /dev/null +++ b/apigh/2023-04-19/just_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "node_id": "MDY6Q29tbWl0MTk4Mjc4MzQxOmQyZjM5NWY0ZTgwOGE1NWIzNGNiODFiYTEzMmY0MTAwYjhjZDhjMTQ=", + "commit": { + "author": { + "name": "Alex R", + "email": "alexei.rudenko@gmail.com", + "date": "2019-07-26T13:18:59Z" + }, + "committer": { + "name": "Alex R", + "email": "alexei.rudenko@gmail.com", + "date": "2019-07-26T13:18:59Z" + }, + "message": "Update readme", + "tree": { + "sha": "b6b87d857a1566d8c39f0fe515cb6e79606921d3", + "url": "https://api.github.com/repos/JustComments/jc-server/git/trees/b6b87d857a1566d8c39f0fe515cb6e79606921d3" + }, + "url": "https://api.github.com/repos/JustComments/jc-server/git/commits/d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/JustComments/jc-server/commits/d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "html_url": "https://github.com/JustComments/jc-server/commit/d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "comments_url": "https://api.github.com/repos/JustComments/jc-server/commits/d2f395f4e808a55b34cb81ba132f4100b8cd8c14/comments", + "author": { + "login": "OrKoN", + "id": 399150, + "node_id": "MDQ6VXNlcjM5OTE1MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/399150?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/OrKoN", + "html_url": "https://github.com/OrKoN", + "followers_url": "https://api.github.com/users/OrKoN/followers", + "following_url": "https://api.github.com/users/OrKoN/following{/other_user}", + "gists_url": "https://api.github.com/users/OrKoN/gists{/gist_id}", + "starred_url": "https://api.github.com/users/OrKoN/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/OrKoN/subscriptions", + "organizations_url": "https://api.github.com/users/OrKoN/orgs", + "repos_url": "https://api.github.com/users/OrKoN/repos", + "events_url": "https://api.github.com/users/OrKoN/events{/privacy}", + "received_events_url": "https://api.github.com/users/OrKoN/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "OrKoN", + "id": 399150, + "node_id": "MDQ6VXNlcjM5OTE1MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/399150?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/OrKoN", + "html_url": "https://github.com/OrKoN", + "followers_url": "https://api.github.com/users/OrKoN/followers", + "following_url": "https://api.github.com/users/OrKoN/following{/other_user}", + "gists_url": "https://api.github.com/users/OrKoN/gists{/gist_id}", + "starred_url": "https://api.github.com/users/OrKoN/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/OrKoN/subscriptions", + "organizations_url": "https://api.github.com/users/OrKoN/orgs", + "repos_url": "https://api.github.com/users/OrKoN/repos", + "events_url": "https://api.github.com/users/OrKoN/events{/privacy}", + "received_events_url": "https://api.github.com/users/OrKoN/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "699fafa93e8c3b955918ec027e4b7f036cd72664", + "url": "https://api.github.com/repos/JustComments/jc-server/commits/699fafa93e8c3b955918ec027e4b7f036cd72664", + "html_url": "https://github.com/JustComments/jc-server/commit/699fafa93e8c3b955918ec027e4b7f036cd72664" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "f50467cce5c8589dfbd3c7f9da18b221b9731020", + "filename": "README.md", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/JustComments/jc-server/blob/d2f395f4e808a55b34cb81ba132f4100b8cd8c14/README.md", + "raw_url": "https://github.com/JustComments/jc-server/raw/d2f395f4e808a55b34cb81ba132f4100b8cd8c14/README.md", + "contents_url": "https://api.github.com/repos/JustComments/jc-server/contents/README.md?ref=d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "patch": "@@ -41,7 +41,7 @@ the port in `config.js`.\n ## Frontend Setup\n \n - Clone https://github.com/JustComments/jc-widget and run `npm install`.\n-- Adjust `API_ENDPOINT` variable in Webpack via CLI and or in the source to\n+- Adjust `API_ENDPOINT` variable in Webpack via CLI or in the source to\n point to 3434.\n - Run `npm start` and open `http://localhost:3333/`.\n " + } + ] +} diff --git a/apigh/2023-04-19/juvia b/apigh/2023-04-19/juvia new file mode 100644 index 00000000..5dab3fba --- /dev/null +++ b/apigh/2023-04-19/juvia @@ -0,0 +1,138 @@ +{ + "id": 2193655, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTkzNjU1", + "name": "juvia", + "full_name": "phusion/juvia", + "private": false, + "owner": { + "login": "phusion", + "id": 830588, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjgzMDU4OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/830588?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phusion", + "html_url": "https://github.com/phusion", + "followers_url": "https://api.github.com/users/phusion/followers", + "following_url": "https://api.github.com/users/phusion/following{/other_user}", + "gists_url": "https://api.github.com/users/phusion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phusion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phusion/subscriptions", + "organizations_url": "https://api.github.com/users/phusion/orgs", + "repos_url": "https://api.github.com/users/phusion/repos", + "events_url": "https://api.github.com/users/phusion/events{/privacy}", + "received_events_url": "https://api.github.com/users/phusion/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/phusion/juvia", + "description": "A commenting server similar to Disqus and IntenseDebate.", + "fork": false, + "url": "https://api.github.com/repos/phusion/juvia", + "forks_url": "https://api.github.com/repos/phusion/juvia/forks", + "keys_url": "https://api.github.com/repos/phusion/juvia/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/phusion/juvia/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/phusion/juvia/teams", + "hooks_url": "https://api.github.com/repos/phusion/juvia/hooks", + "issue_events_url": "https://api.github.com/repos/phusion/juvia/issues/events{/number}", + "events_url": "https://api.github.com/repos/phusion/juvia/events", + "assignees_url": "https://api.github.com/repos/phusion/juvia/assignees{/user}", + "branches_url": "https://api.github.com/repos/phusion/juvia/branches{/branch}", + "tags_url": "https://api.github.com/repos/phusion/juvia/tags", + "blobs_url": "https://api.github.com/repos/phusion/juvia/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/phusion/juvia/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/phusion/juvia/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/phusion/juvia/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/phusion/juvia/statuses/{sha}", + "languages_url": "https://api.github.com/repos/phusion/juvia/languages", + "stargazers_url": "https://api.github.com/repos/phusion/juvia/stargazers", + "contributors_url": "https://api.github.com/repos/phusion/juvia/contributors", + "subscribers_url": "https://api.github.com/repos/phusion/juvia/subscribers", + "subscription_url": "https://api.github.com/repos/phusion/juvia/subscription", + "commits_url": "https://api.github.com/repos/phusion/juvia/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/phusion/juvia/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/phusion/juvia/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/phusion/juvia/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/phusion/juvia/contents/{+path}", + "compare_url": "https://api.github.com/repos/phusion/juvia/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/phusion/juvia/merges", + "archive_url": "https://api.github.com/repos/phusion/juvia/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/phusion/juvia/downloads", + "issues_url": "https://api.github.com/repos/phusion/juvia/issues{/number}", + "pulls_url": "https://api.github.com/repos/phusion/juvia/pulls{/number}", + "milestones_url": "https://api.github.com/repos/phusion/juvia/milestones{/number}", + "notifications_url": "https://api.github.com/repos/phusion/juvia/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/phusion/juvia/labels{/name}", + "releases_url": "https://api.github.com/repos/phusion/juvia/releases{/id}", + "deployments_url": "https://api.github.com/repos/phusion/juvia/deployments", + "created_at": "2011-08-11T20:45:43Z", + "updated_at": "2023-03-24T21:45:36Z", + "pushed_at": "2020-09-22T09:39:09Z", + "git_url": "git://github.com/phusion/juvia.git", + "ssh_url": "git@github.com:phusion/juvia.git", + "clone_url": "https://github.com/phusion/juvia.git", + "svn_url": "https://github.com/phusion/juvia", + "homepage": "http://phusion.github.io/juvia/", + "size": 704, + "stargazers_count": 1035, + "watchers_count": 1035, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 96, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 29, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 96, + "open_issues": 29, + "watchers": 1035, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "phusion", + "id": 830588, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjgzMDU4OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/830588?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phusion", + "html_url": "https://github.com/phusion", + "followers_url": "https://api.github.com/users/phusion/followers", + "following_url": "https://api.github.com/users/phusion/following{/other_user}", + "gists_url": "https://api.github.com/users/phusion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phusion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phusion/subscriptions", + "organizations_url": "https://api.github.com/users/phusion/orgs", + "repos_url": "https://api.github.com/users/phusion/repos", + "events_url": "https://api.github.com/users/phusion/events{/privacy}", + "received_events_url": "https://api.github.com/users/phusion/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 96, + "subscribers_count": 44 +} diff --git a/apigh/2023-04-19/juvia.commit b/apigh/2023-04-19/juvia.commit new file mode 100644 index 00000000..879fc801 --- /dev/null +++ b/apigh/2023-04-19/juvia.commit @@ -0,0 +1,98 @@ +{ + "sha": "e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "node_id": "MDY6Q29tbWl0MjE5MzY1NTplODAzZmVmOTdhZjcxMjBlMDFkODVmZTI4ZTVlNTE3N2NlY2Q5ZWI5", + "commit": { + "author": { + "name": "Andrey Nikiforov", + "email": "a.d.nikiforov@gmail.com", + "date": "2020-09-22T09:39:08Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2020-09-22T09:39:08Z" + }, + "message": "Update README\n\nRemove maintainers wanted badge, update TODO.", + "tree": { + "sha": "6cd9a43f98845c4bedd33078f6b336c8be25702c", + "url": "https://api.github.com/repos/phusion/juvia/git/trees/6cd9a43f98845c4bedd33078f6b336c8be25702c" + }, + "url": "https://api.github.com/repos/phusion/juvia/git/commits/e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfacY8CRBK7hj4Ov3rIwAAdHIIAHbGpc0fS+HzaSymbV6POnaB\ndtYcg2yTmlZPa+AK9B4Ag/ZFKxZYBl2Ul8i35Ywt4YOaTSxiRGvADwFL6e5d4SJN\n0u0Bbc1ceKwjSrAS6kjQP+CfybUuPK1YOhzKOcoCZCD8xjwNpxxJj2PGoHCgarVQ\nRDEaWrdXkXLMZpRHk2qNjleJJwpxnsV5OzhGNMaDMGf9NKXg7bAJ65wVjAUyKHQW\nHWnR1L9PXszYye5ZYHATsLgQ9tc5VI+SwK7T5KZf2AEnQkH/PGTZkMGpKiSg7Tq0\nP5mtOXJd2TQdUlqOFx87F4C00DxYlzPC/OD03qeEdkSC4BXcwT5iWZzynTrRcBg=\n=9C7J\n-----END PGP SIGNATURE-----\n", + "payload": "tree 6cd9a43f98845c4bedd33078f6b336c8be25702c\nparent cbd840b863008de2bef9c6afeac481c3dae36b0c\nauthor Andrey Nikiforov 1600767548 +0400\ncommitter GitHub 1600767548 +0400\n\nUpdate README\n\nRemove maintainers wanted badge, update TODO." + } + }, + "url": "https://api.github.com/repos/phusion/juvia/commits/e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "html_url": "https://github.com/phusion/juvia/commit/e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "comments_url": "https://api.github.com/repos/phusion/juvia/commits/e803fef97af7120e01d85fe28e5e5177cecd9eb9/comments", + "author": { + "login": "adnikiforov", + "id": 5015596, + "node_id": "MDQ6VXNlcjUwMTU1OTY=", + "avatar_url": "https://avatars.githubusercontent.com/u/5015596?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/adnikiforov", + "html_url": "https://github.com/adnikiforov", + "followers_url": "https://api.github.com/users/adnikiforov/followers", + "following_url": "https://api.github.com/users/adnikiforov/following{/other_user}", + "gists_url": "https://api.github.com/users/adnikiforov/gists{/gist_id}", + "starred_url": "https://api.github.com/users/adnikiforov/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/adnikiforov/subscriptions", + "organizations_url": "https://api.github.com/users/adnikiforov/orgs", + "repos_url": "https://api.github.com/users/adnikiforov/repos", + "events_url": "https://api.github.com/users/adnikiforov/events{/privacy}", + "received_events_url": "https://api.github.com/users/adnikiforov/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "cbd840b863008de2bef9c6afeac481c3dae36b0c", + "url": "https://api.github.com/repos/phusion/juvia/commits/cbd840b863008de2bef9c6afeac481c3dae36b0c", + "html_url": "https://github.com/phusion/juvia/commit/cbd840b863008de2bef9c6afeac481c3dae36b0c" + } + ], + "stats": { + "total": 14, + "additions": 10, + "deletions": 4 + }, + "files": [ + { + "sha": "89c1453da8d5e33c24a4e76063554606e09fd489", + "filename": "README.md", + "status": "modified", + "additions": 10, + "deletions": 4, + "changes": 14, + "blob_url": "https://github.com/phusion/juvia/blob/e803fef97af7120e01d85fe28e5e5177cecd9eb9/README.md", + "raw_url": "https://github.com/phusion/juvia/raw/e803fef97af7120e01d85fe28e5e5177cecd9eb9/README.md", + "contents_url": "https://api.github.com/repos/phusion/juvia/contents/README.md?ref=e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "patch": "@@ -1,10 +1,8 @@\n-[![Maintainers Wanted](https://img.shields.io/badge/maintainers-wanted-red.svg)](https://github.com/pickhardt/maintainers-wanted)\n-\n # About Juvia\n \n ![Logo](https://github.com/phusion/juvia/raw/master/app/assets/images/logo-128.png)\n \n-**Juvia is currently unmaintained. If you're interested in taking over maintenance, please open an issue and tell us about it.**\n+**Juvia is currently maintained, but we surely will appreciate new contributors.**\n \n Juvia is an open source commenting system. It allows you to outsource your commenting needs to an external system so that you don't have to build your own commenting system for each website or each web app. Embedding a Juvia commenting page only involves pasting a JavaScript snippet into your web page.\n \n@@ -67,7 +65,15 @@ James Smith has written a Rails helper gem for embedding Juvia comments into Rai\n \n ## TODO\n \n-The following contributions would be very welcome:\n+Juvia is pretty broken and outdated at the moment. That means we have to stabilize and update components first. That's what we are gonna do:\n+\n+* Update libraries and gems, replace highly outdated dependencies, make project work on modern Ruby branch, lint code (probably have to push to Rails 5 or 6, Rails 4 is pretty outdated at the moment already)\n+* Add dependabot, github actions to CI/CD, mandatody CI for pull requests (if possible)\n+* Make and publish a rodmap based on issues, TODO and common sense\n+* Work on the TODO list\n+* Documentation, user guides\n+\n+Some features we will like to implement in the future:\n * Juvia works fine but we need more tests to prevent things from breaking in the future.\n * Document the `list_topics` API call.\n * A Quote/Reply button for each comment." + } + ] +} diff --git a/apigh/2023-04-19/komentify b/apigh/2023-04-19/komentify new file mode 100644 index 00000000..2c91e09e --- /dev/null +++ b/apigh/2023-04-19/komentify @@ -0,0 +1,141 @@ +{ + "id": 28002781, + "node_id": "MDEwOlJlcG9zaXRvcnkyODAwMjc4MQ==", + "name": "meteor-comments-ui", + "full_name": "komentify/meteor-comments-ui", + "private": false, + "owner": { + "login": "komentify", + "id": 20106090, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIwMTA2MDkw", + "avatar_url": "https://avatars.githubusercontent.com/u/20106090?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/komentify", + "html_url": "https://github.com/komentify", + "followers_url": "https://api.github.com/users/komentify/followers", + "following_url": "https://api.github.com/users/komentify/following{/other_user}", + "gists_url": "https://api.github.com/users/komentify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/komentify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/komentify/subscriptions", + "organizations_url": "https://api.github.com/users/komentify/orgs", + "repos_url": "https://api.github.com/users/komentify/repos", + "events_url": "https://api.github.com/users/komentify/events{/privacy}", + "received_events_url": "https://api.github.com/users/komentify/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/komentify/meteor-comments-ui", + "description": "Simple templates for comment functionality in your Meteor App", + "fork": false, + "url": "https://api.github.com/repos/komentify/meteor-comments-ui", + "forks_url": "https://api.github.com/repos/komentify/meteor-comments-ui/forks", + "keys_url": "https://api.github.com/repos/komentify/meteor-comments-ui/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/komentify/meteor-comments-ui/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/komentify/meteor-comments-ui/teams", + "hooks_url": "https://api.github.com/repos/komentify/meteor-comments-ui/hooks", + "issue_events_url": "https://api.github.com/repos/komentify/meteor-comments-ui/issues/events{/number}", + "events_url": "https://api.github.com/repos/komentify/meteor-comments-ui/events", + "assignees_url": "https://api.github.com/repos/komentify/meteor-comments-ui/assignees{/user}", + "branches_url": "https://api.github.com/repos/komentify/meteor-comments-ui/branches{/branch}", + "tags_url": "https://api.github.com/repos/komentify/meteor-comments-ui/tags", + "blobs_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/komentify/meteor-comments-ui/statuses/{sha}", + "languages_url": "https://api.github.com/repos/komentify/meteor-comments-ui/languages", + "stargazers_url": "https://api.github.com/repos/komentify/meteor-comments-ui/stargazers", + "contributors_url": "https://api.github.com/repos/komentify/meteor-comments-ui/contributors", + "subscribers_url": "https://api.github.com/repos/komentify/meteor-comments-ui/subscribers", + "subscription_url": "https://api.github.com/repos/komentify/meteor-comments-ui/subscription", + "commits_url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/komentify/meteor-comments-ui/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/komentify/meteor-comments-ui/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/komentify/meteor-comments-ui/contents/{+path}", + "compare_url": "https://api.github.com/repos/komentify/meteor-comments-ui/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/komentify/meteor-comments-ui/merges", + "archive_url": "https://api.github.com/repos/komentify/meteor-comments-ui/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/komentify/meteor-comments-ui/downloads", + "issues_url": "https://api.github.com/repos/komentify/meteor-comments-ui/issues{/number}", + "pulls_url": "https://api.github.com/repos/komentify/meteor-comments-ui/pulls{/number}", + "milestones_url": "https://api.github.com/repos/komentify/meteor-comments-ui/milestones{/number}", + "notifications_url": "https://api.github.com/repos/komentify/meteor-comments-ui/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/komentify/meteor-comments-ui/labels{/name}", + "releases_url": "https://api.github.com/repos/komentify/meteor-comments-ui/releases{/id}", + "deployments_url": "https://api.github.com/repos/komentify/meteor-comments-ui/deployments", + "created_at": "2014-12-14T18:02:53Z", + "updated_at": "2022-11-11T00:29:42Z", + "pushed_at": "2019-08-23T12:04:09Z", + "git_url": "git://github.com/komentify/meteor-comments-ui.git", + "ssh_url": "git@github.com:komentify/meteor-comments-ui.git", + "clone_url": "https://github.com/komentify/meteor-comments-ui.git", + "svn_url": "https://github.com/komentify/meteor-comments-ui", + "homepage": "", + "size": 1192, + "stargazers_count": 76, + "watchers_count": 76, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 40, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 11, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "javascript", + "meteor", + "meteor-package", + "widget" + ], + "visibility": "public", + "forks": 40, + "open_issues": 11, + "watchers": 76, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "komentify", + "id": 20106090, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIwMTA2MDkw", + "avatar_url": "https://avatars.githubusercontent.com/u/20106090?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/komentify", + "html_url": "https://github.com/komentify", + "followers_url": "https://api.github.com/users/komentify/followers", + "following_url": "https://api.github.com/users/komentify/following{/other_user}", + "gists_url": "https://api.github.com/users/komentify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/komentify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/komentify/subscriptions", + "organizations_url": "https://api.github.com/users/komentify/orgs", + "repos_url": "https://api.github.com/users/komentify/repos", + "events_url": "https://api.github.com/users/komentify/events{/privacy}", + "received_events_url": "https://api.github.com/users/komentify/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 40, + "subscribers_count": 6 +} diff --git a/apigh/2023-04-19/komentify.commit b/apigh/2023-04-19/komentify.commit new file mode 100644 index 00000000..b75cba8b --- /dev/null +++ b/apigh/2023-04-19/komentify.commit @@ -0,0 +1,98 @@ +{ + "sha": "5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "node_id": "MDY6Q29tbWl0MjgwMDI3ODE6NWIxNjVjZTFhOGI5ZWZiZGJiZjM2MDhhY2EyM2ExYzZiNDllNTViZg==", + "commit": { + "author": { + "name": "Matteo De Micheli", + "email": "matteodem@protonmail.com", + "date": "2017-06-09T12:07:39Z" + }, + "committer": { + "name": "Matteo De Micheli", + "email": "matteodem@protonmail.com", + "date": "2017-06-09T12:07:39Z" + }, + "message": "tag version 1.4.3", + "tree": { + "sha": "c6902ff95fea398d342e29aa0077a784d3235461", + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/trees/c6902ff95fea398d342e29aa0077a784d3235461" + }, + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/commits/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "html_url": "https://github.com/komentify/meteor-comments-ui/commit/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "comments_url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf/comments", + "author": { + "login": "matteodem", + "id": 1301147, + "node_id": "MDQ6VXNlcjEzMDExNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1301147?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/matteodem", + "html_url": "https://github.com/matteodem", + "followers_url": "https://api.github.com/users/matteodem/followers", + "following_url": "https://api.github.com/users/matteodem/following{/other_user}", + "gists_url": "https://api.github.com/users/matteodem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/matteodem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/matteodem/subscriptions", + "organizations_url": "https://api.github.com/users/matteodem/orgs", + "repos_url": "https://api.github.com/users/matteodem/repos", + "events_url": "https://api.github.com/users/matteodem/events{/privacy}", + "received_events_url": "https://api.github.com/users/matteodem/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "matteodem", + "id": 1301147, + "node_id": "MDQ6VXNlcjEzMDExNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1301147?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/matteodem", + "html_url": "https://github.com/matteodem", + "followers_url": "https://api.github.com/users/matteodem/followers", + "following_url": "https://api.github.com/users/matteodem/following{/other_user}", + "gists_url": "https://api.github.com/users/matteodem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/matteodem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/matteodem/subscriptions", + "organizations_url": "https://api.github.com/users/matteodem/orgs", + "repos_url": "https://api.github.com/users/matteodem/repos", + "events_url": "https://api.github.com/users/matteodem/events{/privacy}", + "received_events_url": "https://api.github.com/users/matteodem/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "5198bf5cf0f65d7ecc6db4b8899eb3a545a9ae87", + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits/5198bf5cf0f65d7ecc6db4b8899eb3a545a9ae87", + "html_url": "https://github.com/komentify/meteor-comments-ui/commit/5198bf5cf0f65d7ecc6db4b8899eb3a545a9ae87" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "040d95e51f3058474f6d9fc9b0986e56620eaf25", + "filename": "package.js", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/komentify/meteor-comments-ui/blob/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf/package.js", + "raw_url": "https://github.com/komentify/meteor-comments-ui/raw/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf/package.js", + "contents_url": "https://api.github.com/repos/komentify/meteor-comments-ui/contents/package.js?ref=5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "patch": "@@ -1,7 +1,7 @@\n Package.describe({\n name: 'arkham:comments-ui',\n summary: 'Simple templates for disqus-like comment functionality',\n- version: '1.4.2',\n+ version: '1.4.3',\n git: 'https://github.com/komentify/meteor-comments-ui.git'\n });\n " + } + ] +} diff --git a/apigh/2023-04-19/kucos b/apigh/2023-04-19/kucos new file mode 100644 index 00000000..dacffc7f --- /dev/null +++ b/apigh/2023-04-19/kucos @@ -0,0 +1,143 @@ +{ + "id": 274461653, + "node_id": "MDEwOlJlcG9zaXRvcnkyNzQ0NjE2NTM=", + "name": "kucos", + "full_name": "kucosjs/kucos", + "private": false, + "owner": { + "login": "kucosjs", + "id": 67328936, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY3MzI4OTM2", + "avatar_url": "https://avatars.githubusercontent.com/u/67328936?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kucosjs", + "html_url": "https://github.com/kucosjs", + "followers_url": "https://api.github.com/users/kucosjs/followers", + "following_url": "https://api.github.com/users/kucosjs/following{/other_user}", + "gists_url": "https://api.github.com/users/kucosjs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kucosjs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kucosjs/subscriptions", + "organizations_url": "https://api.github.com/users/kucosjs/orgs", + "repos_url": "https://api.github.com/users/kucosjs/repos", + "events_url": "https://api.github.com/users/kucosjs/events{/privacy}", + "received_events_url": "https://api.github.com/users/kucosjs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/kucosjs/kucos", + "description": "Open source comments and kudos server for static websites", + "fork": false, + "url": "https://api.github.com/repos/kucosjs/kucos", + "forks_url": "https://api.github.com/repos/kucosjs/kucos/forks", + "keys_url": "https://api.github.com/repos/kucosjs/kucos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kucosjs/kucos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kucosjs/kucos/teams", + "hooks_url": "https://api.github.com/repos/kucosjs/kucos/hooks", + "issue_events_url": "https://api.github.com/repos/kucosjs/kucos/issues/events{/number}", + "events_url": "https://api.github.com/repos/kucosjs/kucos/events", + "assignees_url": "https://api.github.com/repos/kucosjs/kucos/assignees{/user}", + "branches_url": "https://api.github.com/repos/kucosjs/kucos/branches{/branch}", + "tags_url": "https://api.github.com/repos/kucosjs/kucos/tags", + "blobs_url": "https://api.github.com/repos/kucosjs/kucos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kucosjs/kucos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kucosjs/kucos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kucosjs/kucos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kucosjs/kucos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kucosjs/kucos/languages", + "stargazers_url": "https://api.github.com/repos/kucosjs/kucos/stargazers", + "contributors_url": "https://api.github.com/repos/kucosjs/kucos/contributors", + "subscribers_url": "https://api.github.com/repos/kucosjs/kucos/subscribers", + "subscription_url": "https://api.github.com/repos/kucosjs/kucos/subscription", + "commits_url": "https://api.github.com/repos/kucosjs/kucos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kucosjs/kucos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kucosjs/kucos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kucosjs/kucos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kucosjs/kucos/contents/{+path}", + "compare_url": "https://api.github.com/repos/kucosjs/kucos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kucosjs/kucos/merges", + "archive_url": "https://api.github.com/repos/kucosjs/kucos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kucosjs/kucos/downloads", + "issues_url": "https://api.github.com/repos/kucosjs/kucos/issues{/number}", + "pulls_url": "https://api.github.com/repos/kucosjs/kucos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kucosjs/kucos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kucosjs/kucos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kucosjs/kucos/labels{/name}", + "releases_url": "https://api.github.com/repos/kucosjs/kucos/releases{/id}", + "deployments_url": "https://api.github.com/repos/kucosjs/kucos/deployments", + "created_at": "2020-06-23T16:56:46Z", + "updated_at": "2023-01-20T03:50:54Z", + "pushed_at": "2021-06-06T08:11:28Z", + "git_url": "git://github.com/kucosjs/kucos.git", + "ssh_url": "git@github.com:kucosjs/kucos.git", + "clone_url": "https://github.com/kucosjs/kucos.git", + "svn_url": "https://github.com/kucosjs/kucos", + "homepage": "https://kucos.js.org", + "size": 118, + "stargazers_count": 40, + "watchers_count": 40, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 2, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "blog", + "comment-system", + "commenting-system", + "kudos", + "serverless", + "static-website" + ], + "visibility": "public", + "forks": 2, + "open_issues": 0, + "watchers": 40, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "kucosjs", + "id": 67328936, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY3MzI4OTM2", + "avatar_url": "https://avatars.githubusercontent.com/u/67328936?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kucosjs", + "html_url": "https://github.com/kucosjs", + "followers_url": "https://api.github.com/users/kucosjs/followers", + "following_url": "https://api.github.com/users/kucosjs/following{/other_user}", + "gists_url": "https://api.github.com/users/kucosjs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kucosjs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kucosjs/subscriptions", + "organizations_url": "https://api.github.com/users/kucosjs/orgs", + "repos_url": "https://api.github.com/users/kucosjs/repos", + "events_url": "https://api.github.com/users/kucosjs/events{/privacy}", + "received_events_url": "https://api.github.com/users/kucosjs/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 2, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/kucos.commit b/apigh/2023-04-19/kucos.commit new file mode 100644 index 00000000..82180c75 --- /dev/null +++ b/apigh/2023-04-19/kucos.commit @@ -0,0 +1,98 @@ +{ + "sha": "c8b6e096fab39497a369d46419acaf7ce1a25015", + "node_id": "MDY6Q29tbWl0Mjc0NDYxNjUzOmM4YjZlMDk2ZmFiMzk0OTdhMzY5ZDQ2NDE5YWNhZjdjZTFhMjUwMTU=", + "commit": { + "author": { + "name": "Sebastian Korotkiewicz", + "email": "skorotkiewicz@gmail.com", + "date": "2021-06-06T08:11:04Z" + }, + "committer": { + "name": "Sebastian Korotkiewicz", + "email": "skorotkiewicz@gmail.com", + "date": "2021-06-06T08:11:04Z" + }, + "message": "remove unused dependencies", + "tree": { + "sha": "cda241368129e6afe5af75046d05a66e62f96871", + "url": "https://api.github.com/repos/kucosjs/kucos/git/trees/cda241368129e6afe5af75046d05a66e62f96871" + }, + "url": "https://api.github.com/repos/kucosjs/kucos/git/commits/c8b6e096fab39497a369d46419acaf7ce1a25015", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCAAdFiEEtJji5BCQL4rsEI9PW9xVe0lr2w0FAmC8gx8ACgkQW9xVe0lr\n2w2MQRAAhsdqn9yR9zLGH02eEwtzvdlfG3fa+cPHBXQrXqNXey57+zwjDzo6KYo4\nGGuGNnSrc2eKZMOIBXY7WpMgRP4lXuR5Lbsz35K6TicLyhd5MKc/m04ydjq20xve\nAFbMzNcU9e4BIcBW9gCR2Cl4CcwK7I9AwDF6Y67hQc+toHYQ8wWyTh8C6z2wfCK7\natSDN5YTWi7jHQp+aVzW/bXT0MdIIqVwcD20NN8DNHK2kpQmfK6c823FGx65Uh/w\nAOReuoBdkR7ATMl4wNI/F4H0TVnF4Hze8Zu87TklwbL8e9eVemiWwaHAMoTU7dWT\nNtxTe+l9i9ObHTUqDS1rjPB1YtCn9Vt7p8Nix2N8CGegBQ3jcPBVvLFerolfb9kW\nIoSmbCXvuqENom3RvOmJjWPJft3N0ZcBIx06CKcbn1i0Z02cHeWp8PBZVfHuBmMO\nLA/XgoaE19tPZ3PJfkjbC0nnHUkvpeafWf3XmDEvIin0/u7aR68cz/G0fB30HzYZ\n3Al2cJZxOtGXocRpTIXS28Hx1N3f9Ou0usO6veOgYNVCN+ItMuvTk/a8Dzvueuve\nCK3+SnVldj8Sz65CumIm0jbKJRxribTE1j249+Ayu1ApFkk8xrspnerQ2YQw27SM\nGjfvaOA1lgast4+M9/+DwoD7nwafWaEt12eTn5Cs5KlLsiEJd0w=\n=YkU2\n-----END PGP SIGNATURE-----", + "payload": "tree cda241368129e6afe5af75046d05a66e62f96871\nparent a75696cc4fd6a6e89619e77aba0e672f7c9f5475\nauthor Sebastian Korotkiewicz 1622967064 +0200\ncommitter Sebastian Korotkiewicz 1622967064 +0200\n\nremove unused dependencies\n" + } + }, + "url": "https://api.github.com/repos/kucosjs/kucos/commits/c8b6e096fab39497a369d46419acaf7ce1a25015", + "html_url": "https://github.com/kucosjs/kucos/commit/c8b6e096fab39497a369d46419acaf7ce1a25015", + "comments_url": "https://api.github.com/repos/kucosjs/kucos/commits/c8b6e096fab39497a369d46419acaf7ce1a25015/comments", + "author": { + "login": "skorotkiewicz", + "id": 899351, + "node_id": "MDQ6VXNlcjg5OTM1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/899351?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skorotkiewicz", + "html_url": "https://github.com/skorotkiewicz", + "followers_url": "https://api.github.com/users/skorotkiewicz/followers", + "following_url": "https://api.github.com/users/skorotkiewicz/following{/other_user}", + "gists_url": "https://api.github.com/users/skorotkiewicz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skorotkiewicz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skorotkiewicz/subscriptions", + "organizations_url": "https://api.github.com/users/skorotkiewicz/orgs", + "repos_url": "https://api.github.com/users/skorotkiewicz/repos", + "events_url": "https://api.github.com/users/skorotkiewicz/events{/privacy}", + "received_events_url": "https://api.github.com/users/skorotkiewicz/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "skorotkiewicz", + "id": 899351, + "node_id": "MDQ6VXNlcjg5OTM1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/899351?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skorotkiewicz", + "html_url": "https://github.com/skorotkiewicz", + "followers_url": "https://api.github.com/users/skorotkiewicz/followers", + "following_url": "https://api.github.com/users/skorotkiewicz/following{/other_user}", + "gists_url": "https://api.github.com/users/skorotkiewicz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skorotkiewicz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skorotkiewicz/subscriptions", + "organizations_url": "https://api.github.com/users/skorotkiewicz/orgs", + "repos_url": "https://api.github.com/users/skorotkiewicz/repos", + "events_url": "https://api.github.com/users/skorotkiewicz/events{/privacy}", + "received_events_url": "https://api.github.com/users/skorotkiewicz/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a75696cc4fd6a6e89619e77aba0e672f7c9f5475", + "url": "https://api.github.com/repos/kucosjs/kucos/commits/a75696cc4fd6a6e89619e77aba0e672f7c9f5475", + "html_url": "https://github.com/kucosjs/kucos/commit/a75696cc4fd6a6e89619e77aba0e672f7c9f5475" + } + ], + "stats": { + "total": 1, + "additions": 0, + "deletions": 1 + }, + "files": [ + { + "sha": "8b9b180c5dfd8c896c727497a66b93be88d15636", + "filename": "package.json", + "status": "modified", + "additions": 0, + "deletions": 1, + "changes": 1, + "blob_url": "https://github.com/kucosjs/kucos/blob/c8b6e096fab39497a369d46419acaf7ce1a25015/package.json", + "raw_url": "https://github.com/kucosjs/kucos/raw/c8b6e096fab39497a369d46419acaf7ce1a25015/package.json", + "contents_url": "https://api.github.com/repos/kucosjs/kucos/contents/package.json?ref=c8b6e096fab39497a369d46419acaf7ce1a25015", + "patch": "@@ -28,7 +28,6 @@\n \"dependencies\": {\n \"akismet-api\": \"^5.0.0\",\n \"async\": \"^3.1.0\",\n- \"axios\": \"^0.19.2\",\n \"cookie-parser\": \"^1.4.5\",\n \"cors\": \"^2.8.5\",\n \"debug\": \"latest\"," + } + ] +} diff --git a/apigh/2023-04-19/lambda_comments b/apigh/2023-04-19/lambda_comments new file mode 100644 index 00000000..ced7aec9 --- /dev/null +++ b/apigh/2023-04-19/lambda_comments @@ -0,0 +1,118 @@ +{ + "id": 55813505, + "node_id": "MDEwOlJlcG9zaXRvcnk1NTgxMzUwNQ==", + "name": "lambda-comments", + "full_name": "jimpick/lambda-comments", + "private": false, + "owner": { + "login": "jimpick", + "id": 20886, + "node_id": "MDQ6VXNlcjIwODg2", + "avatar_url": "https://avatars.githubusercontent.com/u/20886?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jimpick", + "html_url": "https://github.com/jimpick", + "followers_url": "https://api.github.com/users/jimpick/followers", + "following_url": "https://api.github.com/users/jimpick/following{/other_user}", + "gists_url": "https://api.github.com/users/jimpick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jimpick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jimpick/subscriptions", + "organizations_url": "https://api.github.com/users/jimpick/orgs", + "repos_url": "https://api.github.com/users/jimpick/repos", + "events_url": "https://api.github.com/users/jimpick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jimpick/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jimpick/lambda-comments", + "description": "Blog commenting system built with AWS Lambda", + "fork": false, + "url": "https://api.github.com/repos/jimpick/lambda-comments", + "forks_url": "https://api.github.com/repos/jimpick/lambda-comments/forks", + "keys_url": "https://api.github.com/repos/jimpick/lambda-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jimpick/lambda-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jimpick/lambda-comments/teams", + "hooks_url": "https://api.github.com/repos/jimpick/lambda-comments/hooks", + "issue_events_url": "https://api.github.com/repos/jimpick/lambda-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/jimpick/lambda-comments/events", + "assignees_url": "https://api.github.com/repos/jimpick/lambda-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/jimpick/lambda-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/jimpick/lambda-comments/tags", + "blobs_url": "https://api.github.com/repos/jimpick/lambda-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jimpick/lambda-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jimpick/lambda-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jimpick/lambda-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jimpick/lambda-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jimpick/lambda-comments/languages", + "stargazers_url": "https://api.github.com/repos/jimpick/lambda-comments/stargazers", + "contributors_url": "https://api.github.com/repos/jimpick/lambda-comments/contributors", + "subscribers_url": "https://api.github.com/repos/jimpick/lambda-comments/subscribers", + "subscription_url": "https://api.github.com/repos/jimpick/lambda-comments/subscription", + "commits_url": "https://api.github.com/repos/jimpick/lambda-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jimpick/lambda-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jimpick/lambda-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jimpick/lambda-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jimpick/lambda-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/jimpick/lambda-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jimpick/lambda-comments/merges", + "archive_url": "https://api.github.com/repos/jimpick/lambda-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jimpick/lambda-comments/downloads", + "issues_url": "https://api.github.com/repos/jimpick/lambda-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/jimpick/lambda-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jimpick/lambda-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jimpick/lambda-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jimpick/lambda-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/jimpick/lambda-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/jimpick/lambda-comments/deployments", + "created_at": "2016-04-08T22:29:06Z", + "updated_at": "2023-03-25T18:54:52Z", + "pushed_at": "2016-09-16T01:16:15Z", + "git_url": "git://github.com/jimpick/lambda-comments.git", + "ssh_url": "git@github.com:jimpick/lambda-comments.git", + "clone_url": "https://github.com/jimpick/lambda-comments.git", + "svn_url": "https://github.com/jimpick/lambda-comments", + "homepage": "", + "size": 394, + "stargazers_count": 624, + "watchers_count": 624, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 32, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "isc", + "name": "ISC License", + "spdx_id": "ISC", + "url": "https://api.github.com/licenses/isc", + "node_id": "MDc6TGljZW5zZTEw" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 32, + "open_issues": 8, + "watchers": 624, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 32, + "subscribers_count": 17 +} diff --git a/apigh/2023-04-19/lambda_comments.commit b/apigh/2023-04-19/lambda_comments.commit new file mode 100644 index 00000000..a6da6170 --- /dev/null +++ b/apigh/2023-04-19/lambda_comments.commit @@ -0,0 +1,103 @@ +{ + "sha": "9ef01f837d579921c04bef2694f4c0192d81885a", + "node_id": "MDY6Q29tbWl0NTU4MTM1MDU6OWVmMDFmODM3ZDU3OTkyMWMwNGJlZjI2OTRmNGMwMTkyZDgxODg1YQ==", + "commit": { + "author": { + "name": "Jim Pick", + "email": "jim@backblend.com", + "date": "2016-07-27T00:40:53Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2016-07-27T00:40:53Z" + }, + "message": "Merge pull request #13 from kabo/master\n\nCloses #10", + "tree": { + "sha": "a56a56bfed2b466aa3c782ddc3c8f289a4e8d5f2", + "url": "https://api.github.com/repos/jimpick/lambda-comments/git/trees/a56a56bfed2b466aa3c782ddc3c8f289a4e8d5f2" + }, + "url": "https://api.github.com/repos/jimpick/lambda-comments/git/commits/9ef01f837d579921c04bef2694f4c0192d81885a", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/jimpick/lambda-comments/commits/9ef01f837d579921c04bef2694f4c0192d81885a", + "html_url": "https://github.com/jimpick/lambda-comments/commit/9ef01f837d579921c04bef2694f4c0192d81885a", + "comments_url": "https://api.github.com/repos/jimpick/lambda-comments/commits/9ef01f837d579921c04bef2694f4c0192d81885a/comments", + "author": { + "login": "jimpick", + "id": 20886, + "node_id": "MDQ6VXNlcjIwODg2", + "avatar_url": "https://avatars.githubusercontent.com/u/20886?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jimpick", + "html_url": "https://github.com/jimpick", + "followers_url": "https://api.github.com/users/jimpick/followers", + "following_url": "https://api.github.com/users/jimpick/following{/other_user}", + "gists_url": "https://api.github.com/users/jimpick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jimpick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jimpick/subscriptions", + "organizations_url": "https://api.github.com/users/jimpick/orgs", + "repos_url": "https://api.github.com/users/jimpick/repos", + "events_url": "https://api.github.com/users/jimpick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jimpick/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7f6b5b1b450563d2b5720f04b50d4efec0e585f2", + "url": "https://api.github.com/repos/jimpick/lambda-comments/commits/7f6b5b1b450563d2b5720f04b50d4efec0e585f2", + "html_url": "https://github.com/jimpick/lambda-comments/commit/7f6b5b1b450563d2b5720f04b50d4efec0e585f2" + }, + { + "sha": "90ddbae0a1c871cc81396f88ae8cac75632c74aa", + "url": "https://api.github.com/repos/jimpick/lambda-comments/commits/90ddbae0a1c871cc81396f88ae8cac75632c74aa", + "html_url": "https://github.com/jimpick/lambda-comments/commit/90ddbae0a1c871cc81396f88ae8cac75632c74aa" + } + ], + "stats": { + "total": 5, + "additions": 3, + "deletions": 2 + }, + "files": [ + { + "sha": "a44604c81890df2b50580902ffd33960d1cb09c2", + "filename": "deploy/cloudformation/cloudformation.sh", + "status": "modified", + "additions": 3, + "deletions": 2, + "changes": 5, + "blob_url": "https://github.com/jimpick/lambda-comments/blob/9ef01f837d579921c04bef2694f4c0192d81885a/deploy%2Fcloudformation%2Fcloudformation.sh", + "raw_url": "https://github.com/jimpick/lambda-comments/raw/9ef01f837d579921c04bef2694f4c0192d81885a/deploy%2Fcloudformation%2Fcloudformation.sh", + "contents_url": "https://api.github.com/repos/jimpick/lambda-comments/contents/deploy%2Fcloudformation%2Fcloudformation.sh?ref=9ef01f837d579921c04bef2694f4c0192d81885a", + "patch": "@@ -19,16 +19,17 @@ BABEL_NODE=$DIR/../../node_modules/babel-cli/bin/babel-node.js\n BIN_DIR=$DIR/../../bin\n STACK_NAME=$($BABEL_NODE $BIN_DIR/dump-config.js CLOUDFORMATION)\n ORIGIN=$($BABEL_NODE $BIN_DIR/dump-config.js ORIGIN)\n+REGION=$($BABEL_NODE $BIN_DIR/dump-config.js REGION)\n \n if [ \"$ACTION\" = \"delete-stack\" ]; then\n aws cloudformation delete-stack \\\n- --region us-west-2 \\\n+ --region $REGION \\\n --stack-name $STACK_NAME\n exit 0\n fi\n \n aws cloudformation $ACTION \\\n- --region us-west-2 \\\n+ --region $REGION \\\n --stack-name $STACK_NAME \\\n --template-body file://$DIR/lambda-comments.json \\\n --capabilities CAPABILITY_IAM \\" + } + ] +} diff --git a/apigh/2023-04-19/master b/apigh/2023-04-19/master new file mode 100644 index 00000000..1ef1c09f --- /dev/null +++ b/apigh/2023-04-19/master @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/11591946", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-19/master.commit b/apigh/2023-04-19/master.commit new file mode 100644 index 00000000..96279562 --- /dev/null +++ b/apigh/2023-04-19/master.commit @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/11591946/commits/master", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-19/mouthful b/apigh/2023-04-19/mouthful new file mode 100644 index 00000000..01981009 --- /dev/null +++ b/apigh/2023-04-19/mouthful @@ -0,0 +1,126 @@ +{ + "id": 120190957, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjAxOTA5NTc=", + "name": "mouthful", + "full_name": "vkuznecovas/mouthful", + "private": false, + "owner": { + "login": "vkuznecovas", + "id": 18392269, + "node_id": "MDQ6VXNlcjE4MzkyMjY5", + "avatar_url": "https://avatars.githubusercontent.com/u/18392269?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vkuznecovas", + "html_url": "https://github.com/vkuznecovas", + "followers_url": "https://api.github.com/users/vkuznecovas/followers", + "following_url": "https://api.github.com/users/vkuznecovas/following{/other_user}", + "gists_url": "https://api.github.com/users/vkuznecovas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vkuznecovas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vkuznecovas/subscriptions", + "organizations_url": "https://api.github.com/users/vkuznecovas/orgs", + "repos_url": "https://api.github.com/users/vkuznecovas/repos", + "events_url": "https://api.github.com/users/vkuznecovas/events{/privacy}", + "received_events_url": "https://api.github.com/users/vkuznecovas/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/vkuznecovas/mouthful", + "description": "Mouthful is a self-hosted alternative to Disqus", + "fork": false, + "url": "https://api.github.com/repos/vkuznecovas/mouthful", + "forks_url": "https://api.github.com/repos/vkuznecovas/mouthful/forks", + "keys_url": "https://api.github.com/repos/vkuznecovas/mouthful/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vkuznecovas/mouthful/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vkuznecovas/mouthful/teams", + "hooks_url": "https://api.github.com/repos/vkuznecovas/mouthful/hooks", + "issue_events_url": "https://api.github.com/repos/vkuznecovas/mouthful/issues/events{/number}", + "events_url": "https://api.github.com/repos/vkuznecovas/mouthful/events", + "assignees_url": "https://api.github.com/repos/vkuznecovas/mouthful/assignees{/user}", + "branches_url": "https://api.github.com/repos/vkuznecovas/mouthful/branches{/branch}", + "tags_url": "https://api.github.com/repos/vkuznecovas/mouthful/tags", + "blobs_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vkuznecovas/mouthful/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vkuznecovas/mouthful/languages", + "stargazers_url": "https://api.github.com/repos/vkuznecovas/mouthful/stargazers", + "contributors_url": "https://api.github.com/repos/vkuznecovas/mouthful/contributors", + "subscribers_url": "https://api.github.com/repos/vkuznecovas/mouthful/subscribers", + "subscription_url": "https://api.github.com/repos/vkuznecovas/mouthful/subscription", + "commits_url": "https://api.github.com/repos/vkuznecovas/mouthful/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vkuznecovas/mouthful/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vkuznecovas/mouthful/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/{+path}", + "compare_url": "https://api.github.com/repos/vkuznecovas/mouthful/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vkuznecovas/mouthful/merges", + "archive_url": "https://api.github.com/repos/vkuznecovas/mouthful/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vkuznecovas/mouthful/downloads", + "issues_url": "https://api.github.com/repos/vkuznecovas/mouthful/issues{/number}", + "pulls_url": "https://api.github.com/repos/vkuznecovas/mouthful/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vkuznecovas/mouthful/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vkuznecovas/mouthful/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vkuznecovas/mouthful/labels{/name}", + "releases_url": "https://api.github.com/repos/vkuznecovas/mouthful/releases{/id}", + "deployments_url": "https://api.github.com/repos/vkuznecovas/mouthful/deployments", + "created_at": "2018-02-04T14:15:26Z", + "updated_at": "2023-04-18T03:50:58Z", + "pushed_at": "2023-03-07T03:18:17Z", + "git_url": "git://github.com/vkuznecovas/mouthful.git", + "ssh_url": "git@github.com:vkuznecovas/mouthful.git", + "clone_url": "https://github.com/vkuznecovas/mouthful.git", + "svn_url": "https://github.com/vkuznecovas/mouthful", + "homepage": "https://mouthful.dizzy.zone/", + "size": 5659, + "stargazers_count": 747, + "watchers_count": 747, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 38, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 32, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting-engines", + "comments", + "disqus", + "dynamodb", + "go", + "golang", + "mysql", + "postgres", + "preact" + ], + "visibility": "public", + "forks": 38, + "open_issues": 32, + "watchers": 747, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 38, + "subscribers_count": 15 +} diff --git a/apigh/2023-04-19/mouthful.commit b/apigh/2023-04-19/mouthful.commit new file mode 100644 index 00000000..329f592b --- /dev/null +++ b/apigh/2023-04-19/mouthful.commit @@ -0,0 +1,139 @@ +{ + "sha": "09e72e1bce516138377e35d16d7987cd15824433", + "node_id": "MDY6Q29tbWl0MTIwMTkwOTU3OjA5ZTcyZTFiY2U1MTYxMzgzNzdlMzVkMTZkNzk4N2NkMTU4MjQ0MzM=", + "commit": { + "author": { + "name": "Viktoras", + "email": "vkuznecovas@users.noreply.github.com", + "date": "2021-02-28T11:42:16Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-02-28T11:42:16Z" + }, + "message": "Merge pull request #122 from vkuznecovas/fix-docker-fetching\n\nPass context to docker when building instead of pulling from github", + "tree": { + "sha": "a17ee57811c2e401a68ec9542228164f997b789e", + "url": "https://api.github.com/repos/vkuznecovas/mouthful/git/trees/a17ee57811c2e401a68ec9542228164f997b789e" + }, + "url": "https://api.github.com/repos/vkuznecovas/mouthful/git/commits/09e72e1bce516138377e35d16d7987cd15824433", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJgO4GYCRBK7hj4Ov3rIwAAdHIIAAkVQNbBXsSkWCTCOMN+nRrq\nu0LgHQSBM7ZMA29GGAB0MotSAMZo2ebNmd4ZbhOFKBNKcyq4PEBFeIT300RvL0a7\nawc0aB+XSe7YSyBrnAQvsKQ/FFWYAXa2fvh1AQZEkZnBdh3H3KujlN0y5aayjrMI\nK0uQ0kNtf7E43NFXvJJcoJAQbZex0+YUeDwQ13dtGivwCVQoV5q+NGu8DMhRU+fa\nCwNBhl2IAFD4M/xH4MndhprYCXxp//G/ZM5yBe8ygs0150ly3W6wHMKFNsLfNffN\nfrtisossQGpqbYYWjfbJQqbqC97H2HromUD3OQxpDsLiXx/LRRWzqb4S3GRprFc=\n=XKKv\n-----END PGP SIGNATURE-----\n", + "payload": "tree a17ee57811c2e401a68ec9542228164f997b789e\nparent 1abb7572f8a5019fb826fb9057fc821aa9e54760\nparent 9c992f12abe8810d677fa777a2b6f166b2469daf\nauthor Viktoras 1614512536 +0200\ncommitter GitHub 1614512536 +0200\n\nMerge pull request #122 from vkuznecovas/fix-docker-fetching\n\nPass context to docker when building instead of pulling from github" + } + }, + "url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/09e72e1bce516138377e35d16d7987cd15824433", + "html_url": "https://github.com/vkuznecovas/mouthful/commit/09e72e1bce516138377e35d16d7987cd15824433", + "comments_url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/09e72e1bce516138377e35d16d7987cd15824433/comments", + "author": { + "login": "vkuznecovas", + "id": 18392269, + "node_id": "MDQ6VXNlcjE4MzkyMjY5", + "avatar_url": "https://avatars.githubusercontent.com/u/18392269?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vkuznecovas", + "html_url": "https://github.com/vkuznecovas", + "followers_url": "https://api.github.com/users/vkuznecovas/followers", + "following_url": "https://api.github.com/users/vkuznecovas/following{/other_user}", + "gists_url": "https://api.github.com/users/vkuznecovas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vkuznecovas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vkuznecovas/subscriptions", + "organizations_url": "https://api.github.com/users/vkuznecovas/orgs", + "repos_url": "https://api.github.com/users/vkuznecovas/repos", + "events_url": "https://api.github.com/users/vkuznecovas/events{/privacy}", + "received_events_url": "https://api.github.com/users/vkuznecovas/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1abb7572f8a5019fb826fb9057fc821aa9e54760", + "url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/1abb7572f8a5019fb826fb9057fc821aa9e54760", + "html_url": "https://github.com/vkuznecovas/mouthful/commit/1abb7572f8a5019fb826fb9057fc821aa9e54760" + }, + { + "sha": "9c992f12abe8810d677fa777a2b6f166b2469daf", + "url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/9c992f12abe8810d677fa777a2b6f166b2469daf", + "html_url": "https://github.com/vkuznecovas/mouthful/commit/9c992f12abe8810d677fa777a2b6f166b2469daf" + } + ], + "stats": { + "total": 372, + "additions": 364, + "deletions": 8 + }, + "files": [ + { + "sha": "b603977f9428c2e38134839540f70027f41592cb", + "filename": ".dockerignore", + "status": "modified", + "additions": 6, + "deletions": 2, + "changes": 8, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/.dockerignore", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/.dockerignore", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/.dockerignore?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -1,2 +1,6 @@\n-**\n-!dist\n\\ No newline at end of file\n+dist\n+data\n+goreleaser-build\n+static\n+client/build\n+client/node_modules" + }, + { + "sha": "e85616dc6af592072598cee3abcc96667438963a", + "filename": "Dockerfile", + "status": "modified", + "additions": 3, + "deletions": 5, + "changes": 8, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/Dockerfile", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/Dockerfile", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/Dockerfile?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -1,17 +1,15 @@\n FROM golang:1.15.2-alpine\n-ARG MOUTHFUL_VER\n ENV CGO_ENABLED=${CGO_ENABLED:-1} \\\n GOOS=${GOOS:-linux} \\\n MOUTHFUL_VER=${MOUTHFUL_VER:-master}\n RUN set -ex; \\\n apk add --no-cache bash build-base curl git && \\\n echo \"http://dl-cdn.alpinelinux.org/alpine/edge/community\" >> /etc/apk/repositories && \\\n echo \"http://dl-cdn.alpinelinux.org/alpine/edge/main\" >> /etc/apk/repositories && \\\n- apk add --no-cache upx nodejs nodejs-npm && \\\n- go get -d github.com/vkuznecovas/mouthful\n+ apk add --no-cache upx nodejs nodejs-npm \n WORKDIR /go/src/github.com/vkuznecovas/mouthful\n-RUN git checkout $MOUTHFUL_VER && \\\n- ./build.sh && \\\n+COPY . /go/src/github.com/vkuznecovas/mouthful\n+RUN ./build.sh && \\\n cd dist/ && \\\n upx --best mouthful\n " + }, + { + "sha": "6be5e6b0209af88b216a24039b6f7dde95aed40f", + "filename": "go.mod", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/go.mod", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/go.mod", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/go.mod?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -18,7 +18,7 @@ require (\n \tgithub.com/labstack/echo v3.3.10+incompatible // indirect\n \tgithub.com/labstack/gommon v0.3.0 // indirect\n \tgithub.com/lib/pq v1.8.0\n-\tgithub.com/markbates/goth v1.64.2\n+\tgithub.com/markbates/goth v1.67.1\n \tgithub.com/mattn/go-sqlite3 v1.14.3\n \tgithub.com/microcosm-cc/bluemonday v1.0.4\n \tgithub.com/patrickmn/go-cache v2.1.0+incompatible" + }, + { + "sha": "96e61b2c900c598e198c0b4b26871b60b1879507", + "filename": "go.sum", + "status": "modified", + "additions": 354, + "deletions": 0, + "changes": 354, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/go.sum", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/go.sum", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/go.sum?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -1,4 +1,39 @@\n+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\n+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\n+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=\n+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=\n+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=\n+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=\n+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=\n+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=\n+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=\n+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=\n+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=\n+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=\n+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=\n+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=\n+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=\n+cloud.google.com/go v0.67.0/go.mod h1:YNan/mUhNZFrYUor0vqrsQ0Ffl7Xtm/ACOy/vsTS858=\n+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=\n+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=\n+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=\n+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=\n+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=\n+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=\n+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=\n+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=\n+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=\n+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=\n+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=\n+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=\n+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=\n+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=\n+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=\n+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=\n+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=\n+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=\n github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\n+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=\n github.com/appleboy/gofight v1.0.4 h1:CaO/h/RHl+EigTqZ37BQhu6FnbUaJ2ngZG6NtPcOtR8=\n github.com/appleboy/gofight v2.0.0+incompatible h1:ECVMVpNJFBztDbnA7ead4Ffm6mizKKb6QyR78F+j4eY=\n github.com/appleboy/gofight v2.0.0+incompatible/go.mod h1:H/tvof1oZHnZdlBd+AeODZGkk1C+D2na0NXr0iXuZHA=\n@@ -14,15 +49,25 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU\n github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=\n github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY=\n github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=\n+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\n github.com/chris-ramon/douceur v0.2.0 h1:IDMEdxlEUUBYBKE4z/mJnFyVXox+MjuEVDJNN27glkU=\n github.com/chris-ramon/douceur v0.2.0/go.mod h1:wDW5xjJdeoMm1mRt4sD4c/LbF/mWdEpRXQKjTR8nIBE=\n+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=\n+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=\n+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=\n+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\n+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\n github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=\n github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=\n github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\n github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\n github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\n github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=\n github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=\n+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\n+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\n+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\n+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\n github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=\n github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=\n github.com/gin-contrib/cors v1.3.1 h1:doAsuITavI4IOcd0Y19U4B+O0dNWihRyX//nn4sEmgA=\n@@ -37,6 +82,9 @@ github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmC\n github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=\n github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=\n github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=\n+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=\n+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=\n+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=\n github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=\n github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=\n github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=\n@@ -54,12 +102,58 @@ github.com/gofrs/uuid v1.2.0 h1:coDhrjgyJaglxSjxuJdqQSSdUpG3w6p1OwN2od6frBU=\n github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=\n github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84=\n github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=\n+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\n+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\n+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\n+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\n+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\n+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\n+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=\n+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\n+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\n+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\n+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=\n+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\n github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\n github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\n github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=\n github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\n+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\n+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=\n+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\n+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\n+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\n+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\n+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\n+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=\n+github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=\n+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\n github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=\n+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\n+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\n+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\n+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\n+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\n+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=\n+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\n+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=\n+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=\n+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\n+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\n+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=\n+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=\n+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=\n github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=\n github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=\n github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=\n@@ -75,6 +169,9 @@ github.com/gorilla/sessions v1.1.3 h1:uXoZdcdA5XdXF3QzuSlheVRUvjl+1rKY7zBXL68L9R\n github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=\n github.com/guregu/dynamo v1.9.1 h1:d4j31Dp4hbf3pFDv0LCz9g/TInTaitxlMvXuOaF1MPg=\n github.com/guregu/dynamo v1.9.1/go.mod h1:nN6eZeNSiD92T5IVTmEhO6pRZblJZ8cQ+0e0dVFExjc=\n+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\n+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\n+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=\n github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4=\n github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=\n github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=\n@@ -86,7 +183,10 @@ github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhB\n github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\n github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=\n github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\n+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=\n+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=\n github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nVr8KZVXJSS97Jo8pJ0jgq29P6H7dG0oplUA86MQw=\n+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=\n github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=\n github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=\n github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\n@@ -109,6 +209,8 @@ github.com/markbates/going v1.0.0 h1:DQw0ZP7NbNlFGcKbcE/IVSOAFzScxRtLpd0rLMzLhq0\n github.com/markbates/going v1.0.0/go.mod h1:I6mnB4BPnEeqo85ynXIx1ZFLLbtiLHNXVgWeFO9OGOA=\n github.com/markbates/goth v1.64.2 h1:HDFwyuB6/ATU1USTvd/Rb3C9XE0VAxeuciSz+aUZHHA=\n github.com/markbates/goth v1.64.2/go.mod h1:hSFJFfH56BfFCX4+hBIxyd3o5VzuH5rNwKVRsFr/JPk=\n+github.com/markbates/goth v1.67.1 h1:gU5B0pzHVyhnJPwGynfFnkfvaQ39C1Sy+ewdl+bhAOw=\n+github.com/markbates/goth v1.67.1/go.mod h1:EyLFHGU5ySr2GXRDyJH5nu2dA7parbC8QwIYW/rGcWg=\n github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=\n github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=\n github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=\n@@ -138,7 +240,9 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE\n github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=\n github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\n github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\n+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\n github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=\n+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=\n github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=\n github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=\n github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\n@@ -168,33 +272,273 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw\n github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=\n github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8=\n github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=\n+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=\n+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=\n+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\n+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\n+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\n golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\n+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=\n golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=\n+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\n+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\n+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\n+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=\n+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=\n+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=\n+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\n+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\n+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\n+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=\n+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=\n+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=\n+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=\n+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\n+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\n+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\n+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=\n+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\n+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\n+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=\n+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=\n+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=\n+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=\n+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\n+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\n+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\n+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\n+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=\n+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=\n golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200927032502-5d4f70055728/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=\n+golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n golang.org/x/oauth2 v0.0.0-20180620175406-ef147856a6dd h1:QQhib242ErYDSMitlBm8V7wYCm/1a25hV8qMadIKLPA=\n golang.org/x/oauth2 v0.0.0-20180620175406-ef147856a6dd/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\n+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\n+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc=\n+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\n+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\n golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\n golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\n+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=\n golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadLwykBIzs5q8Ez2SbHyc=\n+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\n golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\n+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\n golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=\n golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=\n golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\n+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\n+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\n+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\n golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\n+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\n+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\n+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\n+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\n+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\n+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\n+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\n+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\n+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\n+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\n+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\n+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\n+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\n+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=\n+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\n+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\n+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\n+golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=\n+golang.org/x/tools v0.0.0-20200929161345-d7fc70abf50f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=\n+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=\n+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=\n+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=\n+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\n+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\n+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\n+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\n+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\n+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\n+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\n+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=\n+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=\n+google.golang.org/api v0.32.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=\n+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\n+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\n+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\n+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=\n+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\n google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=\n google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\n+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\n+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\n+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\n+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=\n+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=\n+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=\n+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=\n+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=\n+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200929141702-51c3e5b607fe/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\n+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=\n+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=\n+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\n+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\n+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\n+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\n+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\n+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=\n+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=\n+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\n+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\n+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\n+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\n+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\n+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\n+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\n+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\n+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=\n+google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=\n+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=\n gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\n gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=\n gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\n+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=\n gopkg.in/gin-gonic/gin.v1 v1.3.0 h1:DjAu49rN1YttQsOkVCPlAO3INcZNFT0IKsNVMk5MRT4=\n gopkg.in/gin-gonic/gin.v1 v1.3.0/go.mod h1:Eljh74A/zAvUOQ835v6ySeZ+5gQG6tKjbZTaZ9iWU3A=\n gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=\n@@ -204,3 +548,13 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=\n gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\n gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=\n gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=\n+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\n+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\n+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=\n+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=\n+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=" + } + ] +} diff --git a/apigh/2023-04-19/node_comments b/apigh/2023-04-19/node_comments new file mode 100644 index 00000000..b4409910 --- /dev/null +++ b/apigh/2023-04-19/node_comments @@ -0,0 +1,118 @@ +{ + "id": 2410546, + "node_id": "MDEwOlJlcG9zaXRvcnkyNDEwNTQ2", + "name": "node-comments", + "full_name": "pvorb/node-comments", + "private": false, + "owner": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/pvorb/node-comments", + "description": "providing commenting functionality with the help of mongodb and node.js", + "fork": false, + "url": "https://api.github.com/repos/pvorb/node-comments", + "forks_url": "https://api.github.com/repos/pvorb/node-comments/forks", + "keys_url": "https://api.github.com/repos/pvorb/node-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pvorb/node-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pvorb/node-comments/teams", + "hooks_url": "https://api.github.com/repos/pvorb/node-comments/hooks", + "issue_events_url": "https://api.github.com/repos/pvorb/node-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/pvorb/node-comments/events", + "assignees_url": "https://api.github.com/repos/pvorb/node-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/pvorb/node-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/pvorb/node-comments/tags", + "blobs_url": "https://api.github.com/repos/pvorb/node-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pvorb/node-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pvorb/node-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pvorb/node-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pvorb/node-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pvorb/node-comments/languages", + "stargazers_url": "https://api.github.com/repos/pvorb/node-comments/stargazers", + "contributors_url": "https://api.github.com/repos/pvorb/node-comments/contributors", + "subscribers_url": "https://api.github.com/repos/pvorb/node-comments/subscribers", + "subscription_url": "https://api.github.com/repos/pvorb/node-comments/subscription", + "commits_url": "https://api.github.com/repos/pvorb/node-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pvorb/node-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pvorb/node-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pvorb/node-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pvorb/node-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/pvorb/node-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pvorb/node-comments/merges", + "archive_url": "https://api.github.com/repos/pvorb/node-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pvorb/node-comments/downloads", + "issues_url": "https://api.github.com/repos/pvorb/node-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/pvorb/node-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pvorb/node-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pvorb/node-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pvorb/node-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/pvorb/node-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/pvorb/node-comments/deployments", + "created_at": "2011-09-18T17:35:12Z", + "updated_at": "2023-01-07T03:40:48Z", + "pushed_at": "2012-08-08T01:03:43Z", + "git_url": "git://github.com/pvorb/node-comments.git", + "ssh_url": "git@github.com:pvorb/node-comments.git", + "clone_url": "https://github.com/pvorb/node-comments.git", + "svn_url": "https://github.com/pvorb/node-comments", + "homepage": "https://npmjs.org/package/Comments", + "size": 337, + "stargazers_count": 16, + "watchers_count": 16, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 1, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 1, + "open_issues": 0, + "watchers": 16, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 1, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-19/node_comments.commit b/apigh/2023-04-19/node_comments.commit new file mode 100644 index 00000000..2d057c20 --- /dev/null +++ b/apigh/2023-04-19/node_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "341976b10140ea558a8666fd1e28e68f4fb11916", + "node_id": "MDY6Q29tbWl0MjQxMDU0NjozNDE5NzZiMTAxNDBlYTU1OGE4NjY2ZmQxZTI4ZTY4ZjRmYjExOTE2", + "commit": { + "author": { + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "date": "2012-08-08T01:03:43Z" + }, + "committer": { + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "date": "2012-08-08T01:03:43Z" + }, + "message": "Add link to MongoDB", + "tree": { + "sha": "aa2c9fbe5e8200d54d49b5c28981c93f4b426b3b", + "url": "https://api.github.com/repos/pvorb/node-comments/git/trees/aa2c9fbe5e8200d54d49b5c28981c93f4b426b3b" + }, + "url": "https://api.github.com/repos/pvorb/node-comments/git/commits/341976b10140ea558a8666fd1e28e68f4fb11916", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/pvorb/node-comments/commits/341976b10140ea558a8666fd1e28e68f4fb11916", + "html_url": "https://github.com/pvorb/node-comments/commit/341976b10140ea558a8666fd1e28e68f4fb11916", + "comments_url": "https://api.github.com/repos/pvorb/node-comments/commits/341976b10140ea558a8666fd1e28e68f4fb11916/comments", + "author": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "bfd5d89d7ea3b4d3c8de187f4a3b13a37832eb76", + "url": "https://api.github.com/repos/pvorb/node-comments/commits/bfd5d89d7ea3b4d3c8de187f4a3b13a37832eb76", + "html_url": "https://github.com/pvorb/node-comments/commit/bfd5d89d7ea3b4d3c8de187f4a3b13a37832eb76" + } + ], + "stats": { + "total": 7, + "additions": 4, + "deletions": 3 + }, + "files": [ + { + "sha": "b57de3a752fa0553e41cdc9955b8a382f3e85fb9", + "filename": "README.md", + "status": "modified", + "additions": 4, + "deletions": 3, + "changes": 7, + "blob_url": "https://github.com/pvorb/node-comments/blob/341976b10140ea558a8666fd1e28e68f4fb11916/README.md", + "raw_url": "https://github.com/pvorb/node-comments/raw/341976b10140ea558a8666fd1e28e68f4fb11916/README.md", + "contents_url": "https://api.github.com/repos/pvorb/node-comments/contents/README.md?ref=341976b10140ea558a8666fd1e28e68f4fb11916", + "patch": "@@ -165,15 +165,16 @@ HTTP status code to the given `ServerResponse` object.\n \n ## Installation\n \n-You need a running MongoDB before you can use **Comments**. On Debian\n+You need a running [MongoDB](http://www.mongodb.org/downloads) before you can\n+use **Comments**. On Debian\n \n-```bash\n+``` bash\n apt-get install mongodb\n ```\n \n Then install **Comments** with npm.\n \n-```bash\n+``` bash\n npm install -g Comments\n ```\n " + } + ] +} diff --git a/apigh/2023-04-19/platon b/apigh/2023-04-19/platon new file mode 100644 index 00000000..c9cbdb81 --- /dev/null +++ b/apigh/2023-04-19/platon @@ -0,0 +1,122 @@ +{ + "id": 38786195, + "node_id": "MDEwOlJlcG9zaXRvcnkzODc4NjE5NQ==", + "name": "platon", + "full_name": "pvorb/platon", + "private": false, + "owner": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/pvorb/platon", + "description": "Provides comments for your website(s)", + "fork": false, + "url": "https://api.github.com/repos/pvorb/platon", + "forks_url": "https://api.github.com/repos/pvorb/platon/forks", + "keys_url": "https://api.github.com/repos/pvorb/platon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pvorb/platon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pvorb/platon/teams", + "hooks_url": "https://api.github.com/repos/pvorb/platon/hooks", + "issue_events_url": "https://api.github.com/repos/pvorb/platon/issues/events{/number}", + "events_url": "https://api.github.com/repos/pvorb/platon/events", + "assignees_url": "https://api.github.com/repos/pvorb/platon/assignees{/user}", + "branches_url": "https://api.github.com/repos/pvorb/platon/branches{/branch}", + "tags_url": "https://api.github.com/repos/pvorb/platon/tags", + "blobs_url": "https://api.github.com/repos/pvorb/platon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pvorb/platon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pvorb/platon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pvorb/platon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pvorb/platon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pvorb/platon/languages", + "stargazers_url": "https://api.github.com/repos/pvorb/platon/stargazers", + "contributors_url": "https://api.github.com/repos/pvorb/platon/contributors", + "subscribers_url": "https://api.github.com/repos/pvorb/platon/subscribers", + "subscription_url": "https://api.github.com/repos/pvorb/platon/subscription", + "commits_url": "https://api.github.com/repos/pvorb/platon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pvorb/platon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pvorb/platon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pvorb/platon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/{+path}", + "compare_url": "https://api.github.com/repos/pvorb/platon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pvorb/platon/merges", + "archive_url": "https://api.github.com/repos/pvorb/platon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pvorb/platon/downloads", + "issues_url": "https://api.github.com/repos/pvorb/platon/issues{/number}", + "pulls_url": "https://api.github.com/repos/pvorb/platon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pvorb/platon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pvorb/platon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pvorb/platon/labels{/name}", + "releases_url": "https://api.github.com/repos/pvorb/platon/releases{/id}", + "deployments_url": "https://api.github.com/repos/pvorb/platon/deployments", + "created_at": "2015-07-08T23:52:38Z", + "updated_at": "2018-06-26T23:19:02Z", + "pushed_at": "2018-07-10T20:41:36Z", + "git_url": "git://github.com/pvorb/platon.git", + "ssh_url": "git@github.com:pvorb/platon.git", + "clone_url": "https://github.com/pvorb/platon.git", + "svn_url": "https://github.com/pvorb/platon", + "homepage": "", + "size": 673, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 1, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting", + "h2-database", + "microservice", + "rest-api", + "spring-boot" + ], + "visibility": "public", + "forks": 1, + "open_issues": 3, + "watchers": 2, + "default_branch": "develop", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 1, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-19/platon.commit b/apigh/2023-04-19/platon.commit new file mode 100644 index 00000000..5cb7456c --- /dev/null +++ b/apigh/2023-04-19/platon.commit @@ -0,0 +1,559 @@ +{ + "sha": "d75b60f3e5fc292268724b82c533c008b9822467", + "node_id": "MDY6Q29tbWl0Mzg3ODYxOTU6ZDc1YjYwZjNlNWZjMjkyMjY4NzI0YjgyYzUzM2MwMDhiOTgyMjQ2Nw==", + "commit": { + "author": { + "name": "Paul Vorbach", + "email": "paul@vorba.ch", + "date": "2016-02-16T23:53:05Z" + }, + "committer": { + "name": "Paul Vorbach", + "email": "paul@vorba.ch", + "date": "2016-02-16T23:53:05Z" + }, + "message": "Merge branch 'release/0.1.0'", + "tree": { + "sha": "c496a57fbeb2df428905a2d6b40688d69d0b1a1c", + "url": "https://api.github.com/repos/pvorb/platon/git/trees/c496a57fbeb2df428905a2d6b40688d69d0b1a1c" + }, + "url": "https://api.github.com/repos/pvorb/platon/git/commits/d75b60f3e5fc292268724b82c533c008b9822467", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/pvorb/platon/commits/d75b60f3e5fc292268724b82c533c008b9822467", + "html_url": "https://github.com/pvorb/platon/commit/d75b60f3e5fc292268724b82c533c008b9822467", + "comments_url": "https://api.github.com/repos/pvorb/platon/commits/d75b60f3e5fc292268724b82c533c008b9822467/comments", + "author": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "5c5470aec46c06f4d82366be38650dfe28380d5a", + "url": "https://api.github.com/repos/pvorb/platon/commits/5c5470aec46c06f4d82366be38650dfe28380d5a", + "html_url": "https://github.com/pvorb/platon/commit/5c5470aec46c06f4d82366be38650dfe28380d5a" + }, + { + "sha": "24ff64377224a2c5ee1b4f6431db54880463d276", + "url": "https://api.github.com/repos/pvorb/platon/commits/24ff64377224a2c5ee1b4f6431db54880463d276", + "html_url": "https://github.com/pvorb/platon/commit/24ff64377224a2c5ee1b4f6431db54880463d276" + } + ], + "stats": { + "total": 2395, + "additions": 2395, + "deletions": 0 + }, + "files": [ + { + "sha": "5b0c19ee6c5bbee3d53b58cc16c73bc3141bd96a", + "filename": ".gitignore", + "status": "added", + "additions": 6, + "deletions": 0, + "changes": 6, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/.gitignore", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/.gitignore", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/.gitignore?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,6 @@\n+/target/\n+/.idea/\n+/*.iml\n+/*.db\n+\n+/src/main/resources/bower_components/" + }, + { + "sha": "9d80c4a8c0389b8c9069bfb0170f6a8476b249d0", + "filename": ".gitlab-ci.yml", + "status": "added", + "additions": 22, + "deletions": 0, + "changes": 22, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/.gitlab-ci.yml", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/.gitlab-ci.yml", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/.gitlab-ci.yml?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,22 @@\n+image: maven:3-jdk-8\n+\n+before_script:\n+ - export MAVEN_OPTS=\"-Xms256m -Xmx512m -Dmaven.repo.local=.m2/repository\"\n+\n+cache:\n+ key: \"$CI_BUILD_NAME\"\n+ untracked: true\n+\n+stages:\n+ - build\n+ - test\n+\n+compile:\n+ stage: build\n+ script:\n+ - mvn -B compile\n+\n+tests:\n+ stage: test\n+ script:\n+ - mvn -B test" + }, + { + "sha": "69d34662b9225947a0bf4bccd10b795d6f90023e", + "filename": "LICENSE", + "status": "added", + "additions": 21, + "deletions": 0, + "changes": 21, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/LICENSE", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/LICENSE", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/LICENSE?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2016 Paul Vorbach\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE." + }, + { + "sha": "e3aa3c03eed72b25f36d84fdf33672757153ec15", + "filename": "README.md", + "status": "modified", + "additions": 30, + "deletions": 0, + "changes": 30, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/README.md", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/README.md", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/README.md?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -1 +1,31 @@\n # platon\n+\n+A comment server similar to disqus and isso\n+\n+\n+## Development\n+\n+### Build\n+\n+~~~\n+mvn clean package\n+~~~\n+\n+### Run\n+\n+~~~\n+mvn spring-boot:run\n+~~~\n+\n+By default, the server will start under [localhost:8080](http://localhost:8080/).\n+\n+### Test\n+\n+~~~\n+mvn clean test\n+~~~\n+\n+\n+## License\n+\n+The MIT License (MIT)" + }, + { + "sha": "33dd56ebca4ecbcf45b946fa7fcbb6d9ecf100a3", + "filename": "pom.xml", + "status": "added", + "additions": 186, + "deletions": 0, + "changes": 186, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/pom.xml", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/pom.xml", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/pom.xml?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,186 @@\n+\n+ 4.0.0\n+\n+ de.vorb\n+ platon\n+ 0.1.0\n+ jar\n+\n+ Platon\n+ https://gitlab.com/pvorb/platon\n+ A comment server\n+\n+ \n+ scm:git:git://gitlab.com/pvorb/platon.git\n+ scm:git:ssh://git@gitlab.com:pvorb/platon.git\n+ https://gitlab.com/pvorb/platon.git\n+ \n+\n+ \n+ \n+ MIT License\n+ http://www.opensource.org/licenses/mit-license.php\n+ repo\n+ \n+ \n+\n+ \n+ \n+ pvorb\n+ Paul Vorbach\n+ paul@vorba.ch\n+ \n+ \n+\n+ \n+ \n+ 1.8\n+ 1.8\n+\n+ \n+ 18.0\n+ 3.4\n+ 2.6.1\n+ 1.1\n+ 1.2\n+ 1.4.190\n+ 3.2.1\n+\n+ \n+ 4.12\n+ 0.28\n+ \n+\n+ \n+ org.springframework.boot\n+ spring-boot-starter-parent\n+ 1.3.2.RELEASE\n+ \n+\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-web\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-tomcat\n+ \n+ \n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-undertow\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-jersey\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-tomcat\n+ \n+ \n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-data-jpa\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-mail\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-freemarker\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-devtools\n+ \n+\n+ \n+ com.google.guava\n+ guava\n+ ${guava.version}\n+ \n+ \n+ org.apache.commons\n+ commons-lang3\n+ ${commons-lang.version}\n+ \n+\n+ \n+ com.fasterxml.jackson.datatype\n+ jackson-datatype-jsr310\n+ ${jackson-jsr310.version}\n+ \n+ \n+ com.googlecode.owasp-java-html-sanitizer\n+ owasp-java-html-sanitizer\n+ ${owasp-java-html.version}\n+ \n+ \n+ org.owasp.encoder\n+ encoder\n+ ${encoder.version}\n+ \n+ \n+ com.h2database\n+ h2\n+ ${h2.version}\n+ \n+ \n+ org.flywaydb\n+ flyway-core\n+ ${flyway.version}\n+ \n+\n+ \n+ junit\n+ junit\n+ ${junit.version}\n+ test\n+ \n+ \n+ com.google.truth\n+ truth\n+ ${truth.version}\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-test\n+ test\n+ \n+ \n+\n+ \n+ \n+ \n+ org.springframework.boot\n+ spring-boot-maven-plugin\n+ \n+ \n+ org.jacoco\n+ jacoco-maven-plugin\n+ 0.7.5.201505241946\n+ \n+ \n+ \n+ prepare-agent\n+ \n+ \n+ \n+ report\n+ test\n+ \n+ report\n+ \n+ \n+ \n+ \n+ \n+ \n+\n+" + }, + { + "sha": "8c3caec9bee9644780a355a5af3cce35b938bf3b", + "filename": "src/main/java/de/vorb/platon/PlatonApp.java", + "status": "added", + "additions": 82, + "deletions": 0, + "changes": 82, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2FPlatonApp.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2FPlatonApp.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2FPlatonApp.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,82 @@\n+package de.vorb.platon;\n+\n+import de.vorb.platon.security.HmacRequestVerifier;\n+import de.vorb.platon.security.SecretKeyProvider;\n+import de.vorb.platon.util.CurrentTimeProvider;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import org.owasp.html.HtmlPolicyBuilder;\n+import org.owasp.html.PolicyFactory;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import org.springframework.beans.factory.annotation.Value;\n+import org.springframework.boot.SpringApplication;\n+import org.springframework.boot.autoconfigure.SpringBootApplication;\n+import org.springframework.context.annotation.Bean;\n+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\n+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;\n+\n+import javax.crypto.KeyGenerator;\n+import javax.crypto.SecretKey;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Base64;\n+\n+@SpringBootApplication\n+public class PlatonApp {\n+\n+ private static final Logger logger = LoggerFactory.getLogger(PlatonApp.class);\n+\n+ public static void main(String... args) {\n+ SpringApplication.run(PlatonApp.class, args);\n+ }\n+\n+ private final SecretKey secretKey;\n+\n+ public PlatonApp() throws NoSuchAlgorithmException {\n+ secretKey = KeyGenerator.getInstance(HmacRequestVerifier.HMAC_ALGORITHM.toString()).generateKey();\n+\n+ logger.info(\"Secret key: {}\", Base64.getEncoder().encodeToString(secretKey.getEncoded()));\n+ }\n+\n+ @Bean\n+ public WebMvcConfigurerAdapter staticResourceHandlerConfigurer() {\n+ return new WebMvcConfigurerAdapter() {\n+ @Override\n+ public void addResourceHandlers(ResourceHandlerRegistry registry) {\n+ registry.addResourceHandler(\"classpath:/static\");\n+ }\n+ };\n+ }\n+\n+ @Bean\n+ public SecretKeyProvider secretKeyProvider() {\n+ return () -> secretKey;\n+ }\n+\n+ @Bean\n+ public CurrentTimeProvider timeProvider() {\n+ return () -> Instant.now();\n+ }\n+\n+ private static final HtmlPolicyBuilder htmlContentPolicyBuilder = new HtmlPolicyBuilder()\n+ .allowUrlProtocols(\"http\", \"https\", \"mailto\")\n+ .allowAttributes(\"href\").onElements(\"a\")\n+ .allowAttributes(\"src\", \"width\", \"height\", \"alt\").onElements(\"img\")\n+ .allowAttributes(\"class\").onElements(\"div\", \"span\");\n+\n+ @Value(\"${platon.input.html_elements}\")\n+ private String htmlElements;\n+\n+ @Bean\n+ public InputSanitizer htmlInputSanitizer() {\n+ final String[] htmlElementList = htmlElements.split(\"\\\\s*,\\\\s*\");\n+\n+ htmlContentPolicyBuilder.allowElements(htmlElementList);\n+\n+ final PolicyFactory htmlContentPolicy = htmlContentPolicyBuilder.toFactory();\n+\n+ return htmlContentPolicy::sanitize;\n+ }\n+\n+}" + }, + { + "sha": "df4200edd9a9e249c2d8de46774098aa2ea97436", + "filename": "src/main/java/de/vorb/platon/model/Comment.java", + "status": "added", + "additions": 331, + "deletions": 0, + "changes": 331, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FComment.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FComment.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FComment.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,331 @@\n+package de.vorb.platon.model;\n+\n+\n+import de.vorb.platon.web.rest.json.ByteArraySerializer;\n+\n+import com.fasterxml.jackson.annotation.JsonIgnore;\n+import com.fasterxml.jackson.annotation.JsonValue;\n+import com.fasterxml.jackson.databind.annotation.JsonSerialize;\n+import com.google.common.base.MoreObjects;\n+import com.google.common.base.Preconditions;\n+import org.apache.commons.codec.digest.MessageDigestAlgorithms;\n+import org.apache.commons.lang3.StringUtils;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import org.springframework.data.annotation.CreatedDate;\n+import org.springframework.data.annotation.LastModifiedDate;\n+\n+import javax.persistence.Column;\n+import javax.persistence.Entity;\n+import javax.persistence.FetchType;\n+import javax.persistence.GeneratedValue;\n+import javax.persistence.GenerationType;\n+import javax.persistence.Id;\n+import javax.persistence.JoinColumn;\n+import javax.persistence.Lob;\n+import javax.persistence.ManyToOne;\n+import javax.persistence.OneToOne;\n+import javax.persistence.SequenceGenerator;\n+import javax.persistence.Table;\n+import java.nio.charset.StandardCharsets;\n+import java.security.MessageDigest;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Arrays;\n+import java.util.Objects;\n+\n+\n+@Entity\n+@Table(name = \"COMMENTS\")\n+public class Comment {\n+\n+ private static final Logger logger = LoggerFactory.getLogger(Comment.class);\n+\n+ private static final int LIMIT_AUTHOR = 128;\n+ private static final int LIMIT_URL = 256;\n+\n+ @Id\n+ @Column(name = \"ID\")\n+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = \"comment_id_seq_gen\")\n+ @SequenceGenerator(name = \"comment_id_seq_gen\", sequenceName = \"COMMENT_ID_SEQ\", allocationSize = 1)\n+ private Long id;\n+\n+ @ManyToOne(fetch = FetchType.LAZY)\n+ @JoinColumn(name = \"THREAD_ID\", nullable = false)\n+ @JsonIgnore\n+ private CommentThread thread;\n+\n+ @OneToOne(fetch = FetchType.EAGER)\n+ @JoinColumn(name = \"PARENT_ID\", nullable = true)\n+ @JsonIgnore\n+ private Comment parent;\n+\n+ @Column(name = \"CREATION_DATE\", nullable = false)\n+ @CreatedDate\n+ private Instant creationDate;\n+\n+ @Column(name = \"LAST_MODIFICATION_DATE\", nullable = false)\n+ @LastModifiedDate\n+ private Instant lastModificationDate;\n+\n+ @Column(name = \"STATUS\", nullable = false)\n+ private Status status = Status.PUBLIC;\n+\n+ @Column(name = \"TEXT\", nullable = false)\n+ @Lob\n+ private String text;\n+\n+ @Column(name = \"AUTHOR\", length = LIMIT_AUTHOR, nullable = true)\n+ private String author;\n+\n+ @Column(name = \"EMAIL_HASH\", columnDefinition = \"BINARY(16) NULL\")\n+ @JsonSerialize(using = ByteArraySerializer.class)\n+ private byte[] emailHash;\n+\n+ @Column(name = \"URL\", length = LIMIT_URL, nullable = true)\n+ private String url;\n+\n+ protected Comment() {}\n+\n+ public Long getId() {\n+ return id;\n+ }\n+\n+ public void setId(Long id) {\n+ this.id = id;\n+ }\n+\n+ public CommentThread getThread() {\n+ return thread;\n+ }\n+\n+ public void setThread(CommentThread thread) {\n+ this.thread = thread;\n+ }\n+\n+ public Comment getParent() {\n+ return parent;\n+ }\n+\n+ protected void setParent(Comment parent) {\n+ this.parent = parent;\n+ }\n+\n+ public Long getParentId() {\n+ return parent != null ? parent.getId() : null;\n+ }\n+\n+ protected void setParentId(Long parentId) {\n+ if (parentId != null) {\n+ parent = new Comment();\n+ parent.setId(parentId);\n+ } else if (parent != null) {\n+ parent = null;\n+ }\n+ }\n+\n+ public Instant getCreationDate() {\n+ return creationDate;\n+ }\n+\n+ public void setCreationDate(Instant creationDate) {\n+ this.creationDate = creationDate;\n+ }\n+\n+ public Instant getLastModificationDate() {\n+ return lastModificationDate;\n+ }\n+\n+ public void setLastModificationDate(Instant lastModificationDate) {\n+ this.lastModificationDate = lastModificationDate;\n+ }\n+\n+ public Status getStatus() {\n+ return status;\n+ }\n+\n+ protected void setStatus(Status status) {\n+ Preconditions.checkNotNull(status);\n+ this.status = status;\n+ }\n+\n+ public String getText() {\n+ return text;\n+ }\n+\n+ public void setText(String text) {\n+ Preconditions.checkNotNull(text);\n+ this.text = text;\n+ }\n+\n+ public String getAuthor() {\n+ return author;\n+ }\n+\n+ public void setAuthor(String author) {\n+ this.author = StringUtils.left(author, LIMIT_AUTHOR);\n+ }\n+\n+ public byte[] getEmailHash() {\n+ return emailHash;\n+ }\n+\n+ protected void setEmailHash(byte[] emailHash) {\n+ Preconditions.checkArgument(emailHash == null || emailHash.length == 16, \"emailHash has invalid length\");\n+ this.emailHash = emailHash;\n+ }\n+\n+ protected void setEmail(String email) {\n+ if (email == null) {\n+ this.emailHash = null;\n+ return;\n+ }\n+\n+ final byte[] stringBytes = email.getBytes(StandardCharsets.UTF_8);\n+ try {\n+ emailHash = MessageDigest.getInstance(MessageDigestAlgorithms.MD5).digest(stringBytes);\n+ } catch (NoSuchAlgorithmException e) {\n+ logger.error(\"No implementation of MessageDigest algorithm MD5 available on this platform\");\n+ }\n+ }\n+\n+ public String getUrl() {\n+ return url;\n+ }\n+\n+ public void setUrl(String url) {\n+ this.url = StringUtils.left(url, LIMIT_URL);\n+ }\n+\n+ @Override\n+ public boolean equals(Object o) {\n+ if (this == o) return true;\n+ if (o == null || getClass() != o.getClass()) return false;\n+ Comment comment = (Comment) o;\n+ return Objects.equals(id, comment.id) &&\n+ Objects.equals(thread, comment.thread) &&\n+ Objects.equals(parent, comment.parent) &&\n+ Objects.equals(status, comment.status) &&\n+ Objects.equals(text, comment.text) &&\n+ Objects.equals(author, comment.author) &&\n+ Arrays.equals(emailHash, comment.emailHash) &&\n+ Objects.equals(url, comment.url);\n+ }\n+\n+ @Override\n+ public int hashCode() {\n+ return Objects.hash(id, thread, parent, text, author, url) * 31 + Arrays.hashCode(emailHash);\n+ }\n+\n+ @Override\n+ public String toString() {\n+ return MoreObjects.toStringHelper(this)\n+ .omitNullValues()\n+ .add(\"id\", id)\n+ .add(\"thread\", thread)\n+ .add(\"text\", text != null && text.length() > 1024\n+ ? StringUtils.left(text, 1021) + \"...\"\n+ : text)\n+ .add(\"author\", author)\n+ .toString();\n+ }\n+\n+ public enum Status {\n+ DELETED(0),\n+ PUBLIC(1),\n+ AWAITING_MODERATION(2);\n+\n+ private final int value;\n+\n+ Status(int intValue) {\n+ value = (byte) intValue;\n+ }\n+\n+ @JsonValue\n+ public int getValue() {\n+ return value;\n+ }\n+\n+ public static Status fromValue(int value) {\n+ for (Status status : Status.values()) {\n+ if (status.value == value) {\n+ return status;\n+ }\n+ }\n+\n+ throw new IllegalArgumentException(\"Unknown status\");\n+ }\n+ }\n+\n+ public static Builder builder() {\n+ return new Builder();\n+ }\n+\n+ public static class Builder {\n+\n+ private final Comment comment = new Comment();\n+\n+ private Builder() {}\n+\n+ public Builder id(Long id) {\n+ comment.setId(id);\n+ return this;\n+ }\n+\n+ public Builder thread(CommentThread thread) {\n+ comment.setThread(thread);\n+ return this;\n+ }\n+\n+ public Builder parent(Comment parentComment) {\n+ comment.setParent(parentComment);\n+ return this;\n+ }\n+\n+ public Builder parentId(Long parentId) {\n+ comment.setParentId(parentId);\n+ return this;\n+ }\n+\n+ public Builder creationDate(Instant creationDate) {\n+ comment.setCreationDate(creationDate);\n+ return this;\n+ }\n+\n+ public Builder modificationDate(Instant modificationDate) {\n+ comment.setLastModificationDate(modificationDate);\n+ return this;\n+ }\n+\n+ public Builder text(String text) {\n+ comment.setText(text);\n+ return this;\n+ }\n+\n+ public Builder author(String author) {\n+ comment.setAuthor(author);\n+ return this;\n+ }\n+\n+ public Builder emailHash(byte[] emailHash) {\n+ comment.setEmailHash(emailHash);\n+ return this;\n+ }\n+\n+ public Builder email(String email) {\n+ comment.setEmail(email);\n+ return this;\n+ }\n+\n+ public Builder url(String url) {\n+ comment.setUrl(url);\n+ return this;\n+ }\n+\n+ public Comment build() {\n+ return comment;\n+ }\n+\n+ }\n+\n+}" + }, + { + "sha": "8824c6101f3f0480dde34537c47cc5593499b9bf", + "filename": "src/main/java/de/vorb/platon/model/CommentThread.java", + "status": "added", + "additions": 139, + "deletions": 0, + "changes": 139, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThread.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThread.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThread.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,139 @@\n+package de.vorb.platon.model;\n+\n+import com.google.common.base.MoreObjects;\n+import com.google.common.collect.Lists;\n+import org.apache.commons.lang3.StringUtils;\n+\n+import javax.persistence.Column;\n+import javax.persistence.Entity;\n+import javax.persistence.FetchType;\n+import javax.persistence.GeneratedValue;\n+import javax.persistence.GenerationType;\n+import javax.persistence.Id;\n+import javax.persistence.NamedAttributeNode;\n+import javax.persistence.NamedEntityGraph;\n+import javax.persistence.OneToMany;\n+import javax.persistence.SequenceGenerator;\n+import javax.persistence.Table;\n+import java.util.List;\n+import java.util.Objects;\n+\n+@Entity\n+@Table(name = \"THREADS\")\n+@NamedEntityGraph(name = \"CommentThread.detail\", attributeNodes = @NamedAttributeNode(\"comments\"))\n+public class CommentThread {\n+\n+ private static final int LIMIT_URL = 256;\n+ private static final int LIMIT_TITLE = 512;\n+\n+ @Id\n+ @Column(name = \"ID\")\n+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = \"thread_id_seq_gen\")\n+ @SequenceGenerator(name = \"thread_id_seq_gen\", sequenceName = \"THREAD_ID_SEQ\", allocationSize = 1)\n+ private Long id;\n+\n+ @Column(name = \"URL\", length = LIMIT_URL, nullable = false)\n+ private String url;\n+\n+ @Column(name = \"TITLE\", length = LIMIT_TITLE, nullable = true)\n+ private String title;\n+\n+ @OneToMany(mappedBy = \"thread\", fetch = FetchType.LAZY)\n+ private List comments;\n+\n+\n+ protected CommentThread() {}\n+\n+\n+ public Long getId() {\n+ return id;\n+ }\n+\n+ protected void setId(Long id) {\n+ this.id = id;\n+ }\n+\n+ public String getUrl() {\n+ return url;\n+ }\n+\n+ protected void setUrl(String url) {\n+ this.url = StringUtils.left(url, LIMIT_URL);\n+ }\n+\n+ public String getTitle() {\n+ return title;\n+ }\n+\n+ protected void setTitle(String title) {\n+ this.title = StringUtils.left(title, LIMIT_TITLE);\n+ }\n+\n+ public List getComments() {\n+ return this.comments;\n+ }\n+\n+ @Override\n+ public boolean equals(Object o) {\n+ if (this == o) return true;\n+ if (o == null || getClass() != o.getClass()) return false;\n+ CommentThread that = (CommentThread) o;\n+ return Objects.equals(id, that.id) &&\n+ Objects.equals(url, that.url) &&\n+ Objects.equals(title, that.title);\n+ }\n+\n+ public boolean equalsById(CommentThread commentThread) {\n+ if (this == commentThread) return true;\n+ if (commentThread == null || commentThread.id == null || id == null) return false;\n+ return Objects.equals(id, commentThread.id);\n+ }\n+\n+ @Override\n+ public int hashCode() {\n+ return Objects.hash(id, url, title);\n+ }\n+\n+ @Override\n+ public String toString() {\n+ return MoreObjects.toStringHelper(this)\n+ .omitNullValues()\n+ .add(\"id\", id)\n+ .add(\"url\", url)\n+ .toString();\n+ }\n+\n+ public static Builder builder() {\n+ return new Builder();\n+ }\n+\n+ public static class Builder {\n+\n+ private final CommentThread commentThread = new CommentThread();\n+\n+ private Builder() {\n+ commentThread.comments = Lists.newArrayList();\n+ }\n+\n+ public Builder id(Long id) {\n+ commentThread.setId(id);\n+ return this;\n+ }\n+\n+ public Builder url(String url) {\n+ commentThread.setUrl(url);\n+ return this;\n+ }\n+\n+ public Builder title(String title) {\n+ commentThread.setTitle(title);\n+ return this;\n+ }\n+\n+ public CommentThread build() {\n+ return commentThread;\n+ }\n+\n+ }\n+\n+}" + }, + { + "sha": "70df57af486e921ab5de83f33c12fdbd1ad5989d", + "filename": "src/main/java/de/vorb/platon/persistence/CommentRepository.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentRepository.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentRepository.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentRepository.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+\n+import org.springframework.data.jpa.repository.Modifying;\n+import org.springframework.data.jpa.repository.Query;\n+import org.springframework.data.repository.PagingAndSortingRepository;\n+import org.springframework.data.repository.query.Param;\n+import org.springframework.stereotype.Repository;\n+\n+import java.util.List;\n+\n+@Repository\n+public interface CommentRepository extends PagingAndSortingRepository {\n+\n+ @Query(\"select c from Comment c where c.thread = :thread and c.status > 0 order by c.creationDate asc\")\n+ List findByThread(@Param(\"thread\") CommentThread thread);\n+\n+ @Modifying\n+ @Query(\"update Comment c set c.status = :status where c.id = :commentId\")\n+ void setStatus(@Param(\"commentId\") Long commentId, @Param(\"status\") Comment.Status status);\n+\n+}" + }, + { + "sha": "85a95e74d4e5336835a30d50762d1a667f9d760f", + "filename": "src/main/java/de/vorb/platon/persistence/CommentStatusConverter.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverter.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverter.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverter.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.Comment;\n+\n+import org.springframework.stereotype.Component;\n+\n+import javax.persistence.AttributeConverter;\n+import javax.persistence.Converter;\n+\n+@Component\n+@Converter(autoApply = true)\n+public class CommentStatusConverter implements AttributeConverter {\n+\n+ @Override\n+ public Integer convertToDatabaseColumn(Comment.Status attribute) {\n+ return attribute.getValue();\n+ }\n+\n+ @Override\n+ public Comment.Status convertToEntityAttribute(Integer dbData) {\n+ return Comment.Status.fromValue(dbData);\n+ }\n+\n+}" + }, + { + "sha": "0885b3b5539583c2053af75ca914b07a36c0b89a", + "filename": "src/main/java/de/vorb/platon/persistence/CommentThreadRepository.java", + "status": "added", + "additions": 17, + "deletions": 0, + "changes": 17, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentThreadRepository.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentThreadRepository.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentThreadRepository.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,17 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.CommentThread;\n+\n+import org.springframework.data.jpa.repository.EntityGraph;\n+import org.springframework.data.repository.PagingAndSortingRepository;\n+import org.springframework.stereotype.Repository;\n+import org.springframework.transaction.annotation.Transactional;\n+\n+@Repository\n+public interface CommentThreadRepository extends PagingAndSortingRepository {\n+\n+ @Transactional(readOnly = true)\n+ @EntityGraph(value = \"CommentThread.detail\", type = EntityGraph.EntityGraphType.LOAD)\n+ CommentThread getByUrl(String url);\n+\n+}" + }, + { + "sha": "9f4a6cf016fd552e60b4971d9f6ea87c7dfde7d8", + "filename": "src/main/java/de/vorb/platon/persistence/Jsr310InstantTimestampConverter.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverter.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverter.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverter.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.persistence;\n+\n+import org.springframework.stereotype.Component;\n+\n+import javax.persistence.AttributeConverter;\n+import javax.persistence.Converter;\n+import java.sql.Timestamp;\n+import java.time.Instant;\n+\n+@Component\n+@Converter(autoApply = true)\n+public class Jsr310InstantTimestampConverter implements AttributeConverter {\n+\n+ @Override\n+ public Timestamp convertToDatabaseColumn(Instant attribute) {\n+ return attribute == null ? null : Timestamp.from(attribute);\n+ }\n+\n+ @Override\n+ public Instant convertToEntityAttribute(Timestamp dbData) {\n+ return dbData == null ? null : dbData.toInstant();\n+ }\n+\n+}" + }, + { + "sha": "821215c29e0dade97d256f7f8691290130407d6c", + "filename": "src/main/java/de/vorb/platon/security/HmacRequestVerifier.java", + "status": "added", + "additions": 66, + "deletions": 0, + "changes": 66, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifier.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifier.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifier.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,66 @@\n+package de.vorb.platon.security;\n+\n+import de.vorb.platon.util.CurrentTimeProvider;\n+\n+import org.apache.commons.codec.digest.HmacAlgorithms;\n+import org.springframework.stereotype.Service;\n+\n+import javax.crypto.Mac;\n+import javax.crypto.SecretKey;\n+import javax.inject.Inject;\n+import java.nio.charset.StandardCharsets;\n+import java.security.InvalidKeyException;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Arrays;\n+\n+@Service\n+public class HmacRequestVerifier implements RequestVerifier {\n+\n+ public static final HmacAlgorithms HMAC_ALGORITHM = HmacAlgorithms.HMAC_SHA_256;\n+\n+ private final CurrentTimeProvider currentTimeProvider;\n+\n+ private final Mac mac;\n+\n+ @Inject\n+ public HmacRequestVerifier(SecretKeyProvider keyProvider, CurrentTimeProvider currentTimeProvider) {\n+\n+ this.currentTimeProvider = currentTimeProvider;\n+\n+ final SecretKey key = keyProvider.getSecretKey();\n+\n+ try {\n+ mac = Mac.getInstance(HMAC_ALGORITHM.toString());\n+ mac.init(key);\n+ } catch (NoSuchAlgorithmException e) {\n+ throw new SecurityException(\n+ String.format(\"Could not find an implementation of the %s algorithm\", HMAC_ALGORITHM), e);\n+ } catch (InvalidKeyException e) {\n+ throw new SecurityException(\"The supplied key provider returned an invalid key\", e);\n+ }\n+ }\n+\n+ @Override\n+ public byte[] getSignatureToken(String identifier, Instant expirationDate) {\n+ final byte[] signatureSource = getSignatureSource(identifier, expirationDate);\n+\n+ return mac.doFinal(signatureSource);\n+ }\n+\n+ private byte[] getSignatureSource(String identifier, Instant expirationDate) {\n+ return String.format(\"%s|%s\", identifier, expirationDate).getBytes(StandardCharsets.UTF_8);\n+ }\n+\n+ @Override\n+ public boolean isRequestValid(String identifier, Instant expirationDate, byte[] signatureToken) {\n+ if (currentTimeProvider.get().isAfter(expirationDate)) {\n+ return false;\n+ }\n+\n+ final byte[] referenceSignature = getSignatureToken(identifier, expirationDate);\n+\n+ return Arrays.equals(signatureToken, referenceSignature);\n+ }\n+\n+}" + }, + { + "sha": "b1bd44c1ed04a205e992cdcbdccd3f3b9ed92016", + "filename": "src/main/java/de/vorb/platon/security/RequestVerifier.java", + "status": "added", + "additions": 11, + "deletions": 0, + "changes": 11, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FRequestVerifier.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FRequestVerifier.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FRequestVerifier.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,11 @@\n+package de.vorb.platon.security;\n+\n+import java.time.Instant;\n+\n+public interface RequestVerifier {\n+\n+ byte[] getSignatureToken(String identifier, Instant expirationDate);\n+\n+ boolean isRequestValid(String identifier, Instant expirationDate, byte[] signatureToken);\n+\n+}" + }, + { + "sha": "9cc6eff787633b51b15fd654c4c38a1c9958a007", + "filename": "src/main/java/de/vorb/platon/security/SecretKeyProvider.java", + "status": "added", + "additions": 9, + "deletions": 0, + "changes": 9, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecretKeyProvider.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecretKeyProvider.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecretKeyProvider.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,9 @@\n+package de.vorb.platon.security;\n+\n+import javax.crypto.SecretKey;\n+\n+public interface SecretKeyProvider {\n+\n+ SecretKey getSecretKey();\n+\n+}" + }, + { + "sha": "3a4e9f16a5fc859a49503fc18d417c2a7729092d", + "filename": "src/main/java/de/vorb/platon/security/SecurityException.java", + "status": "added", + "additions": 9, + "deletions": 0, + "changes": 9, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecurityException.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecurityException.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecurityException.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,9 @@\n+package de.vorb.platon.security;\n+\n+public class SecurityException extends RuntimeException {\n+\n+ public SecurityException(String message, Throwable cause) {\n+ super(message, cause);\n+ }\n+\n+}" + }, + { + "sha": "ec276d4a511f915ef877e198a25bc560f70d3f82", + "filename": "src/main/java/de/vorb/platon/util/CurrentTimeProvider.java", + "status": "added", + "additions": 7, + "deletions": 0, + "changes": 7, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FCurrentTimeProvider.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FCurrentTimeProvider.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FCurrentTimeProvider.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,7 @@\n+package de.vorb.platon.util;\n+\n+import java.time.Instant;\n+import java.util.function.Supplier;\n+\n+@FunctionalInterface\n+public interface CurrentTimeProvider extends Supplier {}" + }, + { + "sha": "c8a71e3095947514f0bc6c946cf242dbaa763566", + "filename": "src/main/java/de/vorb/platon/util/InputSanitizer.java", + "status": "added", + "additions": 8, + "deletions": 0, + "changes": 8, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FInputSanitizer.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FInputSanitizer.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FInputSanitizer.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,8 @@\n+package de.vorb.platon.util;\n+\n+@FunctionalInterface\n+public interface InputSanitizer {\n+\n+ String sanitize(String input);\n+\n+}" + }, + { + "sha": "f03ec87b4c69f52971696a5e97f4fd595758cccd", + "filename": "src/main/java/de/vorb/platon/web/mvc/IndexController.java", + "status": "added", + "additions": 15, + "deletions": 0, + "changes": 15, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Fmvc%2FIndexController.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Fmvc%2FIndexController.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Fmvc%2FIndexController.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,15 @@\n+package de.vorb.platon.web.mvc;\n+\n+import org.springframework.stereotype.Controller;\n+import org.springframework.web.bind.annotation.RequestMapping;\n+import org.springframework.web.bind.annotation.RequestMethod;\n+\n+@Controller\n+public class IndexController {\n+\n+ @RequestMapping(value = \"/\", method = RequestMethod.GET)\n+ public String getIndex() {\n+ return \"index\";\n+ }\n+\n+}" + }, + { + "sha": "b852700d3829202659f6bc378918ed6a89bf0d52", + "filename": "src/main/java/de/vorb/platon/web/rest/CommentResource.java", + "status": "added", + "additions": 271, + "deletions": 0, + "changes": 271, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResource.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResource.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResource.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,271 @@\n+package de.vorb.platon.web.rest;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+import de.vorb.platon.persistence.CommentRepository;\n+import de.vorb.platon.persistence.CommentThreadRepository;\n+import de.vorb.platon.security.RequestVerifier;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import com.google.common.base.Preconditions;\n+import org.owasp.encoder.Encode;\n+import org.owasp.html.HtmlPolicyBuilder;\n+import org.owasp.html.PolicyFactory;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import org.springframework.stereotype.Component;\n+import org.springframework.transaction.annotation.Transactional;\n+\n+import javax.inject.Inject;\n+import javax.validation.constraints.NotNull;\n+import javax.ws.rs.BadRequestException;\n+import javax.ws.rs.Consumes;\n+import javax.ws.rs.DELETE;\n+import javax.ws.rs.GET;\n+import javax.ws.rs.HeaderParam;\n+import javax.ws.rs.NotFoundException;\n+import javax.ws.rs.POST;\n+import javax.ws.rs.PUT;\n+import javax.ws.rs.Path;\n+import javax.ws.rs.PathParam;\n+import javax.ws.rs.Produces;\n+import javax.ws.rs.QueryParam;\n+import javax.ws.rs.core.MediaType;\n+import javax.ws.rs.core.Response;\n+import javax.ws.rs.core.UriBuilder;\n+import java.net.URI;\n+import java.nio.charset.StandardCharsets;\n+import java.time.Instant;\n+import java.time.format.DateTimeParseException;\n+import java.time.temporal.ChronoUnit;\n+import java.util.Base64;\n+import java.util.List;\n+\n+@Component\n+@Path(\"comments\")\n+@Consumes(MediaType.APPLICATION_JSON)\n+@Produces(MediaType.APPLICATION_JSON)\n+public class CommentResource {\n+\n+ private static final Logger logger = LoggerFactory.getLogger(CommentResource.class);\n+\n+ private static final String SIGNATURE_HEADER = \"X-Signature\";\n+\n+ private static final PolicyFactory NO_HTML_POLICY = new HtmlPolicyBuilder().toFactory();\n+\n+\n+ private final CommentThreadRepository threadRepository;\n+ private final CommentRepository commentRepository;\n+\n+ private final RequestVerifier requestVerifier;\n+ private final InputSanitizer inputSanitizer;\n+\n+\n+ @Inject\n+ public CommentResource(CommentThreadRepository threadRepository, CommentRepository commentRepository,\n+ RequestVerifier requestVerifier, InputSanitizer inputSanitizer) {\n+\n+ this.threadRepository = threadRepository;\n+ this.commentRepository = commentRepository;\n+\n+ this.requestVerifier = requestVerifier;\n+ this.inputSanitizer = inputSanitizer;\n+ }\n+\n+\n+ @GET\n+ @Path(\"{id}\")\n+ @Transactional(readOnly = true)\n+ public Comment getComment(\n+ @NotNull @PathParam(\"id\") Long commentId) {\n+\n+ final Comment comment = commentRepository.findOne(commentId);\n+\n+ if (comment == null || comment.getStatus() != Comment.Status.PUBLIC) {\n+ throw new NotFoundException(String.format(\"No comment found with id = %d\", commentId));\n+ } else {\n+ return comment;\n+ }\n+ }\n+\n+\n+ @GET\n+ @Transactional(readOnly = true)\n+ public List findCommentsByThreadUrl(\n+ @NotNull @QueryParam(\"threadUrl\") String threadUrl) {\n+\n+ final CommentThread thread = threadRepository.getByUrl(threadUrl);\n+ if (thread == null) {\n+ throw new NotFoundException(String.format(\"No thread found with url = '%s'\", threadUrl));\n+ } else {\n+ return commentRepository.findByThread(thread);\n+ }\n+ }\n+\n+\n+ @POST\n+ @Transactional\n+ public Response postComment(\n+ @NotNull @QueryParam(\"threadUrl\") String threadUrl,\n+ @NotNull @QueryParam(\"title\") String title,\n+ @NotNull Comment comment) {\n+\n+ if (comment.getId() != null) {\n+ throw new BadRequestException(\"Comment id is not null\");\n+ }\n+\n+ CommentThread thread = threadRepository.getByUrl(threadUrl);\n+ if (thread == null) {\n+\n+ thread =\n+ CommentThread.builder()\n+ .url(threadUrl)\n+ .title(title)\n+ .build();\n+\n+ threadRepository.save(thread);\n+\n+ logger.info(\"Created new {}\", thread);\n+ }\n+\n+ comment.setThread(thread);\n+ comment.setCreationDate(Instant.now());\n+ comment.setLastModificationDate(comment.getCreationDate());\n+\n+ assertParentBelongsToSameThread(comment);\n+\n+ sanitizeComment(comment);\n+\n+ commentRepository.save(comment);\n+\n+ logger.info(\"Posted new comment to {}\", thread);\n+\n+ final URI commentUri = getUriFromId(comment.getId());\n+\n+ final String identifier = commentUri.toString();\n+ final Instant expirationDate = comment.getCreationDate().plus(2, ChronoUnit.HOURS);\n+ final byte[] signature = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ return Response.created(commentUri)\n+ .header(SIGNATURE_HEADER, String.format(\"%s|%s|%s\", identifier, expirationDate,\n+ Base64.getEncoder().encodeToString(signature)))\n+ .entity(comment)\n+ .build();\n+ }\n+\n+ @Transactional(readOnly = true)\n+ protected void assertParentBelongsToSameThread(Comment comment) {\n+\n+ final Long parentId = comment.getParentId();\n+ if (parentId == null) {\n+ return;\n+ }\n+\n+ final Comment parentComment = commentRepository.findOne(parentId);\n+\n+ if (parentComment == null) {\n+ throw new BadRequestException(\"Parent comment does not exist\");\n+ }\n+\n+ final boolean parentBelongsToSameThread = comment.getThread().equalsById(parentComment.getThread());\n+\n+ if (!parentBelongsToSameThread) {\n+ throw new BadRequestException(\"Parent comment does not belong to same thread\");\n+ }\n+\n+ }\n+\n+\n+ @PUT\n+ @Path(\"{id}\")\n+ @Transactional(noRollbackFor = BadRequestException.class)\n+ public void updateComment(\n+ @NotNull @HeaderParam(SIGNATURE_HEADER) String signature,\n+ @NotNull @PathParam(\"id\") Long commentId,\n+ @NotNull Comment comment) {\n+\n+ if (!commentId.equals(comment.getId())) {\n+ throw new BadRequestException(\n+ String.format(\"Comment ids do not match (%d != %d)\", comment.getId(), commentId));\n+ }\n+\n+ verifyValidRequest(signature, commentId);\n+\n+ if (commentRepository.exists(commentId)) {\n+\n+ sanitizeComment(comment);\n+\n+ commentRepository.save(comment);\n+\n+ } else {\n+ throw new BadRequestException(String.format(\"Comment with id = %d does not exist\", commentId));\n+ }\n+ }\n+\n+\n+ protected void sanitizeComment(Comment comment) {\n+ if (comment.getAuthor() != null) {\n+ comment.setAuthor(NO_HTML_POLICY.sanitize(comment.getAuthor()));\n+ }\n+\n+ if (comment.getUrl() != null) {\n+ comment.setUrl(Encode.forHtmlAttribute(comment.getUrl()));\n+ }\n+\n+ final String requestText = comment.getText();\n+ final String sanitizedText = inputSanitizer.sanitize(requestText);\n+ comment.setText(sanitizedText);\n+ }\n+\n+\n+ @DELETE\n+ @Path(\"{id}\")\n+ @Transactional\n+ public void deleteComment(\n+ @NotNull @HeaderParam(SIGNATURE_HEADER) String signature,\n+ @NotNull @PathParam(\"id\") Long commentId) {\n+\n+ verifyValidRequest(signature, commentId);\n+\n+ if (commentRepository.exists(commentId)) {\n+\n+ commentRepository.setStatus(commentId, Comment.Status.DELETED);\n+ logger.info(\"Deleted comment with id = {}\", commentId);\n+\n+ } else {\n+ throw new BadRequestException(String.format(\"Comment with id = %d does not exist\", commentId));\n+ }\n+\n+ }\n+\n+ private void verifyValidRequest(String signature, Long commentId) {\n+\n+ final String[] signatureComponents = signature.split(\"\\\\|\");\n+\n+ try {\n+\n+ Preconditions.checkArgument(signatureComponents.length == 3);\n+\n+ final String identifier = signatureComponents[0];\n+ final String referenceIdentifier = getUriFromId(commentId).toString();\n+\n+ Preconditions.checkArgument(identifier.equals(referenceIdentifier));\n+\n+ final Instant expirationDate = Instant.parse(signatureComponents[1]);\n+ final byte[] signatureToken =\n+ Base64.getDecoder().decode(signatureComponents[2].getBytes(StandardCharsets.UTF_8));\n+\n+ if (!requestVerifier.isRequestValid(identifier, expirationDate, signatureToken)) {\n+ throw new BadRequestException(\"Authentication signature is invalid or has expired\");\n+ }\n+\n+ } catch (IllegalArgumentException | DateTimeParseException e) {\n+ throw new BadRequestException(\"Illegal authentication signature provided\");\n+ }\n+ }\n+\n+ private URI getUriFromId(long commentId) {\n+ return UriBuilder.fromResource(getClass()).segment(\"{id}\").build(commentId);\n+ }\n+\n+}" + }, + { + "sha": "a46c356ebd3ad4e8809876c69fda2a87ae317c63", + "filename": "src/main/java/de/vorb/platon/web/rest/ObjectMapperContextResolver.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolver.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolver.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolver.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.fasterxml.jackson.databind.ObjectMapper;\n+import com.fasterxml.jackson.databind.SerializationFeature;\n+\n+import javax.ws.rs.ext.ContextResolver;\n+import javax.ws.rs.ext.Provider;\n+\n+@Provider\n+public class ObjectMapperContextResolver implements ContextResolver {\n+\n+ private final ObjectMapper objectMapper;\n+\n+ public ObjectMapperContextResolver() {\n+ objectMapper = new ObjectMapper();\n+ objectMapper.findAndRegisterModules();\n+ objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);\n+ }\n+\n+ @Override\n+ public ObjectMapper getContext(Class type) {\n+ return objectMapper;\n+ }\n+}" + }, + { + "sha": "0bcd81a437c0924b488138473de47eeba9ce2e10", + "filename": "src/main/java/de/vorb/platon/web/rest/PoweredByResponseFilter.java", + "status": "added", + "additions": 14, + "deletions": 0, + "changes": 14, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilter.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilter.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilter.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,14 @@\n+package de.vorb.platon.web.rest;\n+\n+import javax.ws.rs.container.ContainerRequestContext;\n+import javax.ws.rs.container.ContainerResponseContext;\n+import javax.ws.rs.container.ContainerResponseFilter;\n+import java.io.IOException;\n+\n+public class PoweredByResponseFilter implements ContainerResponseFilter {\n+ @Override\n+ public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)\n+ throws IOException {\n+ responseContext.getHeaders().add(\"X-Powered-By\", \"Platon\");\n+ }\n+}" + }, + { + "sha": "123000b64a4658faca797bbd19d4a63a778702ef", + "filename": "src/main/java/de/vorb/platon/web/rest/RestResourceConfig.java", + "status": "added", + "additions": 22, + "deletions": 0, + "changes": 22, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfig.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfig.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfig.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,22 @@\n+package de.vorb.platon.web.rest;\n+\n+import org.glassfish.jersey.filter.LoggingFilter;\n+import org.glassfish.jersey.server.ResourceConfig;\n+import org.glassfish.jersey.server.spring.scope.RequestContextFilter;\n+import org.springframework.stereotype.Component;\n+\n+import javax.ws.rs.ApplicationPath;\n+\n+@Component\n+@ApplicationPath(\"/api\")\n+public class RestResourceConfig extends ResourceConfig {\n+\n+ public RestResourceConfig() {\n+ register(RequestContextFilter.class);\n+ register(PoweredByResponseFilter.class);\n+ register(CommentResource.class);\n+ register(LoggingFilter.class);\n+ register(ObjectMapperContextResolver.class);\n+ }\n+\n+}" + }, + { + "sha": "8a77e910df71d2af424ece1d1620e74be7de12bf", + "filename": "src/main/java/de/vorb/platon/web/rest/json/ByteArraySerializer.java", + "status": "added", + "additions": 18, + "deletions": 0, + "changes": 18, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializer.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializer.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializer.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,18 @@\n+package de.vorb.platon.web.rest.json;\n+\n+import com.fasterxml.jackson.core.JsonGenerator;\n+import com.fasterxml.jackson.databind.JsonSerializer;\n+import com.fasterxml.jackson.databind.SerializerProvider;\n+\n+import java.io.IOException;\n+import java.math.BigInteger;\n+\n+public class ByteArraySerializer extends JsonSerializer {\n+\n+ @Override\n+ public void serialize(byte[] bytes, JsonGenerator gen, SerializerProvider serializers) throws IOException {\n+ final BigInteger bi = new BigInteger(1, bytes);\n+ gen.writeString(String.format(\"%0\" + (bytes.length << 1) + \"x\", bi));\n+ }\n+\n+}" + }, + { + "sha": "b723a9b9cbfd3843cb821766e7289ce75586fbbf", + "filename": "src/main/resources/config/application.properties", + "status": "added", + "additions": 12, + "deletions": 0, + "changes": 12, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fconfig%2Fapplication.properties", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fconfig%2Fapplication.properties", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fresources%2Fconfig%2Fapplication.properties?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,12 @@\n+# database\n+spring.datasource.url = jdbc:h2:file:./platon\n+spring.jpa.database = H2\n+spring.jpa.generate-ddl = false\n+spring.jpa.hibernate.ddl-auto = none\n+\n+# input sanitization\n+platon.input.html_elements = h1, h2, h3, h4, h5, h6,\\\n+ br, p, hr, div, span,\\\n+ a, img, em, strong,\\\n+ ol, ul, li\\\n+ blockquote, code, pre" + }, + { + "sha": "6fa0ecc6de3548e1e3eed2893bc56c3e8376bd5b", + "filename": "src/main/resources/db/migration/V0.1.0__initial_schema.sql", + "status": "added", + "additions": 35, + "deletions": 0, + "changes": 35, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fdb%2Fmigration%2FV0.1.0__initial_schema.sql", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fdb%2Fmigration%2FV0.1.0__initial_schema.sql", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fresources%2Fdb%2Fmigration%2FV0.1.0__initial_schema.sql?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,35 @@\n+-- sequences\n+CREATE SEQUENCE thread_id_seq START WITH 1 INCREMENT BY 1 CACHE 1;\n+\n+CREATE SEQUENCE comment_id_seq START WITH 1 INCREMENT BY 1 CACHE 1;\n+\n+-- tables\n+CREATE TABLE threads (\n+ id BIGINT PRIMARY KEY,\n+ url VARCHAR(256) NOT NULL,\n+ title VARCHAR(512) NULL\n+);\n+\n+CREATE TABLE comments (\n+ id BIGINT PRIMARY KEY,\n+ thread_id BIGINT NOT NULL,\n+ parent_id BIGINT NULL,\n+ creation_date TIMESTAMP NOT NULL,\n+ last_modification_date TIMESTAMP NOT NULL,\n+ status TINYINT NOT NULL,\n+ text CLOB NOT NULL,\n+ author VARCHAR(128) NULL,\n+ email_hash BINARY(16) NULL,\n+ url VARCHAR(256) NULL,\n+ FOREIGN KEY (thread_id) REFERENCES threads (id),\n+ FOREIGN KEY (parent_id) REFERENCES comments (id)\n+);\n+\n+-- indexes\n+CREATE INDEX thread_id_idx ON threads (id);\n+CREATE INDEX thread_url_idx ON threads (url);\n+\n+CREATE INDEX comment_id_idx ON comments (id);\n+CREATE INDEX comment_thread_id_idx ON comments (thread_id);\n+CREATE INDEX comment_creation_date_idx ON comments (creation_date);\n+CREATE INDEX comment_status_idx ON comments (status);" + }, + { + "sha": "2d8d6bd7ce1e6f6f4af2ccc90a8efce3b09170e1", + "filename": "src/main/resources/templates/index.ftl", + "status": "added", + "additions": 13, + "deletions": 0, + "changes": 13, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Ftemplates%2Findex.ftl", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Ftemplates%2Findex.ftl", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fresources%2Ftemplates%2Findex.ftl?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,13 @@\n+\n+\n+\n+ \n+ Platon comment server\n+<#include \"head.ftl\" />\n+\n+\n+

      The Platon comment server

      \n+\n+

      GitHub Repository

      \n+\n+" + }, + { + "sha": "c28860949abd0d26f3f5f1ac720beee7596409f3", + "filename": "src/test/java/de/vorb/platon/model/CommentTest.java", + "status": "added", + "additions": 86, + "deletions": 0, + "changes": 86, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,86 @@\n+package de.vorb.platon.model;\n+\n+import com.google.common.truth.Truth;\n+import org.apache.commons.codec.digest.MessageDigestAlgorithms;\n+import org.junit.Test;\n+\n+import java.nio.charset.StandardCharsets;\n+import java.security.MessageDigest;\n+import java.util.Arrays;\n+import java.util.function.Supplier;\n+\n+public class CommentTest {\n+\n+ @Test\n+ public void testSetParentId() throws Exception {\n+\n+ final Comment comment = new Comment();\n+ final long parentId = 42;\n+\n+ comment.setParentId(parentId);\n+\n+ Truth.assertThat(comment.getParentId()).isEqualTo(parentId);\n+\n+ comment.setParentId(null);\n+\n+ Truth.assertThat(comment.getParent()).isNull();\n+\n+ }\n+\n+ @Test\n+ public void testSetEmail() throws Exception {\n+\n+ final Comment comment = new Comment();\n+ comment.setEmail(null);\n+\n+ Truth.assertThat(comment.getEmailHash()).isNull();\n+\n+ final String emailAddress = \"user@example.com\";\n+ comment.setEmail(emailAddress);\n+\n+ final byte[] referenceHash = MessageDigest.getInstance(MessageDigestAlgorithms.MD5)\n+ .digest(emailAddress.getBytes(StandardCharsets.UTF_8));\n+\n+ Truth.assertThat(Arrays.equals(comment.getEmailHash(), referenceHash)).isTrue();\n+\n+ }\n+\n+ @Test\n+ public void testSetEmailHash() throws Exception {\n+ new Comment().setEmailHash(new byte[16]);\n+ }\n+\n+ @Test(expected = IllegalArgumentException.class)\n+ public void testSetEmailHashWithInvalidLength() throws Exception {\n+ new Comment().setEmailHash(new byte[0]);\n+ }\n+\n+ @Test\n+ public void testEquals() throws Exception {\n+\n+ final Comment comment = new Comment();\n+ Truth.assertThat(comment).isNotEqualTo(null);\n+ Truth.assertThat(comment).isEqualTo(comment);\n+ Truth.assertThat(comment).isEqualTo(new Comment());\n+\n+ Truth.assertThat(NEW_COMMENT.get()).isEqualTo(NEW_COMMENT.get());\n+ }\n+\n+ @Test\n+ public void testHashCode() throws Exception {\n+ Truth.assertThat(NEW_COMMENT.get().hashCode()).isEqualTo(NEW_COMMENT.get().hashCode());\n+ }\n+\n+ private static final Supplier NEW_COMMENT = () -> {\n+ final Comment c = new Comment();\n+ c.setId(2L);\n+ c.setParentId(1L);\n+ c.setThread(new CommentThread());\n+ c.setText(\"Comment text\");\n+ c.setAuthor(\"User\");\n+ c.setEmail(\"user@example.com\");\n+ c.setUrl(\"http://example.com\");\n+ return c;\n+ };\n+\n+}" + }, + { + "sha": "6d142484d16dd1cf68581abf21cdc0e54b5045b4", + "filename": "src/test/java/de/vorb/platon/model/CommentThreadTest.java", + "status": "added", + "additions": 60, + "deletions": 0, + "changes": 60, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThreadTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThreadTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThreadTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,60 @@\n+package de.vorb.platon.model;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+public class CommentThreadTest {\n+\n+ @Test\n+ public void testEqualsById() throws Exception {\n+\n+ final CommentThread thread1 = CommentThread.builder().id(1L).build();\n+\n+ Truth.assertThat(thread1.equalsById(thread1)).isTrue();\n+\n+ final CommentThread thread1Copy = CommentThread.builder().id(1L).build();\n+\n+ Truth.assertThat(thread1.equalsById(thread1Copy)).isTrue();\n+ Truth.assertThat(thread1Copy.equalsById(thread1)).isTrue();\n+\n+ final CommentThread thread2 = CommentThread.builder().id(2L).build();\n+\n+ Truth.assertThat(thread1.equalsById(thread2)).isFalse();\n+ Truth.assertThat(thread2.equalsById(thread1)).isFalse();\n+\n+ final CommentThread threadWithNullId = new CommentThread();\n+\n+ Truth.assertThat(thread1.equalsById(threadWithNullId)).isFalse();\n+ Truth.assertThat(threadWithNullId.equalsById(thread1)).isFalse();\n+\n+ final CommentThread anotherThreadWithNullId = new CommentThread();\n+\n+ Truth.assertThat(threadWithNullId.equalsById(anotherThreadWithNullId)).isFalse();\n+ Truth.assertThat(anotherThreadWithNullId.equalsById(threadWithNullId)).isFalse();\n+\n+ }\n+\n+ @Test\n+ public void testHashCode() throws Exception {\n+ final String articleUrl = \"http://example.com/article\";\n+ final String articleTitle = \"Article\";\n+\n+ final CommentThread thread1 =\n+ CommentThread.builder()\n+ .id(42L)\n+ .url(articleUrl)\n+ .title(articleTitle)\n+ .build();\n+\n+ final CommentThread thread2 =\n+ CommentThread.builder()\n+ .id(42L)\n+ .url(articleUrl)\n+ .title(articleTitle)\n+ .build();\n+\n+ Truth.assertThat(thread1).isEqualTo(thread2);\n+ Truth.assertThat(thread1.hashCode()).isEqualTo(thread2.hashCode());\n+ }\n+\n+}" + }, + { + "sha": "c58d73c24831a5f9304d3f51e1b95b9598e2669b", + "filename": "src/test/java/de/vorb/platon/persistence/CommentStatusConverterTest.java", + "status": "added", + "additions": 41, + "deletions": 0, + "changes": 41, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverterTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverterTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverterTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,41 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.Comment;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+public class CommentStatusConverterTest {\n+\n+ private final CommentStatusConverter converter = new CommentStatusConverter();\n+\n+ @Test\n+ public void testConvertToDatabaseColumn() throws Exception {\n+ for (Comment.Status status : Comment.Status.values()) {\n+ Truth.assertThat(converter.convertToDatabaseColumn(status)).isEqualTo(status.getValue());\n+ }\n+ }\n+\n+ @Test\n+ public void testConvertToEntityAttribute() throws Exception {\n+ for (Comment.Status status : Comment.Status.values()) {\n+ Truth.assertThat(converter.convertToEntityAttribute(status.getValue())).isEqualTo(status);\n+ }\n+ }\n+\n+ @Test(expected = NullPointerException.class)\n+ public void testConvertNullToDatabaseColumn() {\n+ converter.convertToDatabaseColumn(null);\n+ }\n+\n+ @Test(expected = NullPointerException.class)\n+ public void testConvertNullToEntityAttribute() {\n+ converter.convertToEntityAttribute(null);\n+ }\n+\n+ @Test(expected = IllegalArgumentException.class)\n+ public void testConvertUnknownByteToEntityAttribute() throws Exception {\n+ converter.convertToEntityAttribute(-1);\n+ }\n+\n+}" + }, + { + "sha": "9d87aaca91499fdd51a05519a79f4c52b14939cf", + "filename": "src/test/java/de/vorb/platon/persistence/Jsr310InstantTimestampConverterTest.java", + "status": "added", + "additions": 32, + "deletions": 0, + "changes": 32, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverterTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverterTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverterTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,32 @@\n+package de.vorb.platon.persistence;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+import javax.persistence.AttributeConverter;\n+import java.sql.Timestamp;\n+import java.time.Instant;\n+\n+public class Jsr310InstantTimestampConverterTest {\n+\n+ final Jsr310InstantTimestampConverter converter = new Jsr310InstantTimestampConverter();\n+\n+ @Test\n+ public void testInstantTimestampConversion() throws Exception {\n+\n+ final Instant instant = Instant.now();\n+\n+ final Instant converted =\n+ converter.convertToEntityAttribute(\n+ converter.convertToDatabaseColumn(instant));\n+\n+ Truth.assertThat(converted).isEqualTo(instant);\n+\n+ }\n+\n+ @Test\n+ public void testConversionsWithNull() throws Exception {\n+ Truth.assertThat(converter.convertToDatabaseColumn(null)).isNull();\n+ Truth.assertThat(converter.convertToEntityAttribute(null)).isNull();\n+ }\n+}" + }, + { + "sha": "b9bbee915568771bf4f50b22bbe54fda9875d122", + "filename": "src/test/java/de/vorb/platon/security/HmacRequestVerifierTest.java", + "status": "added", + "additions": 101, + "deletions": 0, + "changes": 101, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifierTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifierTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifierTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,101 @@\n+package de.vorb.platon.security;\n+\n+import de.vorb.platon.util.CurrentTimeProvider;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+import org.springframework.test.annotation.Repeat;\n+\n+import javax.crypto.KeyGenerator;\n+import javax.crypto.SecretKey;\n+import java.time.Instant;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class HmacRequestVerifierTest {\n+\n+ @Mock\n+ private SecretKeyProvider secretKeyProvider;\n+\n+ @Mock\n+ private CurrentTimeProvider currentTimeProvider;\n+\n+ private HmacRequestVerifier requestVerifier;\n+\n+ @Before\n+ public void setUp() throws Exception {\n+\n+ // generate a secret key once and always return that secret key\n+ final SecretKey secretKey = KeyGenerator.getInstance(\n+ HmacRequestVerifier.HMAC_ALGORITHM.toString()).generateKey();\n+ Mockito.when(secretKeyProvider.getSecretKey()).thenReturn(secretKey);\n+\n+ requestVerifier = new HmacRequestVerifier(secretKeyProvider, currentTimeProvider);\n+\n+ }\n+\n+ @Test(expected = SecurityException.class)\n+ public void testInvalidKey() throws Exception {\n+\n+ Mockito.when(secretKeyProvider.getSecretKey()).thenReturn(null);\n+\n+ new HmacRequestVerifier(secretKeyProvider, currentTimeProvider);\n+\n+ }\n+\n+ @Test\n+ @Repeat(10)\n+ public void testGetSignatureTokenIsRepeatable() throws Exception {\n+\n+ final String identifier = \"comment/1\";\n+ final Instant expirationDate = Instant.now();\n+\n+ final byte[] firstSignatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+ final byte[] secondSignatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ Truth.assertThat(firstSignatureToken).isEqualTo(secondSignatureToken);\n+\n+ }\n+\n+ @Test\n+ public void testTokenExpiration() throws Exception {\n+\n+ final String identifier = \"comment/1\";\n+\n+ final Instant currentTime = Instant.now();\n+ Mockito.when(currentTimeProvider.get()).thenReturn(currentTime);\n+\n+ final Instant expirationDate = currentTime.minusMillis(1); // token expired 1ms ago\n+ final byte[] signatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ final boolean validity = requestVerifier.isRequestValid(identifier, expirationDate, signatureToken);\n+\n+ Truth.assertThat(validity).isFalse();\n+\n+ }\n+\n+ @Test\n+ public void testCannotFakeExpirationDate() throws Exception {\n+\n+ final String identifier = \"comment/1\";\n+\n+ final Instant currentTime = Instant.now();\n+ Mockito.when(currentTimeProvider.get()).thenReturn(currentTime);\n+\n+ final Instant expirationDate = currentTime.minusMillis(1);\n+ final byte[] signatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ // a user attempts to set the expiration date manually (without changing the token)\n+ final Instant fakedExpirationDate = currentTime;\n+\n+ final boolean validity = requestVerifier.isRequestValid(identifier, fakedExpirationDate, signatureToken);\n+\n+ Truth.assertThat(validity).isFalse();\n+\n+ }\n+\n+}" + }, + { + "sha": "34a2ea7b544a2791eaed01491d6c87c8304a7e3d", + "filename": "src/test/java/de/vorb/platon/security/mock/InsecureRequestVerifier.java", + "status": "added", + "additions": 29, + "deletions": 0, + "changes": 29, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2Fmock%2FInsecureRequestVerifier.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2Fmock%2FInsecureRequestVerifier.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2Fmock%2FInsecureRequestVerifier.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,29 @@\n+package de.vorb.platon.security.mock;\n+\n+import de.vorb.platon.security.RequestVerifier;\n+\n+import java.nio.charset.StandardCharsets;\n+import java.security.MessageDigest;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Arrays;\n+\n+public class InsecureRequestVerifier implements RequestVerifier {\n+\n+ @Override\n+ public byte[] getSignatureToken(String identifier, Instant expirationDate) {\n+ try {\n+ return MessageDigest.getInstance(\"SHA-1\").digest(\n+ String.format(\"%s|%s\", identifier, expirationDate).getBytes(StandardCharsets.UTF_8));\n+ } catch (NoSuchAlgorithmException e) {\n+ throw new RuntimeException(e);\n+ }\n+ }\n+\n+ @Override\n+ public boolean isRequestValid(String identifier, Instant expirationDate, byte[] signatureToken) {\n+ final byte[] referenceSignature = getSignatureToken(identifier, expirationDate);\n+ return Arrays.equals(referenceSignature, signatureToken);\n+ }\n+\n+}" + }, + { + "sha": "e570e8e9c7dc9c4016204c533cae2a3f925563d8", + "filename": "src/test/java/de/vorb/platon/web/rest/CommentResourcePostWithParentTest.java", + "status": "added", + "additions": 162, + "deletions": 0, + "changes": 162, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourcePostWithParentTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourcePostWithParentTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourcePostWithParentTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,162 @@\n+package de.vorb.platon.web.rest;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+import de.vorb.platon.persistence.CommentRepository;\n+import de.vorb.platon.persistence.CommentThreadRepository;\n+import de.vorb.platon.security.RequestVerifier;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import javax.ws.rs.BadRequestException;\n+import javax.ws.rs.core.Response;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class CommentResourcePostWithParentTest {\n+\n+ @Mock\n+ private CommentThreadRepository threadRepository;\n+\n+ @Mock\n+ private CommentRepository commentRepository;\n+\n+ @Mock\n+ private RequestVerifier requestVerifier;\n+\n+ private final InputSanitizer htmlInputSanitizer = String::trim;\n+\n+ private CommentResource commentResource;\n+\n+\n+ private CommentThread thread;\n+\n+\n+ private Comment existingParentComment;\n+\n+ private Comment nonExistingParentComment;\n+\n+ private Comment existingParentFromOtherThread;\n+\n+\n+ @Before\n+ public void setUp() throws Exception {\n+\n+ Mockito.when(requestVerifier.getSignatureToken(Mockito.any(), Mockito.any())).thenReturn(new byte[0]);\n+ Mockito.when(requestVerifier.isRequestValid(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);\n+\n+\n+ final long threadId = 42;\n+ thread =\n+ Mockito.spy(CommentThread.builder()\n+ .url(\"http://example.com/article\")\n+ .title(\"Article\")\n+ .build());\n+\n+ Mockito.when(thread.getId()).thenReturn(threadId);\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(thread.getUrl()))).thenReturn(thread);\n+\n+\n+ final long existingParentId = 4711;\n+ existingParentComment =\n+ Mockito.spy(Comment.builder()\n+ .thread(thread)\n+ .text(\"Existing parent\")\n+ .build());\n+ Mockito.when(existingParentComment.getId()).thenReturn(existingParentId);\n+\n+ Mockito.when(commentRepository.findOne(Mockito.eq(existingParentId))).thenReturn(existingParentComment);\n+\n+\n+ final long nonExistingParentId = 4712;\n+ nonExistingParentComment =\n+ Mockito.spy(Comment.builder()\n+ .thread(thread)\n+ .text(\"Non-existing parent\")\n+ .build());\n+ Mockito.when(nonExistingParentComment.getId()).thenReturn(nonExistingParentId);\n+\n+ Mockito.when(commentRepository.findOne(Mockito.eq(nonExistingParentId))).thenReturn(null);\n+\n+\n+ final long otherThreadId = 43;\n+ final CommentThread otherThread =\n+ Mockito.spy(CommentThread.builder()\n+ .url(\"http://example.com/other-article\")\n+ .title(\"Other article\")\n+ .build());\n+ Mockito.when(otherThread.getId()).thenReturn(otherThreadId);\n+\n+ final long existingParentFromOtherThreadId = 4713;\n+ existingParentFromOtherThread =\n+ Mockito.spy(Comment.builder()\n+ .thread(otherThread)\n+ .text(\"Existing parent from other thread\")\n+ .build());\n+ Mockito.when(existingParentFromOtherThread.getId()).thenReturn(existingParentFromOtherThreadId);\n+\n+ Mockito.when(commentRepository.findOne(Mockito.eq(existingParentFromOtherThreadId)))\n+ .thenReturn(existingParentFromOtherThread);\n+\n+ commentResource = new CommentResource(threadRepository, commentRepository, requestVerifier, htmlInputSanitizer);\n+ }\n+\n+ @Test\n+ public void testWithExistingParent() throws Exception {\n+\n+ final Comment newChildComment =\n+ Comment.builder()\n+ .parent(existingParentComment)\n+ .text(\"Child\")\n+ .build();\n+\n+ Mockito.when(commentRepository.save(Mockito.eq(newChildComment))).then(invocation -> {\n+ newChildComment.setId(4711L);\n+ return newChildComment;\n+ });\n+\n+ final Response response = commentResource.postComment(thread.getUrl(), thread.getTitle(), newChildComment);\n+\n+ Truth.assertThat(response.getStatus()).isEqualTo(Response.Status.CREATED.getStatusCode());\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testWithNonExistingParent() throws Exception {\n+\n+ final Comment newChildComment =\n+ Comment.builder()\n+ .parent(nonExistingParentComment)\n+ .text(\"Child\")\n+ .build();\n+\n+ Mockito.when(commentRepository.save(Mockito.eq(newChildComment))).then(invocation -> {\n+ newChildComment.setId(4711L);\n+ return newChildComment;\n+ });\n+\n+ commentResource.postComment(thread.getUrl(), thread.getTitle(), newChildComment);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testWithParentFromOtherThread() throws Exception {\n+\n+ final Comment newChildComment =\n+ Comment.builder()\n+ .parent(existingParentFromOtherThread)\n+ .text(\"Child\")\n+ .build();\n+\n+ commentResource.postComment(thread.getUrl(), thread.getTitle(), newChildComment);\n+\n+ }\n+\n+}" + }, + { + "sha": "87045396514d1975ea900b0796d96b62d716db82", + "filename": "src/test/java/de/vorb/platon/web/rest/CommentResourceTest.java", + "status": "added", + "additions": 321, + "deletions": 0, + "changes": 321, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourceTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourceTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourceTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,321 @@\n+package de.vorb.platon.web.rest;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+import de.vorb.platon.persistence.CommentRepository;\n+import de.vorb.platon.persistence.CommentThreadRepository;\n+import de.vorb.platon.security.RequestVerifier;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.ArgumentCaptor;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import javax.ws.rs.BadRequestException;\n+import javax.ws.rs.NotFoundException;\n+import java.time.Instant;\n+import java.util.Base64;\n+import java.util.List;\n+import java.util.Random;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class CommentResourceTest {\n+\n+ private static final CommentThread emptyThread =\n+ CommentThread.builder()\n+ .url(\"http://example.com/article\")\n+ .title(\"An empty comment thread\")\n+ .build();\n+\n+ private static final CommentThread nonEmptyThread =\n+ CommentThread.builder()\n+ .url(\"http://example.com/article-with-comments\")\n+ .title(\"A non-empty comment thread\")\n+ .build();\n+\n+ static {\n+ final Comment comment =\n+ Comment.builder()\n+ .id(4711L)\n+ .thread(nonEmptyThread)\n+ .text(\"Text\")\n+ .author(\"Author\")\n+ .build();\n+\n+ nonEmptyThread.getComments().add(comment);\n+ }\n+\n+ @Mock\n+ private CommentRepository commentRepository;\n+\n+ @Mock\n+ private CommentThreadRepository threadRepository;\n+\n+ @Mock\n+ private RequestVerifier requestVerifier;\n+\n+ private final InputSanitizer htmlInputSanitizer = String::trim;\n+\n+ private CommentResource commentResource;\n+\n+ private final Comment updateComment = Comment.builder().id(42L).text(\"Text\").build();\n+ private final String defaultRequestSignature = getSignature(\"comments/42\", Instant.now());\n+\n+ @Before\n+ public void setUp() throws Exception {\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(null))).thenReturn(null);\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(emptyThread.getUrl()))).thenReturn(emptyThread);\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(nonEmptyThread.getUrl()))).thenReturn(nonEmptyThread);\n+\n+ final Random rng = new Random();\n+ Mockito.when(commentRepository.save(Mockito.any(Comment.class))).then(invocation -> {\n+ final Comment comment = invocation.getArgumentAt(0, Comment.class);\n+ comment.setId(rng.nextLong());\n+ return comment;\n+ });\n+\n+ Mockito.when(commentRepository.findByThread(nonEmptyThread)).thenReturn(nonEmptyThread.getComments());\n+\n+ Mockito.when(requestVerifier.getSignatureToken(Mockito.any(), Mockito.any())).thenReturn(new byte[0]);\n+ Mockito.when(requestVerifier.isRequestValid(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);\n+\n+ commentResource = new CommentResource(threadRepository, commentRepository, requestVerifier, htmlInputSanitizer);\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetCommentsByThreadUrlNull() throws Exception {\n+ commentResource.findCommentsByThreadUrl(null);\n+ }\n+\n+ @Test\n+ public void testGetCommentsByThreadUrlEmptyThread() throws Exception {\n+ Truth.assertThat(commentResource.findCommentsByThreadUrl(emptyThread.getUrl())).isEmpty();\n+ }\n+\n+ @Test\n+ public void testGetCommentsByThreadUrlNonEmptyThread() throws Exception {\n+ final List comments = commentResource.findCommentsByThreadUrl(nonEmptyThread.getUrl());\n+ Truth.assertThat(comments).isNotEmpty();\n+ }\n+\n+ @Test\n+ public void testGetCommentById() throws Exception {\n+\n+ final Comment comment = Mockito.mock(Comment.class);\n+ Mockito.when(comment.getStatus()).thenReturn(Comment.Status.PUBLIC);\n+ Mockito.when(commentRepository.findOne(Mockito.eq(4711L))).thenReturn(comment);\n+\n+ Truth.assertThat(commentResource.getComment(4711L)).isSameAs(comment);\n+\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetCommentAwaitingModerationById() throws Exception {\n+\n+ final Comment comment = Mockito.mock(Comment.class);\n+ Mockito.when(comment.getStatus()).thenReturn(Comment.Status.AWAITING_MODERATION);\n+ Mockito.when(commentRepository.findOne(Mockito.eq(4711L))).thenReturn(comment);\n+\n+ commentResource.getComment(4711L);\n+\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetDeletedCommentById() throws Exception {\n+\n+ final Comment comment = Mockito.mock(Comment.class);\n+ Mockito.when(comment.getStatus()).thenReturn(Comment.Status.DELETED);\n+ Mockito.when(commentRepository.findOne(Mockito.eq(4711L))).thenReturn(comment);\n+\n+ commentResource.getComment(4711L);\n+\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetCommentIdNotFound() throws Exception {\n+\n+ Mockito.when(commentRepository.findOne(Mockito.anyLong())).thenReturn(null);\n+ commentResource.getComment(4711L);\n+\n+ }\n+\n+ @Test\n+ public void testPostCommentToExistingThread() throws Exception {\n+ final Comment newComment =\n+ Mockito.spy(Comment.builder()\n+ .thread(nonEmptyThread)\n+ .text(\"Text\")\n+ .author(\"Author\")\n+ .build());\n+\n+ commentResource.postComment(nonEmptyThread.getUrl(), nonEmptyThread.getTitle(), newComment);\n+\n+ Mockito.verify(commentRepository).save(Mockito.same(newComment));\n+ }\n+\n+ @Test\n+ public void testPostCommentToNewThread() throws Exception {\n+ final String threadUrl = \"http://example.com/new-article\";\n+ final String threadTitle = \"New article\";\n+ final Comment newComment =\n+ Mockito.spy(Comment.builder()\n+ .text(\"Text\")\n+ .author(\"Author\")\n+ .build());\n+\n+ commentResource.postComment(threadUrl, threadTitle, newComment);\n+\n+ final ArgumentCaptor threadCaptor = ArgumentCaptor.forClass(CommentThread.class);\n+ Mockito.verify(threadRepository).save(threadCaptor.capture());\n+\n+ Truth.assertThat(threadCaptor.getValue().getUrl()).isEqualTo(threadUrl);\n+ Truth.assertThat(threadCaptor.getValue().getTitle()).isEqualTo(threadTitle);\n+\n+ Mockito.verify(commentRepository).save(Mockito.same(newComment));\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testPostCommentWithId() throws Exception {\n+ final Comment comment = Comment.builder().id(1337L).build();\n+ commentResource.postComment(\"http://example.com/article\", \"Article\", comment);\n+ }\n+\n+ @Test\n+ public void testUpdateComment() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(Mockito.eq(updateComment.getId()))).thenReturn(true);\n+\n+ commentResource.updateComment(defaultRequestSignature, updateComment.getId(), updateComment);\n+\n+ Mockito.verify(commentRepository).save(updateComment);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testUpdateCommentWithMismatchingId() throws Exception {\n+\n+ commentResource.updateComment(defaultRequestSignature, updateComment.getId() + 1, updateComment);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testUpdateNonExistingComment() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(Mockito.eq(updateComment.getId()))).thenReturn(false);\n+\n+ commentResource.updateComment(defaultRequestSignature, updateComment.getId(), updateComment);\n+\n+ }\n+\n+ @Test\n+ public void testDeleteCommentWithValidRequest() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(42L)).thenReturn(true);\n+\n+ commentResource.deleteComment(defaultRequestSignature, 42L);\n+\n+ Mockito.verify(commentRepository).setStatus(Mockito.eq(42L), Mockito.eq(Comment.Status.DELETED));\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteNonExistingComment() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(42L)).thenReturn(false);\n+\n+ commentResource.deleteComment(defaultRequestSignature, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithInvalidRequest() throws Exception {\n+\n+ final String identifier = \"comments/42\";\n+ final Instant expirationDate = Instant.now();\n+\n+ final String signature = getSignature(identifier, expirationDate);\n+\n+ Mockito.when(requestVerifier.isRequestValid(Mockito.eq(identifier), Mockito.eq(expirationDate), Mockito.any()))\n+ .thenReturn(false);\n+\n+ commentResource.deleteComment(signature, 42L);\n+\n+ }\n+\n+ private String getSignature(String identifier, Instant expirationDate) {\n+ return String.format(\"%s|%s|%s\", identifier, expirationDate,\n+ Base64.getEncoder().encodeToString(\"token\".getBytes()));\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithInvalidNumberOfComponentsInSignature() throws Exception {\n+\n+ final String signatureWithInvalidNumberOfComponents = \"comments/42\";\n+ commentResource.deleteComment(signatureWithInvalidNumberOfComponents, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithInvalidBase64EncodedToken() throws Exception {\n+\n+ final String signatureWithBadBase64Encoding = \"comments/42|2016-01-01T00:00:00.000Z|SGVsbG8gV29ybGQ==\";\n+ commentResource.deleteComment(signatureWithBadBase64Encoding, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithNonParseableDateInSignature() throws Exception {\n+\n+ final String signatureWithNonParseableDate = \"comments/42|2016-01-01 00:00:00|SGVsbG8gV29ybGQ=\";\n+ commentResource.deleteComment(signatureWithNonParseableDate, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithMismatchingIds() throws Exception {\n+\n+ final long commentId = 42;\n+ final String signatureWithMismatchingId = \"comments/43|2016-01-01T00:00:00.000Z|SGVsbG8gV29ybGQ=\";\n+\n+ commentResource.deleteComment(signatureWithMismatchingId, commentId);\n+\n+ }\n+\n+ @Test\n+ public void testSanitizeComment() throws Exception {\n+\n+ final InputSanitizer inputSanitizer = Mockito.mock(InputSanitizer.class);\n+\n+ final CommentResource commentResource = new CommentResource(\n+ Mockito.mock(CommentThreadRepository.class),\n+ Mockito.mock(CommentRepository.class),\n+ Mockito.mock(RequestVerifier.class),\n+ inputSanitizer\n+ );\n+\n+ final Comment comment = Comment.builder()\n+ .text(\"Some text\")\n+ .url(\"http://example.com/article?param1=foo¶m2=bar\")\n+ .author(\"Sam\")\n+ .build();\n+\n+ Mockito.when(inputSanitizer.sanitize(Mockito.eq(comment.getText()))).thenReturn(comment.getText());\n+\n+ commentResource.sanitizeComment(comment);\n+\n+ Mockito.verify(inputSanitizer).sanitize(Mockito.eq(comment.getText()));\n+\n+ Truth.assertThat(comment.getAuthor()).isEqualTo(\"Sam\");\n+ Truth.assertThat(comment.getUrl()).isEqualTo(\"http://example.com/article?param1=foo&param2=bar\");\n+\n+ }\n+\n+}" + }, + { + "sha": "d61cf8151120c961d56d5302677094770ca8a710", + "filename": "src/test/java/de/vorb/platon/web/rest/ObjectMapperContextResolverTest.java", + "status": "added", + "additions": 23, + "deletions": 0, + "changes": 23, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolverTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolverTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolverTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,23 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.fasterxml.jackson.databind.ObjectMapper;\n+import com.fasterxml.jackson.databind.SerializationFeature;\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+public class ObjectMapperContextResolverTest {\n+\n+ @Test\n+ public void testGetContext() throws Exception {\n+\n+ final int writeDatesAsTimestamps = SerializationFeature.WRITE_DATES_AS_TIMESTAMPS.getMask();\n+\n+ final ObjectMapper objectMapper = new ObjectMapperContextResolver().getContext(Object.class);\n+ final int serializationFeatures = objectMapper.getSerializationConfig().getSerializationFeatures();\n+\n+ // assert that write dates as timestampts is NOT enabled\n+ Truth.assertThat(serializationFeatures & writeDatesAsTimestamps).isEqualTo(0);\n+\n+ }\n+\n+}" + }, + { + "sha": "4a189f3e6cdc539e1a88b5757ce2b7a285e1557f", + "filename": "src/test/java/de/vorb/platon/web/rest/PoweredByResponseFilterTest.java", + "status": "added", + "additions": 37, + "deletions": 0, + "changes": 37, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilterTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilterTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilterTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,37 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import javax.ws.rs.container.ContainerRequestContext;\n+import javax.ws.rs.container.ContainerResponseContext;\n+import javax.ws.rs.core.MultivaluedHashMap;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class PoweredByResponseFilterTest {\n+\n+ @Mock\n+ private ContainerRequestContext requestContext;\n+\n+ @Mock\n+ private ContainerResponseContext responseContext;\n+\n+ @Before\n+ public void setUp() throws Exception {\n+ Mockito.when(responseContext.getHeaders()).thenReturn(new MultivaluedHashMap<>());\n+ }\n+\n+ @Test\n+ public void testPoweredByHeader() throws Exception {\n+\n+ new PoweredByResponseFilter().filter(requestContext, responseContext);\n+\n+ Truth.assertThat(responseContext.getHeaders()).containsKey(\"X-Powered-By\");\n+\n+ }\n+}" + }, + { + "sha": "599f4830014944a06840b2f89093cba04092ff2a", + "filename": "src/test/java/de/vorb/platon/web/rest/RestResourceConfigTest.java", + "status": "added", + "additions": 28, + "deletions": 0, + "changes": 28, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfigTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfigTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfigTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,28 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.google.common.truth.Truth;\n+import org.glassfish.jersey.filter.LoggingFilter;\n+import org.glassfish.jersey.server.spring.scope.RequestContextFilter;\n+import org.junit.Test;\n+\n+import java.util.Set;\n+\n+public class RestResourceConfigTest {\n+\n+ @Test\n+ public void testConstructor() throws Exception {\n+\n+ final RestResourceConfig restResourceConfig = new RestResourceConfig();\n+\n+ final Set> registeredClasses = restResourceConfig.getClasses();\n+\n+ // assert that the correct resources and filters are registered\n+ Truth.assertThat(registeredClasses).containsExactly(\n+ RequestContextFilter.class,\n+ PoweredByResponseFilter.class,\n+ CommentResource.class,\n+ LoggingFilter.class,\n+ ObjectMapperContextResolver.class);\n+\n+ }\n+}" + }, + { + "sha": "ec7ec60f73671db4aad9e3e4578cc2e78ad6e328", + "filename": "src/test/java/de/vorb/platon/web/rest/json/ByteArraySerializerTest.java", + "status": "added", + "additions": 35, + "deletions": 0, + "changes": 35, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializerTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializerTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializerTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,35 @@\n+package de.vorb.platon.web.rest.json;\n+\n+import com.fasterxml.jackson.core.JsonGenerator;\n+import com.fasterxml.jackson.databind.SerializerProvider;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import java.math.BigInteger;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class ByteArraySerializerTest {\n+\n+ @Mock\n+ private JsonGenerator jsonGenerator;\n+\n+ @Mock\n+ private SerializerProvider serializerProvider;\n+\n+ @Test\n+ public void testSerialize() throws Exception {\n+\n+ final String sampleHash = \"341be97d9aff90c9978347f66f945b77\";\n+ final byte[] bytes = new BigInteger(sampleHash, 16).toByteArray();\n+\n+ new ByteArraySerializer().serialize(bytes, jsonGenerator, serializerProvider);\n+\n+ // verify that the byte array is correctly serialized\n+ Mockito.verify(jsonGenerator).writeString(Mockito.eq(sampleHash));\n+\n+ }\n+\n+}" + } + ] +} diff --git a/apigh/2023-04-19/react_comment_system b/apigh/2023-04-19/react_comment_system new file mode 100644 index 00000000..db512094 --- /dev/null +++ b/apigh/2023-04-19/react_comment_system @@ -0,0 +1,112 @@ +{ + "id": 77255057, + "node_id": "MDEwOlJlcG9zaXRvcnk3NzI1NTA1Nw==", + "name": "react-comment-system", + "full_name": "Bitveen/react-comment-system", + "private": false, + "owner": { + "login": "Bitveen", + "id": 7973668, + "node_id": "MDQ6VXNlcjc5NzM2Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/7973668?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Bitveen", + "html_url": "https://github.com/Bitveen", + "followers_url": "https://api.github.com/users/Bitveen/followers", + "following_url": "https://api.github.com/users/Bitveen/following{/other_user}", + "gists_url": "https://api.github.com/users/Bitveen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Bitveen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Bitveen/subscriptions", + "organizations_url": "https://api.github.com/users/Bitveen/orgs", + "repos_url": "https://api.github.com/users/Bitveen/repos", + "events_url": "https://api.github.com/users/Bitveen/events{/privacy}", + "received_events_url": "https://api.github.com/users/Bitveen/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/Bitveen/react-comment-system", + "description": "ะŸั€ะพัั‚ะฐั ัะธัั‚ะตะผะฐ ะบะพะผะผะตะฝั‚ะฐั€ะธะตะฒ ะฝะฐ React + Redux", + "fork": false, + "url": "https://api.github.com/repos/Bitveen/react-comment-system", + "forks_url": "https://api.github.com/repos/Bitveen/react-comment-system/forks", + "keys_url": "https://api.github.com/repos/Bitveen/react-comment-system/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Bitveen/react-comment-system/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Bitveen/react-comment-system/teams", + "hooks_url": "https://api.github.com/repos/Bitveen/react-comment-system/hooks", + "issue_events_url": "https://api.github.com/repos/Bitveen/react-comment-system/issues/events{/number}", + "events_url": "https://api.github.com/repos/Bitveen/react-comment-system/events", + "assignees_url": "https://api.github.com/repos/Bitveen/react-comment-system/assignees{/user}", + "branches_url": "https://api.github.com/repos/Bitveen/react-comment-system/branches{/branch}", + "tags_url": "https://api.github.com/repos/Bitveen/react-comment-system/tags", + "blobs_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Bitveen/react-comment-system/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Bitveen/react-comment-system/languages", + "stargazers_url": "https://api.github.com/repos/Bitveen/react-comment-system/stargazers", + "contributors_url": "https://api.github.com/repos/Bitveen/react-comment-system/contributors", + "subscribers_url": "https://api.github.com/repos/Bitveen/react-comment-system/subscribers", + "subscription_url": "https://api.github.com/repos/Bitveen/react-comment-system/subscription", + "commits_url": "https://api.github.com/repos/Bitveen/react-comment-system/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Bitveen/react-comment-system/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Bitveen/react-comment-system/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/{+path}", + "compare_url": "https://api.github.com/repos/Bitveen/react-comment-system/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Bitveen/react-comment-system/merges", + "archive_url": "https://api.github.com/repos/Bitveen/react-comment-system/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Bitveen/react-comment-system/downloads", + "issues_url": "https://api.github.com/repos/Bitveen/react-comment-system/issues{/number}", + "pulls_url": "https://api.github.com/repos/Bitveen/react-comment-system/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Bitveen/react-comment-system/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Bitveen/react-comment-system/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Bitveen/react-comment-system/labels{/name}", + "releases_url": "https://api.github.com/repos/Bitveen/react-comment-system/releases{/id}", + "deployments_url": "https://api.github.com/repos/Bitveen/react-comment-system/deployments", + "created_at": "2016-12-23T23:03:46Z", + "updated_at": "2016-12-25T14:41:38Z", + "pushed_at": "2016-12-23T23:45:22Z", + "git_url": "git://github.com/Bitveen/react-comment-system.git", + "ssh_url": "git@github.com:Bitveen/react-comment-system.git", + "clone_url": "https://github.com/Bitveen/react-comment-system.git", + "svn_url": "https://github.com/Bitveen/react-comment-system", + "homepage": "", + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/react_comment_system.commit b/apigh/2023-04-19/react_comment_system.commit new file mode 100644 index 00000000..d2b518fa --- /dev/null +++ b/apigh/2023-04-19/react_comment_system.commit @@ -0,0 +1,134 @@ +{ + "sha": "b015f3044e4e8f0add4b14437994b72754730b88", + "node_id": "MDY6Q29tbWl0NzcyNTUwNTc6YjAxNWYzMDQ0ZTRlOGYwYWRkNGIxNDQzNzk5NGI3Mjc1NDczMGI4OA==", + "commit": { + "author": { + "name": "Max", + "email": "bitveen@gmail.com", + "date": "2016-12-23T23:45:13Z" + }, + "committer": { + "name": "Max", + "email": "bitveen@gmail.com", + "date": "2016-12-23T23:45:13Z" + }, + "message": "make some tests", + "tree": { + "sha": "548a6c712a48ce18c1175f7035119b52207a8c26", + "url": "https://api.github.com/repos/Bitveen/react-comment-system/git/trees/548a6c712a48ce18c1175f7035119b52207a8c26" + }, + "url": "https://api.github.com/repos/Bitveen/react-comment-system/git/commits/b015f3044e4e8f0add4b14437994b72754730b88", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/Bitveen/react-comment-system/commits/b015f3044e4e8f0add4b14437994b72754730b88", + "html_url": "https://github.com/Bitveen/react-comment-system/commit/b015f3044e4e8f0add4b14437994b72754730b88", + "comments_url": "https://api.github.com/repos/Bitveen/react-comment-system/commits/b015f3044e4e8f0add4b14437994b72754730b88/comments", + "author": { + "login": "Bitveen", + "id": 7973668, + "node_id": "MDQ6VXNlcjc5NzM2Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/7973668?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Bitveen", + "html_url": "https://github.com/Bitveen", + "followers_url": "https://api.github.com/users/Bitveen/followers", + "following_url": "https://api.github.com/users/Bitveen/following{/other_user}", + "gists_url": "https://api.github.com/users/Bitveen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Bitveen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Bitveen/subscriptions", + "organizations_url": "https://api.github.com/users/Bitveen/orgs", + "repos_url": "https://api.github.com/users/Bitveen/repos", + "events_url": "https://api.github.com/users/Bitveen/events{/privacy}", + "received_events_url": "https://api.github.com/users/Bitveen/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Bitveen", + "id": 7973668, + "node_id": "MDQ6VXNlcjc5NzM2Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/7973668?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Bitveen", + "html_url": "https://github.com/Bitveen", + "followers_url": "https://api.github.com/users/Bitveen/followers", + "following_url": "https://api.github.com/users/Bitveen/following{/other_user}", + "gists_url": "https://api.github.com/users/Bitveen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Bitveen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Bitveen/subscriptions", + "organizations_url": "https://api.github.com/users/Bitveen/orgs", + "repos_url": "https://api.github.com/users/Bitveen/repos", + "events_url": "https://api.github.com/users/Bitveen/events{/privacy}", + "received_events_url": "https://api.github.com/users/Bitveen/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "39f01538b2ca7f59643e325b73622036617c3eed", + "url": "https://api.github.com/repos/Bitveen/react-comment-system/commits/39f01538b2ca7f59643e325b73622036617c3eed", + "html_url": "https://github.com/Bitveen/react-comment-system/commit/39f01538b2ca7f59643e325b73622036617c3eed" + } + ], + "stats": { + "total": 30, + "additions": 27, + "deletions": 3 + }, + "files": [ + { + "sha": "c2042a53e3ea20fe309309297611dd170b79d650", + "filename": "public/bundle.js", + "status": "modified", + "additions": 2, + "deletions": 1, + "changes": 3, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/public%2Fbundle.js", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/public%2Fbundle.js", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/public%2Fbundle.js?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -23794,6 +23794,7 @@\n \tObject.defineProperty(exports, \"__esModule\", {\n \t value: true\n \t});\n+\texports.CommentForm = undefined;\n \n \tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n \n@@ -23813,7 +23814,7 @@\n \n \tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n \n-\tvar CommentForm = function (_Component) {\n+\tvar CommentForm = exports.CommentForm = function (_Component) {\n \t _inherits(CommentForm, _Component);\n \n \t function CommentForm(props) {" + }, + { + "sha": "07aec6a8b9f10af72c59e6ef314053a2dce0e4c6", + "filename": "src/components/CommentForm.jsx", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/src%2Fcomponents%2FCommentForm.jsx", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/src%2Fcomponents%2FCommentForm.jsx", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/src%2Fcomponents%2FCommentForm.jsx?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -2,7 +2,7 @@ import React, { Component } from \"react\";\n import { connect } from \"react-redux\";\n import { addComment } from \"actions\";\n \n-class CommentForm extends Component {\n+export class CommentForm extends Component {\n constructor(props) {\n super(props);\n this.handleSubmitForm = this.handleSubmitForm.bind(this);" + }, + { + "sha": "ea7112972a17ec64f18fe363e0b94f906fcaa712", + "filename": "src/tests/components/Comment.test.jsx", + "status": "modified", + "additions": 0, + "deletions": 1, + "changes": 1, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FComment.test.jsx", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FComment.test.jsx", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/src%2Ftests%2Fcomponents%2FComment.test.jsx?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -10,7 +10,6 @@ describe(\"Comment\", () => {\n expect(Comment).toExist();\n });\n \n- \n \n \n " + }, + { + "sha": "7e6ea4a9b82eeb531e2df1b607f34d8cd1ded129", + "filename": "src/tests/components/CommentForm.test.jsx", + "status": "modified", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FCommentForm.test.jsx", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FCommentForm.test.jsx", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/src%2Ftests%2Fcomponents%2FCommentForm.test.jsx?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -10,6 +10,30 @@ describe(\"CommentForm\", () => {\n expect(CommentForm).toExist();\n });\n \n+ // it(\"should dispatch ADD_COMMENT when valid comment text and author\", () => {\n+ // let author = \"Max\";\n+ // let text = \"Hello world\";\n+ //\n+ // let action = {\n+ // type: \"ADD_COMMENT\",\n+ // author,\n+ // text\n+ // };\n+ //\n+ // let spy = expect.createSpy();\n+ //\n+ // let commentForm = TestUtils.renderIntoDocument();\n+ //\n+ // let elem = ReactDOM.findDOMNode(commentForm);\n+ //\n+ // commentForm.refs.text.value = text;\n+ // commentForm.refs.author.value = author;\n+ //\n+ // TestUtils.Simulate.submit(elem.querySelector(\"form\"));\n+ // expect(spy).toHaveBeenCalledWith(action);\n+ //\n+ //\n+ // });\n \n \n " + } + ] +} diff --git a/apigh/2023-04-19/react_quietwater b/apigh/2023-04-19/react_quietwater new file mode 100644 index 00000000..471dd8e5 --- /dev/null +++ b/apigh/2023-04-19/react_quietwater @@ -0,0 +1,126 @@ +{ + "id": 86316646, + "node_id": "MDEwOlJlcG9zaXRvcnk4NjMxNjY0Ng==", + "name": "React-QuietWater", + "full_name": "NE-SmallTown/React-QuietWater", + "private": false, + "owner": { + "login": "NE-SmallTown", + "id": 18418010, + "node_id": "MDQ6VXNlcjE4NDE4MDEw", + "avatar_url": "https://avatars.githubusercontent.com/u/18418010?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/NE-SmallTown", + "html_url": "https://github.com/NE-SmallTown", + "followers_url": "https://api.github.com/users/NE-SmallTown/followers", + "following_url": "https://api.github.com/users/NE-SmallTown/following{/other_user}", + "gists_url": "https://api.github.com/users/NE-SmallTown/gists{/gist_id}", + "starred_url": "https://api.github.com/users/NE-SmallTown/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/NE-SmallTown/subscriptions", + "organizations_url": "https://api.github.com/users/NE-SmallTown/orgs", + "repos_url": "https://api.github.com/users/NE-SmallTown/repos", + "events_url": "https://api.github.com/users/NE-SmallTown/events{/privacy}", + "received_events_url": "https://api.github.com/users/NE-SmallTown/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/NE-SmallTown/React-QuietWater", + "description": "A comment component driven by React@16~", + "fork": false, + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater", + "forks_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/forks", + "keys_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/teams", + "hooks_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/hooks", + "issue_events_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/issues/events{/number}", + "events_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/events", + "assignees_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/assignees{/user}", + "branches_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/branches{/branch}", + "tags_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/tags", + "blobs_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/statuses/{sha}", + "languages_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/languages", + "stargazers_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/stargazers", + "contributors_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contributors", + "subscribers_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/subscribers", + "subscription_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/subscription", + "commits_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contents/{+path}", + "compare_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/merges", + "archive_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/downloads", + "issues_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/issues{/number}", + "pulls_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/pulls{/number}", + "milestones_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/milestones{/number}", + "notifications_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/labels{/name}", + "releases_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/releases{/id}", + "deployments_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/deployments", + "created_at": "2017-03-27T09:28:20Z", + "updated_at": "2019-03-28T10:13:58Z", + "pushed_at": "2017-09-12T05:40:43Z", + "git_url": "git://github.com/NE-SmallTown/React-QuietWater.git", + "ssh_url": "git@github.com:NE-SmallTown/React-QuietWater.git", + "clone_url": "https://github.com/NE-SmallTown/React-QuietWater.git", + "svn_url": "https://github.com/NE-SmallTown/React-QuietWater", + "homepage": "https://ne-smalltown.github.io/React-QuietWater/examples", + "size": 1539, + "stargazers_count": 6, + "watchers_count": 6, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "blog", + "blog-comment", + "comment", + "comments", + "comments-widget", + "component", + "react", + "react-component", + "react-components" + ], + "visibility": "public", + "forks": 0, + "open_issues": 1, + "watchers": 6, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/react_quietwater.commit b/apigh/2023-04-19/react_quietwater.commit new file mode 100644 index 00000000..31dcb5c8 --- /dev/null +++ b/apigh/2023-04-19/react_quietwater.commit @@ -0,0 +1,110 @@ +{ + "sha": "c91590261f288bfccaf658c207d798a35c355e8d", + "node_id": "MDY6Q29tbWl0ODYzMTY2NDY6YzkxNTkwMjYxZjI4OGJmY2NhZjY1OGMyMDdkNzk4YTM1YzM1NWU4ZA==", + "commit": { + "author": { + "name": "NE_SmallTown", + "email": "ne_smalltown@163.com", + "date": "2017-09-12T05:41:14Z" + }, + "committer": { + "name": "NE_SmallTown", + "email": "ne_smalltown@163.com", + "date": "2017-09-12T05:41:14Z" + }, + "message": "attempt to fix ci", + "tree": { + "sha": "7a9c192c789d6a6882ea20acb2b0be71f74efa21", + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/trees/7a9c192c789d6a6882ea20acb2b0be71f74efa21" + }, + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/commits/c91590261f288bfccaf658c207d798a35c355e8d", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits/c91590261f288bfccaf658c207d798a35c355e8d", + "html_url": "https://github.com/NE-SmallTown/React-QuietWater/commit/c91590261f288bfccaf658c207d798a35c355e8d", + "comments_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits/c91590261f288bfccaf658c207d798a35c355e8d/comments", + "author": { + "login": "NE-SmallTown", + "id": 18418010, + "node_id": "MDQ6VXNlcjE4NDE4MDEw", + "avatar_url": "https://avatars.githubusercontent.com/u/18418010?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/NE-SmallTown", + "html_url": "https://github.com/NE-SmallTown", + "followers_url": "https://api.github.com/users/NE-SmallTown/followers", + "following_url": "https://api.github.com/users/NE-SmallTown/following{/other_user}", + "gists_url": "https://api.github.com/users/NE-SmallTown/gists{/gist_id}", + "starred_url": "https://api.github.com/users/NE-SmallTown/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/NE-SmallTown/subscriptions", + "organizations_url": "https://api.github.com/users/NE-SmallTown/orgs", + "repos_url": "https://api.github.com/users/NE-SmallTown/repos", + "events_url": "https://api.github.com/users/NE-SmallTown/events{/privacy}", + "received_events_url": "https://api.github.com/users/NE-SmallTown/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "NE-SmallTown", + "id": 18418010, + "node_id": "MDQ6VXNlcjE4NDE4MDEw", + "avatar_url": "https://avatars.githubusercontent.com/u/18418010?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/NE-SmallTown", + "html_url": "https://github.com/NE-SmallTown", + "followers_url": "https://api.github.com/users/NE-SmallTown/followers", + "following_url": "https://api.github.com/users/NE-SmallTown/following{/other_user}", + "gists_url": "https://api.github.com/users/NE-SmallTown/gists{/gist_id}", + "starred_url": "https://api.github.com/users/NE-SmallTown/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/NE-SmallTown/subscriptions", + "organizations_url": "https://api.github.com/users/NE-SmallTown/orgs", + "repos_url": "https://api.github.com/users/NE-SmallTown/repos", + "events_url": "https://api.github.com/users/NE-SmallTown/events{/privacy}", + "received_events_url": "https://api.github.com/users/NE-SmallTown/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "0c9c8b2ef77f37a73cb04e301604a3d81ac7ac35", + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits/0c9c8b2ef77f37a73cb04e301604a3d81ac7ac35", + "html_url": "https://github.com/NE-SmallTown/React-QuietWater/commit/0c9c8b2ef77f37a73cb04e301604a3d81ac7ac35" + } + ], + "stats": { + "total": 4, + "additions": 3, + "deletions": 1 + }, + "files": [ + { + "sha": "8620c3198dcc3437fd53e8d9a9e1dba99a04de18", + "filename": ".babelrc", + "status": "modified", + "additions": 1, + "deletions": 0, + "changes": 1, + "blob_url": "https://github.com/NE-SmallTown/React-QuietWater/blob/c91590261f288bfccaf658c207d798a35c355e8d/.babelrc", + "raw_url": "https://github.com/NE-SmallTown/React-QuietWater/raw/c91590261f288bfccaf658c207d798a35c355e8d/.babelrc", + "contents_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contents/.babelrc?ref=c91590261f288bfccaf658c207d798a35c355e8d", + "patch": "@@ -3,6 +3,7 @@\n \"transform-decorators-legacy\",\n \"transform-object-rest-spread\",\n \"transform-export-extensions\",\n+ \"transform-class-properties\",\n [\n \"babel-plugin-react-css-modules-ne-smalltown\",\n {" + }, + { + "sha": "8a5d2c4756e4c5223516079e91a4206b34e58cb4", + "filename": "package.json", + "status": "modified", + "additions": 2, + "deletions": 1, + "changes": 3, + "blob_url": "https://github.com/NE-SmallTown/React-QuietWater/blob/c91590261f288bfccaf658c207d798a35c355e8d/package.json", + "raw_url": "https://github.com/NE-SmallTown/React-QuietWater/raw/c91590261f288bfccaf658c207d798a35c355e8d/package.json", + "contents_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contents/package.json?ref=c91590261f288bfccaf658c207d798a35c355e8d", + "patch": "@@ -23,7 +23,7 @@\n \"scripts\": {\n \"clean\": \"rimraf ./lib\",\n \"prebuild\": \"npm run clean\",\n- \"build\": \"./node_modules/.bin/babel src --out-dir lib --ignore src/examples/* && node ./bin/build\",\n+ \"build\": \"./node_modules/.bin/babel src --out-dir lib --ignore src/examples && node ./bin/build\",\n \"flow\": \"flow\",\n \"lint\": \"eslint src tests\",\n \"lint:fix\": \"npm run lint -- --fix\",\n@@ -94,6 +94,7 @@\n \"babel-loader\": \"^7.1.2\",\n \"babel-plugin-istanbul\": \"^3.0.0\",\n \"babel-plugin-react-css-modules-ne-smalltown\": \"^2.8.2\",\n+ \"babel-plugin-transform-class-properties\": \"^6.24.1\",\n \"babel-plugin-transform-decorators-legacy\": \"^1.3.4\",\n \"babel-plugin-transform-export-extensions\": \"^6.22.0\",\n \"babel-plugin-transform-object-rest-spread\": \"^6.23.0\"," + } + ] +} diff --git a/apigh/2023-04-19/realtime_commenting b/apigh/2023-04-19/realtime_commenting new file mode 100644 index 00000000..d5e30b54 --- /dev/null +++ b/apigh/2023-04-19/realtime_commenting @@ -0,0 +1,132 @@ +{ + "id": 3531293, + "node_id": "MDEwOlJlcG9zaXRvcnkzNTMxMjkz", + "name": "realtime-commenting", + "full_name": "pusher-community/realtime-commenting", + "private": false, + "owner": { + "login": "pusher-community", + "id": 12761934, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNzYxOTM0", + "avatar_url": "https://avatars.githubusercontent.com/u/12761934?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pusher-community", + "html_url": "https://github.com/pusher-community", + "followers_url": "https://api.github.com/users/pusher-community/followers", + "following_url": "https://api.github.com/users/pusher-community/following{/other_user}", + "gists_url": "https://api.github.com/users/pusher-community/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pusher-community/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pusher-community/subscriptions", + "organizations_url": "https://api.github.com/users/pusher-community/orgs", + "repos_url": "https://api.github.com/users/pusher-community/repos", + "events_url": "https://api.github.com/users/pusher-community/events{/privacy}", + "received_events_url": "https://api.github.com/users/pusher-community/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/pusher-community/realtime-commenting", + "description": "Realtime Blog Comment System", + "fork": false, + "url": "https://api.github.com/repos/pusher-community/realtime-commenting", + "forks_url": "https://api.github.com/repos/pusher-community/realtime-commenting/forks", + "keys_url": "https://api.github.com/repos/pusher-community/realtime-commenting/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pusher-community/realtime-commenting/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pusher-community/realtime-commenting/teams", + "hooks_url": "https://api.github.com/repos/pusher-community/realtime-commenting/hooks", + "issue_events_url": "https://api.github.com/repos/pusher-community/realtime-commenting/issues/events{/number}", + "events_url": "https://api.github.com/repos/pusher-community/realtime-commenting/events", + "assignees_url": "https://api.github.com/repos/pusher-community/realtime-commenting/assignees{/user}", + "branches_url": "https://api.github.com/repos/pusher-community/realtime-commenting/branches{/branch}", + "tags_url": "https://api.github.com/repos/pusher-community/realtime-commenting/tags", + "blobs_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pusher-community/realtime-commenting/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pusher-community/realtime-commenting/languages", + "stargazers_url": "https://api.github.com/repos/pusher-community/realtime-commenting/stargazers", + "contributors_url": "https://api.github.com/repos/pusher-community/realtime-commenting/contributors", + "subscribers_url": "https://api.github.com/repos/pusher-community/realtime-commenting/subscribers", + "subscription_url": "https://api.github.com/repos/pusher-community/realtime-commenting/subscription", + "commits_url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pusher-community/realtime-commenting/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pusher-community/realtime-commenting/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pusher-community/realtime-commenting/contents/{+path}", + "compare_url": "https://api.github.com/repos/pusher-community/realtime-commenting/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pusher-community/realtime-commenting/merges", + "archive_url": "https://api.github.com/repos/pusher-community/realtime-commenting/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pusher-community/realtime-commenting/downloads", + "issues_url": "https://api.github.com/repos/pusher-community/realtime-commenting/issues{/number}", + "pulls_url": "https://api.github.com/repos/pusher-community/realtime-commenting/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pusher-community/realtime-commenting/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pusher-community/realtime-commenting/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pusher-community/realtime-commenting/labels{/name}", + "releases_url": "https://api.github.com/repos/pusher-community/realtime-commenting/releases{/id}", + "deployments_url": "https://api.github.com/repos/pusher-community/realtime-commenting/deployments", + "created_at": "2012-02-24T00:16:21Z", + "updated_at": "2022-08-09T11:21:09Z", + "pushed_at": "2016-04-22T10:40:24Z", + "git_url": "git://github.com/pusher-community/realtime-commenting.git", + "ssh_url": "git@github.com:pusher-community/realtime-commenting.git", + "clone_url": "https://github.com/pusher-community/realtime-commenting.git", + "svn_url": "https://github.com/pusher-community/realtime-commenting", + "homepage": "http://realtime-commenting.herokuapp.com/", + "size": 44, + "stargazers_count": 64, + "watchers_count": 64, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 52, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 52, + "open_issues": 1, + "watchers": 64, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "pusher-community", + "id": 12761934, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNzYxOTM0", + "avatar_url": "https://avatars.githubusercontent.com/u/12761934?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pusher-community", + "html_url": "https://github.com/pusher-community", + "followers_url": "https://api.github.com/users/pusher-community/followers", + "following_url": "https://api.github.com/users/pusher-community/following{/other_user}", + "gists_url": "https://api.github.com/users/pusher-community/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pusher-community/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pusher-community/subscriptions", + "organizations_url": "https://api.github.com/users/pusher-community/orgs", + "repos_url": "https://api.github.com/users/pusher-community/repos", + "events_url": "https://api.github.com/users/pusher-community/events{/privacy}", + "received_events_url": "https://api.github.com/users/pusher-community/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 52, + "subscribers_count": 17 +} diff --git a/apigh/2023-04-19/realtime_commenting.commit b/apigh/2023-04-19/realtime_commenting.commit new file mode 100644 index 00000000..aaf36f4a --- /dev/null +++ b/apigh/2023-04-19/realtime_commenting.commit @@ -0,0 +1,98 @@ +{ + "sha": "9926833c3a33bd194bd69df34bc48d96e4da40b1", + "node_id": "MDY6Q29tbWl0MzUzMTI5Mzo5OTI2ODMzYzNhMzNiZDE5NGJkNjlkZjM0YmM0OGQ5NmU0ZGE0MGIx", + "commit": { + "author": { + "name": "zimbatm", + "email": "zimbatm@zimbatm.com", + "date": "2016-04-22T10:38:35Z" + }, + "committer": { + "name": "zimbatm", + "email": "zimbatm@zimbatm.com", + "date": "2016-04-22T10:39:42Z" + }, + "message": "Avoids potential duplicates\n\nThis could theoritically happen if the page is loaded and the pusher\nevent happens at the same time.", + "tree": { + "sha": "44c71a9808f02dec3de5fe5863b165b57a043750", + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/trees/44c71a9808f02dec3de5fe5863b165b57a043750" + }, + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/commits/9926833c3a33bd194bd69df34bc48d96e4da40b1", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits/9926833c3a33bd194bd69df34bc48d96e4da40b1", + "html_url": "https://github.com/pusher-community/realtime-commenting/commit/9926833c3a33bd194bd69df34bc48d96e4da40b1", + "comments_url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits/9926833c3a33bd194bd69df34bc48d96e4da40b1/comments", + "author": { + "login": "zimbatm", + "id": 3248, + "node_id": "MDQ6VXNlcjMyNDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3248?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/zimbatm", + "html_url": "https://github.com/zimbatm", + "followers_url": "https://api.github.com/users/zimbatm/followers", + "following_url": "https://api.github.com/users/zimbatm/following{/other_user}", + "gists_url": "https://api.github.com/users/zimbatm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zimbatm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zimbatm/subscriptions", + "organizations_url": "https://api.github.com/users/zimbatm/orgs", + "repos_url": "https://api.github.com/users/zimbatm/repos", + "events_url": "https://api.github.com/users/zimbatm/events{/privacy}", + "received_events_url": "https://api.github.com/users/zimbatm/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "zimbatm", + "id": 3248, + "node_id": "MDQ6VXNlcjMyNDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3248?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/zimbatm", + "html_url": "https://github.com/zimbatm", + "followers_url": "https://api.github.com/users/zimbatm/followers", + "following_url": "https://api.github.com/users/zimbatm/following{/other_user}", + "gists_url": "https://api.github.com/users/zimbatm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zimbatm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zimbatm/subscriptions", + "organizations_url": "https://api.github.com/users/zimbatm/orgs", + "repos_url": "https://api.github.com/users/zimbatm/repos", + "events_url": "https://api.github.com/users/zimbatm/events{/privacy}", + "received_events_url": "https://api.github.com/users/zimbatm/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "0c5447fa2554e09f18a74bc5b57c5b8998eb682f", + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits/0c5447fa2554e09f18a74bc5b57c5b8998eb682f", + "html_url": "https://github.com/pusher-community/realtime-commenting/commit/0c5447fa2554e09f18a74bc5b57c5b8998eb682f" + } + ], + "stats": { + "total": 4, + "additions": 4, + "deletions": 0 + }, + "files": [ + { + "sha": "64d74f6b91b491b66ef507d2cb4cdd568589b7af", + "filename": "js/app.js", + "status": "modified", + "additions": 4, + "deletions": 0, + "changes": 4, + "blob_url": "https://github.com/pusher-community/realtime-commenting/blob/9926833c3a33bd194bd69df34bc48d96e4da40b1/js%2Fapp.js", + "raw_url": "https://github.com/pusher-community/realtime-commenting/raw/9926833c3a33bd194bd69df34bc48d96e4da40b1/js%2Fapp.js", + "contents_url": "https://api.github.com/repos/pusher-community/realtime-commenting/contents/js%2Fapp.js?ref=9926833c3a33bd194bd69df34bc48d96e4da40b1", + "patch": "@@ -44,6 +44,10 @@ function postError(jqXHR, textStatus, errorThrown) {\n }\n \n function displayComment(data) {\n+ if ($(\"#\" + data.id).length > 0) {\n+ // Ignore comment as it already exists\n+ return\n+ }\n var commentHtml = createComment(data);\n var commentEl = $(commentHtml);\n commentEl.hide();" + } + ] +} diff --git a/apigh/2023-04-19/remark b/apigh/2023-04-19/remark new file mode 100644 index 00000000..6caedcd2 --- /dev/null +++ b/apigh/2023-04-19/remark @@ -0,0 +1,124 @@ +{ + "id": 114829503, + "node_id": "MDEwOlJlcG9zaXRvcnkxMTQ4Mjk1MDM=", + "name": "remark42", + "full_name": "umputun/remark42", + "private": false, + "owner": { + "login": "umputun", + "id": 535880, + "node_id": "MDQ6VXNlcjUzNTg4MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/535880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/umputun", + "html_url": "https://github.com/umputun", + "followers_url": "https://api.github.com/users/umputun/followers", + "following_url": "https://api.github.com/users/umputun/following{/other_user}", + "gists_url": "https://api.github.com/users/umputun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/umputun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/umputun/subscriptions", + "organizations_url": "https://api.github.com/users/umputun/orgs", + "repos_url": "https://api.github.com/users/umputun/repos", + "events_url": "https://api.github.com/users/umputun/events{/privacy}", + "received_events_url": "https://api.github.com/users/umputun/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/umputun/remark42", + "description": "comment engine", + "fork": false, + "url": "https://api.github.com/repos/umputun/remark42", + "forks_url": "https://api.github.com/repos/umputun/remark42/forks", + "keys_url": "https://api.github.com/repos/umputun/remark42/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/umputun/remark42/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/umputun/remark42/teams", + "hooks_url": "https://api.github.com/repos/umputun/remark42/hooks", + "issue_events_url": "https://api.github.com/repos/umputun/remark42/issues/events{/number}", + "events_url": "https://api.github.com/repos/umputun/remark42/events", + "assignees_url": "https://api.github.com/repos/umputun/remark42/assignees{/user}", + "branches_url": "https://api.github.com/repos/umputun/remark42/branches{/branch}", + "tags_url": "https://api.github.com/repos/umputun/remark42/tags", + "blobs_url": "https://api.github.com/repos/umputun/remark42/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/umputun/remark42/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/umputun/remark42/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/umputun/remark42/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/umputun/remark42/statuses/{sha}", + "languages_url": "https://api.github.com/repos/umputun/remark42/languages", + "stargazers_url": "https://api.github.com/repos/umputun/remark42/stargazers", + "contributors_url": "https://api.github.com/repos/umputun/remark42/contributors", + "subscribers_url": "https://api.github.com/repos/umputun/remark42/subscribers", + "subscription_url": "https://api.github.com/repos/umputun/remark42/subscription", + "commits_url": "https://api.github.com/repos/umputun/remark42/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/umputun/remark42/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/umputun/remark42/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/umputun/remark42/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/{+path}", + "compare_url": "https://api.github.com/repos/umputun/remark42/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/umputun/remark42/merges", + "archive_url": "https://api.github.com/repos/umputun/remark42/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/umputun/remark42/downloads", + "issues_url": "https://api.github.com/repos/umputun/remark42/issues{/number}", + "pulls_url": "https://api.github.com/repos/umputun/remark42/pulls{/number}", + "milestones_url": "https://api.github.com/repos/umputun/remark42/milestones{/number}", + "notifications_url": "https://api.github.com/repos/umputun/remark42/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/umputun/remark42/labels{/name}", + "releases_url": "https://api.github.com/repos/umputun/remark42/releases{/id}", + "deployments_url": "https://api.github.com/repos/umputun/remark42/deployments", + "created_at": "2017-12-20T01:42:35Z", + "updated_at": "2023-04-18T20:57:41Z", + "pushed_at": "2023-04-10T04:30:22Z", + "git_url": "git://github.com/umputun/remark42.git", + "ssh_url": "git@github.com:umputun/remark42.git", + "clone_url": "https://github.com/umputun/remark42.git", + "svn_url": "https://github.com/umputun/remark42", + "homepage": "https://remark42.com", + "size": 26778, + "stargazers_count": 4279, + "watchers_count": 4279, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": true, + "forks_count": 345, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 87, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comment-system", + "commenting", + "commenting-engines", + "comments-widget", + "privacy", + "remark42", + "self-hosted" + ], + "visibility": "public", + "forks": 345, + "open_issues": 87, + "watchers": 4279, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 345, + "subscribers_count": 61 +} diff --git a/apigh/2023-04-19/remark.commit b/apigh/2023-04-19/remark.commit new file mode 100644 index 00000000..5e3a1d2d --- /dev/null +++ b/apigh/2023-04-19/remark.commit @@ -0,0 +1,146 @@ +{ + "sha": "26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "node_id": "C_kwDOBtgov9oAKDI2ZjgyYWQ5NWMwOWZlNzNjOTU5MzVkNGM1MDE0ZTk2MDZiYzdmZmI", + "commit": { + "author": { + "name": "Dmitry Verkhoturov", + "email": "paskal.07@gmail.com", + "date": "2023-01-09T20:19:34Z" + }, + "committer": { + "name": "Umputun", + "email": "umputun@gmail.com", + "date": "2023-04-10T04:30:21Z" + }, + "message": "don't allow relative links in comments\n\n(url) is a text inserted by default and never an intended URL.\n\nThat additional validation will ensure that users won't post relative\nlinks because they are rarely intended.", + "tree": { + "sha": "84c61c3a2b07b48559af573c7a58fdb3b4e412d0", + "url": "https://api.github.com/repos/umputun/remark42/git/trees/84c61c3a2b07b48559af573c7a58fdb3b4e412d0" + }, + "url": "https://api.github.com/repos/umputun/remark42/git/commits/26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/umputun/remark42/commits/26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "html_url": "https://github.com/umputun/remark42/commit/26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "comments_url": "https://api.github.com/repos/umputun/remark42/commits/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/comments", + "author": { + "login": "paskal", + "id": 712534, + "node_id": "MDQ6VXNlcjcxMjUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/712534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/paskal", + "html_url": "https://github.com/paskal", + "followers_url": "https://api.github.com/users/paskal/followers", + "following_url": "https://api.github.com/users/paskal/following{/other_user}", + "gists_url": "https://api.github.com/users/paskal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/paskal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/paskal/subscriptions", + "organizations_url": "https://api.github.com/users/paskal/orgs", + "repos_url": "https://api.github.com/users/paskal/repos", + "events_url": "https://api.github.com/users/paskal/events{/privacy}", + "received_events_url": "https://api.github.com/users/paskal/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "umputun", + "id": 535880, + "node_id": "MDQ6VXNlcjUzNTg4MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/535880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/umputun", + "html_url": "https://github.com/umputun", + "followers_url": "https://api.github.com/users/umputun/followers", + "following_url": "https://api.github.com/users/umputun/following{/other_user}", + "gists_url": "https://api.github.com/users/umputun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/umputun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/umputun/subscriptions", + "organizations_url": "https://api.github.com/users/umputun/orgs", + "repos_url": "https://api.github.com/users/umputun/repos", + "events_url": "https://api.github.com/users/umputun/events{/privacy}", + "received_events_url": "https://api.github.com/users/umputun/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1b90604b2d019002e66c5f9f74c1e09ce45db2cd", + "url": "https://api.github.com/repos/umputun/remark42/commits/1b90604b2d019002e66c5f9f74c1e09ce45db2cd", + "html_url": "https://github.com/umputun/remark42/commit/1b90604b2d019002e66c5f9f74c1e09ce45db2cd" + } + ], + "stats": { + "total": 89, + "additions": 67, + "deletions": 22 + }, + "files": [ + { + "sha": "6537519b9f36661417fec9a1c547acdbd2256b67", + "filename": "backend/app/rest/api/rest_private_test.go", + "status": "modified", + "additions": 19, + "deletions": 0, + "changes": 19, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Frest%2Fapi%2Frest_private_test.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Frest%2Fapi%2Frest_private_test.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Frest%2Fapi%2Frest_private_test.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -166,6 +166,25 @@ func TestRest_CreateWithRestrictedWord(t *testing.T) {\n \tassert.Equal(t, \"invalid comment\", c[\"details\"])\n }\n \n+func TestRest_CreateRelativeURL(t *testing.T) {\n+\tts, _, teardown := startupT(t)\n+\tdefer teardown()\n+\n+\t// check that it's not possible to click insert URL button and not alter the URL in it (which is `url` by default)\n+\trelativeURLText := `{\"text\": \"here is a link with relative URL: [google.com](url)\", \"locator\":{\"url\": \"https://radio-t.com/blah1\", \"site\": \"remark42\"}}`\n+\tresp, err := post(t, ts.URL+\"/api/v1/comment\", relativeURLText)\n+\tassert.NoError(t, err)\n+\tassert.Equal(t, http.StatusBadRequest, resp.StatusCode)\n+\tb, err := io.ReadAll(resp.Body)\n+\tassert.NoError(t, err)\n+\tassert.NoError(t, resp.Body.Close())\n+\tc := R.JSON{}\n+\terr = json.Unmarshal(b, &c)\n+\tassert.NoError(t, err)\n+\tassert.Equal(t, \"links should start with mailto:, http:// or https://\", c[\"error\"])\n+\tassert.Equal(t, \"invalid comment\", c[\"details\"])\n+}\n+\n func TestRest_CreateRejected(t *testing.T) {\n \tts, _, teardown := startupT(t)\n \tdefer teardown()" + }, + { + "sha": "bd7c09f6d92b1c8c8d0c985c04e4c413fb3f2276", + "filename": "backend/app/store/comment.go", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fcomment.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fcomment.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fcomment.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -121,8 +121,8 @@ func (c *Comment) Sanitize() {\n \t// special case for embedding the quotes from Twitter\n \tp.AllowAttrs(\"class\").Matching(regexp.MustCompile(\"^twitter-tweet$\")).OnElements(\"blockquote\")\n \t// this is list of tag classes which could be produced by chroma code renderer\n-\t// source: https://github.com/alecthomas/chroma/blob/cc2dd5b/types.go#L211-L307\n-\tconst codeSpanClassRegex = \"^(bg|chroma|line|ln|lnt|hl|lntable|lntd|cl|w|err|x|k|kc\" +\n+\t// source: https://github.com/alecthomas/chroma/blob/c263f6f/types.go#L209-L306\n+\tconst codeSpanClassRegex = \"^(bg|chroma|line|ln|lnt|hl|lntable|lntd|lnlinks|cl|w|err|x|k|kc\" +\n \t\t\"|kd|kn|kp|kr|kt|n|na|nb|bp|nc|no|nd|ni|ne|nf|fm|py|nl|nn|nx|nt|nv|vc|vg\" +\n \t\t\"|vi|vm|l|ld|s|sa|sb|sc|dl|sd|s2|se|sh|si|sx|sr|s1|ss|m|mb|mf|mh|mi|il\" +\n \t\t\"|mo|o|ow|p|c|ch|cm|cp|cpf|c1|cs|g|gd|ge|gr|gh|gi|go|gp|gs|gu|gt|gl)$\"" + }, + { + "sha": "864a9b9fe5eaf142121cfcf3620a9e70c9284903", + "filename": "backend/app/store/formatter.go", + "status": "modified", + "additions": 17, + "deletions": 11, + "changes": 28, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fformatter.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fformatter.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fformatter.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -42,17 +42,8 @@ func (f *CommentFormatter) Format(c Comment) Comment {\n \n // FormatText converts text with markdown processor, applies external converters and shortens links\n func (f *CommentFormatter) FormatText(txt string) (res string) {\n-\tmdExt := bf.NoIntraEmphasis | bf.Tables | bf.FencedCode |\n-\t\tbf.Strikethrough | bf.SpaceHeadings | bf.HardLineBreak |\n-\t\tbf.BackslashLineBreak | bf.Autolink\n-\n-\trend := bf.NewHTMLRenderer(bf.HTMLRendererParameters{\n-\t\tFlags: bf.Smartypants | bf.SmartypantsFractions | bf.SmartypantsDashes | bf.SmartypantsAngledQuotes,\n-\t})\n-\n-\textRend := bfchroma.NewRenderer(bfchroma.Extend(rend), bfchroma.ChromaOptions(html.WithClasses(true)))\n-\n-\tres = string(bf.Run([]byte(txt), bf.WithExtensions(mdExt), bf.WithRenderer(extRend)))\n+\tmdExt, rend := GetMdExtensionsAndRenderer()\n+\tres = string(bf.Run([]byte(txt), bf.WithExtensions(mdExt), bf.WithRenderer(rend)))\n \tres = f.unEscape(res)\n \n \tfor _, conv := range f.converters {\n@@ -126,3 +117,18 @@ func (f *CommentFormatter) lazyImage(commentHTML string) (resHTML string) {\n \t}\n \treturn resHTML\n }\n+\n+// GetMdExtensionsAndRenderer returns blackfriday extensions and renderer used for rendering markdown\n+// within store module.\n+func GetMdExtensionsAndRenderer() (bf.Extensions, *bfchroma.Renderer) {\n+\tmdExt := bf.NoIntraEmphasis | bf.Tables | bf.FencedCode |\n+\t\tbf.Strikethrough | bf.SpaceHeadings | bf.HardLineBreak |\n+\t\tbf.BackslashLineBreak | bf.Autolink\n+\n+\trend := bf.NewHTMLRenderer(bf.HTMLRendererParameters{\n+\t\tFlags: bf.Smartypants | bf.SmartypantsFractions | bf.SmartypantsDashes | bf.SmartypantsAngledQuotes,\n+\t})\n+\n+\textRend := bfchroma.NewRenderer(bfchroma.Extend(rend), bfchroma.ChromaOptions(html.WithClasses(true)))\n+\treturn mdExt, extRend\n+}" + }, + { + "sha": "e03ccc2ad75001f48e49f4b0db81fbd8185e22db", + "filename": "backend/app/store/service/service.go", + "status": "modified", + "additions": 19, + "deletions": 2, + "changes": 21, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fservice%2Fservice.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -14,6 +14,7 @@ import (\n \tlog \"github.com/go-pkgz/lgr\"\n \t\"github.com/google/uuid\"\n \t\"github.com/hashicorp/go-multierror\"\n+\tbf \"github.com/russross/blackfriday/v2\"\n \n \t\"github.com/umputun/remark42/backend/app/store\"\n \t\"github.com/umputun/remark42/backend/app/store/admin\"\n@@ -627,7 +628,9 @@ func (s *DataStore) Counts(siteID string, postIDs []string) ([]store.PostInfo, e\n \treturn res, nil\n }\n \n-// ValidateComment checks if comment size below max and user fields set\n+// ValidateComment checks if comment size below max and user fields set.\n+// It also validates the absence of relative links as they are almost never the intention of the commenter,\n+// usually added by mistakes and only create confusion.\n func (s *DataStore) ValidateComment(c *store.Comment) error {\n \tmaxSize := s.MaxCommentSize\n \tif s.MaxCommentSize <= 0 {\n@@ -642,7 +645,21 @@ func (s *DataStore) ValidateComment(c *store.Comment) error {\n \tif c.User.ID == \"\" || c.User.Name == \"\" {\n \t\treturn fmt.Errorf(\"empty user info\")\n \t}\n-\treturn nil\n+\n+\tmdExt, rend := store.GetMdExtensionsAndRenderer()\n+\tparser := bf.New(bf.WithRenderer(rend), bf.WithExtensions(bf.CommonExtensions), bf.WithExtensions(mdExt))\n+\tvar wrongLinkError error\n+\tparser.Parse([]byte(c.Orig)).Walk(func(node *bf.Node, entering bool) bf.WalkStatus {\n+\t\tif len(node.LinkData.Destination) != 0 &&\n+\t\t\t!(strings.HasPrefix(string(node.LinkData.Destination), \"http://\") ||\n+\t\t\t\tstrings.HasPrefix(string(node.LinkData.Destination), \"https://\") ||\n+\t\t\t\tstrings.HasPrefix(string(node.LinkData.Destination), \"mailto:\")) {\n+\t\t\twrongLinkError = fmt.Errorf(\"links should start with mailto:, http:// or https://\")\n+\t\t\treturn bf.Terminate\n+\t\t}\n+\t\treturn bf.GoToNext\n+\t})\n+\treturn wrongLinkError\n }\n \n // IsAdmin checks if usesID in the list of admins" + }, + { + "sha": "13638fc522fe9c074879783092b81695ece48a2a", + "filename": "backend/app/store/service/service_test.go", + "status": "modified", + "additions": 10, + "deletions": 7, + "changes": 17, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice_test.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice_test.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fservice%2Fservice_test.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -780,22 +780,25 @@ func TestService_ValidateComment(t *testing.T) {\n \n \ttbl := []struct {\n \t\tinp store.Comment\n-\t\terr error\n+\t\terr string\n \t}{\n-\t\t{inp: store.Comment{}, err: fmt.Errorf(\"empty comment text\")},\n-\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: nil},\n-\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\"}}, err: fmt.Errorf(\"empty user info\")},\n-\t\t{inp: store.Comment{Orig: longText, User: store.User{ID: \"myid\", Name: \"name\"}}, err: fmt.Errorf(\"comment text exceeded max allowed size 2000 (4000)\")},\n+\t\t{inp: store.Comment{}, err: \"empty comment text\"},\n+\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"\"},\n+\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\"}}, err: \"empty user info\"},\n+\t\t{inp: store.Comment{Orig: longText, User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"comment text exceeded max allowed size 2000 (4000)\"},\n+\t\t{inp: store.Comment{Orig: \"here is a link with relative URL: [google.com](url)\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"links should start with mailto:, http:// or https://\"},\n+\t\t{inp: store.Comment{Orig: \"here is a link with relative URL: [google.com](url)\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"links should start with mailto:, http:// or https://\"},\n+\t\t{inp: store.Comment{Orig: \"multiple links, one is bad: [test](http://test) [test2](bad_url) [test3](https://test3)\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"links should start with mailto:, http:// or https://\"},\n \t}\n \n \tfor n, tt := range tbl {\n \t\terr := b.ValidateComment(&tt.inp)\n-\t\tif tt.err == nil {\n+\t\tif tt.err == \"\" {\n \t\t\tassert.NoError(t, err, \"check #%d\", n)\n \t\t\tcontinue\n \t\t}\n \t\trequire.Error(t, err)\n-\t\tassert.EqualError(t, tt.err, err.Error(), \"check #%d\", n)\n+\t\tassert.EqualError(t, err, tt.err, \"check #%d\", n)\n \t}\n }\n " + } + ] +} diff --git a/apigh/2023-04-19/rocket_firm b/apigh/2023-04-19/rocket_firm new file mode 100644 index 00000000..f8d0e1e9 --- /dev/null +++ b/apigh/2023-04-19/rocket_firm @@ -0,0 +1,118 @@ +{ + "id": 53047924, + "node_id": "MDEwOlJlcG9zaXRvcnk1MzA0NzkyNA==", + "name": "yii2-rocket-comments", + "full_name": "naffiq/yii2-rocket-comments", + "private": false, + "owner": { + "login": "naffiq", + "id": 3990098, + "node_id": "MDQ6VXNlcjM5OTAwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3990098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/naffiq", + "html_url": "https://github.com/naffiq", + "followers_url": "https://api.github.com/users/naffiq/followers", + "following_url": "https://api.github.com/users/naffiq/following{/other_user}", + "gists_url": "https://api.github.com/users/naffiq/gists{/gist_id}", + "starred_url": "https://api.github.com/users/naffiq/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/naffiq/subscriptions", + "organizations_url": "https://api.github.com/users/naffiq/orgs", + "repos_url": "https://api.github.com/users/naffiq/repos", + "events_url": "https://api.github.com/users/naffiq/events{/privacy}", + "received_events_url": "https://api.github.com/users/naffiq/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/naffiq/yii2-rocket-comments", + "description": "ะกะธัั‚ะตะผะฐ ะบะพะผะผะตะฝั‚ะฐั€ะธะตะฒ ั ั€ะตะนั‚ะธะฝะณะพะผ ะธ ะฟะปัŽัˆะบะฐะผะธ", + "fork": false, + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments", + "forks_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/forks", + "keys_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/teams", + "hooks_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/hooks", + "issue_events_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/events", + "assignees_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/tags", + "blobs_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/languages", + "stargazers_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/stargazers", + "contributors_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/contributors", + "subscribers_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/subscribers", + "subscription_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/subscription", + "commits_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/merges", + "archive_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/downloads", + "issues_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/deployments", + "created_at": "2016-03-03T12:17:01Z", + "updated_at": "2016-11-28T04:52:06Z", + "pushed_at": "2017-03-03T09:34:32Z", + "git_url": "git://github.com/naffiq/yii2-rocket-comments.git", + "ssh_url": "git@github.com:naffiq/yii2-rocket-comments.git", + "clone_url": "https://github.com/naffiq/yii2-rocket-comments.git", + "svn_url": "https://github.com/naffiq/yii2-rocket-comments", + "homepage": null, + "size": 61, + "stargazers_count": 1, + "watchers_count": 1, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 3, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 3, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 3, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/rocket_firm.commit b/apigh/2023-04-19/rocket_firm.commit new file mode 100644 index 00000000..1e3e3808 --- /dev/null +++ b/apigh/2023-04-19/rocket_firm.commit @@ -0,0 +1,98 @@ +{ + "sha": "0663fadc304731fafff3e15253e93e3b802fe68d", + "node_id": "MDY6Q29tbWl0NTMwNDc5MjQ6MDY2M2ZhZGMzMDQ3MzFmYWZmZjNlMTUyNTNlOTNlM2I4MDJmZTY4ZA==", + "commit": { + "author": { + "name": "Galymzhan Abdugalimov", + "email": "abdu.galymzhan@gmail.com", + "date": "2017-03-03T09:34:06Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2017-03-03T09:34:06Z" + }, + "message": "Updated date helper dependencies", + "tree": { + "sha": "d536a34b75128ecb4404b504bf7c5c71b8a00327", + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/trees/d536a34b75128ecb4404b504bf7c5c71b8a00327" + }, + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/commits/0663fadc304731fafff3e15253e93e3b802fe68d", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits/0663fadc304731fafff3e15253e93e3b802fe68d", + "html_url": "https://github.com/naffiq/yii2-rocket-comments/commit/0663fadc304731fafff3e15253e93e3b802fe68d", + "comments_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits/0663fadc304731fafff3e15253e93e3b802fe68d/comments", + "author": { + "login": "naffiq", + "id": 3990098, + "node_id": "MDQ6VXNlcjM5OTAwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3990098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/naffiq", + "html_url": "https://github.com/naffiq", + "followers_url": "https://api.github.com/users/naffiq/followers", + "following_url": "https://api.github.com/users/naffiq/following{/other_user}", + "gists_url": "https://api.github.com/users/naffiq/gists{/gist_id}", + "starred_url": "https://api.github.com/users/naffiq/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/naffiq/subscriptions", + "organizations_url": "https://api.github.com/users/naffiq/orgs", + "repos_url": "https://api.github.com/users/naffiq/repos", + "events_url": "https://api.github.com/users/naffiq/events{/privacy}", + "received_events_url": "https://api.github.com/users/naffiq/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "75c797f18ace657479620466d4e0433db92c0841", + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits/75c797f18ace657479620466d4e0433db92c0841", + "html_url": "https://github.com/naffiq/yii2-rocket-comments/commit/75c797f18ace657479620466d4e0433db92c0841" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "1a5435789949109403e23d050a591bde6b945e7f", + "filename": "composer.json", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/naffiq/yii2-rocket-comments/blob/0663fadc304731fafff3e15253e93e3b802fe68d/composer.json", + "raw_url": "https://github.com/naffiq/yii2-rocket-comments/raw/0663fadc304731fafff3e15253e93e3b802fe68d/composer.json", + "contents_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/contents/composer.json?ref=0663fadc304731fafff3e15253e93e3b802fe68d", + "patch": "@@ -4,7 +4,7 @@\n \"type\": \"yii2-extension\",\n \"require\": {\n \"yiisoft/yii2\": \"~2.0.0\",\n- \"naffiq/yii2-helpers\": \"^v0.0.2\",\n+ \"naffiq/yii2-helpers\": \"^v0.0.3\",\n \"creocoder/yii2-nested-sets\": \"^0.9.0\"\n },\n \"require-dev\": {" + } + ] +} diff --git a/apigh/2023-04-19/schnak b/apigh/2023-04-19/schnak new file mode 100644 index 00000000..0643e2f6 --- /dev/null +++ b/apigh/2023-04-19/schnak @@ -0,0 +1,142 @@ +{ + "id": 105789365, + "node_id": "MDEwOlJlcG9zaXRvcnkxMDU3ODkzNjU=", + "name": "schnack", + "full_name": "schn4ck/schnack", + "private": false, + "owner": { + "login": "schn4ck", + "id": 35145986, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM1MTQ1OTg2", + "avatar_url": "https://avatars.githubusercontent.com/u/35145986?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/schn4ck", + "html_url": "https://github.com/schn4ck", + "followers_url": "https://api.github.com/users/schn4ck/followers", + "following_url": "https://api.github.com/users/schn4ck/following{/other_user}", + "gists_url": "https://api.github.com/users/schn4ck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/schn4ck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/schn4ck/subscriptions", + "organizations_url": "https://api.github.com/users/schn4ck/orgs", + "repos_url": "https://api.github.com/users/schn4ck/repos", + "events_url": "https://api.github.com/users/schn4ck/events{/privacy}", + "received_events_url": "https://api.github.com/users/schn4ck/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/schn4ck/schnack", + "description": "๐Ÿ—ฃ๏ธ Simple self-hosted node app for Disqus-like drop-in commenting on static websites ", + "fork": false, + "url": "https://api.github.com/repos/schn4ck/schnack", + "forks_url": "https://api.github.com/repos/schn4ck/schnack/forks", + "keys_url": "https://api.github.com/repos/schn4ck/schnack/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/schn4ck/schnack/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/schn4ck/schnack/teams", + "hooks_url": "https://api.github.com/repos/schn4ck/schnack/hooks", + "issue_events_url": "https://api.github.com/repos/schn4ck/schnack/issues/events{/number}", + "events_url": "https://api.github.com/repos/schn4ck/schnack/events", + "assignees_url": "https://api.github.com/repos/schn4ck/schnack/assignees{/user}", + "branches_url": "https://api.github.com/repos/schn4ck/schnack/branches{/branch}", + "tags_url": "https://api.github.com/repos/schn4ck/schnack/tags", + "blobs_url": "https://api.github.com/repos/schn4ck/schnack/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/schn4ck/schnack/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/schn4ck/schnack/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/schn4ck/schnack/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/schn4ck/schnack/statuses/{sha}", + "languages_url": "https://api.github.com/repos/schn4ck/schnack/languages", + "stargazers_url": "https://api.github.com/repos/schn4ck/schnack/stargazers", + "contributors_url": "https://api.github.com/repos/schn4ck/schnack/contributors", + "subscribers_url": "https://api.github.com/repos/schn4ck/schnack/subscribers", + "subscription_url": "https://api.github.com/repos/schn4ck/schnack/subscription", + "commits_url": "https://api.github.com/repos/schn4ck/schnack/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/schn4ck/schnack/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/schn4ck/schnack/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/schn4ck/schnack/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/schn4ck/schnack/contents/{+path}", + "compare_url": "https://api.github.com/repos/schn4ck/schnack/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/schn4ck/schnack/merges", + "archive_url": "https://api.github.com/repos/schn4ck/schnack/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/schn4ck/schnack/downloads", + "issues_url": "https://api.github.com/repos/schn4ck/schnack/issues{/number}", + "pulls_url": "https://api.github.com/repos/schn4ck/schnack/pulls{/number}", + "milestones_url": "https://api.github.com/repos/schn4ck/schnack/milestones{/number}", + "notifications_url": "https://api.github.com/repos/schn4ck/schnack/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/schn4ck/schnack/labels{/name}", + "releases_url": "https://api.github.com/repos/schn4ck/schnack/releases{/id}", + "deployments_url": "https://api.github.com/repos/schn4ck/schnack/deployments", + "created_at": "2017-10-04T16:09:58Z", + "updated_at": "2023-04-16T06:02:06Z", + "pushed_at": "2023-03-03T07:38:46Z", + "git_url": "git://github.com/schn4ck/schnack.git", + "ssh_url": "git@github.com:schn4ck/schnack.git", + "clone_url": "https://github.com/schn4ck/schnack.git", + "svn_url": "https://github.com/schn4ck/schnack", + "homepage": "https://schnack.cool/", + "size": 1849, + "stargazers_count": 1794, + "watchers_count": 1794, + "language": "JavaScript", + "has_issues": true, + "has_projects": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 97, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 46, + "license": { + "key": "other", + "name": "Other", + "spdx_id": "NOASSERTION", + "url": null, + "node_id": "MDc6TGljZW5zZTA=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting", + "disqus", + "disqus-clone", + "nodejs", + "schnack" + ], + "visibility": "public", + "forks": 97, + "open_issues": 46, + "watchers": 1794, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "schn4ck", + "id": 35145986, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM1MTQ1OTg2", + "avatar_url": "https://avatars.githubusercontent.com/u/35145986?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/schn4ck", + "html_url": "https://github.com/schn4ck", + "followers_url": "https://api.github.com/users/schn4ck/followers", + "following_url": "https://api.github.com/users/schn4ck/following{/other_user}", + "gists_url": "https://api.github.com/users/schn4ck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/schn4ck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/schn4ck/subscriptions", + "organizations_url": "https://api.github.com/users/schn4ck/orgs", + "repos_url": "https://api.github.com/users/schn4ck/repos", + "events_url": "https://api.github.com/users/schn4ck/events{/privacy}", + "received_events_url": "https://api.github.com/users/schn4ck/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 97, + "subscribers_count": 27 +} diff --git a/apigh/2023-04-19/schnak.commit b/apigh/2023-04-19/schnak.commit new file mode 100644 index 00000000..3adf3f14 --- /dev/null +++ b/apigh/2023-04-19/schnak.commit @@ -0,0 +1,98 @@ +{ + "sha": "e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "node_id": "C_kwDOBk43tdoAKGU5MjhjMTRkOWI0YjNkNGUxZDFmZDlkMmJkYzNkMWU2NzFhZTBlNDk", + "commit": { + "author": { + "name": "dependabot[bot]", + "email": "49699333+dependabot[bot]@users.noreply.github.com", + "date": "2022-06-28T08:59:52Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2022-06-28T08:59:52Z" + }, + "message": "build(deps): bump hosted-git-info from 2.7.1 to 2.8.9 in /create-schnack (#133)\n\nBumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.7.1 to 2.8.9.\r\n- [Release notes](https://github.com/npm/hosted-git-info/releases)\r\n- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)\r\n- [Commits](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.9)\r\n\r\nSigned-off-by: dependabot[bot] \r\n\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>", + "tree": { + "sha": "787ef48872df9472f0829b31cae88fa9c07ac1ea", + "url": "https://api.github.com/repos/schn4ck/schnack/git/trees/787ef48872df9472f0829b31cae88fa9c07ac1ea" + }, + "url": "https://api.github.com/repos/schn4ck/schnack/git/commits/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJiusMICRBK7hj4Ov3rIwAAuTYIAGM90C9YvQXLdhT7HZZA/wfV\n0Knss076ILuzu8i3l9j6s5m2D69Jn8cA5762XyPHTkvTrw+I215qmlBECVaZH+Zn\ntxPz3bhVSZim2+KCTlNCQVmuZrXPt46vd2v8R5xRX+g4zPmfGOk7rRiBtEHJR0Jy\nWrTL9nJ0dL9Inm3XuAUj8LWaDVA3K1+ikQJLHeaZiqCwvlk2Dzw0CVFF9iZ9yh4B\n4Futcv+MYGUB7W0ybjOCKaCgCFB3ghk9JonTQkKcYQnGVKyRaQsWkHOvZaliWOAv\nItTEek8S+i4qu4zzD55e0um98hSclmd3X9f+14bhGuXcMuTUm6hM3Ygi2onjj1k=\n=kAix\n-----END PGP SIGNATURE-----\n", + "payload": "tree 787ef48872df9472f0829b31cae88fa9c07ac1ea\nparent ccabb2718f56ea56add522f8ec92ed853a912e75\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1656406792 +0000\ncommitter GitHub 1656406792 +0000\n\nbuild(deps): bump hosted-git-info from 2.7.1 to 2.8.9 in /create-schnack (#133)\n\nBumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.7.1 to 2.8.9.\r\n- [Release notes](https://github.com/npm/hosted-git-info/releases)\r\n- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)\r\n- [Commits](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.9)\r\n\r\nSigned-off-by: dependabot[bot] \r\n\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>" + } + }, + "url": "https://api.github.com/repos/schn4ck/schnack/commits/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "html_url": "https://github.com/schn4ck/schnack/commit/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "comments_url": "https://api.github.com/repos/schn4ck/schnack/commits/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49/comments", + "author": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ccabb2718f56ea56add522f8ec92ed853a912e75", + "url": "https://api.github.com/repos/schn4ck/schnack/commits/ccabb2718f56ea56add522f8ec92ed853a912e75", + "html_url": "https://github.com/schn4ck/schnack/commit/ccabb2718f56ea56add522f8ec92ed853a912e75" + } + ], + "stats": { + "total": 6, + "additions": 3, + "deletions": 3 + }, + "files": [ + { + "sha": "5b91d8fef204fed0c1ee20e94ec659f1576a6797", + "filename": "create-schnack/package-lock.json", + "status": "modified", + "additions": 3, + "deletions": 3, + "changes": 6, + "blob_url": "https://github.com/schn4ck/schnack/blob/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49/create-schnack%2Fpackage-lock.json", + "raw_url": "https://github.com/schn4ck/schnack/raw/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49/create-schnack%2Fpackage-lock.json", + "contents_url": "https://api.github.com/repos/schn4ck/schnack/contents/create-schnack%2Fpackage-lock.json?ref=e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "patch": "@@ -976,9 +976,9 @@\n \t\t\t}\n \t\t},\n \t\t\"hosted-git-info\": {\n-\t\t\t\"version\": \"2.7.1\",\n-\t\t\t\"resolved\": \"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz\",\n-\t\t\t\"integrity\": \"sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==\",\n+\t\t\t\"version\": \"2.8.9\",\n+\t\t\t\"resolved\": \"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz\",\n+\t\t\t\"integrity\": \"sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==\",\n \t\t\t\"dev\": true\n \t\t},\n \t\t\"iconv-lite\": {" + } + ] +} diff --git a/apigh/2023-04-19/sidecar b/apigh/2023-04-19/sidecar new file mode 100644 index 00000000..70d3186e --- /dev/null +++ b/apigh/2023-04-19/sidecar @@ -0,0 +1,118 @@ +{ + "id": 91973311, + "node_id": "MDEwOlJlcG9zaXRvcnk5MTk3MzMxMQ==", + "name": "comment-sidecar", + "full_name": "phauer/comment-sidecar", + "private": false, + "owner": { + "login": "phauer", + "id": 6293139, + "node_id": "MDQ6VXNlcjYyOTMxMzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/6293139?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phauer", + "html_url": "https://github.com/phauer", + "followers_url": "https://api.github.com/users/phauer/followers", + "following_url": "https://api.github.com/users/phauer/following{/other_user}", + "gists_url": "https://api.github.com/users/phauer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phauer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phauer/subscriptions", + "organizations_url": "https://api.github.com/users/phauer/orgs", + "repos_url": "https://api.github.com/users/phauer/repos", + "events_url": "https://api.github.com/users/phauer/events{/privacy}", + "received_events_url": "https://api.github.com/users/phauer/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/phauer/comment-sidecar", + "description": "Lightweight, tracking-free, self-hosted comment service for web spaces supporting only PHP and MySQL ", + "fork": false, + "url": "https://api.github.com/repos/phauer/comment-sidecar", + "forks_url": "https://api.github.com/repos/phauer/comment-sidecar/forks", + "keys_url": "https://api.github.com/repos/phauer/comment-sidecar/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/phauer/comment-sidecar/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/phauer/comment-sidecar/teams", + "hooks_url": "https://api.github.com/repos/phauer/comment-sidecar/hooks", + "issue_events_url": "https://api.github.com/repos/phauer/comment-sidecar/issues/events{/number}", + "events_url": "https://api.github.com/repos/phauer/comment-sidecar/events", + "assignees_url": "https://api.github.com/repos/phauer/comment-sidecar/assignees{/user}", + "branches_url": "https://api.github.com/repos/phauer/comment-sidecar/branches{/branch}", + "tags_url": "https://api.github.com/repos/phauer/comment-sidecar/tags", + "blobs_url": "https://api.github.com/repos/phauer/comment-sidecar/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/phauer/comment-sidecar/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/phauer/comment-sidecar/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/phauer/comment-sidecar/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/phauer/comment-sidecar/statuses/{sha}", + "languages_url": "https://api.github.com/repos/phauer/comment-sidecar/languages", + "stargazers_url": "https://api.github.com/repos/phauer/comment-sidecar/stargazers", + "contributors_url": "https://api.github.com/repos/phauer/comment-sidecar/contributors", + "subscribers_url": "https://api.github.com/repos/phauer/comment-sidecar/subscribers", + "subscription_url": "https://api.github.com/repos/phauer/comment-sidecar/subscription", + "commits_url": "https://api.github.com/repos/phauer/comment-sidecar/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/phauer/comment-sidecar/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/phauer/comment-sidecar/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/phauer/comment-sidecar/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/phauer/comment-sidecar/contents/{+path}", + "compare_url": "https://api.github.com/repos/phauer/comment-sidecar/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/phauer/comment-sidecar/merges", + "archive_url": "https://api.github.com/repos/phauer/comment-sidecar/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/phauer/comment-sidecar/downloads", + "issues_url": "https://api.github.com/repos/phauer/comment-sidecar/issues{/number}", + "pulls_url": "https://api.github.com/repos/phauer/comment-sidecar/pulls{/number}", + "milestones_url": "https://api.github.com/repos/phauer/comment-sidecar/milestones{/number}", + "notifications_url": "https://api.github.com/repos/phauer/comment-sidecar/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/phauer/comment-sidecar/labels{/name}", + "releases_url": "https://api.github.com/repos/phauer/comment-sidecar/releases{/id}", + "deployments_url": "https://api.github.com/repos/phauer/comment-sidecar/deployments", + "created_at": "2017-05-21T16:57:57Z", + "updated_at": "2021-12-26T02:52:05Z", + "pushed_at": "2022-12-06T05:24:28Z", + "git_url": "git://github.com/phauer/comment-sidecar.git", + "ssh_url": "git@github.com:phauer/comment-sidecar.git", + "clone_url": "https://github.com/phauer/comment-sidecar.git", + "svn_url": "https://github.com/phauer/comment-sidecar", + "homepage": "", + "size": 668, + "stargazers_count": 36, + "watchers_count": 36, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 4, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 6, + "open_issues": 4, + "watchers": 36, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 6, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-19/sidecar.commit b/apigh/2023-04-19/sidecar.commit new file mode 100644 index 00000000..8bbbfca2 --- /dev/null +++ b/apigh/2023-04-19/sidecar.commit @@ -0,0 +1,103 @@ +{ + "sha": "5447b222249d06277795e85bf01a0c1866b3c1f2", + "node_id": "MDY6Q29tbWl0OTE5NzMzMTE6NTQ0N2IyMjIyNDlkMDYyNzc3OTVlODViZjAxYTBjMTg2NmIzYzFmMg==", + "commit": { + "author": { + "name": "Philipp Hauer", + "email": "info@philipphauer.de", + "date": "2021-02-24T20:37:14Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-02-24T20:37:14Z" + }, + "message": "Merge pull request #3 from Pflugshaupt/patch-1\n\nUpdate en.php", + "tree": { + "sha": "b024bef0253f16a91dacc4eeced711974477495a", + "url": "https://api.github.com/repos/phauer/comment-sidecar/git/trees/b024bef0253f16a91dacc4eeced711974477495a" + }, + "url": "https://api.github.com/repos/phauer/comment-sidecar/git/commits/5447b222249d06277795e85bf01a0c1866b3c1f2", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJgNrj6CRBK7hj4Ov3rIwAAdHIIAKVTFmIKwCCbK1X+xH+/VQfO\nIQutNDFohYEKE47UcwdViHepKzG171gV6l42tK5NhYlGRyX6NMWH87K0N9Y8FzKP\n9K0JLi9PBIX7yuensAm7dlRa1gYcE6aoJTiPxwmktPxquj8JKFg1cqXwfzRRxkkl\ncinDXbDgMplR6SOD22HsRvFmY8Le+742XgBb/W+TJ+Y32Q+dE8iD12JyL5KW5ZqR\nVvElX8oRbL8CjfrmGlqzpvsH2OzJ9e4hJHaiedJkpXL1AEqmYpCD3yOG20tIrQvf\nJ/O3j7ir4YwZD3xYv4+gQ77qkFZ/wymMlfjLBskNVefMvo5n5jLbedqGlLZe+Us=\n=PdMI\n-----END PGP SIGNATURE-----\n", + "payload": "tree b024bef0253f16a91dacc4eeced711974477495a\nparent d3692fe73552cbc7b71e9625a9382a84a2090740\nparent d93b7f0d3fe774586be9d1e7cb5fa10ebef57062\nauthor Philipp Hauer 1614199034 +0100\ncommitter GitHub 1614199034 +0100\n\nMerge pull request #3 from Pflugshaupt/patch-1\n\nUpdate en.php" + } + }, + "url": "https://api.github.com/repos/phauer/comment-sidecar/commits/5447b222249d06277795e85bf01a0c1866b3c1f2", + "html_url": "https://github.com/phauer/comment-sidecar/commit/5447b222249d06277795e85bf01a0c1866b3c1f2", + "comments_url": "https://api.github.com/repos/phauer/comment-sidecar/commits/5447b222249d06277795e85bf01a0c1866b3c1f2/comments", + "author": { + "login": "phauer", + "id": 6293139, + "node_id": "MDQ6VXNlcjYyOTMxMzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/6293139?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phauer", + "html_url": "https://github.com/phauer", + "followers_url": "https://api.github.com/users/phauer/followers", + "following_url": "https://api.github.com/users/phauer/following{/other_user}", + "gists_url": "https://api.github.com/users/phauer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phauer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phauer/subscriptions", + "organizations_url": "https://api.github.com/users/phauer/orgs", + "repos_url": "https://api.github.com/users/phauer/repos", + "events_url": "https://api.github.com/users/phauer/events{/privacy}", + "received_events_url": "https://api.github.com/users/phauer/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d3692fe73552cbc7b71e9625a9382a84a2090740", + "url": "https://api.github.com/repos/phauer/comment-sidecar/commits/d3692fe73552cbc7b71e9625a9382a84a2090740", + "html_url": "https://github.com/phauer/comment-sidecar/commit/d3692fe73552cbc7b71e9625a9382a84a2090740" + }, + { + "sha": "d93b7f0d3fe774586be9d1e7cb5fa10ebef57062", + "url": "https://api.github.com/repos/phauer/comment-sidecar/commits/d93b7f0d3fe774586be9d1e7cb5fa10ebef57062", + "html_url": "https://github.com/phauer/comment-sidecar/commit/d93b7f0d3fe774586be9d1e7cb5fa10ebef57062" + } + ], + "stats": { + "total": 4, + "additions": 2, + "deletions": 2 + }, + "files": [ + { + "sha": "cae68f9208db4a41598317cf7ec06b52c98f2170", + "filename": "src/translations/en.php", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/phauer/comment-sidecar/blob/5447b222249d06277795e85bf01a0c1866b3c1f2/src%2Ftranslations%2Fen.php", + "raw_url": "https://github.com/phauer/comment-sidecar/raw/5447b222249d06277795e85bf01a0c1866b3c1f2/src%2Ftranslations%2Fen.php", + "contents_url": "https://api.github.com/repos/phauer/comment-sidecar/contents/src%2Ftranslations%2Fen.php?ref=5447b222249d06277795e85bf01a0c1866b3c1f2", + "patch": "@@ -24,8 +24,8 @@\n \n # reply notification e-mail\n 'subject' => 'Reply to your comment by {}',\n- 'introduction' => 'there is a reply to our comment.',\n+ 'introduction' => 'There is a reply to your comment.',\n 'author' => 'Author',\n 'message' => 'Message',\n 'unsubscribeDescription' => 'To unsubscribe mail notifications like this please click on the following link:',\n-);\n\\ No newline at end of file\n+);" + } + ] +} diff --git a/apigh/2023-04-19/site_point_nested_comments b/apigh/2023-04-19/site_point_nested_comments new file mode 100644 index 00000000..6fb535fa --- /dev/null +++ b/apigh/2023-04-19/site_point_nested_comments @@ -0,0 +1,112 @@ +{ + "id": 18562510, + "node_id": "MDEwOlJlcG9zaXRvcnkxODU2MjUxMA==", + "name": "SitePointNestedComments", + "full_name": "bodrovis/SitePointNestedComments", + "private": false, + "owner": { + "login": "bodrovis", + "id": 646942, + "node_id": "MDQ6VXNlcjY0Njk0Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/646942?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bodrovis", + "html_url": "https://github.com/bodrovis", + "followers_url": "https://api.github.com/users/bodrovis/followers", + "following_url": "https://api.github.com/users/bodrovis/following{/other_user}", + "gists_url": "https://api.github.com/users/bodrovis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bodrovis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bodrovis/subscriptions", + "organizations_url": "https://api.github.com/users/bodrovis/orgs", + "repos_url": "https://api.github.com/users/bodrovis/repos", + "events_url": "https://api.github.com/users/bodrovis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bodrovis/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/bodrovis/SitePointNestedComments", + "description": "Source code for the Nested Comments with Rails article on Sitepoint", + "fork": false, + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments", + "forks_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/forks", + "keys_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/teams", + "hooks_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/hooks", + "issue_events_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/issues/events{/number}", + "events_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/events", + "assignees_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/assignees{/user}", + "branches_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/branches{/branch}", + "tags_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/tags", + "blobs_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/languages", + "stargazers_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/stargazers", + "contributors_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contributors", + "subscribers_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/subscribers", + "subscription_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/subscription", + "commits_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/{+path}", + "compare_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/merges", + "archive_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/downloads", + "issues_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/issues{/number}", + "pulls_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/labels{/name}", + "releases_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/releases{/id}", + "deployments_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/deployments", + "created_at": "2014-04-08T14:56:49Z", + "updated_at": "2023-01-28T17:50:26Z", + "pushed_at": "2016-11-29T17:50:26Z", + "git_url": "git://github.com/bodrovis/SitePointNestedComments.git", + "ssh_url": "git@github.com:bodrovis/SitePointNestedComments.git", + "clone_url": "https://github.com/bodrovis/SitePointNestedComments.git", + "svn_url": "https://github.com/bodrovis/SitePointNestedComments", + "homepage": "http://nested-comments.radiant-wind.com/", + "size": 59, + "stargazers_count": 15, + "watchers_count": 15, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 11, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 11, + "open_issues": 0, + "watchers": 15, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 11, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/site_point_nested_comments.commit b/apigh/2023-04-19/site_point_nested_comments.commit new file mode 100644 index 00000000..995f9168 --- /dev/null +++ b/apigh/2023-04-19/site_point_nested_comments.commit @@ -0,0 +1,84 @@ +{ + "sha": "f9259efece5ec29ce237eab422842057af3f05f7", + "node_id": "MDY6Q29tbWl0MTg1NjI1MTA6ZjkyNTllZmVjZTVlYzI5Y2UyMzdlYWI0MjI4NDIwNTdhZjNmMDVmNw==", + "commit": { + "author": { + "name": "bodrovis", + "email": "ibodrov@campaigner.ru", + "date": "2016-11-29T17:50:18Z" + }, + "committer": { + "name": "bodrovis", + "email": "ibodrov@campaigner.ru", + "date": "2016-11-29T17:50:18Z" + }, + "message": "update readme", + "tree": { + "sha": "c01bfcd62582b15198d27650708bd4d7e7b971a0", + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/trees/c01bfcd62582b15198d27650708bd4d7e7b971a0" + }, + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/commits/f9259efece5ec29ce237eab422842057af3f05f7", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits/f9259efece5ec29ce237eab422842057af3f05f7", + "html_url": "https://github.com/bodrovis/SitePointNestedComments/commit/f9259efece5ec29ce237eab422842057af3f05f7", + "comments_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits/f9259efece5ec29ce237eab422842057af3f05f7/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "0c84fbf0f0798806ea53611de60055553f9704b6", + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits/0c84fbf0f0798806ea53611de60055553f9704b6", + "html_url": "https://github.com/bodrovis/SitePointNestedComments/commit/0c84fbf0f0798806ea53611de60055553f9704b6" + } + ], + "stats": { + "total": 9, + "additions": 6, + "deletions": 3 + }, + "files": [ + { + "sha": "b8c27ebe6b647dbe45ac2a7a99f8dbfaa67919ee", + "filename": "Gemfile.lock", + "status": "modified", + "additions": 3, + "deletions": 0, + "changes": 3, + "blob_url": "https://github.com/bodrovis/SitePointNestedComments/blob/f9259efece5ec29ce237eab422842057af3f05f7/Gemfile.lock", + "raw_url": "https://github.com/bodrovis/SitePointNestedComments/raw/f9259efece5ec29ce237eab422842057af3f05f7/Gemfile.lock", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/Gemfile.lock?ref=f9259efece5ec29ce237eab422842057af3f05f7", + "patch": "@@ -160,3 +160,6 @@ DEPENDENCIES\n turbolinks\n tzinfo-data\n uglifier (>= 1.3.0)\n+\n+BUNDLED WITH\n+ 1.10.6" + }, + { + "sha": "38e292202efa4638e71ac28e5c12e2c317cfb792", + "filename": "README.md", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/bodrovis/SitePointNestedComments/blob/f9259efece5ec29ce237eab422842057af3f05f7/README.md", + "raw_url": "https://github.com/bodrovis/SitePointNestedComments/raw/f9259efece5ec29ce237eab422842057af3f05f7/README.md", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/README.md?ref=f9259efece5ec29ce237eab422842057af3f05f7", + "patch": "@@ -1,4 +1,4 @@\n Source code for the [Nested Comments with Rails](http://www.sitepoint.com/nested-comments-rails/) article on SitePoint,\n-created by Ilya Bodrov ([radiant-wind.com](http://radiant-wind.com)).\n+created by Ilya Bodrov ([bodrovis.tech](http://bodrovis.tech)).\n \n-[Working demo](http://nested-comments.radiant-wind.com).\n\\ No newline at end of file\n+[Working demo](http://nested-comments.bodrovis.tech).\n\\ No newline at end of file" + }, + { + "sha": "5195bcaf7354741574d9b3b143bd696380787fcf", + "filename": "app/views/layouts/application.html.erb", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/bodrovis/SitePointNestedComments/blob/f9259efece5ec29ce237eab422842057af3f05f7/app%2Fviews%2Flayouts%2Fapplication.html.erb", + "raw_url": "https://github.com/bodrovis/SitePointNestedComments/raw/f9259efece5ec29ce237eab422842057af3f05f7/app%2Fviews%2Flayouts%2Fapplication.html.erb", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/app%2Fviews%2Flayouts%2Fapplication.html.erb?ref=f9259efece5ec29ce237eab422842057af3f05f7", + "patch": "@@ -29,7 +29,7 @@\n \n
      \n
      \n-

      Created by Radiant Wind

      \n+

      Created by Radiant Wind

      \n
      \n
      \n " + } + ] +} diff --git a/apigh/2023-04-19/some_comments b/apigh/2023-04-19/some_comments new file mode 100644 index 00000000..d4bb952b --- /dev/null +++ b/apigh/2023-04-19/some_comments @@ -0,0 +1,118 @@ +{ + "id": 33710509, + "node_id": "MDEwOlJlcG9zaXRvcnkzMzcxMDUwOQ==", + "name": "some-comments", + "full_name": "fiddur/some-comments", + "private": false, + "owner": { + "login": "fiddur", + "id": 148166, + "node_id": "MDQ6VXNlcjE0ODE2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/148166?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fiddur", + "html_url": "https://github.com/fiddur", + "followers_url": "https://api.github.com/users/fiddur/followers", + "following_url": "https://api.github.com/users/fiddur/following{/other_user}", + "gists_url": "https://api.github.com/users/fiddur/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fiddur/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fiddur/subscriptions", + "organizations_url": "https://api.github.com/users/fiddur/orgs", + "repos_url": "https://api.github.com/users/fiddur/repos", + "events_url": "https://api.github.com/users/fiddur/events{/privacy}", + "received_events_url": "https://api.github.com/users/fiddur/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/fiddur/some-comments", + "description": "DEPRECATED: See Oratorium", + "fork": false, + "url": "https://api.github.com/repos/fiddur/some-comments", + "forks_url": "https://api.github.com/repos/fiddur/some-comments/forks", + "keys_url": "https://api.github.com/repos/fiddur/some-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/fiddur/some-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/fiddur/some-comments/teams", + "hooks_url": "https://api.github.com/repos/fiddur/some-comments/hooks", + "issue_events_url": "https://api.github.com/repos/fiddur/some-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/fiddur/some-comments/events", + "assignees_url": "https://api.github.com/repos/fiddur/some-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/fiddur/some-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/fiddur/some-comments/tags", + "blobs_url": "https://api.github.com/repos/fiddur/some-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/fiddur/some-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/fiddur/some-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/fiddur/some-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/fiddur/some-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/fiddur/some-comments/languages", + "stargazers_url": "https://api.github.com/repos/fiddur/some-comments/stargazers", + "contributors_url": "https://api.github.com/repos/fiddur/some-comments/contributors", + "subscribers_url": "https://api.github.com/repos/fiddur/some-comments/subscribers", + "subscription_url": "https://api.github.com/repos/fiddur/some-comments/subscription", + "commits_url": "https://api.github.com/repos/fiddur/some-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/fiddur/some-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/fiddur/some-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/fiddur/some-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/fiddur/some-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/fiddur/some-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/fiddur/some-comments/merges", + "archive_url": "https://api.github.com/repos/fiddur/some-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/fiddur/some-comments/downloads", + "issues_url": "https://api.github.com/repos/fiddur/some-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/fiddur/some-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/fiddur/some-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/fiddur/some-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/fiddur/some-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/fiddur/some-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/fiddur/some-comments/deployments", + "created_at": "2015-04-10T05:38:20Z", + "updated_at": "2020-09-01T11:53:31Z", + "pushed_at": "2021-09-13T04:42:40Z", + "git_url": "git://github.com/fiddur/some-comments.git", + "ssh_url": "git@github.com:fiddur/some-comments.git", + "clone_url": "https://github.com/fiddur/some-comments.git", + "svn_url": "https://github.com/fiddur/some-comments", + "homepage": "https://github.com/fiddur/oratorium", + "size": 383, + "stargazers_count": 42, + "watchers_count": 42, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 7, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 35, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 7, + "open_issues": 35, + "watchers": 42, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 7, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-19/some_comments.commit b/apigh/2023-04-19/some_comments.commit new file mode 100644 index 00000000..909855b5 --- /dev/null +++ b/apigh/2023-04-19/some_comments.commit @@ -0,0 +1,103 @@ +{ + "sha": "c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "node_id": "MDY6Q29tbWl0MzM3MTA1MDk6YzVmMmM2NjI2ODJlNGExOWU5Njk3Y2RiOWYyMmJmNDE5MDQ0MWVmNw==", + "commit": { + "author": { + "name": "Fredrik Liljegren", + "email": "fredrik@liljegren.org", + "date": "2018-06-15T14:36:48Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2018-06-15T14:36:48Z" + }, + "message": "Merge pull request #26 from fiddur/snyk-fix-33db910d\n\n[Snyk Update] New fixes for 2 vulnerable dependency paths", + "tree": { + "sha": "9e90c8f6d716c3d3bcf8b3223fbd26c5e306a9d0", + "url": "https://api.github.com/repos/fiddur/some-comments/git/trees/9e90c8f6d716c3d3bcf8b3223fbd26c5e306a9d0" + }, + "url": "https://api.github.com/repos/fiddur/some-comments/git/commits/c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJbI88ACRBK7hj4Ov3rIwAAdHIIAENEWro00PkFUeSSH7/InLFO\nonUe52BgIO+1mEYe8TK8/u8mmnG5ND6gFH7pGLlrYbA9rzEGOhfzkxRh85HeRxWR\n36mQh+k9Upote1OqaWTyvmM7hkEojU+CpeZnI/AZkRPOF+lNNUuVLMP9IlX5OUZA\nz70T9OR7zyGtjsB94i4ZJjrpe4AVC1uzzS8OXrbd8fafCs9Um8D1a7f8JF6RrCvY\nFTwstFG9tm494qpPxRafOTKVZylmiAiEntyQmUITbrXuX1eK6Ad9gsvGkwySLD9k\n8P0L5w+sT3eR+SoLj3p/38nCXTdHbmgq8IIos2QXOm2SoUuMsG4WZk1S9iHfp5Y=\n=gV6Q\n-----END PGP SIGNATURE-----\n", + "payload": "tree 9e90c8f6d716c3d3bcf8b3223fbd26c5e306a9d0\nparent 9d1998308302ee36d8c43b5eba0a0f6389969e34\nparent f12051f38fe02c8b8f6c50353df25cc5ad775ea9\nauthor Fredrik Liljegren 1529073408 +0200\ncommitter GitHub 1529073408 +0200\n\nMerge pull request #26 from fiddur/snyk-fix-33db910d\n\n[Snyk Update] New fixes for 2 vulnerable dependency paths" + } + }, + "url": "https://api.github.com/repos/fiddur/some-comments/commits/c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "html_url": "https://github.com/fiddur/some-comments/commit/c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "comments_url": "https://api.github.com/repos/fiddur/some-comments/commits/c5f2c662682e4a19e9697cdb9f22bf4190441ef7/comments", + "author": { + "login": "fiddur", + "id": 148166, + "node_id": "MDQ6VXNlcjE0ODE2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/148166?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fiddur", + "html_url": "https://github.com/fiddur", + "followers_url": "https://api.github.com/users/fiddur/followers", + "following_url": "https://api.github.com/users/fiddur/following{/other_user}", + "gists_url": "https://api.github.com/users/fiddur/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fiddur/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fiddur/subscriptions", + "organizations_url": "https://api.github.com/users/fiddur/orgs", + "repos_url": "https://api.github.com/users/fiddur/repos", + "events_url": "https://api.github.com/users/fiddur/events{/privacy}", + "received_events_url": "https://api.github.com/users/fiddur/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "9d1998308302ee36d8c43b5eba0a0f6389969e34", + "url": "https://api.github.com/repos/fiddur/some-comments/commits/9d1998308302ee36d8c43b5eba0a0f6389969e34", + "html_url": "https://github.com/fiddur/some-comments/commit/9d1998308302ee36d8c43b5eba0a0f6389969e34" + }, + { + "sha": "f12051f38fe02c8b8f6c50353df25cc5ad775ea9", + "url": "https://api.github.com/repos/fiddur/some-comments/commits/f12051f38fe02c8b8f6c50353df25cc5ad775ea9", + "html_url": "https://github.com/fiddur/some-comments/commit/f12051f38fe02c8b8f6c50353df25cc5ad775ea9" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "d6a719c6e628fb5a3ba2e0deadb13b369253c05b", + "filename": "package.json", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/fiddur/some-comments/blob/c5f2c662682e4a19e9697cdb9f22bf4190441ef7/package.json", + "raw_url": "https://github.com/fiddur/some-comments/raw/c5f2c662682e4a19e9697cdb9f22bf4190441ef7/package.json", + "contents_url": "https://api.github.com/repos/fiddur/some-comments/contents/package.json?ref=c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "patch": "@@ -21,7 +21,7 @@\n \"cors\": \"^2.5.3\",\n \"express\": \"^4.12.3\",\n \"express-handlebars\": \"^2.0.1\",\n- \"grunt\": \"^0.4.5\",\n+ \"grunt\": \"^1.0.3\",\n \"handlebars\": \"^3.0.3\",\n \"jade\": \"^1.9.2\",\n \"jsonwebtoken\": \"^5.0.1\"," + } + ] +} diff --git a/apigh/2023-04-19/squabble b/apigh/2023-04-19/squabble new file mode 100644 index 00000000..dd56a8fa --- /dev/null +++ b/apigh/2023-04-19/squabble @@ -0,0 +1,132 @@ +{ + "id": 35555192, + "node_id": "MDEwOlJlcG9zaXRvcnkzNTU1NTE5Mg==", + "name": "squabble", + "full_name": "savaslabs/squabble", + "private": false, + "owner": { + "login": "savaslabs", + "id": 10981028, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEwOTgxMDI4", + "avatar_url": "https://avatars.githubusercontent.com/u/10981028?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/savaslabs", + "html_url": "https://github.com/savaslabs", + "followers_url": "https://api.github.com/users/savaslabs/followers", + "following_url": "https://api.github.com/users/savaslabs/following{/other_user}", + "gists_url": "https://api.github.com/users/savaslabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/savaslabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/savaslabs/subscriptions", + "organizations_url": "https://api.github.com/users/savaslabs/orgs", + "repos_url": "https://api.github.com/users/savaslabs/repos", + "events_url": "https://api.github.com/users/savaslabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/savaslabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/savaslabs/squabble", + "description": "Comment server built with Lumen, for use with static site generators (e.g. Jekyll)", + "fork": false, + "url": "https://api.github.com/repos/savaslabs/squabble", + "forks_url": "https://api.github.com/repos/savaslabs/squabble/forks", + "keys_url": "https://api.github.com/repos/savaslabs/squabble/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/savaslabs/squabble/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/savaslabs/squabble/teams", + "hooks_url": "https://api.github.com/repos/savaslabs/squabble/hooks", + "issue_events_url": "https://api.github.com/repos/savaslabs/squabble/issues/events{/number}", + "events_url": "https://api.github.com/repos/savaslabs/squabble/events", + "assignees_url": "https://api.github.com/repos/savaslabs/squabble/assignees{/user}", + "branches_url": "https://api.github.com/repos/savaslabs/squabble/branches{/branch}", + "tags_url": "https://api.github.com/repos/savaslabs/squabble/tags", + "blobs_url": "https://api.github.com/repos/savaslabs/squabble/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/savaslabs/squabble/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/savaslabs/squabble/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/savaslabs/squabble/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/savaslabs/squabble/statuses/{sha}", + "languages_url": "https://api.github.com/repos/savaslabs/squabble/languages", + "stargazers_url": "https://api.github.com/repos/savaslabs/squabble/stargazers", + "contributors_url": "https://api.github.com/repos/savaslabs/squabble/contributors", + "subscribers_url": "https://api.github.com/repos/savaslabs/squabble/subscribers", + "subscription_url": "https://api.github.com/repos/savaslabs/squabble/subscription", + "commits_url": "https://api.github.com/repos/savaslabs/squabble/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/savaslabs/squabble/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/savaslabs/squabble/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/savaslabs/squabble/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/savaslabs/squabble/contents/{+path}", + "compare_url": "https://api.github.com/repos/savaslabs/squabble/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/savaslabs/squabble/merges", + "archive_url": "https://api.github.com/repos/savaslabs/squabble/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/savaslabs/squabble/downloads", + "issues_url": "https://api.github.com/repos/savaslabs/squabble/issues{/number}", + "pulls_url": "https://api.github.com/repos/savaslabs/squabble/pulls{/number}", + "milestones_url": "https://api.github.com/repos/savaslabs/squabble/milestones{/number}", + "notifications_url": "https://api.github.com/repos/savaslabs/squabble/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/savaslabs/squabble/labels{/name}", + "releases_url": "https://api.github.com/repos/savaslabs/squabble/releases{/id}", + "deployments_url": "https://api.github.com/repos/savaslabs/squabble/deployments", + "created_at": "2015-05-13T14:52:01Z", + "updated_at": "2021-05-12T21:41:21Z", + "pushed_at": "2018-02-02T23:18:15Z", + "git_url": "git://github.com/savaslabs/squabble.git", + "ssh_url": "git@github.com:savaslabs/squabble.git", + "clone_url": "https://github.com/savaslabs/squabble.git", + "svn_url": "https://github.com/savaslabs/squabble", + "homepage": "http://savaslabs.com", + "size": 176, + "stargazers_count": 30, + "watchers_count": 30, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 4, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 4, + "open_issues": 1, + "watchers": 30, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "savaslabs", + "id": 10981028, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEwOTgxMDI4", + "avatar_url": "https://avatars.githubusercontent.com/u/10981028?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/savaslabs", + "html_url": "https://github.com/savaslabs", + "followers_url": "https://api.github.com/users/savaslabs/followers", + "following_url": "https://api.github.com/users/savaslabs/following{/other_user}", + "gists_url": "https://api.github.com/users/savaslabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/savaslabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/savaslabs/subscriptions", + "organizations_url": "https://api.github.com/users/savaslabs/orgs", + "repos_url": "https://api.github.com/users/savaslabs/repos", + "events_url": "https://api.github.com/users/savaslabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/savaslabs/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 4, + "subscribers_count": 10 +} diff --git a/apigh/2023-04-19/squabble.commit b/apigh/2023-04-19/squabble.commit new file mode 100644 index 00000000..71ece970 --- /dev/null +++ b/apigh/2023-04-19/squabble.commit @@ -0,0 +1,103 @@ +{ + "sha": "4c14db1bcad1f8b5866ce3705d783e997d627926", + "node_id": "MDY6Q29tbWl0MzU1NTUxOTI6NGMxNGRiMWJjYWQxZjhiNTg2NmNlMzcwNWQ3ODNlOTk3ZDYyNzkyNg==", + "commit": { + "author": { + "name": "Kosta Harlan", + "email": "kosta@fastmail.com", + "date": "2018-02-02T23:16:39Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2018-02-02T23:16:39Z" + }, + "message": "Merge pull request #23 from savaslabs/feature/5021-expose-email-hash\n\nIssue #5021: Expose email hash.", + "tree": { + "sha": "e86215ccd6de64310fb92111a7470c204908ae4e", + "url": "https://api.github.com/repos/savaslabs/squabble/git/trees/e86215ccd6de64310fb92111a7470c204908ae4e" + }, + "url": "https://api.github.com/repos/savaslabs/squabble/git/commits/4c14db1bcad1f8b5866ce3705d783e997d627926", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJadPFXCRBK7hj4Ov3rIwAAdHIIAEl6hzlI1X1kwsvcvOJjZWh6\nvqvL6+nOtSxhizVvNfHGYyd2W6qCkmgeCJSU/EHg6vr/zx8Iqj3f5TBWJgAO2Hlb\nkfMVCgJgL/IXh9MjqtwlqsvNRBjn2SLmqqkpAmB5AaYjI3WTe7E5mzHesZiHVMbD\nnNS0E0BerY6AurgQrVZKreDRJ3pMLsLXtGTNAR/dVcX8e9jicdi3bk/L+w14G4Rk\nicPVRDqbfNMZjwqt863IWxu/Yp6V164BiHF9PNVi5Uj2Mx+NBjDKe68oychIErvR\nntqceg1NsozVhc6Ji/APt2xP21Kf8OgzioJgqg88FXm7w2KrybqJSdaLq9mDtIg=\n=BHnn\n-----END PGP SIGNATURE-----\n", + "payload": "tree e86215ccd6de64310fb92111a7470c204908ae4e\nparent e972c97424757b2d031a46603bef5e6da2897d5c\nparent 7d699fbb3dec311dad4e3a43341a303dce682d22\nauthor Kosta Harlan 1517613399 -0800\ncommitter GitHub 1517613399 -0800\n\nMerge pull request #23 from savaslabs/feature/5021-expose-email-hash\n\nIssue #5021: Expose email hash." + } + }, + "url": "https://api.github.com/repos/savaslabs/squabble/commits/4c14db1bcad1f8b5866ce3705d783e997d627926", + "html_url": "https://github.com/savaslabs/squabble/commit/4c14db1bcad1f8b5866ce3705d783e997d627926", + "comments_url": "https://api.github.com/repos/savaslabs/squabble/commits/4c14db1bcad1f8b5866ce3705d783e997d627926/comments", + "author": { + "login": "kostajh", + "id": 208893, + "node_id": "MDQ6VXNlcjIwODg5Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/208893?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kostajh", + "html_url": "https://github.com/kostajh", + "followers_url": "https://api.github.com/users/kostajh/followers", + "following_url": "https://api.github.com/users/kostajh/following{/other_user}", + "gists_url": "https://api.github.com/users/kostajh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kostajh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kostajh/subscriptions", + "organizations_url": "https://api.github.com/users/kostajh/orgs", + "repos_url": "https://api.github.com/users/kostajh/repos", + "events_url": "https://api.github.com/users/kostajh/events{/privacy}", + "received_events_url": "https://api.github.com/users/kostajh/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "e972c97424757b2d031a46603bef5e6da2897d5c", + "url": "https://api.github.com/repos/savaslabs/squabble/commits/e972c97424757b2d031a46603bef5e6da2897d5c", + "html_url": "https://github.com/savaslabs/squabble/commit/e972c97424757b2d031a46603bef5e6da2897d5c" + }, + { + "sha": "7d699fbb3dec311dad4e3a43341a303dce682d22", + "url": "https://api.github.com/repos/savaslabs/squabble/commits/7d699fbb3dec311dad4e3a43341a303dce682d22", + "html_url": "https://github.com/savaslabs/squabble/commit/7d699fbb3dec311dad4e3a43341a303dce682d22" + } + ], + "stats": { + "total": 4, + "additions": 2, + "deletions": 2 + }, + "files": [ + { + "sha": "5b5cc9a88dbba9cedb13f1a752f0dc6022afbd2d", + "filename": "source/app/Comment.php", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/savaslabs/squabble/blob/4c14db1bcad1f8b5866ce3705d783e997d627926/source%2Fapp%2FComment.php", + "raw_url": "https://github.com/savaslabs/squabble/raw/4c14db1bcad1f8b5866ce3705d783e997d627926/source%2Fapp%2FComment.php", + "contents_url": "https://api.github.com/repos/savaslabs/squabble/contents/source%2Fapp%2FComment.php?ref=4c14db1bcad1f8b5866ce3705d783e997d627926", + "patch": "@@ -11,7 +11,7 @@ class Comment extends Model\n {\n protected $fillable = ['slug', 'comment', 'name', 'email', 'ip', 'token', 'savasian'];\n \n- protected $hidden = ['token', 'email', 'ip'];\n+ protected $hidden = ['token', 'ip'];\n \n public function getCommentAttribute($value)\n {\n@@ -30,7 +30,7 @@ public function getNameAttribute($value)\n \n public function getEmailAttribute($value)\n {\n- return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');\n+ return md5(strtolower(trim(htmlspecialchars($value, ENT_QUOTES, 'UTF-8'))));\n }\n \n public function getIpAttribute($value)" + } + ] +} diff --git a/apigh/2023-04-19/stapsher b/apigh/2023-04-19/stapsher new file mode 100644 index 00000000..6341474c --- /dev/null +++ b/apigh/2023-04-19/stapsher @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/129434257", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-19/stapsher.commit b/apigh/2023-04-19/stapsher.commit new file mode 100644 index 00000000..c8e453f4 --- /dev/null +++ b/apigh/2023-04-19/stapsher.commit @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/129434257/commits/master", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-19/staticman b/apigh/2023-04-19/staticman new file mode 100644 index 00000000..12bb0a4f --- /dev/null +++ b/apigh/2023-04-19/staticman @@ -0,0 +1,122 @@ +{ + "id": 38880555, + "node_id": "MDEwOlJlcG9zaXRvcnkzODg4MDU1NQ==", + "name": "staticman", + "full_name": "eduardoboucas/staticman", + "private": false, + "owner": { + "login": "eduardoboucas", + "id": 4162329, + "node_id": "MDQ6VXNlcjQxNjIzMjk=", + "avatar_url": "https://avatars.githubusercontent.com/u/4162329?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/eduardoboucas", + "html_url": "https://github.com/eduardoboucas", + "followers_url": "https://api.github.com/users/eduardoboucas/followers", + "following_url": "https://api.github.com/users/eduardoboucas/following{/other_user}", + "gists_url": "https://api.github.com/users/eduardoboucas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/eduardoboucas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/eduardoboucas/subscriptions", + "organizations_url": "https://api.github.com/users/eduardoboucas/orgs", + "repos_url": "https://api.github.com/users/eduardoboucas/repos", + "events_url": "https://api.github.com/users/eduardoboucas/events{/privacy}", + "received_events_url": "https://api.github.com/users/eduardoboucas/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/eduardoboucas/staticman", + "description": "๐Ÿ’ช User-generated content for Git-powered websites", + "fork": false, + "url": "https://api.github.com/repos/eduardoboucas/staticman", + "forks_url": "https://api.github.com/repos/eduardoboucas/staticman/forks", + "keys_url": "https://api.github.com/repos/eduardoboucas/staticman/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/eduardoboucas/staticman/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/eduardoboucas/staticman/teams", + "hooks_url": "https://api.github.com/repos/eduardoboucas/staticman/hooks", + "issue_events_url": "https://api.github.com/repos/eduardoboucas/staticman/issues/events{/number}", + "events_url": "https://api.github.com/repos/eduardoboucas/staticman/events", + "assignees_url": "https://api.github.com/repos/eduardoboucas/staticman/assignees{/user}", + "branches_url": "https://api.github.com/repos/eduardoboucas/staticman/branches{/branch}", + "tags_url": "https://api.github.com/repos/eduardoboucas/staticman/tags", + "blobs_url": "https://api.github.com/repos/eduardoboucas/staticman/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/eduardoboucas/staticman/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/eduardoboucas/staticman/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/eduardoboucas/staticman/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/eduardoboucas/staticman/statuses/{sha}", + "languages_url": "https://api.github.com/repos/eduardoboucas/staticman/languages", + "stargazers_url": "https://api.github.com/repos/eduardoboucas/staticman/stargazers", + "contributors_url": "https://api.github.com/repos/eduardoboucas/staticman/contributors", + "subscribers_url": "https://api.github.com/repos/eduardoboucas/staticman/subscribers", + "subscription_url": "https://api.github.com/repos/eduardoboucas/staticman/subscription", + "commits_url": "https://api.github.com/repos/eduardoboucas/staticman/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/eduardoboucas/staticman/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/eduardoboucas/staticman/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/eduardoboucas/staticman/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/{+path}", + "compare_url": "https://api.github.com/repos/eduardoboucas/staticman/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/eduardoboucas/staticman/merges", + "archive_url": "https://api.github.com/repos/eduardoboucas/staticman/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/eduardoboucas/staticman/downloads", + "issues_url": "https://api.github.com/repos/eduardoboucas/staticman/issues{/number}", + "pulls_url": "https://api.github.com/repos/eduardoboucas/staticman/pulls{/number}", + "milestones_url": "https://api.github.com/repos/eduardoboucas/staticman/milestones{/number}", + "notifications_url": "https://api.github.com/repos/eduardoboucas/staticman/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/eduardoboucas/staticman/labels{/name}", + "releases_url": "https://api.github.com/repos/eduardoboucas/staticman/releases{/id}", + "deployments_url": "https://api.github.com/repos/eduardoboucas/staticman/deployments", + "created_at": "2015-07-10T13:00:03Z", + "updated_at": "2023-04-18T21:00:20Z", + "pushed_at": "2023-03-09T03:20:25Z", + "git_url": "git://github.com/eduardoboucas/staticman.git", + "ssh_url": "git@github.com:eduardoboucas/staticman.git", + "clone_url": "https://github.com/eduardoboucas/staticman.git", + "svn_url": "https://github.com/eduardoboucas/staticman", + "homepage": "https://staticman.net", + "size": 1520, + "stargazers_count": 2299, + "watchers_count": 2299, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "has_discussions": true, + "forks_count": 496, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 124, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "hugo", + "jekyll", + "metalsmith", + "middleman", + "static-site-generator" + ], + "visibility": "public", + "forks": 496, + "open_issues": 124, + "watchers": 2299, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 496, + "subscribers_count": 41 +} diff --git a/apigh/2023-04-19/staticman.commit b/apigh/2023-04-19/staticman.commit new file mode 100644 index 00000000..cbe1a789 --- /dev/null +++ b/apigh/2023-04-19/staticman.commit @@ -0,0 +1,158 @@ +{ + "sha": "5d7ed7708775e3d4864382cca88d2d73ff875864", + "node_id": "MDY6Q29tbWl0Mzg4ODA1NTU6NWQ3ZWQ3NzA4Nzc1ZTNkNDg2NDM4MmNjYTg4ZDJkNzNmZjg3NTg2NA==", + "commit": { + "author": { + "name": "Alex Waibel", + "email": "alexwaibel@users.noreply.github.com", + "date": "2020-07-06T15:57:23Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2020-07-06T15:57:23Z" + }, + "message": "Fix incorrect error handling (#342) (#346)\n\n* Convert error handler to more modern class declaration.\r\n* Make GitHub and GitService actually throw errors rather than return them\r\n* Fix some broken unit and acceptance tests", + "tree": { + "sha": "064c1c78a9cb030e946face714b929f5f29ddda6", + "url": "https://api.github.com/repos/eduardoboucas/staticman/git/trees/064c1c78a9cb030e946face714b929f5f29ddda6" + }, + "url": "https://api.github.com/repos/eduardoboucas/staticman/git/commits/5d7ed7708775e3d4864382cca88d2d73ff875864", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfA0njCRBK7hj4Ov3rIwAAdHIIAGs7JUJlSEGrKT4sXrJAbDxO\nDLA+g+Iz5NxgC+3qixgjXyKCKqC9TAUeg0RnAA+T05En7kkPBz02XMgGkI6Kbkjb\nC1MYqba95+SlwQqwrr9tqi7PkdDN4IWeCuSaWQta6rMrAaO8Voe4XXQnff/mFWDg\nxlgGl5QYUtkm/7pHBKTfHhW0Nq7PHPS3iDUpbZuvNv0qc6uHqiAXVVtjrdbWcyoL\nxSRMgRposP+zTHMs/HUb+kplHnAB2XYfOwUGtSxQIirtNBhyZLwRypJv3Yo6XBKD\nxiK8Xnq6C3UkIBeWOLoeSltSAh45wuYehiwg/oDKFvMU2FmZRZtHdhDcE8OOjj4=\n=JtRe\n-----END PGP SIGNATURE-----\n", + "payload": "tree 064c1c78a9cb030e946face714b929f5f29ddda6\nparent 31ab851a14f64a9f299aa9cd55232014b9aee479\nauthor Alex Waibel 1594051043 -0400\ncommitter GitHub 1594051043 -0400\n\nFix incorrect error handling (#342) (#346)\n\n* Convert error handler to more modern class declaration.\r\n* Make GitHub and GitService actually throw errors rather than return them\r\n* Fix some broken unit and acceptance tests" + } + }, + "url": "https://api.github.com/repos/eduardoboucas/staticman/commits/5d7ed7708775e3d4864382cca88d2d73ff875864", + "html_url": "https://github.com/eduardoboucas/staticman/commit/5d7ed7708775e3d4864382cca88d2d73ff875864", + "comments_url": "https://api.github.com/repos/eduardoboucas/staticman/commits/5d7ed7708775e3d4864382cca88d2d73ff875864/comments", + "author": { + "login": "alexwaibel", + "id": 7026879, + "node_id": "MDQ6VXNlcjcwMjY4Nzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7026879?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexwaibel", + "html_url": "https://github.com/alexwaibel", + "followers_url": "https://api.github.com/users/alexwaibel/followers", + "following_url": "https://api.github.com/users/alexwaibel/following{/other_user}", + "gists_url": "https://api.github.com/users/alexwaibel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexwaibel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexwaibel/subscriptions", + "organizations_url": "https://api.github.com/users/alexwaibel/orgs", + "repos_url": "https://api.github.com/users/alexwaibel/repos", + "events_url": "https://api.github.com/users/alexwaibel/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexwaibel/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "31ab851a14f64a9f299aa9cd55232014b9aee479", + "url": "https://api.github.com/repos/eduardoboucas/staticman/commits/31ab851a14f64a9f299aa9cd55232014b9aee479", + "html_url": "https://github.com/eduardoboucas/staticman/commit/31ab851a14f64a9f299aa9cd55232014b9aee479" + } + ], + "stats": { + "total": 288, + "additions": 173, + "deletions": 115 + }, + "files": [ + { + "sha": "cc5734de4fc8d1faf8a21d6acef2c8e42df0f8f3", + "filename": "lib/ErrorHandler.js", + "status": "modified", + "additions": 58, + "deletions": 56, + "changes": 114, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FErrorHandler.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FErrorHandler.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/lib%2FErrorHandler.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -17,81 +17,83 @@ class ApiError {\n }\n }\n \n-const ErrorHandler = function () {\n- this.ERROR_MESSAGES = {\n- 'missing-input-secret': 'reCAPTCHA: The secret parameter is missing',\n- 'invalid-input-secret': 'reCAPTCHA: The secret parameter is invalid or malformed',\n- 'missing-input-response': 'reCAPTCHA: The response parameter is missing',\n- 'invalid-input-response': 'reCAPTCHA: The response parameter is invalid or malformed',\n- 'RECAPTCHA_MISSING_CREDENTIALS': 'Missing reCAPTCHA API credentials',\n- 'RECAPTCHA_FAILED_DECRYPT': 'Could not decrypt reCAPTCHA secret',\n- 'RECAPTCHA_CONFIG_MISMATCH': 'reCAPTCHA options do not match Staticman config',\n- 'PARSING_ERROR': 'Error whilst parsing config file',\n- 'GITHUB_AUTH_TOKEN_MISSING': 'The site requires a valid GitHub authentication token to be supplied in the `options[github-token]` field',\n- 'MISSING_CONFIG_BLOCK': 'Error whilst parsing Staticman config file'\n+class ErrorHandler {\n+ constructor () {\n+ this.ERROR_MESSAGES = {\n+ 'missing-input-secret': 'reCAPTCHA: The secret parameter is missing',\n+ 'invalid-input-secret': 'reCAPTCHA: The secret parameter is invalid or malformed',\n+ 'missing-input-response': 'reCAPTCHA: The response parameter is missing',\n+ 'invalid-input-response': 'reCAPTCHA: The response parameter is invalid or malformed',\n+ 'RECAPTCHA_MISSING_CREDENTIALS': 'Missing reCAPTCHA API credentials',\n+ 'RECAPTCHA_FAILED_DECRYPT': 'Could not decrypt reCAPTCHA secret',\n+ 'RECAPTCHA_CONFIG_MISMATCH': 'reCAPTCHA options do not match Staticman config',\n+ 'PARSING_ERROR': 'Error whilst parsing config file',\n+ 'GITHUB_AUTH_TOKEN_MISSING': 'The site requires a valid GitHub authentication token to be supplied in the `options[github-token]` field',\n+ 'MISSING_CONFIG_BLOCK': 'Error whilst parsing Staticman config file'\n+ }\n+\n+ this.ERROR_CODE_ALIASES = {\n+ 'missing-input-secret': 'RECAPTCHA_MISSING_INPUT_SECRET',\n+ 'invalid-input-secret': 'RECAPTCHA_INVALID_INPUT_SECRET',\n+ 'missing-input-response': 'RECAPTCHA_MISSING_INPUT_RESPONSE',\n+ 'invalid-input-response': 'RECAPTCHA_INVALID_INPUT_RESPONSE'\n+ }\n }\n \n- this.ERROR_CODE_ALIASES = {\n- 'missing-input-secret': 'RECAPTCHA_MISSING_INPUT_SECRET',\n- 'invalid-input-secret': 'RECAPTCHA_INVALID_INPUT_SECRET',\n- 'missing-input-response': 'RECAPTCHA_MISSING_INPUT_RESPONSE',\n- 'invalid-input-response': 'RECAPTCHA_INVALID_INPUT_RESPONSE'\n+ getErrorCode (error) {\n+ return this.ERROR_CODE_ALIASES[error] || error\n }\n-}\n \n-ErrorHandler.prototype.getErrorCode = function (error) {\n- return this.ERROR_CODE_ALIASES[error] || error\n-}\n+ getMessage (error) {\n+ return this.ERROR_MESSAGES[error]\n+ }\n \n-ErrorHandler.prototype.getMessage = function (error) {\n- return this.ERROR_MESSAGES[error]\n-}\n+ log (err, instance) {\n+ let parameters = {}\n+ let prefix = ''\n \n-ErrorHandler.prototype.log = function (err, instance) {\n- let parameters = {}\n- let prefix = ''\n+ if (instance) {\n+ parameters = instance.getParameters()\n \n- if (instance) {\n- parameters = instance.getParameters()\n+ prefix += `${parameters.username}/${parameters.repository}`\n+ }\n \n- prefix += `${parameters.username}/${parameters.repository}`\n+ console.log(`${prefix}`, err)\n }\n \n- console.log(`${prefix}`, err)\n-}\n+ _save (errorCode, data = {}) {\n+ const {err} = data\n \n-ErrorHandler.prototype._save = function (errorCode, data = {}) {\n- const {err} = data\n+ if (err) {\n+ err._smErrorCode = err._smErrorCode || errorCode\n \n- if (err) {\n- err._smErrorCode = err._smErrorCode || errorCode\n+ // Re-wrap API request errors as these could expose\n+ // request/response details that the user should not\n+ // be allowed to see e.g. access tokens.\n+ // `request-promise` is the primary offender here,\n+ // but we similarly do not want others to leak too.\n+ if (\n+ err instanceof StatusCodeError ||\n+ err instanceof RequestError\n+ ) {\n+ const statusCode = err.statusCode || err.code\n \n- // Re-wrap API request errors as these could expose\n- // request/response details that the user should not\n- // be allowed to see e.g. access tokens.\n- // `request-promise` is the primary offender here,\n- // but we similarly do not want others to leak too.\n- if (\n- err instanceof StatusCodeError ||\n- err instanceof RequestError\n- ) {\n- const statusCode = err.statusCode || err.code\n+ return new ApiError(err.message, statusCode, err._smErrorCode)\n+ }\n \n- return new ApiError(err.message, statusCode, err._smErrorCode)\n+ return err\n }\n \n- return err\n- }\n+ let payload = {\n+ _smErrorCode: errorCode\n+ }\n \n- let payload = {\n- _smErrorCode: errorCode\n- }\n+ if (data.data) {\n+ payload.data = data.data\n+ }\n \n- if (data.data) {\n- payload.data = data.data\n+ return payload\n }\n-\n- return payload\n }\n \n const errorHandler = new ErrorHandler()" + }, + { + "sha": "67558241e9249a012095e0ae025a91e1d027bc1a", + "filename": "lib/GitHub.js", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitHub.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitHub.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/lib%2FGitHub.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -117,7 +117,7 @@ class GitHub extends GitService {\n console.log(err)\n }\n \n- return Promise.reject(errorHandler('GITHUB_WRITING_FILE', {err}))\n+ return Promise.reject(errorHandler('GITHUB_WRITING_FILE'))\n })\n }\n \n@@ -182,7 +182,7 @@ class GitHub extends GitService {\n try {\n return await super.readFile(filePath, getFullResponse)\n } catch (err) {\n- return errorHandler('GITHUB_READING_FILE', {err})\n+ throw errorHandler('GITHUB_READING_FILE', {err})\n }\n }\n " + }, + { + "sha": "1cc79663121b6cc603f2575332861836acf279bc", + "filename": "lib/GitService.js", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitService.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitService.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/lib%2FGitService.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -51,7 +51,7 @@ class GitService {\n try {\n content = Buffer.from(res.content, 'base64').toString()\n } catch (err) {\n- return errorHandler('GITHUB_READING_FILE', {err})\n+ throw errorHandler('GITHUB_READING_FILE', {err})\n }\n \n try {\n@@ -85,7 +85,7 @@ class GitService {\n errorData.data = err.message\n }\n \n- return errorHandler('PARSING_ERROR', errorData)\n+ throw errorHandler('PARSING_ERROR', errorData)\n }\n }\n " + }, + { + "sha": "36758afcd0cbb80121940c75b0066c5e3614d60c", + "filename": "test/acceptance/api.test.js", + "status": "modified", + "additions": 56, + "deletions": 43, + "changes": 99, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Facceptance%2Fapi.test.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Facceptance%2Fapi.test.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/test%2Facceptance%2Fapi.test.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -26,7 +26,7 @@ afterAll(done => {\n })\n \n describe('Connect endpoint', () => {\n- test('accepts the invitation if one is found and replies with \"OK!\"', () => {\n+ test('accepts the invitation if one is found and replies with \"OK!\"', async () => {\n const invitationId = 123\n \n const reqListInvititations = nock('https://api.github.com', {\n@@ -52,15 +52,13 @@ describe('Connect endpoint', () => {\n .patch(`/user/repository_invitations/${invitationId}`)\n .reply(204)\n \n- return request('/v2/connect/johndoe/foobar')\n- .then(response => {\n- expect(reqListInvititations.isDone()).toBe(true)\n- expect(reqAcceptInvitation.isDone()).toBe(true)\n- expect(response).toBe('OK!')\n- })\n+ let response = await request('/v2/connect/johndoe/foobar')\n+ expect(reqListInvititations.isDone()).toBe(true)\n+ expect(reqAcceptInvitation.isDone()).toBe(true)\n+ expect(response).toBe('OK!')\n })\n \n- test('returns a 404 and an error message if a matching invitation is not found', () => {\n+ test('returns a 404 and an error message if a matching invitation is not found', async () => {\n const invitationId = 123\n const reqListInvititations = nock('https://api.github.com', {\n reqheaders: {\n@@ -85,18 +83,21 @@ describe('Connect endpoint', () => {\n .patch(`/user/repository_invitations/${invitationId}`)\n .reply(204)\n \n- return request('/v2/connect/johndoe/foobar')\n- .catch(err => {\n+ expect.assertions(4)\n+\n+ try {\n+ await request('/v2/connect/johndoe/foobar')\n+ } catch (err) {\n expect(reqListInvititations.isDone()).toBe(true)\n expect(reqAcceptInvitation.isDone()).toBe(false)\n expect(err.response.body).toBe('Invitation not found')\n expect(err.statusCode).toBe(404)\n- })\n+ }\n })\n })\n \n describe('Entry endpoint', () => {\n- test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong site key)', () => {\n+ test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong site key)', async () => {\n const data = Object.assign({}, helpers.getParameters(), {\n path: 'staticman.yml'\n })\n@@ -136,23 +137,27 @@ describe('Entry endpoint', () => {\n }\n const formData = querystring.stringify(form)\n \n- return request({\n- body: formData,\n- method: 'POST',\n- uri: `/v2/entry/${data.username}/${data.repository}/${data.branch}/${data.property}`,\n- headers: {\n- 'content-type': 'application/x-www-form-urlencoded'\n- }\n- }).catch((response) => {\n+ expect.assertions(3)\n+\n+ try {\n+ await request({\n+ body: formData,\n+ method: 'POST',\n+ uri: `/v2/entry/${data.username}/${data.repository}/${data.branch}/${data.property}`,\n+ headers: {\n+ 'content-type': 'application/x-www-form-urlencoded'\n+ }\n+ })\n+ } catch(response) {\n const error = JSON.parse(response.error)\n \n expect(error.success).toBe(false)\n expect(error.errorCode).toBe('RECAPTCHA_CONFIG_MISMATCH')\n expect(error.message).toBe('reCAPTCHA options do not match Staticman config')\n- })\n+ }\n })\n \n- test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong secret)', () => {\n+ test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong secret)', async () => {\n const data = Object.assign({}, helpers.getParameters(), {\n path: 'staticman.yml'\n })\n@@ -192,23 +197,27 @@ describe('Entry endpoint', () => {\n }\n const formData = querystring.stringify(form)\n \n- return request({\n- body: formData,\n- method: 'POST',\n- uri: '/v2/entry/johndoe/foobar/master/comments',\n- headers: {\n- 'content-type': 'application/x-www-form-urlencoded'\n- }\n- }).catch(response => {\n+ expect.assertions(3)\n+\n+ try {\n+ await request({\n+ body: formData,\n+ method: 'POST',\n+ uri: '/v2/entry/johndoe/foobar/master/comments',\n+ headers: {\n+ 'content-type': 'application/x-www-form-urlencoded'\n+ }\n+ })\n+ } catch (response) {\n const error = JSON.parse(response.error)\n \n expect(error.success).toBe(false)\n expect(error.errorCode).toBe('RECAPTCHA_CONFIG_MISMATCH')\n expect(error.message).toBe('reCAPTCHA options do not match Staticman config')\n- })\n+ }\n })\n \n- test('outputs a MISSING_CONFIG_BLOCK error if the site config is malformed', () => {\n+ test('outputs a PARSING_ERROR error if the site config is malformed', async () => {\n const data = Object.assign({}, helpers.getParameters(), {\n path: 'staticman.yml'\n })\n@@ -243,20 +252,24 @@ describe('Entry endpoint', () => {\n }\n const formData = querystring.stringify(form)\n \n- return request({\n- body: formData,\n- method: 'POST',\n- uri: '/v2/entry/johndoe/foobar/master/comments',\n- headers: {\n- 'content-type': 'application/x-www-form-urlencoded'\n- }\n- }).catch(response => {\n+ expect.assertions(4)\n+\n+ try {\n+ await request({\n+ body: formData,\n+ method: 'POST',\n+ uri: '/v2/entry/johndoe/foobar/master/comments',\n+ headers: {\n+ 'content-type': 'application/x-www-form-urlencoded'\n+ }\n+ })\n+ } catch (response) {\n const error = JSON.parse(response.error)\n \n expect(error.success).toBe(false)\n- expect(error.errorCode).toBe('MISSING_CONFIG_BLOCK')\n- expect(error.message).toBe('Error whilst parsing Staticman config file')\n+ expect(error.errorCode).toBe('PARSING_ERROR')\n+ expect(error.message).toBe('Error whilst parsing config file')\n expect(error.rawError).toBeDefined()\n- })\n+ }\n })\n })" + }, + { + "sha": "7b3955cae254892e843181d84f2af0f1c0e8bf63", + "filename": "test/helpers/sampleData.js", + "status": "modified", + "additions": 7, + "deletions": 0, + "changes": 7, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Fhelpers%2FsampleData.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Fhelpers%2FsampleData.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/test%2Fhelpers%2FsampleData.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -150,6 +150,13 @@ module.exports.config3 = `comments:\n siteKey: \"123456789\"\n secret: \"@reCaptchaSecret@\"`\n \n+module.exports.configInvalidYML = `invalid:\n+- x\n+y\n+ foo\n+bar\n+`\n+\n module.exports.prBody1 = `Dear human,\n \n Here's a new entry for your approval. :tada:" + }, + { + "sha": "24bc50980aa1f4c396fefe6ddc2be40ea0553b03", + "filename": "test/unit/lib/GitHub.test.js", + "status": "modified", + "additions": 48, + "deletions": 12, + "changes": 60, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Funit%2Flib%2FGitHub.test.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Funit%2Flib%2FGitHub.test.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/test%2Funit%2Flib%2FGitHub.test.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -100,6 +100,8 @@ describe('GitHub interface', () => {\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.readFile(filePath)\n } catch (err) {\n@@ -109,18 +111,46 @@ describe('GitHub interface', () => {\n expect(scope.isDone()).toBe(true)\n })\n \n- test('returns an error if parsing fails for the given file', async () => {\n+ test('returns an error if the config file cannot be read', async () => {\n const filePath = 'path/to/file.yml'\n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.readFile(filePath)\n } catch (err) {\n- expect(err._smErrorCode).toEqual('PARSING_ERROR')\n+ expect(err._smErrorCode).toEqual('GITHUB_READING_FILE')\n expect(err.message).toBeDefined()\n }\n })\n \n+ test('returns an error if the config file cannot be parsed', async () => {\n+ const scope = nock((/api\\.github\\.com/), {\n+ reqheaders: {\n+ authorization: 'token '.concat('1q2w3e4r')\n+ }\n+ })\n+ .get('/repos/johndoe/foobar/contents/path/to/file.yml?ref=master')\n+ .reply(200, {\n+ content: btoa(sampleData.configInvalidYML)\n+ })\n+\n+ const filePath = 'path/to/file.yml'\n+ const githubInstance = await new GitHub(req.params)\n+\n+ expect.assertions(3)\n+\n+ try {\n+ await githubInstance.readFile(filePath)\n+ } catch (err) {\n+ expect(err._smErrorCode).toEqual('PARSING_ERROR')\n+ expect(err.message).toBeDefined()\n+ }\n+\n+ expect(scope.isDone()).toBe(true)\n+ })\n+\n test('reads a YAML file and returns its parsed contents', async () => {\n const filePath = 'path/to/file.yml'\n const parsedConfig = yaml.safeLoad(sampleData.config1, 'utf8')\n@@ -284,12 +314,12 @@ describe('GitHub interface', () => {\n }\n })\n .put('/repos/johndoe/foobar/contents/path/to/file.txt')\n- .reply(200, {\n- number: 123\n- })\n+ .replyWithError('An error')\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.writeFile(\n options.path,\n@@ -361,22 +391,24 @@ describe('GitHub interface', () => {\n id: 1\n })\n \n+ expect.assertions(5)\n+\n const githubInstance = await new GitHub(req.params)\n \n- await githubInstance.writeFileAndSendReview(\n+ const data = await githubInstance.writeFileAndSendReview(\n options.path,\n options.content,\n options.newBranch,\n options.commitTitle,\n options.commitBody\n )\n \n- setTimeout(() => {\n- expect(branchScope.isDone()).toBe(true)\n- expect(refsScope.isDone()).toBe(true)\n- expect(fileScope.isDone()).toBe(true)\n- expect(pullScope.isDone()).toBe(true)\n- })\n+ expect(data).toEqual({\"id\": 1})\n+\n+ expect(branchScope.isDone()).toBe(true)\n+ expect(refsScope.isDone()).toBe(true)\n+ expect(fileScope.isDone()).toBe(true)\n+ expect(pullScope.isDone()).toBe(true)\n })\n \n // TODO: Figure out why this works with no mocks\n@@ -401,6 +433,8 @@ describe('GitHub interface', () => {\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.writeFileAndSendReview(\n options.path,\n@@ -448,6 +482,8 @@ describe('GitHub interface', () => {\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.getCurrentUser()\n } catch (err) {" + } + ] +} diff --git a/apigh/2023-04-19/talkatv b/apigh/2023-04-19/talkatv new file mode 100644 index 00000000..a5896f94 --- /dev/null +++ b/apigh/2023-04-19/talkatv @@ -0,0 +1,138 @@ +{ + "id": 5424958, + "node_id": "MDEwOlJlcG9zaXRvcnk1NDI0OTU4", + "name": "talkatv", + "full_name": "talkatv/talkatv", + "private": false, + "owner": { + "login": "talkatv", + "id": 2156324, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIxNTYzMjQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/2156324?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talkatv", + "html_url": "https://github.com/talkatv", + "followers_url": "https://api.github.com/users/talkatv/followers", + "following_url": "https://api.github.com/users/talkatv/following{/other_user}", + "gists_url": "https://api.github.com/users/talkatv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talkatv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talkatv/subscriptions", + "organizations_url": "https://api.github.com/users/talkatv/orgs", + "repos_url": "https://api.github.com/users/talkatv/repos", + "events_url": "https://api.github.com/users/talkatv/events{/privacy}", + "received_events_url": "https://api.github.com/users/talkatv/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/talkatv/talkatv", + "description": "An open source commenting system", + "fork": false, + "url": "https://api.github.com/repos/talkatv/talkatv", + "forks_url": "https://api.github.com/repos/talkatv/talkatv/forks", + "keys_url": "https://api.github.com/repos/talkatv/talkatv/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/talkatv/talkatv/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/talkatv/talkatv/teams", + "hooks_url": "https://api.github.com/repos/talkatv/talkatv/hooks", + "issue_events_url": "https://api.github.com/repos/talkatv/talkatv/issues/events{/number}", + "events_url": "https://api.github.com/repos/talkatv/talkatv/events", + "assignees_url": "https://api.github.com/repos/talkatv/talkatv/assignees{/user}", + "branches_url": "https://api.github.com/repos/talkatv/talkatv/branches{/branch}", + "tags_url": "https://api.github.com/repos/talkatv/talkatv/tags", + "blobs_url": "https://api.github.com/repos/talkatv/talkatv/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/talkatv/talkatv/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/talkatv/talkatv/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/talkatv/talkatv/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/talkatv/talkatv/statuses/{sha}", + "languages_url": "https://api.github.com/repos/talkatv/talkatv/languages", + "stargazers_url": "https://api.github.com/repos/talkatv/talkatv/stargazers", + "contributors_url": "https://api.github.com/repos/talkatv/talkatv/contributors", + "subscribers_url": "https://api.github.com/repos/talkatv/talkatv/subscribers", + "subscription_url": "https://api.github.com/repos/talkatv/talkatv/subscription", + "commits_url": "https://api.github.com/repos/talkatv/talkatv/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/talkatv/talkatv/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/talkatv/talkatv/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/talkatv/talkatv/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/talkatv/talkatv/contents/{+path}", + "compare_url": "https://api.github.com/repos/talkatv/talkatv/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/talkatv/talkatv/merges", + "archive_url": "https://api.github.com/repos/talkatv/talkatv/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/talkatv/talkatv/downloads", + "issues_url": "https://api.github.com/repos/talkatv/talkatv/issues{/number}", + "pulls_url": "https://api.github.com/repos/talkatv/talkatv/pulls{/number}", + "milestones_url": "https://api.github.com/repos/talkatv/talkatv/milestones{/number}", + "notifications_url": "https://api.github.com/repos/talkatv/talkatv/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/talkatv/talkatv/labels{/name}", + "releases_url": "https://api.github.com/repos/talkatv/talkatv/releases{/id}", + "deployments_url": "https://api.github.com/repos/talkatv/talkatv/deployments", + "created_at": "2012-08-15T10:51:28Z", + "updated_at": "2023-02-22T08:17:31Z", + "pushed_at": "2012-12-03T13:10:58Z", + "git_url": "git://github.com/talkatv/talkatv.git", + "ssh_url": "git@github.com:talkatv/talkatv.git", + "clone_url": "https://github.com/talkatv/talkatv.git", + "svn_url": "https://github.com/talkatv/talkatv", + "homepage": "", + "size": 1727, + "stargazers_count": 207, + "watchers_count": 207, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 20, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 26, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 20, + "open_issues": 26, + "watchers": 207, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "talkatv", + "id": 2156324, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIxNTYzMjQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/2156324?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talkatv", + "html_url": "https://github.com/talkatv", + "followers_url": "https://api.github.com/users/talkatv/followers", + "following_url": "https://api.github.com/users/talkatv/following{/other_user}", + "gists_url": "https://api.github.com/users/talkatv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talkatv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talkatv/subscriptions", + "organizations_url": "https://api.github.com/users/talkatv/orgs", + "repos_url": "https://api.github.com/users/talkatv/repos", + "events_url": "https://api.github.com/users/talkatv/events{/privacy}", + "received_events_url": "https://api.github.com/users/talkatv/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 20, + "subscribers_count": 21 +} diff --git a/apigh/2023-04-19/talkatv.commit b/apigh/2023-04-19/talkatv.commit new file mode 100644 index 00000000..ff00e64e --- /dev/null +++ b/apigh/2023-04-19/talkatv.commit @@ -0,0 +1,115 @@ +{ + "sha": "d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "node_id": "MDY6Q29tbWl0NTQyNDk1ODpkNTUyOGM4YjMxMzY4M2JmYTI0Y2M2Mjk5Y2ZhYWNlZDA1YzZiMTdm", + "commit": { + "author": { + "name": "joar", + "email": "joar@wandborg.com", + "date": "2012-12-03T13:10:57Z" + }, + "committer": { + "name": "joar", + "email": "joar@wandborg.com", + "date": "2012-12-03T13:10:57Z" + }, + "message": "Merge pull request #39 from etu/master\n\nPlease don't suggest people to use document.write anymore...", + "tree": { + "sha": "1256a718a8b66871dc1e8a32cfffa3d919a6c952", + "url": "https://api.github.com/repos/talkatv/talkatv/git/trees/1256a718a8b66871dc1e8a32cfffa3d919a6c952" + }, + "url": "https://api.github.com/repos/talkatv/talkatv/git/commits/d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/talkatv/talkatv/commits/d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "html_url": "https://github.com/talkatv/talkatv/commit/d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "comments_url": "https://api.github.com/repos/talkatv/talkatv/commits/d5528c8b313683bfa24cc6299cfaaced05c6b17f/comments", + "author": { + "login": "joar", + "id": 20814, + "node_id": "MDQ6VXNlcjIwODE0", + "avatar_url": "https://avatars.githubusercontent.com/u/20814?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joar", + "html_url": "https://github.com/joar", + "followers_url": "https://api.github.com/users/joar/followers", + "following_url": "https://api.github.com/users/joar/following{/other_user}", + "gists_url": "https://api.github.com/users/joar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joar/subscriptions", + "organizations_url": "https://api.github.com/users/joar/orgs", + "repos_url": "https://api.github.com/users/joar/repos", + "events_url": "https://api.github.com/users/joar/events{/privacy}", + "received_events_url": "https://api.github.com/users/joar/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "joar", + "id": 20814, + "node_id": "MDQ6VXNlcjIwODE0", + "avatar_url": "https://avatars.githubusercontent.com/u/20814?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joar", + "html_url": "https://github.com/joar", + "followers_url": "https://api.github.com/users/joar/followers", + "following_url": "https://api.github.com/users/joar/following{/other_user}", + "gists_url": "https://api.github.com/users/joar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joar/subscriptions", + "organizations_url": "https://api.github.com/users/joar/orgs", + "repos_url": "https://api.github.com/users/joar/repos", + "events_url": "https://api.github.com/users/joar/events{/privacy}", + "received_events_url": "https://api.github.com/users/joar/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "71e40b7276eaee88bff7ae0b5f34c7a131392c42", + "url": "https://api.github.com/repos/talkatv/talkatv/commits/71e40b7276eaee88bff7ae0b5f34c7a131392c42", + "html_url": "https://github.com/talkatv/talkatv/commit/71e40b7276eaee88bff7ae0b5f34c7a131392c42" + }, + { + "sha": "81014a619c50643ea52acf9edf8570e658637ebb", + "url": "https://api.github.com/repos/talkatv/talkatv/commits/81014a619c50643ea52acf9edf8570e658637ebb", + "html_url": "https://github.com/talkatv/talkatv/commit/81014a619c50643ea52acf9edf8570e658637ebb" + } + ], + "stats": { + "total": 27, + "additions": 15, + "deletions": 12 + }, + "files": [ + { + "sha": "9801cd123b8a2ec766ebb9324b5a6e2d80f44b8b", + "filename": "examples/talkatv-test/index.html", + "status": "modified", + "additions": 5, + "deletions": 4, + "changes": 9, + "blob_url": "https://github.com/talkatv/talkatv/blob/d5528c8b313683bfa24cc6299cfaaced05c6b17f/examples%2Ftalkatv-test%2Findex.html", + "raw_url": "https://github.com/talkatv/talkatv/raw/d5528c8b313683bfa24cc6299cfaaced05c6b17f/examples%2Ftalkatv-test%2Findex.html", + "contents_url": "https://api.github.com/repos/talkatv/talkatv/contents/examples%2Ftalkatv-test%2Findex.html?ref=d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "patch": "@@ -23,10 +23,11 @@

      Comments

      \n var talkatv_ordered = true;\n \n /* Include talkatv.js */\n- document.write(unescape('%3Cscript src=\"'\n- + talkatv_home + (window.talkatv_shortcut\n- ? '/talkatv.js' : '/static/js/talkatv.js')\n- + '\" type=\"text/javascript\"%3E%3C/script%3E'));\n+ script = document.createElement('script');\n+ script.src = talkatv_home + (talkatv_shortcut ? '/talkatv.js' : '/static/js/talkatv.js');\n+ script.type = 'text/javascript';\n+\n+ document.body.appendChild(script);\n \n
      a\",n=p.getElementsByTagName(\"*\"),r=p.getElementsByTagName(\"a\")[0];if(!n||!r||!n.length)return{};s=i.createElement(\"select\"),o=s.appendChild(i.createElement(\"option\")),u=p.getElementsByTagName(\"input\")[0],r.style.cssText=\"top:1px;float:left;opacity:.5\",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName(\"tbody\").length,htmlSerialize:!!p.getElementsByTagName(\"link\").length,style:/top/.test(r.getAttribute(\"style\")),hrefNormalized:r.getAttribute(\"href\")===\"/a\",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value===\"on\",optSelected:o.selected,getSetAttribute:p.className!==\"t\",enctype:!!i.createElement(\"form\").enctype,html5Clone:i.createElement(\"nav\").cloneNode(!0).outerHTML!==\"<:nav>\",boxModel:i.compatMode===\"CSS1Compat\",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent(\"onclick\",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent(\"onclick\"),p.detachEvent(\"onclick\",h)),u=i.createElement(\"input\"),u.value=\"t\",u.setAttribute(\"type\",\"radio\"),t.radioValue=u.value===\"t\",u.setAttribute(\"checked\",\"checked\"),u.setAttribute(\"name\",\"t\"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f=\"on\"+l,c=f in p,c||(p.setAttribute(f,\"return;\"),c=typeof p[f]==\"function\"),t[l+\"Bubbles\"]=c;return v(function(){var n,r,s,o,u=\"padding:0;margin:0;border:0;display:block;overflow:hidden;\",a=i.getElementsByTagName(\"body\")[0];if(!a)return;n=i.createElement(\"div\"),n.style.cssText=\"visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px\",a.insertBefore(n,a.firstChild),r=i.createElement(\"div\"),n.appendChild(r),r.innerHTML=\"
      t
      \",s=r.getElementsByTagName(\"td\"),s[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",c=s[0].offsetHeight===0,s[0].style.display=\"\",s[1].style.display=\"none\",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML=\"\",r.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!==\"1%\",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:\"4px\"}).width===\"4px\",o=i.createElement(\"div\"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width=\"0\",r.style.width=\"1px\",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!=\"undefined\"&&(r.innerHTML=\"\",r.style.cssText=u+\"width:1px;padding:1px;display:inline;zoom:1\",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display=\"block\",r.style.overflow=\"visible\",r.innerHTML=\"
      \",r.firstChild.style.width=\"5px\",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:\"jQuery\"+(v.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n==\"string\",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n==\"object\"||typeof n==\"function\")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(\" \")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i===\"inprogress\"&&(i=n.shift(),r--),i&&(t===\"fx\"&&n.unshift(\"inprogress\"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks(\"once memory\").add(function(){v.removeData(e,t+\"queue\",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!=\"string\"&&(n=e,e=\"fx\",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e==\"string\"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(\" \"+n[s]+\" \",\" \");i.className=e?v.trim(r):\"\"}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t==\"boolean\";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n===\"string\"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?\"addClass\":\"removeClass\"](i)}else if(n===\"undefined\"||n===\"boolean\")this.className&&v._data(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":v._data(this,\"__className__\")||\"\"})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&\"get\"in n&&(r=n.get(s,\"value\"))!==t?r:(r=s.value,typeof r==\"string\"?r.replace(R,\"\"):r==null?\"\":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s=\"\":typeof s==\"number\"?s+=\"\":v.isArray(s)&&(s=v.map(s,function(e){return e==null?\"\":e+\"\"})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!(\"set\"in n)||n.set(this,s,\"value\")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type===\"select-one\"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute==\"undefined\")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&\"set\"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+\"\"),r)}return o&&\"get\"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\\.]*|)(?:\\.(.+)|)$/,K=/(?:^|\\s)hover(\\.\\S+|)\\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,\"mouseenter$1 mouseleave$1\")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v==\"undefined\"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(\" \");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(\".\")>=0&&(b=y.split(\".\"),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n==\"object\"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join(\".\"),n.namespace_re=n.namespace?new RegExp(\"(^|\\\\.)\"+b.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,h=y.indexOf(\":\")<0?\"on\"+y:\"\";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!=\"string\")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,\"$1\"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n===\"input\"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n===\"input\"||n===\"button\")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+\" \"];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j,\" \");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir===\"parentNode\",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+\" \"+o+\" \",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a==\"string\"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[\" \"],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join(\"\").replace(j,\"$1\"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w=\"0\",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG(\"*\",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type===\"ID\"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,\"\"),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,\"\"),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join(\"\");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p=\"undefined\",d=(\"sizcache\"+Math.random()).replace(\".\",\"\"),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+\" \"]=r},e)},k=C(),L=C(),A=C(),O=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[-\\\\w]|[^\\\\x00-\\\\xa0])+\",_=M.replace(\"w\",\"w#\"),D=\"([*^$|!~]?=)\",P=\"\\\\[\"+O+\"*(\"+M+\")\"+O+\"*(?:\"+D+O+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+_+\")|)|)\"+O+\"*\\\\]\",H=\":(\"+M+\")(?:\\\\((?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\2|([^()[\\\\]]*|(?:(?:\"+P+\")|[^:]|\\\\\\\\.)*|.*))\\\\)|)\",B=\":(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+O+\"*((?:-\\\\d)?\\\\d*)\"+O+\"*\\\\)|)(?=[^-]|$)\",j=new RegExp(\"^\"+O+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+O+\"+$\",\"g\"),F=new RegExp(\"^\"+O+\"*,\"+O+\"*\"),I=new RegExp(\"^\"+O+\"*([\\\\x20\\\\t\\\\r\\\\n\\\\f>+~])\"+O+\"*\"),q=new RegExp(H),R=/^(?:#([\\w\\-]+)|(\\w+)|\\.([\\w\\-]+))$/,U=/^:not/,z=/[\\x20\\t\\r\\n\\f]*[+~]/,W=/:not\\($/,X=/h\\d/i,V=/input|select|textarea|button/i,$=/\\\\(?!\\\\)/g,J={ID:new RegExp(\"^#(\"+M+\")\"),CLASS:new RegExp(\"^\\\\.(\"+M+\")\"),NAME:new RegExp(\"^\\\\[name=['\\\"]?(\"+M+\")['\\\"]?\\\\]\"),TAG:new RegExp(\"^(\"+M.replace(\"w\",\"w*\")+\")\"),ATTR:new RegExp(\"^\"+P),PSEUDO:new RegExp(\"^\"+H),POS:new RegExp(B,\"i\"),CHILD:new RegExp(\"^:(only|nth|first|last)-child(?:\\\\(\"+O+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+O+\"*(?:([+-]|)\"+O+\"*(\\\\d+)|))\"+O+\"*\\\\)|)\",\"i\"),needsContext:new RegExp(\"^\"+O+\"*[>+~]|\"+B,\"i\")},K=function(e){var t=g.createElement(\"div\");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),G=K(function(e){return e.innerHTML=\"\",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute(\"href\")===\"#\"}),Y=K(function(e){e.innerHTML=\"\";var t=typeof e.lastChild.getAttribute(\"multiple\");return t!==\"boolean\"&&t!==\"string\"}),Z=K(function(e){return e.innerHTML=\"\",!e.getElementsByClassName||!e.getElementsByClassName(\"e\").length?!1:(e.lastChild.className=\"e\",e.getElementsByClassName(\"e\").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML=\"
      \",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent==\"string\")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!==\"HTML\":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]==\"boolean\"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute(\"href\",2)},type:function(e){return e.getAttribute(\"type\")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode(\"id\").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e===\"*\"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,\"\"),e[3]=(e[4]||e[5]||\"\").replace($,\"\"),e[2]===\"~=\"&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]===\"nth\"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]===\"even\"||e[2]===\"odd\")),e[4]=+(e[6]+e[7]||e[2]===\"odd\")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(\")\",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,\"\"),function(t){return t.getAttribute(\"id\")===e}}:function(e){return e=e.replace($,\"\"),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode(\"id\");return n&&n.value===e}},TAG:function(e){return e===\"*\"?function(){return!0}:(e=e.replace($,\"\").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+\" \"];return t||(t=new RegExp(\"(^|\"+O+\")\"+e+\"(\"+O+\"|$)\"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t===\"!=\":t?(s+=\"\",t===\"=\"?s===n:t===\"!=\"?s!==n:t===\"^=\"?n&&s.indexOf(n)===0:t===\"*=\"?n&&s.indexOf(n)>-1:t===\"$=\"?n&&s.substr(s.length-n.length)===n:t===\"~=\"?(\" \"+s+\" \").indexOf(n)>-1:t===\"|=\"?s===n||s.substr(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r){return e===\"nth\"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case\"only\":case\"first\":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e===\"first\")return!0;n=t;case\"last\":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error(\"unsupported pseudo: \"+e);return r[d]?r(t):r.length>1?(n=[e,e,\"\",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,\"$1\"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t===\"input\"&&!!e.checked||t===\"option\"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>\"@\"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()===\"input\"&&(t=e.type)===\"text\"&&((n=e.getAttribute(\"type\"))==null||n.toLowerCase()===t)},radio:rt(\"radio\"),checkbox:rt(\"checkbox\"),file:rt(\"file\"),password:rt(\"password\"),image:rt(\"image\"),submit:it(\"submit\"),reset:it(\"reset\"),button:function(e){var t=e.nodeName.toLowerCase();return t===\"input\"&&e.type===\"button\"||t===\"button\"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r\",e.querySelectorAll(\"[selected]\").length||i.push(\"\\\\[\"+O+\"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\"),e.querySelectorAll(\":checked\").length||i.push(\":checked\")}),K(function(e){e.innerHTML=\"

      \",e.querySelectorAll(\"[test^='']\").length&&i.push(\"[*^$]=\"+O+\"*(?:\\\"\\\"|'')\"),e.innerHTML=\"\",e.querySelectorAll(\":enabled\").length||i.push(\":enabled\",\":disabled\")}),i=new RegExp(i.join(\"|\")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!==\"object\"){a=ut(e),(l=r.getAttribute(\"id\"))?c=l.replace(n,\"\\\\$&\"):r.setAttribute(\"id\",c),c=\"[id='\"+c+\"'] \",f=a.length;while(f--)a[f]=c+a[f].join(\"\");h=z.test(e)&&r.parentNode||r,p=a.join(\",\")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute(\"id\")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,\"div\");try{u.call(t,\"[test!='']:sizzle\"),s.push(\"!=\",H)}catch(n){}}),s=new RegExp(s.join(\"|\")),nt.matchesSelector=function(t,n){n=n.replace(r,\"='$1']\");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[\":\"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\\[\\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!=\"string\")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!=\"string\"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,\"closest\",e)},index:function(e){return e?typeof e==\"string\"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e==\"string\"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return v.dir(e,\"parentNode\",n)},next:function(e){return at(e,\"nextSibling\")},prev:function(e){return at(e,\"previousSibling\")},nextAll:function(e){return v.dir(e,\"nextSibling\")},prevAll:function(e){return v.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return v.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return v.dir(e,\"previousSibling\",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r==\"string\"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(\",\"))}}),v.extend({filter:function(e,t,n){return n&&(e=\":not(\"+e+\")\"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ht=/ jQuery\\d+=\"(?:null|\\d+)\"/g,pt=/^\\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,vt=/<([\\w:]+)/,mt=/]\",\"i\"),Et=/^(?:checkbox|radio)$/,St=/checked\\s*(?:[^=]|=\\s*.checked.)/i,xt=/\\/(java|ecma)script/i,Tt=/^\\s*\\s*$/g,Nt={option:[1,\"\"],legend:[1,\"
      \",\"
      \"],thead:[1,\"\",\"
      \"],tr:[2,\"\",\"
      \"],td:[3,\"\",\"
      \"],col:[2,\"\",\"
      \"],area:[1,\"\",\"\"],_default:[0,\"\",\"\"]},Ct=lt(i),kt=Ct.appendChild(i.createElement(\"div\"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,\"X
      \",\"
      \"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,\"body\")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),\"before\",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),\"after\",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName(\"*\")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName(\"*\"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,\"\"):t;if(typeof e==\"string\"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=e.replace(dt,\"<$1>\");try{for(;r1&&typeof f==\"string\"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,\"tr\");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment==\"undefined\")t=i;for(s=0;(u=e[s])!=null;s++){typeof u==\"number\"&&(u+=\"\");if(!u)continue;if(typeof u==\"string\")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement(\"div\"),y.appendChild(c),u=u.replace(dt,\"<$1>\"),a=(vt.exec(u)||[\"\",\"\"])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a===\"table\"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===\"\"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],\"tbody\")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,\"input\")?_t(u):typeof u.getElementsByTagName!=\"undefined\"&&v.grep(u.getElementsByTagName(\"input\"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,\"script\")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!=\"undefined\"&&(g=v.grep(v.merge([],u.getElementsByTagName(\"script\")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \\/]([\\w.]+)/.exec(e)||/(webkit)[ \\/]([\\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(e)||/(msie) ([\\w.]+)/.exec(e)||e.indexOf(\"compatible\")<0&&/(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(e)||[];return{browser:t[1]||\"\",version:t[2]||\"0\"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\\([^)]*\\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp(\"^(\"+m+\")(.*)$\",\"i\"),Ut=new RegExp(\"^(\"+m+\")(?!px)[a-z%]+$\",\"i\"),zt=new RegExp(\"^([-+])=(\"+m+\")\",\"i\"),Wt={BODY:\"block\"},Xt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Vt={letterSpacing:0,fontWeight:400},$t=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Jt=[\"Webkit\",\"O\",\"Moz\",\"ms\"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e==\"boolean\";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,\"opacity\");return n===\"\"?\"1\":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":v.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&\"get\"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o===\"string\"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o=\"number\");if(r==null||o===\"number\"&&isNaN(r))return;o===\"number\"&&!v.cssNumber[a]&&(r+=\"px\");if(!u||!(\"set\"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&\"get\"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s===\"normal\"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===\"\"&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t===\"fontSize\"?\"1em\":i,i=s.pixelLeft+\"px\",s.left=n,r&&(e.runtimeStyle.left=r)),i===\"\"?\"auto\":i}),v.each([\"height\",\"width\"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,\"display\"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,\"boxSizing\")===\"border-box\"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?\"alpha(opacity=\"+t*100+\")\":\"\",s=r&&r.filter||n.filter||\"\";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,\"\"))===\"\"&&n.removeAttribute){n.removeAttribute(\"filter\");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+\" \"+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:\"inline-block\"},function(){if(t)return Dt(e,\"marginRight\")})}}),!v.support.pixelPosition&&v.fn.position&&v.each([\"top\",\"left\"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+\"px\":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,\"display\"))===\"none\"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n==\"string\"?n.split(\" \"):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\\[\\]$/,on=/\\r?\\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,\"\\r\\n\")}}):{name:t.name,value:n.replace(on,\"\\r\\n\")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?\"\":t,i[i.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join(\"&\").replace(rn,\"+\")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,dn=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\\/\\//,gn=/\\?/,yn=/)<[^<]*)*<\\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=[\"*/\"]+[\"*\"];try{cn=s.href}catch(Nn){cn=i.createElement(\"a\"),cn.href=\"\",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!=\"string\"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(\" \");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n==\"object\"&&(s=\"POST\"),v.ajax({url:e,type:s,dataType:\"html\",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v(\"
      \").append(e.replace(yn,\"\")).find(i):e)}),this},v.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each([\"get\",\"post\"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,\"script\")},getJSON:function(e,t,n){return v.get(e,t,n,\"json\")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:\"GET\",contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",processData:!0,async:!0,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":e.String,\"text html\":!0,\"text json\":v.parseJSON,\"text xml\":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||\"\",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader(\"Last-Modified\"),S&&(v.lastModified[r]=S),S=x.getResponseHeader(\"Etag\"),S&&(v.etag[r]=S)),e===304?(T=\"notmodified\",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T=\"error\",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+\"\",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger(\"ajax\"+(l?\"Success\":\"Error\"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger(\"ajaxComplete\",[x,c]),--v.active||v.event.trigger(\"ajaxStop\"))}typeof e==\"object\"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks(\"once memory\"),g=c.statusCode||{},b={},w={},E=0,S=\"canceled\",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+\"\").replace(hn,\"\").replace(mn,ln[1]+\"//\"),c.dataTypes=v.trim(c.dataType||\"*\").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]===\"http:\"?80:443))==(ln[3]||(ln[1]===\"http:\"?80:443)))),c.data&&c.processData&&typeof c.data!=\"string\"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger(\"ajaxStart\");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?\"&\":\"?\")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,\"$1_=\"+N);c.url=C+(C===c.url?(gn.test(c.url)?\"&\":\"?\")+\"_=\"+N:\"\")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader(\"Content-Type\",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader(\"If-Modified-Since\",v.lastModified[r]),v.etag[r]&&x.setRequestHeader(\"If-None-Match\",v.etag[r])),x.setRequestHeader(\"Accept\",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!==\"*\"?\", \"+Tn+\"; q=0.01\":\"\"):c.accepts[\"*\"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S=\"abort\";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,\"No Transport\");else{x.readyState=1,f&&p.trigger(\"ajaxSend\",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort(\"timeout\")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\\?/,Dn=/(=)\\?(?=&|$)|\\?\\?/,Pn=v.now();v.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Mn.pop()||v.expando+\"_\"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter(\"json jsonp\",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a==\"string\"&&!(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Dn.test(a);if(n.dataTypes[0]===\"jsonp\"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,\"$1\"+s):h?n.data=a.replace(Dn,\"$1\"+s):l&&(n.url+=(_n.test(f)?\"&\":\"?\")+n.jsonp+\"=\"+s),n.converters[\"script json\"]=function(){return u||v.error(s+\" was not called\"),u[0]},n.dataTypes[0]=\"json\",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),\"script\"}),v.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter(\"script\",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),v.ajaxTransport(\"script\",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName(\"head\")[0]||i.documentElement;return{send:function(s,o){n=i.createElement(\"script\"),n.async=\"async\",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,\"success\")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&\"withCredentials\"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i[\"X-Requested-With\"]&&(i[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=\"\"}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp(\"^(?:([-+])=|)(\"+m+\")([a-z%]*)$\",\"i\"),Wn=/queueHooks$/,Xn=[Gn],Vn={\"*\":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?\"\":\"px\");if(r!==\"px\"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||\".5\",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),\"using\"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,\"marginTop\"))||0,n.left-=parseFloat(v.css(e,\"marginLeft\"))||0,r.top+=parseFloat(v.css(t[0],\"borderTopWidth\"))||0,r.left+=parseFloat(v.css(t[0],\"borderLeftWidth\"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,\"position\")===\"static\")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:\"height\",Width:\"width\"},function(e,n){v.each({padding:\"inner\"+e,content:n,\"\":\"outer\"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!=\"boolean\"),u=r||(i===!0||s===!0?\"margin\":\"border\");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement[\"client\"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body[\"scroll\"+e],s[\"scroll\"+e],n.body[\"offset\"+e],s[\"offset\"+e],s[\"client\"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define==\"function\"&&define.amd&&define.amd.jQuery&&define(\"jquery\",[],function(){return v})})(window);\n\\ No newline at end of file" + }, + { + "sha": "db8fe7bf484336b81645637e58291970980ead5d", + "filename": "js/vendor/jquery-ui.min.js", + "status": "removed", + "additions": 0, + "deletions": 5, + "changes": 5, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Fjquery-ui.min.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Fjquery-ui.min.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/js%2Fvendor%2Fjquery-ui.min.js?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a" + }, + { + "sha": "32ca0c1b1425e622a0bf7dc8b9cf97a96eb1a418", + "filename": "js/vendor/underscore.js", + "status": "removed", + "additions": 0, + "deletions": 1227, + "changes": 1227, + "blob_url": "https://github.com/vivalaakam/comments/blob/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Funderscore.js", + "raw_url": "https://github.com/vivalaakam/comments/raw/e7cc397ceb34a764286ef981027f4fa4e5962d0a/js%2Fvendor%2Funderscore.js", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/js%2Fvendor%2Funderscore.js?ref=e7cc397ceb34a764286ef981027f4fa4e5962d0a", + "patch": "@@ -1,1227 +0,0 @@\n-// Underscore.js 1.4.4\n-// ===================\n-\n-// > http://underscorejs.org\n-// > (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.\n-// > Underscore may be freely distributed under the MIT license.\n-\n-// Baseline setup\n-// --------------\n-(function() {\n-\n- // Establish the root object, `window` in the browser, or `global` on the server.\n- var root = this;\n-\n- // Save the previous value of the `_` variable.\n- var previousUnderscore = root._;\n-\n- // Establish the object that gets returned to break out of a loop iteration.\n- var breaker = {};\n-\n- // Save bytes in the minified (but not gzipped) version:\n- var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n-\n- // Create quick reference variables for speed access to core prototypes.\n- var push = ArrayProto.push,\n- slice = ArrayProto.slice,\n- concat = ArrayProto.concat,\n- toString = ObjProto.toString,\n- hasOwnProperty = ObjProto.hasOwnProperty;\n-\n- // All **ECMAScript 5** native function implementations that we hope to use\n- // are declared here.\n- var\n- nativeForEach = ArrayProto.forEach,\n- nativeMap = ArrayProto.map,\n- nativeReduce = ArrayProto.reduce,\n- nativeReduceRight = ArrayProto.reduceRight,\n- nativeFilter = ArrayProto.filter,\n- nativeEvery = ArrayProto.every,\n- nativeSome = ArrayProto.some,\n- nativeIndexOf = ArrayProto.indexOf,\n- nativeLastIndexOf = ArrayProto.lastIndexOf,\n- nativeIsArray = Array.isArray,\n- nativeKeys = Object.keys,\n- nativeBind = FuncProto.bind;\n-\n- // Create a safe reference to the Underscore object for use below.\n- var _ = function(obj) {\n- if (obj instanceof _) return obj;\n- if (!(this instanceof _)) return new _(obj);\n- this._wrapped = obj;\n- };\n-\n- // Export the Underscore object for **Node.js**, with\n- // backwards-compatibility for the old `require()` API. If we're in\n- // the browser, add `_` as a global object via a string identifier,\n- // for Closure Compiler \"advanced\" mode.\n- if (typeof exports !== 'undefined') {\n- if (typeof module !== 'undefined' && module.exports) {\n- exports = module.exports = _;\n- }\n- exports._ = _;\n- } else {\n- root._ = _;\n- }\n-\n- // Current version.\n- _.VERSION = '1.4.4';\n-\n- // Collection Functions\n- // --------------------\n-\n- // The cornerstone, an `each` implementation, aka `forEach`.\n- // Handles objects with the built-in `forEach`, arrays, and raw objects.\n- // Delegates to **ECMAScript 5**'s native `forEach` if available.\n- var each = _.each = _.forEach = function(obj, iterator, context) {\n- if (obj == null) return;\n- if (nativeForEach && obj.forEach === nativeForEach) {\n- obj.forEach(iterator, context);\n- } else if (obj.length === +obj.length) {\n- for (var i = 0, l = obj.length; i < l; i++) {\n- if (iterator.call(context, obj[i], i, obj) === breaker) return;\n- }\n- } else {\n- for (var key in obj) {\n- if (_.has(obj, key)) {\n- if (iterator.call(context, obj[key], key, obj) === breaker) return;\n- }\n- }\n- }\n- };\n-\n- // Return the results of applying the iterator to each element.\n- // Delegates to **ECMAScript 5**'s native `map` if available.\n- _.map = _.collect = function(obj, iterator, context) {\n- var results = [];\n- if (obj == null) return results;\n- if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n- each(obj, function(value, index, list) {\n- results[results.length] = iterator.call(context, value, index, list);\n- });\n- return results;\n- };\n-\n- var reduceError = 'Reduce of empty array with no initial value';\n-\n- // **Reduce** builds up a single result from a list of values, aka `inject`,\n- // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n- _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n- var initial = arguments.length > 2;\n- if (obj == null) obj = [];\n- if (nativeReduce && obj.reduce === nativeReduce) {\n- if (context) iterator = _.bind(iterator, context);\n- return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n- }\n- each(obj, function(value, index, list) {\n- if (!initial) {\n- memo = value;\n- initial = true;\n- } else {\n- memo = iterator.call(context, memo, value, index, list);\n- }\n- });\n- if (!initial) throw new TypeError(reduceError);\n- return memo;\n- };\n-\n- // The right-associative version of reduce, also known as `foldr`.\n- // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n- _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n- var initial = arguments.length > 2;\n- if (obj == null) obj = [];\n- if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n- if (context) iterator = _.bind(iterator, context);\n- return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n- }\n- var length = obj.length;\n- if (length !== +length) {\n- var keys = _.keys(obj);\n- length = keys.length;\n- }\n- each(obj, function(value, index, list) {\n- index = keys ? keys[--length] : --length;\n- if (!initial) {\n- memo = obj[index];\n- initial = true;\n- } else {\n- memo = iterator.call(context, memo, obj[index], index, list);\n- }\n- });\n- if (!initial) throw new TypeError(reduceError);\n- return memo;\n- };\n-\n- // Return the first value which passes a truth test. Aliased as `detect`.\n- _.find = _.detect = function(obj, iterator, context) {\n- var result;\n- any(obj, function(value, index, list) {\n- if (iterator.call(context, value, index, list)) {\n- result = value;\n- return true;\n- }\n- });\n- return result;\n- };\n-\n- // Return all the elements that pass a truth test.\n- // Delegates to **ECMAScript 5**'s native `filter` if available.\n- // Aliased as `select`.\n- _.filter = _.select = function(obj, iterator, context) {\n- var results = [];\n- if (obj == null) return results;\n- if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n- each(obj, function(value, index, list) {\n- if (iterator.call(context, value, index, list)) results[results.length] = value;\n- });\n- return results;\n- };\n-\n- // Return all the elements for which a truth test fails.\n- _.reject = function(obj, iterator, context) {\n- return _.filter(obj, function(value, index, list) {\n- return !iterator.call(context, value, index, list);\n- }, context);\n- };\n-\n- // Determine whether all of the elements match a truth test.\n- // Delegates to **ECMAScript 5**'s native `every` if available.\n- // Aliased as `all`.\n- _.every = _.all = function(obj, iterator, context) {\n- iterator || (iterator = _.identity);\n- var result = true;\n- if (obj == null) return result;\n- if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n- each(obj, function(value, index, list) {\n- if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n- });\n- return !!result;\n- };\n-\n- // Determine if at least one element in the object matches a truth test.\n- // Delegates to **ECMAScript 5**'s native `some` if available.\n- // Aliased as `any`.\n- var any = _.some = _.any = function(obj, iterator, context) {\n- iterator || (iterator = _.identity);\n- var result = false;\n- if (obj == null) return result;\n- if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n- each(obj, function(value, index, list) {\n- if (result || (result = iterator.call(context, value, index, list))) return breaker;\n- });\n- return !!result;\n- };\n-\n- // Determine if the array or object contains a given value (using `===`).\n- // Aliased as `include`.\n- _.contains = _.include = function(obj, target) {\n- if (obj == null) return false;\n- if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n- return any(obj, function(value) {\n- return value === target;\n- });\n- };\n-\n- // Invoke a method (with arguments) on every item in a collection.\n- _.invoke = function(obj, method) {\n- var args = slice.call(arguments, 2);\n- var isFunc = _.isFunction(method);\n- return _.map(obj, function(value) {\n- return (isFunc ? method : value[method]).apply(value, args);\n- });\n- };\n-\n- // Convenience version of a common use case of `map`: fetching a property.\n- _.pluck = function(obj, key) {\n- return _.map(obj, function(value){ return value[key]; });\n- };\n-\n- // Convenience version of a common use case of `filter`: selecting only objects\n- // containing specific `key:value` pairs.\n- _.where = function(obj, attrs, first) {\n- if (_.isEmpty(attrs)) return first ? null : [];\n- return _[first ? 'find' : 'filter'](obj, function(value) {\n- for (var key in attrs) {\n- if (attrs[key] !== value[key]) return false;\n- }\n- return true;\n- });\n- };\n-\n- // Convenience version of a common use case of `find`: getting the first object\n- // containing specific `key:value` pairs.\n- _.findWhere = function(obj, attrs) {\n- return _.where(obj, attrs, true);\n- };\n-\n- // Return the maximum element or (element-based computation).\n- // Can't optimize arrays of integers longer than 65,535 elements.\n- // See: https://bugs.webkit.org/show_bug.cgi?id=80797\n- _.max = function(obj, iterator, context) {\n- if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n- return Math.max.apply(Math, obj);\n- }\n- if (!iterator && _.isEmpty(obj)) return -Infinity;\n- var result = {computed : -Infinity, value: -Infinity};\n- each(obj, function(value, index, list) {\n- var computed = iterator ? iterator.call(context, value, index, list) : value;\n- computed >= result.computed && (result = {value : value, computed : computed});\n- });\n- return result.value;\n- };\n-\n- // Return the minimum element (or element-based computation).\n- _.min = function(obj, iterator, context) {\n- if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n- return Math.min.apply(Math, obj);\n- }\n- if (!iterator && _.isEmpty(obj)) return Infinity;\n- var result = {computed : Infinity, value: Infinity};\n- each(obj, function(value, index, list) {\n- var computed = iterator ? iterator.call(context, value, index, list) : value;\n- computed < result.computed && (result = {value : value, computed : computed});\n- });\n- return result.value;\n- };\n-\n- // Shuffle an array.\n- _.shuffle = function(obj) {\n- var rand;\n- var index = 0;\n- var shuffled = [];\n- each(obj, function(value) {\n- rand = _.random(index++);\n- shuffled[index - 1] = shuffled[rand];\n- shuffled[rand] = value;\n- });\n- return shuffled;\n- };\n-\n- // An internal function to generate lookup iterators.\n- var lookupIterator = function(value) {\n- return _.isFunction(value) ? value : function(obj){ return obj[value]; };\n- };\n-\n- // Sort the object's values by a criterion produced by an iterator.\n- _.sortBy = function(obj, value, context) {\n- var iterator = lookupIterator(value);\n- return _.pluck(_.map(obj, function(value, index, list) {\n- return {\n- value : value,\n- index : index,\n- criteria : iterator.call(context, value, index, list)\n- };\n- }).sort(function(left, right) {\n- var a = left.criteria;\n- var b = right.criteria;\n- if (a !== b) {\n- if (a > b || a === void 0) return 1;\n- if (a < b || b === void 0) return -1;\n- }\n- return left.index < right.index ? -1 : 1;\n- }), 'value');\n- };\n-\n- // An internal function used for aggregate \"group by\" operations.\n- var group = function(obj, value, context, behavior) {\n- var result = {};\n- var iterator = lookupIterator(value || _.identity);\n- each(obj, function(value, index) {\n- var key = iterator.call(context, value, index, obj);\n- behavior(result, key, value);\n- });\n- return result;\n- };\n-\n- // Groups the object's values by a criterion. Pass either a string attribute\n- // to group by, or a function that returns the criterion.\n- _.groupBy = function(obj, value, context) {\n- return group(obj, value, context, function(result, key, value) {\n- (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n- });\n- };\n-\n- // Counts instances of an object that group by a certain criterion. Pass\n- // either a string attribute to count by, or a function that returns the\n- // criterion.\n- _.countBy = function(obj, value, context) {\n- return group(obj, value, context, function(result, key) {\n- if (!_.has(result, key)) result[key] = 0;\n- result[key]++;\n- });\n- };\n-\n- // Use a comparator function to figure out the smallest index at which\n- // an object should be inserted so as to maintain order. Uses binary search.\n- _.sortedIndex = function(array, obj, iterator, context) {\n- iterator = iterator == null ? _.identity : lookupIterator(iterator);\n- var value = iterator.call(context, obj);\n- var low = 0, high = array.length;\n- while (low < high) {\n- var mid = (low + high) >>> 1;\n- iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n- }\n- return low;\n- };\n-\n- // Safely convert anything iterable into a real, live array.\n- _.toArray = function(obj) {\n- if (!obj) return [];\n- if (_.isArray(obj)) return slice.call(obj);\n- if (obj.length === +obj.length) return _.map(obj, _.identity);\n- return _.values(obj);\n- };\n-\n- // Return the number of elements in an object.\n- _.size = function(obj) {\n- if (obj == null) return 0;\n- return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\n- };\n-\n- // Array Functions\n- // ---------------\n-\n- // Get the first element of an array. Passing **n** will return the first N\n- // values in the array. Aliased as `head` and `take`. The **guard** check\n- // allows it to work with `_.map`.\n- _.first = _.head = _.take = function(array, n, guard) {\n- if (array == null) return void 0;\n- return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n- };\n-\n- // Returns everything but the last entry of the array. Especially useful on\n- // the arguments object. Passing **n** will return all the values in\n- // the array, excluding the last N. The **guard** check allows it to work with\n- // `_.map`.\n- _.initial = function(array, n, guard) {\n- return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n- };\n-\n- // Get the last element of an array. Passing **n** will return the last N\n- // values in the array. The **guard** check allows it to work with `_.map`.\n- _.last = function(array, n, guard) {\n- if (array == null) return void 0;\n- if ((n != null) && !guard) {\n- return slice.call(array, Math.max(array.length - n, 0));\n- } else {\n- return array[array.length - 1];\n- }\n- };\n-\n- // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n- // Especially useful on the arguments object. Passing an **n** will return\n- // the rest N values in the array. The **guard**\n- // check allows it to work with `_.map`.\n- _.rest = _.tail = _.drop = function(array, n, guard) {\n- return slice.call(array, (n == null) || guard ? 1 : n);\n- };\n-\n- // Trim out all falsy values from an array.\n- _.compact = function(array) {\n- return _.filter(array, _.identity);\n- };\n-\n- // Internal implementation of a recursive `flatten` function.\n- var flatten = function(input, shallow, output) {\n- each(input, function(value) {\n- if (_.isArray(value)) {\n- shallow ? push.apply(output, value) : flatten(value, shallow, output);\n- } else {\n- output.push(value);\n- }\n- });\n- return output;\n- };\n-\n- // Return a completely flattened version of an array.\n- _.flatten = function(array, shallow) {\n- return flatten(array, shallow, []);\n- };\n-\n- // Return a version of the array that does not contain the specified value(s).\n- _.without = function(array) {\n- return _.difference(array, slice.call(arguments, 1));\n- };\n-\n- // Produce a duplicate-free version of the array. If the array has already\n- // been sorted, you have the option of using a faster algorithm.\n- // Aliased as `unique`.\n- _.uniq = _.unique = function(array, isSorted, iterator, context) {\n- if (_.isFunction(isSorted)) {\n- context = iterator;\n- iterator = isSorted;\n- isSorted = false;\n- }\n- var initial = iterator ? _.map(array, iterator, context) : array;\n- var results = [];\n- var seen = [];\n- each(initial, function(value, index) {\n- if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n- seen.push(value);\n- results.push(array[index]);\n- }\n- });\n- return results;\n- };\n-\n- // Produce an array that contains the union: each distinct element from all of\n- // the passed-in arrays.\n- _.union = function() {\n- return _.uniq(concat.apply(ArrayProto, arguments));\n- };\n-\n- // Produce an array that contains every item shared between all the\n- // passed-in arrays.\n- _.intersection = function(array) {\n- var rest = slice.call(arguments, 1);\n- return _.filter(_.uniq(array), function(item) {\n- return _.every(rest, function(other) {\n- return _.indexOf(other, item) >= 0;\n- });\n- });\n- };\n-\n- // Take the difference between one array and a number of other arrays.\n- // Only the elements present in just the first array will remain.\n- _.difference = function(array) {\n- var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n- return _.filter(array, function(value){ return !_.contains(rest, value); });\n- };\n-\n- // Zip together multiple lists into a single array -- elements that share\n- // an index go together.\n- _.zip = function() {\n- var args = slice.call(arguments);\n- var length = _.max(_.pluck(args, 'length'));\n- var results = new Array(length);\n- for (var i = 0; i < length; i++) {\n- results[i] = _.pluck(args, \"\" + i);\n- }\n- return results;\n- };\n-\n- // Converts lists into objects. Pass either a single array of `[key, value]`\n- // pairs, or two parallel arrays of the same length -- one of keys, and one of\n- // the corresponding values.\n- _.object = function(list, values) {\n- if (list == null) return {};\n- var result = {};\n- for (var i = 0, l = list.length; i < l; i++) {\n- if (values) {\n- result[list[i]] = values[i];\n- } else {\n- result[list[i][0]] = list[i][1];\n- }\n- }\n- return result;\n- };\n-\n- // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n- // we need this function. Return the position of the first occurrence of an\n- // item in an array, or -1 if the item is not included in the array.\n- // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n- // If the array is large and already in sort order, pass `true`\n- // for **isSorted** to use binary search.\n- _.indexOf = function(array, item, isSorted) {\n- if (array == null) return -1;\n- var i = 0, l = array.length;\n- if (isSorted) {\n- if (typeof isSorted == 'number') {\n- i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);\n- } else {\n- i = _.sortedIndex(array, item);\n- return array[i] === item ? i : -1;\n- }\n- }\n- if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n- for (; i < l; i++) if (array[i] === item) return i;\n- return -1;\n- };\n-\n- // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n- _.lastIndexOf = function(array, item, from) {\n- if (array == null) return -1;\n- var hasIndex = from != null;\n- if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n- return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n- }\n- var i = (hasIndex ? from : array.length);\n- while (i--) if (array[i] === item) return i;\n- return -1;\n- };\n-\n- // Generate an integer Array containing an arithmetic progression. A port of\n- // the native Python `range()` function. See\n- // [the Python documentation](http://docs.python.org/library/functions.html#range).\n- _.range = function(start, stop, step) {\n- if (arguments.length <= 1) {\n- stop = start || 0;\n- start = 0;\n- }\n- step = arguments[2] || 1;\n-\n- var len = Math.max(Math.ceil((stop - start) / step), 0);\n- var idx = 0;\n- var range = new Array(len);\n-\n- while(idx < len) {\n- range[idx++] = start;\n- start += step;\n- }\n-\n- return range;\n- };\n-\n- // Function (ahem) Functions\n- // ------------------\n-\n- // Create a function bound to a given object (assigning `this`, and arguments,\n- // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n- // available.\n- _.bind = function(func, context) {\n- if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n- var args = slice.call(arguments, 2);\n- return function() {\n- return func.apply(context, args.concat(slice.call(arguments)));\n- };\n- };\n-\n- // Partially apply a function by creating a version that has had some of its\n- // arguments pre-filled, without changing its dynamic `this` context.\n- _.partial = function(func) {\n- var args = slice.call(arguments, 1);\n- return function() {\n- return func.apply(this, args.concat(slice.call(arguments)));\n- };\n- };\n-\n- // Bind all of an object's methods to that object. Useful for ensuring that\n- // all callbacks defined on an object belong to it.\n- _.bindAll = function(obj) {\n- var funcs = slice.call(arguments, 1);\n- if (funcs.length === 0) funcs = _.functions(obj);\n- each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n- return obj;\n- };\n-\n- // Memoize an expensive function by storing its results.\n- _.memoize = function(func, hasher) {\n- var memo = {};\n- hasher || (hasher = _.identity);\n- return function() {\n- var key = hasher.apply(this, arguments);\n- return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n- };\n- };\n-\n- // Delays a function for the given number of milliseconds, and then calls\n- // it with the arguments supplied.\n- _.delay = function(func, wait) {\n- var args = slice.call(arguments, 2);\n- return setTimeout(function(){ return func.apply(null, args); }, wait);\n- };\n-\n- // Defers a function, scheduling it to run after the current call stack has\n- // cleared.\n- _.defer = function(func) {\n- return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n- };\n-\n- // Returns a function, that, when invoked, will only be triggered at most once\n- // during a given window of time.\n- _.throttle = function(func, wait) {\n- var context, args, timeout, result;\n- var previous = 0;\n- var later = function() {\n- previous = new Date;\n- timeout = null;\n- result = func.apply(context, args);\n- };\n- return function() {\n- var now = new Date;\n- var remaining = wait - (now - previous);\n- context = this;\n- args = arguments;\n- if (remaining <= 0) {\n- clearTimeout(timeout);\n- timeout = null;\n- previous = now;\n- result = func.apply(context, args);\n- } else if (!timeout) {\n- timeout = setTimeout(later, remaining);\n- }\n- return result;\n- };\n- };\n-\n- // Returns a function, that, as long as it continues to be invoked, will not\n- // be triggered. The function will be called after it stops being called for\n- // N milliseconds. If `immediate` is passed, trigger the function on the\n- // leading edge, instead of the trailing.\n- _.debounce = function(func, wait, immediate) {\n- var timeout, result;\n- return function() {\n- var context = this, args = arguments;\n- var later = function() {\n- timeout = null;\n- if (!immediate) result = func.apply(context, args);\n- };\n- var callNow = immediate && !timeout;\n- clearTimeout(timeout);\n- timeout = setTimeout(later, wait);\n- if (callNow) result = func.apply(context, args);\n- return result;\n- };\n- };\n-\n- // Returns a function that will be executed at most one time, no matter how\n- // often you call it. Useful for lazy initialization.\n- _.once = function(func) {\n- var ran = false, memo;\n- return function() {\n- if (ran) return memo;\n- ran = true;\n- memo = func.apply(this, arguments);\n- func = null;\n- return memo;\n- };\n- };\n-\n- // Returns the first function passed as an argument to the second,\n- // allowing you to adjust arguments, run code before and after, and\n- // conditionally execute the original function.\n- _.wrap = function(func, wrapper) {\n- return function() {\n- var args = [func];\n- push.apply(args, arguments);\n- return wrapper.apply(this, args);\n- };\n- };\n-\n- // Returns a function that is the composition of a list of functions, each\n- // consuming the return value of the function that follows.\n- _.compose = function() {\n- var funcs = arguments;\n- return function() {\n- var args = arguments;\n- for (var i = funcs.length - 1; i >= 0; i--) {\n- args = [funcs[i].apply(this, args)];\n- }\n- return args[0];\n- };\n- };\n-\n- // Returns a function that will only be executed after being called N times.\n- _.after = function(times, func) {\n- if (times <= 0) return func();\n- return function() {\n- if (--times < 1) {\n- return func.apply(this, arguments);\n- }\n- };\n- };\n-\n- // Object Functions\n- // ----------------\n-\n- // Retrieve the names of an object's properties.\n- // Delegates to **ECMAScript 5**'s native `Object.keys`\n- _.keys = nativeKeys || function(obj) {\n- if (obj !== Object(obj)) throw new TypeError('Invalid object');\n- var keys = [];\n- for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n- return keys;\n- };\n-\n- // Retrieve the values of an object's properties.\n- _.values = function(obj) {\n- var values = [];\n- for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);\n- return values;\n- };\n-\n- // Convert an object into a list of `[key, value]` pairs.\n- _.pairs = function(obj) {\n- var pairs = [];\n- for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);\n- return pairs;\n- };\n-\n- // Invert the keys and values of an object. The values must be serializable.\n- _.invert = function(obj) {\n- var result = {};\n- for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;\n- return result;\n- };\n-\n- // Return a sorted list of the function names available on the object.\n- // Aliased as `methods`\n- _.functions = _.methods = function(obj) {\n- var names = [];\n- for (var key in obj) {\n- if (_.isFunction(obj[key])) names.push(key);\n- }\n- return names.sort();\n- };\n-\n- // Extend a given object with all the properties in passed-in object(s).\n- _.extend = function(obj) {\n- each(slice.call(arguments, 1), function(source) {\n- if (source) {\n- for (var prop in source) {\n- obj[prop] = source[prop];\n- }\n- }\n- });\n- return obj;\n- };\n-\n- // Return a copy of the object only containing the whitelisted properties.\n- _.pick = function(obj) {\n- var copy = {};\n- var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n- each(keys, function(key) {\n- if (key in obj) copy[key] = obj[key];\n- });\n- return copy;\n- };\n-\n- // Return a copy of the object without the blacklisted properties.\n- _.omit = function(obj) {\n- var copy = {};\n- var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n- for (var key in obj) {\n- if (!_.contains(keys, key)) copy[key] = obj[key];\n- }\n- return copy;\n- };\n-\n- // Fill in a given object with default properties.\n- _.defaults = function(obj) {\n- each(slice.call(arguments, 1), function(source) {\n- if (source) {\n- for (var prop in source) {\n- if (obj[prop] == null) obj[prop] = source[prop];\n- }\n- }\n- });\n- return obj;\n- };\n-\n- // Create a (shallow-cloned) duplicate of an object.\n- _.clone = function(obj) {\n- if (!_.isObject(obj)) return obj;\n- return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n- };\n-\n- // Invokes interceptor with the obj, and then returns obj.\n- // The primary purpose of this method is to \"tap into\" a method chain, in\n- // order to perform operations on intermediate results within the chain.\n- _.tap = function(obj, interceptor) {\n- interceptor(obj);\n- return obj;\n- };\n-\n- // Internal recursive comparison function for `isEqual`.\n- var eq = function(a, b, aStack, bStack) {\n- // Identical objects are equal. `0 === -0`, but they aren't identical.\n- // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n- if (a === b) return a !== 0 || 1 / a == 1 / b;\n- // A strict comparison is necessary because `null == undefined`.\n- if (a == null || b == null) return a === b;\n- // Unwrap any wrapped objects.\n- if (a instanceof _) a = a._wrapped;\n- if (b instanceof _) b = b._wrapped;\n- // Compare `[[Class]]` names.\n- var className = toString.call(a);\n- if (className != toString.call(b)) return false;\n- switch (className) {\n- // Strings, numbers, dates, and booleans are compared by value.\n- case '[object String]':\n- // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n- // equivalent to `new String(\"5\")`.\n- return a == String(b);\n- case '[object Number]':\n- // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n- // other numeric values.\n- return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n- case '[object Date]':\n- case '[object Boolean]':\n- // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n- // millisecond representations. Note that invalid dates with millisecond representations\n- // of `NaN` are not equivalent.\n- return +a == +b;\n- // RegExps are compared by their source patterns and flags.\n- case '[object RegExp]':\n- return a.source == b.source &&\n- a.global == b.global &&\n- a.multiline == b.multiline &&\n- a.ignoreCase == b.ignoreCase;\n- }\n- if (typeof a != 'object' || typeof b != 'object') return false;\n- // Assume equality for cyclic structures. The algorithm for detecting cyclic\n- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n- var length = aStack.length;\n- while (length--) {\n- // Linear search. Performance is inversely proportional to the number of\n- // unique nested structures.\n- if (aStack[length] == a) return bStack[length] == b;\n- }\n- // Add the first object to the stack of traversed objects.\n- aStack.push(a);\n- bStack.push(b);\n- var size = 0, result = true;\n- // Recursively compare objects and arrays.\n- if (className == '[object Array]') {\n- // Compare array lengths to determine if a deep comparison is necessary.\n- size = a.length;\n- result = size == b.length;\n- if (result) {\n- // Deep compare the contents, ignoring non-numeric properties.\n- while (size--) {\n- if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n- }\n- }\n- } else {\n- // Objects with different constructors are not equivalent, but `Object`s\n- // from different frames are.\n- var aCtor = a.constructor, bCtor = b.constructor;\n- if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n- _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n- return false;\n- }\n- // Deep compare objects.\n- for (var key in a) {\n- if (_.has(a, key)) {\n- // Count the expected number of properties.\n- size++;\n- // Deep compare each member.\n- if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n- }\n- }\n- // Ensure that both objects contain the same number of properties.\n- if (result) {\n- for (key in b) {\n- if (_.has(b, key) && !(size--)) break;\n- }\n- result = !size;\n- }\n- }\n- // Remove the first object from the stack of traversed objects.\n- aStack.pop();\n- bStack.pop();\n- return result;\n- };\n-\n- // Perform a deep comparison to check if two objects are equal.\n- _.isEqual = function(a, b) {\n- return eq(a, b, [], []);\n- };\n-\n- // Is a given array, string, or object empty?\n- // An \"empty\" object has no enumerable own-properties.\n- _.isEmpty = function(obj) {\n- if (obj == null) return true;\n- if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n- for (var key in obj) if (_.has(obj, key)) return false;\n- return true;\n- };\n-\n- // Is a given value a DOM element?\n- _.isElement = function(obj) {\n- return !!(obj && obj.nodeType === 1);\n- };\n-\n- // Is a given value an array?\n- // Delegates to ECMA5's native Array.isArray\n- _.isArray = nativeIsArray || function(obj) {\n- return toString.call(obj) == '[object Array]';\n- };\n-\n- // Is a given variable an object?\n- _.isObject = function(obj) {\n- return obj === Object(obj);\n- };\n-\n- // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\n- each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {\n- _['is' + name] = function(obj) {\n- return toString.call(obj) == '[object ' + name + ']';\n- };\n- });\n-\n- // Define a fallback version of the method in browsers (ahem, IE), where\n- // there isn't any inspectable \"Arguments\" type.\n- if (!_.isArguments(arguments)) {\n- _.isArguments = function(obj) {\n- return !!(obj && _.has(obj, 'callee'));\n- };\n- }\n-\n- // Optimize `isFunction` if appropriate.\n- if (typeof (/./) !== 'function') {\n- _.isFunction = function(obj) {\n- return typeof obj === 'function';\n- };\n- }\n-\n- // Is a given object a finite number?\n- _.isFinite = function(obj) {\n- return isFinite(obj) && !isNaN(parseFloat(obj));\n- };\n-\n- // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n- _.isNaN = function(obj) {\n- return _.isNumber(obj) && obj != +obj;\n- };\n-\n- // Is a given value a boolean?\n- _.isBoolean = function(obj) {\n- return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n- };\n-\n- // Is a given value equal to null?\n- _.isNull = function(obj) {\n- return obj === null;\n- };\n-\n- // Is a given variable undefined?\n- _.isUndefined = function(obj) {\n- return obj === void 0;\n- };\n-\n- // Shortcut function for checking if an object has a given property directly\n- // on itself (in other words, not on a prototype).\n- _.has = function(obj, key) {\n- return hasOwnProperty.call(obj, key);\n- };\n-\n- // Utility Functions\n- // -----------------\n-\n- // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n- // previous owner. Returns a reference to the Underscore object.\n- _.noConflict = function() {\n- root._ = previousUnderscore;\n- return this;\n- };\n-\n- // Keep the identity function around for default iterators.\n- _.identity = function(value) {\n- return value;\n- };\n-\n- // Run a function **n** times.\n- _.times = function(n, iterator, context) {\n- var accum = Array(n);\n- for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n- return accum;\n- };\n-\n- // Return a random integer between min and max (inclusive).\n- _.random = function(min, max) {\n- if (max == null) {\n- max = min;\n- min = 0;\n- }\n- return min + Math.floor(Math.random() * (max - min + 1));\n- };\n-\n- // List of HTML entities for escaping.\n- var entityMap = {\n- escape: {\n- '&': '&',\n- '<': '<',\n- '>': '>',\n- '\"': '"',\n- \"'\": ''',\n- '/': '/'\n- }\n- };\n- entityMap.unescape = _.invert(entityMap.escape);\n-\n- // Regexes containing the keys and values listed immediately above.\n- var entityRegexes = {\n- escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\n- unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\n- };\n-\n- // Functions for escaping and unescaping strings to/from HTML interpolation.\n- _.each(['escape', 'unescape'], function(method) {\n- _[method] = function(string) {\n- if (string == null) return '';\n- return ('' + string).replace(entityRegexes[method], function(match) {\n- return entityMap[method][match];\n- });\n- };\n- });\n-\n- // If the value of the named property is a function then invoke it;\n- // otherwise, return it.\n- _.result = function(object, property) {\n- if (object == null) return null;\n- var value = object[property];\n- return _.isFunction(value) ? value.call(object) : value;\n- };\n-\n- // Add your own custom functions to the Underscore object.\n- _.mixin = function(obj) {\n- each(_.functions(obj), function(name){\n- var func = _[name] = obj[name];\n- _.prototype[name] = function() {\n- var args = [this._wrapped];\n- push.apply(args, arguments);\n- return result.call(this, func.apply(_, args));\n- };\n- });\n- };\n-\n- // Generate a unique integer id (unique within the entire client session).\n- // Useful for temporary DOM ids.\n- var idCounter = 0;\n- _.uniqueId = function(prefix) {\n- var id = ++idCounter + '';\n- return prefix ? prefix + id : id;\n- };\n-\n- // By default, Underscore uses ERB-style template delimiters, change the\n- // following template settings to use alternative delimiters.\n- _.templateSettings = {\n- evaluate : /<%([\\s\\S]+?)%>/g,\n- interpolate : /<%=([\\s\\S]+?)%>/g,\n- escape : /<%-([\\s\\S]+?)%>/g\n- };\n-\n- // When customizing `templateSettings`, if you don't want to define an\n- // interpolation, evaluation or escaping regex, we need one that is\n- // guaranteed not to match.\n- var noMatch = /(.)^/;\n-\n- // Certain characters need to be escaped so that they can be put into a\n- // string literal.\n- var escapes = {\n- \"'\": \"'\",\n- '\\\\': '\\\\',\n- '\\r': 'r',\n- '\\n': 'n',\n- '\\t': 't',\n- '\\u2028': 'u2028',\n- '\\u2029': 'u2029'\n- };\n-\n- var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n-\n- // JavaScript micro-templating, similar to John Resig's implementation.\n- // Underscore templating handles arbitrary delimiters, preserves whitespace,\n- // and correctly escapes quotes within interpolated code.\n- _.template = function(text, data, settings) {\n- var render;\n- settings = _.defaults({}, settings, _.templateSettings);\n-\n- // Combine delimiters into one regular expression via alternation.\n- var matcher = new RegExp([\n- (settings.escape || noMatch).source,\n- (settings.interpolate || noMatch).source,\n- (settings.evaluate || noMatch).source\n- ].join('|') + '|$', 'g');\n-\n- // Compile the template source, escaping string literals appropriately.\n- var index = 0;\n- var source = \"__p+='\";\n- text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n- source += text.slice(index, offset)\n- .replace(escaper, function(match) { return '\\\\' + escapes[match]; });\n-\n- if (escape) {\n- source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n- }\n- if (interpolate) {\n- source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n- }\n- if (evaluate) {\n- source += \"';\\n\" + evaluate + \"\\n__p+='\";\n- }\n- index = offset + match.length;\n- return match;\n- });\n- source += \"';\\n\";\n-\n- // If a variable is not specified, place data values in local scope.\n- if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n-\n- source = \"var __t,__p='',__j=Array.prototype.join,\" +\n- \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n- source + \"return __p;\\n\";\n-\n- try {\n- render = new Function(settings.variable || 'obj', '_', source);\n- } catch (e) {\n- e.source = source;\n- throw e;\n- }\n-\n- if (data) return render(data, _);\n- var template = function(data) {\n- return render.call(this, data, _);\n- };\n-\n- // Provide the compiled function source as a convenience for precompilation.\n- template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n-\n- return template;\n- };\n-\n- // Add a \"chain\" function, which will delegate to the wrapper.\n- _.chain = function(obj) {\n- return _(obj).chain();\n- };\n-\n- // OOP\n- // ---------------\n- // If Underscore is called as a function, it returns a wrapped object that\n- // can be used OO-style. This wrapper holds altered versions of all the\n- // underscore functions. Wrapped objects may be chained.\n-\n- // Helper function to continue chaining intermediate results.\n- var result = function(obj) {\n- return this._chain ? _(obj).chain() : obj;\n- };\n-\n- // Add all of the Underscore functions to the wrapper object.\n- _.mixin(_);\n-\n- // Add all mutator Array functions to the wrapper.\n- each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n- var method = ArrayProto[name];\n- _.prototype[name] = function() {\n- var obj = this._wrapped;\n- method.apply(obj, arguments);\n- if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\n- return result.call(this, obj);\n- };\n- });\n-\n- // Add all accessor Array functions to the wrapper.\n- each(['concat', 'join', 'slice'], function(name) {\n- var method = ArrayProto[name];\n- _.prototype[name] = function() {\n- return result.call(this, method.apply(this._wrapped, arguments));\n- };\n- });\n-\n- _.extend(_.prototype, {\n-\n- // Start chaining a wrapped Underscore object.\n- chain: function() {\n- this._chain = true;\n- return this;\n- },\n-\n- // Extracts the result from a wrapped and chained object.\n- value: function() {\n- return this._wrapped;\n- }\n-\n- });\n-\n-}).call(this);" + }, + { + "sha": "c8c80d1846c6c51d69cb3ec3fecb1874dd916741", + "filename": "less/app.less", + "status": "renamed", + "additions": 114, + "deletions": 113, + "changes": 227, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/less%2Fapp.less", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/less%2Fapp.less", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/less%2Fapp.less?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -1,113 +1,114 @@\n-.check_list .closed span.text {\r\n- text-decoration: line-through;\r\n- color: #808080;\r\n-}\r\n-\r\n-.check_list {\r\n- list-style: none;\r\n-}\r\n-\r\n-.check_list li {\r\n- padding: 2px;\r\n- min-height: 25px;\r\n-}\r\n-\r\n-.check_list .input-sm {\r\n- height: 22px;\r\n- padding: 2px 5px;\r\n-}\r\n-\r\n-.check_list .check_add {\r\n- margin-left: 15px;\r\n- margin-right: 15px;\r\n- width: 237px;\r\n-}\r\n-\r\n-.comment-form {\r\n- padding-top: 10px;\r\n-}\r\n-\r\n-.chosen-container-multi .chosen-choices li.search-field input[type=\"text\"] {\r\n- height: 24px;\r\n-}\r\n-\r\n-#message {\r\n- min-height: 40px;\r\n- border: 1px solid #E3E3E3;\r\n- border-radius: 4px;\r\n- padding: 8px;\r\n- outline: none;\r\n-}\r\n-#message:active , #message:focus {\r\n- border: 1px solid blue;\r\n-}\r\n-\r\n-blockquote.comment {\r\n- padding: 30px 15px 15px;\r\n- margin: 0 5px 15px;\r\n- font-size: 14px;\r\n- position: relative;\r\n-}\r\n-\r\n-blockquote.comment .author {\r\n- position: absolute;\r\n- top: 10px;\r\n- left: 10px;\r\n- font-size: 12px;\r\n- font-weight: 700;\r\n- color: #BBB;\r\n-}\r\n-\r\n-blockquote.comment .author a , \r\n-blockquote.comment span.author {\r\n- text-decoration: none;\r\n- color: #BBB;\r\n-}\r\n-\r\n-.bs-callout {\r\n- margin: 20px 0;\r\n- padding: 20px;\r\n- border-left: 3px solid #eee\r\n-}\r\n-\r\n-.bs-callout h4 {\r\n- margin-top: 0;\r\n- margin-bottom: 5px\r\n-}\r\n-\r\n-.bs-callout p:last-child {\r\n- margin-bottom: 0\r\n-}\r\n-\r\n-.bs-callout code {\r\n- background-color: #fff;\r\n- border-radius: 3px\r\n-}\r\n-\r\n-.bs-callout-danger {\r\n- background-color: #fdf7f7;\r\n- border-color: #d9534f\r\n-}\r\n-\r\n-.bs-callout-danger h4 {\r\n- color: #d9534f\r\n-}\r\n-\r\n-.bs-callout-warning {\r\n- background-color: #fcf8f2;\r\n- border-color: #f0ad4e\r\n-}\r\n-\r\n-.bs-callout-warning h4 {\r\n- color: #f0ad4e\r\n-}\r\n-\r\n-.bs-callout-info {\r\n- background-color: #f4f8fa;\r\n- border-color: #5bc0de\r\n-}\r\n-\r\n-.docs {\r\n- border: 1px solid #AAA;\r\n- margin: 5px 0px;\r\n-}\n\\ No newline at end of file\n+@import \"../bower_components/bootstrap/less/bootstrap.less\";\n+.check_list .closed span.text {\n+ text-decoration: line-through;\n+ color: #808080;\n+}\n+\n+.check_list {\n+ list-style: none;\n+}\n+\n+.check_list li {\n+ padding: 2px;\n+ min-height: 25px;\n+}\n+\n+.check_list .input-sm {\n+ height: 22px;\n+ padding: 2px 5px;\n+}\n+\n+.check_list .check_add {\n+ margin-left: 15px;\n+ margin-right: 15px;\n+ width: 237px;\n+}\n+\n+.comment-form {\n+ padding-top: 10px;\n+}\n+\n+.chosen-container-multi .chosen-choices li.search-field input[type=\"text\"] {\n+ height: 24px;\n+}\n+\n+#message {\n+ min-height: 40px;\n+ border: 1px solid #E3E3E3;\n+ border-radius: 4px;\n+ padding: 8px;\n+ outline: none;\n+}\n+#message:active , #message:focus {\n+ border: 1px solid blue;\n+}\n+\n+blockquote.comment {\n+ padding: 30px 15px 15px;\n+ margin: 0 5px 15px;\n+ font-size: 14px;\n+ position: relative;\n+}\n+\n+blockquote.comment .author {\n+ position: absolute;\n+ top: 10px;\n+ left: 10px;\n+ font-size: 12px;\n+ font-weight: 700;\n+ color: #BBB;\n+}\n+\n+blockquote.comment .author a ,\n+blockquote.comment span.author {\n+ text-decoration: none;\n+ color: #BBB;\n+}\n+\n+.bs-callout {\n+ margin: 20px 0;\n+ padding: 20px;\n+ border-left: 3px solid #eee\n+}\n+\n+.bs-callout h4 {\n+ margin-top: 0;\n+ margin-bottom: 5px\n+}\n+\n+.bs-callout p:last-child {\n+ margin-bottom: 0\n+}\n+\n+.bs-callout code {\n+ background-color: #fff;\n+ border-radius: 3px\n+}\n+\n+.bs-callout-danger {\n+ background-color: #fdf7f7;\n+ border-color: #d9534f\n+}\n+\n+.bs-callout-danger h4 {\n+ color: #d9534f\n+}\n+\n+.bs-callout-warning {\n+ background-color: #fcf8f2;\n+ border-color: #f0ad4e\n+}\n+\n+.bs-callout-warning h4 {\n+ color: #f0ad4e\n+}\n+\n+.bs-callout-info {\n+ background-color: #f4f8fa;\n+ border-color: #5bc0de\n+}\n+\n+.docs {\n+ border: 1px solid #AAA;\n+ margin: 5px 0px;\n+}", + "previous_filename": "css/style.css" + }, + { + "sha": "263b5c6d1c96c8b1c4c6cf15b7fe7901adb4a1f1", + "filename": "package.json", + "status": "added", + "additions": 20, + "deletions": 0, + "changes": 20, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/package.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/package.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/package.json?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -0,0 +1,20 @@\n+{\n+ \"name\": \"comments\",\n+ \"version\": \"0.0.1\",\n+ \"scripts\": {\n+ \"start\": \"grunt\",\n+ \"postinstall\": \"npm run build\",\n+ \"build\": \"bower install\"\n+ },\n+ \"devDependencies\": {\n+ \"grunt\": \"~0.4.5\",\n+ \"grunt-cli\": \"~0.1.13\",\n+ \"grunt-contrib-connect\": \"~0.8.0\",\n+ \"grunt-contrib-watch\": \"~0.6.1\",\n+ \"grunt-html2js\": \"~0.2.7\",\n+ \"grunt-contrib-concat\": \">=0.1.3\",\n+ \"grunt-contrib-less\": \">=1.0.0\",\n+ \"grunt-contrib-copy\": \"~0.8\",\n+ \"bower\": \"latest\"\n+ }\n+}" + }, + { + "sha": "803cbe4409462a0122b59f5baac08a7f116424e5", + "filename": "public/index.html", + "status": "added", + "additions": 18, + "deletions": 0, + "changes": 18, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Findex.html", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Findex.html", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Findex.html?ref=2fb714060fa770507bded29e731f70692be81919", + "patch": "@@ -0,0 +1,18 @@\n+\n+\n+\n+\n+ TODO supply a title\n+ \n+ \n+ \n+\n+\n+\n+
      \n+
      \n+
      \n+ \n+\n+\n+" + }, + { + "sha": "2dce1ea778f69a369b731c4571198de07f8bae39", + "filename": "public/json/comments.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fcomments.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fcomments.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fcomments.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/comments.json" + }, + { + "sha": "f96e4d22af97c8fff027ca5f7e782432bd474209", + "filename": "public/json/data.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fdata.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fdata.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fdata.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/data.json" + }, + { + "sha": "2427c59eca3089e0880675e27fe136fec7f7f2f8", + "filename": "public/json/products.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fproducts.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fproducts.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fproducts.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/products.json" + }, + { + "sha": "6212fd34761ce27ad31b20adfbfc4d80b9c1cf46", + "filename": "public/json/suppliers.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fsuppliers.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fsuppliers.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fsuppliers.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/suppliers.json" + }, + { + "sha": "c9858c3023c4a260eff3a286acca8a0e17c99e48", + "filename": "public/json/users.json", + "status": "renamed", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://github.com/vivalaakam/comments/blob/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fusers.json", + "raw_url": "https://github.com/vivalaakam/comments/raw/2fb714060fa770507bded29e731f70692be81919/public%2Fjson%2Fusers.json", + "contents_url": "https://api.github.com/repos/vivalaakam/comments/contents/public%2Fjson%2Fusers.json?ref=2fb714060fa770507bded29e731f70692be81919", + "previous_filename": "json/users.json" + } + ] +} diff --git a/apigh/2023-04-20/coralproject_talk b/apigh/2023-04-20/coralproject_talk new file mode 100644 index 00000000..b08c5ab2 --- /dev/null +++ b/apigh/2023-04-20/coralproject_talk @@ -0,0 +1,145 @@ +{ + "id": 72454242, + "node_id": "MDEwOlJlcG9zaXRvcnk3MjQ1NDI0Mg==", + "name": "talk", + "full_name": "coralproject/talk", + "private": false, + "owner": { + "login": "coralproject", + "id": 9255912, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjkyNTU5MTI=", + "avatar_url": "https://avatars.githubusercontent.com/u/9255912?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/coralproject", + "html_url": "https://github.com/coralproject", + "followers_url": "https://api.github.com/users/coralproject/followers", + "following_url": "https://api.github.com/users/coralproject/following{/other_user}", + "gists_url": "https://api.github.com/users/coralproject/gists{/gist_id}", + "starred_url": "https://api.github.com/users/coralproject/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/coralproject/subscriptions", + "organizations_url": "https://api.github.com/users/coralproject/orgs", + "repos_url": "https://api.github.com/users/coralproject/repos", + "events_url": "https://api.github.com/users/coralproject/events{/privacy}", + "received_events_url": "https://api.github.com/users/coralproject/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/coralproject/talk", + "description": "A better commenting experience from Vox Media", + "fork": false, + "url": "https://api.github.com/repos/coralproject/talk", + "forks_url": "https://api.github.com/repos/coralproject/talk/forks", + "keys_url": "https://api.github.com/repos/coralproject/talk/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/coralproject/talk/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/coralproject/talk/teams", + "hooks_url": "https://api.github.com/repos/coralproject/talk/hooks", + "issue_events_url": "https://api.github.com/repos/coralproject/talk/issues/events{/number}", + "events_url": "https://api.github.com/repos/coralproject/talk/events", + "assignees_url": "https://api.github.com/repos/coralproject/talk/assignees{/user}", + "branches_url": "https://api.github.com/repos/coralproject/talk/branches{/branch}", + "tags_url": "https://api.github.com/repos/coralproject/talk/tags", + "blobs_url": "https://api.github.com/repos/coralproject/talk/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/coralproject/talk/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/coralproject/talk/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/coralproject/talk/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/coralproject/talk/statuses/{sha}", + "languages_url": "https://api.github.com/repos/coralproject/talk/languages", + "stargazers_url": "https://api.github.com/repos/coralproject/talk/stargazers", + "contributors_url": "https://api.github.com/repos/coralproject/talk/contributors", + "subscribers_url": "https://api.github.com/repos/coralproject/talk/subscribers", + "subscription_url": "https://api.github.com/repos/coralproject/talk/subscription", + "commits_url": "https://api.github.com/repos/coralproject/talk/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/coralproject/talk/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/coralproject/talk/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/coralproject/talk/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/coralproject/talk/contents/{+path}", + "compare_url": "https://api.github.com/repos/coralproject/talk/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/coralproject/talk/merges", + "archive_url": "https://api.github.com/repos/coralproject/talk/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/coralproject/talk/downloads", + "issues_url": "https://api.github.com/repos/coralproject/talk/issues{/number}", + "pulls_url": "https://api.github.com/repos/coralproject/talk/pulls{/number}", + "milestones_url": "https://api.github.com/repos/coralproject/talk/milestones{/number}", + "notifications_url": "https://api.github.com/repos/coralproject/talk/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/coralproject/talk/labels{/name}", + "releases_url": "https://api.github.com/repos/coralproject/talk/releases{/id}", + "deployments_url": "https://api.github.com/repos/coralproject/talk/deployments", + "created_at": "2016-10-31T16:14:05Z", + "updated_at": "2023-04-17T13:30:57Z", + "pushed_at": "2023-04-19T23:35:02Z", + "git_url": "git://github.com/coralproject/talk.git", + "ssh_url": "git@github.com:coralproject/talk.git", + "clone_url": "https://github.com/coralproject/talk.git", + "svn_url": "https://github.com/coralproject/talk", + "homepage": "https://coralproject.net", + "size": 65505, + "stargazers_count": 1820, + "watchers_count": 1820, + "language": "TypeScript", + "has_issues": true, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 342, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 51, + "license": { + "key": "other", + "name": "Other", + "spdx_id": "NOASSERTION", + "url": null, + "node_id": "MDc6TGljZW5zZTA=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comments", + "comments-widget", + "graphql", + "javascript", + "journalism", + "nodejs", + "react", + "typescript" + ], + "visibility": "public", + "forks": 342, + "open_issues": 51, + "watchers": 1820, + "default_branch": "develop", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "coralproject", + "id": 9255912, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjkyNTU5MTI=", + "avatar_url": "https://avatars.githubusercontent.com/u/9255912?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/coralproject", + "html_url": "https://github.com/coralproject", + "followers_url": "https://api.github.com/users/coralproject/followers", + "following_url": "https://api.github.com/users/coralproject/following{/other_user}", + "gists_url": "https://api.github.com/users/coralproject/gists{/gist_id}", + "starred_url": "https://api.github.com/users/coralproject/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/coralproject/subscriptions", + "organizations_url": "https://api.github.com/users/coralproject/orgs", + "repos_url": "https://api.github.com/users/coralproject/repos", + "events_url": "https://api.github.com/users/coralproject/events{/privacy}", + "received_events_url": "https://api.github.com/users/coralproject/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 342, + "subscribers_count": 52 +} diff --git a/apigh/2023-04-20/coralproject_talk.commit b/apigh/2023-04-20/coralproject_talk.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-20/coralproject_talk.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-20/discourse b/apigh/2023-04-20/discourse new file mode 100644 index 00000000..6cdb9e35 --- /dev/null +++ b/apigh/2023-04-20/discourse @@ -0,0 +1,144 @@ +{ + "id": 7569578, + "node_id": "MDEwOlJlcG9zaXRvcnk3NTY5NTc4", + "name": "discourse", + "full_name": "discourse/discourse", + "private": false, + "owner": { + "login": "discourse", + "id": 3220138, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMyMjAxMzg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3220138?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/discourse", + "html_url": "https://github.com/discourse", + "followers_url": "https://api.github.com/users/discourse/followers", + "following_url": "https://api.github.com/users/discourse/following{/other_user}", + "gists_url": "https://api.github.com/users/discourse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/discourse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/discourse/subscriptions", + "organizations_url": "https://api.github.com/users/discourse/orgs", + "repos_url": "https://api.github.com/users/discourse/repos", + "events_url": "https://api.github.com/users/discourse/events{/privacy}", + "received_events_url": "https://api.github.com/users/discourse/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/discourse/discourse", + "description": "A platform for community discussion. Free, open, simple.", + "fork": false, + "url": "https://api.github.com/repos/discourse/discourse", + "forks_url": "https://api.github.com/repos/discourse/discourse/forks", + "keys_url": "https://api.github.com/repos/discourse/discourse/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/discourse/discourse/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/discourse/discourse/teams", + "hooks_url": "https://api.github.com/repos/discourse/discourse/hooks", + "issue_events_url": "https://api.github.com/repos/discourse/discourse/issues/events{/number}", + "events_url": "https://api.github.com/repos/discourse/discourse/events", + "assignees_url": "https://api.github.com/repos/discourse/discourse/assignees{/user}", + "branches_url": "https://api.github.com/repos/discourse/discourse/branches{/branch}", + "tags_url": "https://api.github.com/repos/discourse/discourse/tags", + "blobs_url": "https://api.github.com/repos/discourse/discourse/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/discourse/discourse/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/discourse/discourse/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/discourse/discourse/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/discourse/discourse/statuses/{sha}", + "languages_url": "https://api.github.com/repos/discourse/discourse/languages", + "stargazers_url": "https://api.github.com/repos/discourse/discourse/stargazers", + "contributors_url": "https://api.github.com/repos/discourse/discourse/contributors", + "subscribers_url": "https://api.github.com/repos/discourse/discourse/subscribers", + "subscription_url": "https://api.github.com/repos/discourse/discourse/subscription", + "commits_url": "https://api.github.com/repos/discourse/discourse/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/discourse/discourse/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/discourse/discourse/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/discourse/discourse/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/discourse/discourse/contents/{+path}", + "compare_url": "https://api.github.com/repos/discourse/discourse/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/discourse/discourse/merges", + "archive_url": "https://api.github.com/repos/discourse/discourse/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/discourse/discourse/downloads", + "issues_url": "https://api.github.com/repos/discourse/discourse/issues{/number}", + "pulls_url": "https://api.github.com/repos/discourse/discourse/pulls{/number}", + "milestones_url": "https://api.github.com/repos/discourse/discourse/milestones{/number}", + "notifications_url": "https://api.github.com/repos/discourse/discourse/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/discourse/discourse/labels{/name}", + "releases_url": "https://api.github.com/repos/discourse/discourse/releases{/id}", + "deployments_url": "https://api.github.com/repos/discourse/discourse/deployments", + "created_at": "2013-01-12T00:25:55Z", + "updated_at": "2023-04-19T13:43:45Z", + "pushed_at": "2023-04-20T01:23:24Z", + "git_url": "git://github.com/discourse/discourse.git", + "ssh_url": "git@github.com:discourse/discourse.git", + "clone_url": "https://github.com/discourse/discourse.git", + "svn_url": "https://github.com/discourse/discourse", + "homepage": "https://www.discourse.org", + "size": 576334, + "stargazers_count": 37729, + "watchers_count": 37729, + "language": "Ruby", + "has_issues": false, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 7949, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 66, + "license": { + "key": "gpl-2.0", + "name": "GNU General Public License v2.0", + "spdx_id": "GPL-2.0", + "url": "https://api.github.com/licenses/gpl-2.0", + "node_id": "MDc6TGljZW5zZTg=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "discourse", + "ember", + "forum", + "javascript", + "postgresql", + "rails", + "ruby" + ], + "visibility": "public", + "forks": 7949, + "open_issues": 66, + "watchers": 37729, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "discourse", + "id": 3220138, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMyMjAxMzg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3220138?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/discourse", + "html_url": "https://github.com/discourse", + "followers_url": "https://api.github.com/users/discourse/followers", + "following_url": "https://api.github.com/users/discourse/following{/other_user}", + "gists_url": "https://api.github.com/users/discourse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/discourse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/discourse/subscriptions", + "organizations_url": "https://api.github.com/users/discourse/orgs", + "repos_url": "https://api.github.com/users/discourse/repos", + "events_url": "https://api.github.com/users/discourse/events{/privacy}", + "received_events_url": "https://api.github.com/users/discourse/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 7949, + "subscribers_count": 897 +} diff --git a/apigh/2023-04-20/discourse.commit b/apigh/2023-04-20/discourse.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-20/discourse.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-20/diskuto b/apigh/2023-04-20/diskuto new file mode 100644 index 00000000..8336473e --- /dev/null +++ b/apigh/2023-04-20/diskuto @@ -0,0 +1,142 @@ +{ + "id": 84876210, + "node_id": "MDEwOlJlcG9zaXRvcnk4NDg3NjIxMA==", + "name": "diskuto", + "full_name": "rejectedsoftware/diskuto", + "private": false, + "owner": { + "login": "rejectedsoftware", + "id": 1661098, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjE2NjEwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1661098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rejectedsoftware", + "html_url": "https://github.com/rejectedsoftware", + "followers_url": "https://api.github.com/users/rejectedsoftware/followers", + "following_url": "https://api.github.com/users/rejectedsoftware/following{/other_user}", + "gists_url": "https://api.github.com/users/rejectedsoftware/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rejectedsoftware/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rejectedsoftware/subscriptions", + "organizations_url": "https://api.github.com/users/rejectedsoftware/orgs", + "repos_url": "https://api.github.com/users/rejectedsoftware/repos", + "events_url": "https://api.github.com/users/rejectedsoftware/events{/privacy}", + "received_events_url": "https://api.github.com/users/rejectedsoftware/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/rejectedsoftware/diskuto", + "description": "An embeddable comment engine", + "fork": false, + "url": "https://api.github.com/repos/rejectedsoftware/diskuto", + "forks_url": "https://api.github.com/repos/rejectedsoftware/diskuto/forks", + "keys_url": "https://api.github.com/repos/rejectedsoftware/diskuto/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rejectedsoftware/diskuto/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rejectedsoftware/diskuto/teams", + "hooks_url": "https://api.github.com/repos/rejectedsoftware/diskuto/hooks", + "issue_events_url": "https://api.github.com/repos/rejectedsoftware/diskuto/issues/events{/number}", + "events_url": "https://api.github.com/repos/rejectedsoftware/diskuto/events", + "assignees_url": "https://api.github.com/repos/rejectedsoftware/diskuto/assignees{/user}", + "branches_url": "https://api.github.com/repos/rejectedsoftware/diskuto/branches{/branch}", + "tags_url": "https://api.github.com/repos/rejectedsoftware/diskuto/tags", + "blobs_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rejectedsoftware/diskuto/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rejectedsoftware/diskuto/languages", + "stargazers_url": "https://api.github.com/repos/rejectedsoftware/diskuto/stargazers", + "contributors_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contributors", + "subscribers_url": "https://api.github.com/repos/rejectedsoftware/diskuto/subscribers", + "subscription_url": "https://api.github.com/repos/rejectedsoftware/diskuto/subscription", + "commits_url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rejectedsoftware/diskuto/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rejectedsoftware/diskuto/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contents/{+path}", + "compare_url": "https://api.github.com/repos/rejectedsoftware/diskuto/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rejectedsoftware/diskuto/merges", + "archive_url": "https://api.github.com/repos/rejectedsoftware/diskuto/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rejectedsoftware/diskuto/downloads", + "issues_url": "https://api.github.com/repos/rejectedsoftware/diskuto/issues{/number}", + "pulls_url": "https://api.github.com/repos/rejectedsoftware/diskuto/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rejectedsoftware/diskuto/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rejectedsoftware/diskuto/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rejectedsoftware/diskuto/labels{/name}", + "releases_url": "https://api.github.com/repos/rejectedsoftware/diskuto/releases{/id}", + "deployments_url": "https://api.github.com/repos/rejectedsoftware/diskuto/deployments", + "created_at": "2017-03-13T21:26:59Z", + "updated_at": "2023-03-10T21:03:11Z", + "pushed_at": "2023-03-10T08:49:46Z", + "git_url": "git://github.com/rejectedsoftware/diskuto.git", + "ssh_url": "git@github.com:rejectedsoftware/diskuto.git", + "clone_url": "https://github.com/rejectedsoftware/diskuto.git", + "svn_url": "https://github.com/rejectedsoftware/diskuto", + "homepage": "", + "size": 381, + "stargazers_count": 36, + "watchers_count": 36, + "language": "D", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 2, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comments-widget", + "discussion", + "dlang", + "vibe", + "web" + ], + "visibility": "public", + "forks": 2, + "open_issues": 8, + "watchers": 36, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "rejectedsoftware", + "id": 1661098, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjE2NjEwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1661098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rejectedsoftware", + "html_url": "https://github.com/rejectedsoftware", + "followers_url": "https://api.github.com/users/rejectedsoftware/followers", + "following_url": "https://api.github.com/users/rejectedsoftware/following{/other_user}", + "gists_url": "https://api.github.com/users/rejectedsoftware/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rejectedsoftware/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rejectedsoftware/subscriptions", + "organizations_url": "https://api.github.com/users/rejectedsoftware/orgs", + "repos_url": "https://api.github.com/users/rejectedsoftware/repos", + "events_url": "https://api.github.com/users/rejectedsoftware/events{/privacy}", + "received_events_url": "https://api.github.com/users/rejectedsoftware/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 2, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-20/diskuto.commit b/apigh/2023-04-20/diskuto.commit new file mode 100644 index 00000000..1faf006e --- /dev/null +++ b/apigh/2023-04-20/diskuto.commit @@ -0,0 +1,115 @@ +{ + "sha": "5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "node_id": "C_kwDOBQ8bstoAKDVhNzI1NDA1YzhjZTdmYjdkZDEwYmMwYzkyMDNhMmEzMzgyY2MxOGI", + "commit": { + "author": { + "name": "Sรถnke Ludwig", + "email": "sludwig@outerproduct.org", + "date": "2023-03-10T08:49:05Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-03-10T08:49:05Z" + }, + "message": "Merge pull request #16 from rejectedsoftware/comment_index\n\nAdd a comment database index", + "tree": { + "sha": "8b40e94d952e86d16fc18c382b3ba376864016c7", + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/trees/8b40e94d952e86d16fc18c382b3ba376864016c7" + }, + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/git/commits/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJkCu8BCRBK7hj4Ov3rIwAA1GsIAGMbvCuHVRIy+MwIYgm0ZEru\n4fLLcS5uaEdXq2iSWLFboFNx2/z7ZQO7RxCYvrRJQbeQbKP65TYkuNHweeBnWeiN\nZP9Lq4IRX6yEotgPNol88bCUEm1Pt90iIi3/2u2FlF+UmqPSx9WbrY9ewzWVCZNz\nmExIBwrvTPtriru53+uSonNT5D26ECyz4aloVLU/Ov3/znK1rL2dGUK9ZTFxuYVO\n8J33maIhCSC3Lr2Dk9j3pnKNKfPaYje4MYiIUBFN6lcuBfE9l0/uoK8hiVP3ecQy\njGJmmQsS7Ko64rpabob56VbWeBGR/YixJ34S2+AkVy0GWwIypcUgjRJxvGAH+2E=\n=d1Xb\n-----END PGP SIGNATURE-----\n", + "payload": "tree 8b40e94d952e86d16fc18c382b3ba376864016c7\nparent 642b88f6c0fa9e692a870a1451ad6549eda861ea\nparent ee12c25a103b5173c13dab0c92d83488d7b61aee\nauthor Sรถnke Ludwig 1678438145 +0100\ncommitter GitHub 1678438145 +0100\n\nMerge pull request #16 from rejectedsoftware/comment_index\n\nAdd a comment database index" + } + }, + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "html_url": "https://github.com/rejectedsoftware/diskuto/commit/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "comments_url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/comments", + "author": { + "login": "s-ludwig", + "id": 1645969, + "node_id": "MDQ6VXNlcjE2NDU5Njk=", + "avatar_url": "https://avatars.githubusercontent.com/u/1645969?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/s-ludwig", + "html_url": "https://github.com/s-ludwig", + "followers_url": "https://api.github.com/users/s-ludwig/followers", + "following_url": "https://api.github.com/users/s-ludwig/following{/other_user}", + "gists_url": "https://api.github.com/users/s-ludwig/gists{/gist_id}", + "starred_url": "https://api.github.com/users/s-ludwig/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/s-ludwig/subscriptions", + "organizations_url": "https://api.github.com/users/s-ludwig/orgs", + "repos_url": "https://api.github.com/users/s-ludwig/repos", + "events_url": "https://api.github.com/users/s-ludwig/events{/privacy}", + "received_events_url": "https://api.github.com/users/s-ludwig/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "642b88f6c0fa9e692a870a1451ad6549eda861ea", + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/642b88f6c0fa9e692a870a1451ad6549eda861ea", + "html_url": "https://github.com/rejectedsoftware/diskuto/commit/642b88f6c0fa9e692a870a1451ad6549eda861ea" + }, + { + "sha": "ee12c25a103b5173c13dab0c92d83488d7b61aee", + "url": "https://api.github.com/repos/rejectedsoftware/diskuto/commits/ee12c25a103b5173c13dab0c92d83488d7b61aee", + "html_url": "https://github.com/rejectedsoftware/diskuto/commit/ee12c25a103b5173c13dab0c92d83488d7b61aee" + } + ], + "stats": { + "total": 33, + "additions": 32, + "deletions": 1 + }, + "files": [ + { + "sha": "ca8dd25e2d1c14eabb26c0395ab864cc2583db76", + "filename": ".github/workflows/ci.yml", + "status": "added", + "additions": 27, + "deletions": 0, + "changes": 27, + "blob_url": "https://github.com/rejectedsoftware/diskuto/blob/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/.github%2Fworkflows%2Fci.yml", + "raw_url": "https://github.com/rejectedsoftware/diskuto/raw/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/.github%2Fworkflows%2Fci.yml", + "contents_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contents/.github%2Fworkflows%2Fci.yml?ref=5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "patch": "@@ -0,0 +1,27 @@\n+name: CI\n+on: [push, pull_request]\n+jobs:\n+ test:\n+ name: CI\n+ runs-on: ubuntu-latest\n+ strategy:\n+ matrix:\n+ dc: [dmd-latest, ldc-latest]\n+ steps:\n+ - uses: actions/checkout@v2\n+ - name: Install D Compiler\n+ uses: dlang-community/setup-dlang@v1\n+ with:\n+ compiler: ${{ matrix.dc }}\n+\n+ - uses: actions/cache@v2\n+ with:\n+ path: ~/.dub\n+ key: ${{ matrix.dc }}-dub-${{ hashFiles('**/dub.selections.json') }}\n+ restore-keys: |\n+ ${{ matrix.dc }}-dub-\n+\n+ - name: Run Tests\n+ run: |\n+ dub build\n+ dub test" + }, + { + "sha": "8f9d95d114628f2355d1eada6a77134fc9a1aed6", + "filename": "source/diskuto/commentstores/mongodb.d", + "status": "modified", + "additions": 5, + "deletions": 1, + "changes": 6, + "blob_url": "https://github.com/rejectedsoftware/diskuto/blob/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/source%2Fdiskuto%2Fcommentstores%2Fmongodb.d", + "raw_url": "https://github.com/rejectedsoftware/diskuto/raw/5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b/source%2Fdiskuto%2Fcommentstores%2Fmongodb.d", + "contents_url": "https://api.github.com/repos/rejectedsoftware/diskuto/contents/source%2Fdiskuto%2Fcommentstores%2Fmongodb.d?ref=5a725405c8ce7fb7dd10bc0c9203a2a3382cc18b", + "patch": "@@ -31,6 +31,8 @@ class MongoDBCommentStore : DiskutoCommentStore {\n \t\t// upgrade old status field\n \t\tm_comments.update([\"status\": cast(int)StoredComment.Status.active], [\"$set\": [\"status\": \"active\"]], UpdateFlags.multiUpdate);\n \t\tm_comments.update([\"status\": cast(int)StoredComment.Status.disabled], [\"$set\": [\"status\": \"disabled\"]], UpdateFlags.multiUpdate);\n+\n+\t\tm_comments.createIndex([\"topic\": 1, \"status\": 1]);\n \t}\n \n \tStoredComment.ID postComment(StoredComment comment)\n@@ -43,7 +45,9 @@ class MongoDBCommentStore : DiskutoCommentStore {\n \n \tStoredComment getComment(StoredComment.ID comment)\n \t{\n-\t\treturn cast(StoredComment)m_comments.findOne!(MongoStruct!StoredComment)([\"_id\": BsonObjectID.fromString(comment)]);\n+\t\tauto ret = m_comments.findOne!(MongoStruct!StoredComment)([\"_id\": BsonObjectID.fromString(comment)]);\n+\t\tif (ret.isNull) throw new Exception(\"Unknown commend ID: \" ~ comment);\n+\t\treturn cast(StoredComment)ret.get;\n \t}\n \n \tvoid setCommentStatus(StoredComment.ID id, StoredComment.Status status)" + } + ] +} diff --git a/apigh/2023-04-20/e_comments b/apigh/2023-04-20/e_comments new file mode 100644 index 00000000..58c147d5 --- /dev/null +++ b/apigh/2023-04-20/e_comments @@ -0,0 +1,123 @@ +{ + "id": 16458160, + "node_id": "MDEwOlJlcG9zaXRvcnkxNjQ1ODE2MA==", + "name": "e-comments", + "full_name": "skx/e-comments", + "private": false, + "owner": { + "login": "skx", + "id": 735291, + "node_id": "MDQ6VXNlcjczNTI5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/735291?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skx", + "html_url": "https://github.com/skx", + "followers_url": "https://api.github.com/users/skx/followers", + "following_url": "https://api.github.com/users/skx/following{/other_user}", + "gists_url": "https://api.github.com/users/skx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skx/subscriptions", + "organizations_url": "https://api.github.com/users/skx/orgs", + "repos_url": "https://api.github.com/users/skx/repos", + "events_url": "https://api.github.com/users/skx/events{/privacy}", + "received_events_url": "https://api.github.com/users/skx/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/skx/e-comments", + "description": "External comments for static HTML pages, a lightweight self-hosted disqus alternative.", + "fork": false, + "url": "https://api.github.com/repos/skx/e-comments", + "forks_url": "https://api.github.com/repos/skx/e-comments/forks", + "keys_url": "https://api.github.com/repos/skx/e-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/skx/e-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/skx/e-comments/teams", + "hooks_url": "https://api.github.com/repos/skx/e-comments/hooks", + "issue_events_url": "https://api.github.com/repos/skx/e-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/skx/e-comments/events", + "assignees_url": "https://api.github.com/repos/skx/e-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/skx/e-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/skx/e-comments/tags", + "blobs_url": "https://api.github.com/repos/skx/e-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/skx/e-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/skx/e-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/skx/e-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/skx/e-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/skx/e-comments/languages", + "stargazers_url": "https://api.github.com/repos/skx/e-comments/stargazers", + "contributors_url": "https://api.github.com/repos/skx/e-comments/contributors", + "subscribers_url": "https://api.github.com/repos/skx/e-comments/subscribers", + "subscription_url": "https://api.github.com/repos/skx/e-comments/subscription", + "commits_url": "https://api.github.com/repos/skx/e-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/skx/e-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/skx/e-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/skx/e-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/skx/e-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/skx/e-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/skx/e-comments/merges", + "archive_url": "https://api.github.com/repos/skx/e-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/skx/e-comments/downloads", + "issues_url": "https://api.github.com/repos/skx/e-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/skx/e-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/skx/e-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/skx/e-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/skx/e-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/skx/e-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/skx/e-comments/deployments", + "created_at": "2014-02-02T16:39:53Z", + "updated_at": "2022-10-30T20:38:33Z", + "pushed_at": "2018-01-23T17:30:47Z", + "git_url": "git://github.com/skx/e-comments.git", + "ssh_url": "git@github.com:skx/e-comments.git", + "clone_url": "https://github.com/skx/e-comments.git", + "svn_url": "https://github.com/skx/e-comments", + "homepage": "", + "size": 98, + "stargazers_count": 101, + "watchers_count": 101, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "disqus", + "external-comments", + "redis", + "ruby", + "self-hosted", + "sqlite" + ], + "visibility": "public", + "forks": 6, + "open_issues": 0, + "watchers": 101, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 6, + "subscribers_count": 9 +} diff --git a/apigh/2023-04-20/e_comments.commit b/apigh/2023-04-20/e_comments.commit new file mode 100644 index 00000000..6916f7fd --- /dev/null +++ b/apigh/2023-04-20/e_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "node_id": "MDY6Q29tbWl0MTY0NTgxNjA6ZmVkNWRiNzI3ZTNmYTI5NGI2OTk4YTBkMzNiNmY3YTNhMmMwZjdlNQ==", + "commit": { + "author": { + "name": "Steve Kemp", + "email": "steve@steve.org.uk", + "date": "2018-01-23T17:30:41Z" + }, + "committer": { + "name": "Steve Kemp", + "email": "steve@steve.org.uk", + "date": "2018-01-23T17:30:41Z" + }, + "message": "Removed link to online demo", + "tree": { + "sha": "317bf5432513c3c3c50e1805b52376e5c61d440a", + "url": "https://api.github.com/repos/skx/e-comments/git/trees/317bf5432513c3c3c50e1805b52376e5c61d440a" + }, + "url": "https://api.github.com/repos/skx/e-comments/git/commits/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/skx/e-comments/commits/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "html_url": "https://github.com/skx/e-comments/commit/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "comments_url": "https://api.github.com/repos/skx/e-comments/commits/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5/comments", + "author": { + "login": "skx", + "id": 735291, + "node_id": "MDQ6VXNlcjczNTI5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/735291?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skx", + "html_url": "https://github.com/skx", + "followers_url": "https://api.github.com/users/skx/followers", + "following_url": "https://api.github.com/users/skx/following{/other_user}", + "gists_url": "https://api.github.com/users/skx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skx/subscriptions", + "organizations_url": "https://api.github.com/users/skx/orgs", + "repos_url": "https://api.github.com/users/skx/repos", + "events_url": "https://api.github.com/users/skx/events{/privacy}", + "received_events_url": "https://api.github.com/users/skx/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "skx", + "id": 735291, + "node_id": "MDQ6VXNlcjczNTI5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/735291?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skx", + "html_url": "https://github.com/skx", + "followers_url": "https://api.github.com/users/skx/followers", + "following_url": "https://api.github.com/users/skx/following{/other_user}", + "gists_url": "https://api.github.com/users/skx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skx/subscriptions", + "organizations_url": "https://api.github.com/users/skx/orgs", + "repos_url": "https://api.github.com/users/skx/repos", + "events_url": "https://api.github.com/users/skx/events{/privacy}", + "received_events_url": "https://api.github.com/users/skx/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7a743e2b77d8b48907e7a9c56839acb8b4b3b342", + "url": "https://api.github.com/repos/skx/e-comments/commits/7a743e2b77d8b48907e7a9c56839acb8b4b3b342", + "html_url": "https://github.com/skx/e-comments/commit/7a743e2b77d8b48907e7a9c56839acb8b4b3b342" + } + ], + "stats": { + "total": 13, + "additions": 3, + "deletions": 10 + }, + "files": [ + { + "sha": "40a1f3f5831d1f7a456d160846247e338664ff9c", + "filename": "README.md", + "status": "modified", + "additions": 3, + "deletions": 10, + "changes": 13, + "blob_url": "https://github.com/skx/e-comments/blob/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5/README.md", + "raw_url": "https://github.com/skx/e-comments/raw/fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5/README.md", + "contents_url": "https://api.github.com/repos/skx/e-comments/contents/README.md?ref=fed5db727e3fa294b6998a0d33b6f7a3a2c0f7e5", + "patch": "@@ -39,7 +39,7 @@ Run-time (client-side) dependencies:\n * mustache.js\n * Included in this repository.\n \n-This server was originally written for my [server optimization guide](https://tweaked.io/) but since it seemed like a generally-useful piece of code it was moved into its own repository.\n+This server was originally written for a server optimization guide but since it seemed like a generally-useful piece of code it was moved into its own repository.\n \n ### Contents\n \n@@ -51,8 +51,7 @@ This server was originally written for my [server optimization guide](https://tw\n * [Advanced Usage](#advanced-usage)\n * [Theming](#theming)\n * [Alternative Solutions](#alternative-systems)\n-* [Online Demo](#online-demo)\n- * [Running Locally](#running-locally)\n+* [Running Locally](#running-locally)\n \n \n ## The Comment Server\n@@ -255,13 +254,7 @@ I'm open to pull-requests adding more formatting options, if you have something\n * Ruby-on-rails-based.\n * [No longer maintained](https://github.com/phusion/juvia/issues/65).\n \n-## Online Demo\n-\n-There is a live online demo you can view here:\n-\n-* https://tweaked.io/guide/demo/\n-\n-### Running Locally\n+## Running Locally\n \n Providing you have the dependencies installed you can run the same\n demo locally:" + } + ] +} diff --git a/apigh/2023-04-20/easy_page_comments b/apigh/2023-04-20/easy_page_comments new file mode 100644 index 00000000..d1c28bad --- /dev/null +++ b/apigh/2023-04-20/easy_page_comments @@ -0,0 +1,112 @@ +{ + "id": 2671789, + "node_id": "MDEwOlJlcG9zaXRvcnkyNjcxNzg5", + "name": "EasyPageComments", + "full_name": "Pomax/EasyPageComments", + "private": false, + "owner": { + "login": "Pomax", + "id": 177243, + "node_id": "MDQ6VXNlcjE3NzI0Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/177243?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Pomax", + "html_url": "https://github.com/Pomax", + "followers_url": "https://api.github.com/users/Pomax/followers", + "following_url": "https://api.github.com/users/Pomax/following{/other_user}", + "gists_url": "https://api.github.com/users/Pomax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Pomax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Pomax/subscriptions", + "organizations_url": "https://api.github.com/users/Pomax/orgs", + "repos_url": "https://api.github.com/users/Pomax/repos", + "events_url": "https://api.github.com/users/Pomax/events{/privacy}", + "received_events_url": "https://api.github.com/users/Pomax/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/Pomax/EasyPageComments", + "description": "A simple instant-comments-section for pages based on PHP at the server, and _optionally_ JavaScript at the front end", + "fork": false, + "url": "https://api.github.com/repos/Pomax/EasyPageComments", + "forks_url": "https://api.github.com/repos/Pomax/EasyPageComments/forks", + "keys_url": "https://api.github.com/repos/Pomax/EasyPageComments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Pomax/EasyPageComments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Pomax/EasyPageComments/teams", + "hooks_url": "https://api.github.com/repos/Pomax/EasyPageComments/hooks", + "issue_events_url": "https://api.github.com/repos/Pomax/EasyPageComments/issues/events{/number}", + "events_url": "https://api.github.com/repos/Pomax/EasyPageComments/events", + "assignees_url": "https://api.github.com/repos/Pomax/EasyPageComments/assignees{/user}", + "branches_url": "https://api.github.com/repos/Pomax/EasyPageComments/branches{/branch}", + "tags_url": "https://api.github.com/repos/Pomax/EasyPageComments/tags", + "blobs_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Pomax/EasyPageComments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Pomax/EasyPageComments/languages", + "stargazers_url": "https://api.github.com/repos/Pomax/EasyPageComments/stargazers", + "contributors_url": "https://api.github.com/repos/Pomax/EasyPageComments/contributors", + "subscribers_url": "https://api.github.com/repos/Pomax/EasyPageComments/subscribers", + "subscription_url": "https://api.github.com/repos/Pomax/EasyPageComments/subscription", + "commits_url": "https://api.github.com/repos/Pomax/EasyPageComments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Pomax/EasyPageComments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Pomax/EasyPageComments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Pomax/EasyPageComments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Pomax/EasyPageComments/contents/{+path}", + "compare_url": "https://api.github.com/repos/Pomax/EasyPageComments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Pomax/EasyPageComments/merges", + "archive_url": "https://api.github.com/repos/Pomax/EasyPageComments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Pomax/EasyPageComments/downloads", + "issues_url": "https://api.github.com/repos/Pomax/EasyPageComments/issues{/number}", + "pulls_url": "https://api.github.com/repos/Pomax/EasyPageComments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Pomax/EasyPageComments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Pomax/EasyPageComments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Pomax/EasyPageComments/labels{/name}", + "releases_url": "https://api.github.com/repos/Pomax/EasyPageComments/releases{/id}", + "deployments_url": "https://api.github.com/repos/Pomax/EasyPageComments/deployments", + "created_at": "2011-10-29T17:51:36Z", + "updated_at": "2021-02-17T18:16:34Z", + "pushed_at": "2019-01-21T17:09:47Z", + "git_url": "git://github.com/Pomax/EasyPageComments.git", + "ssh_url": "git@github.com:Pomax/EasyPageComments.git", + "clone_url": "https://github.com/Pomax/EasyPageComments.git", + "svn_url": "https://github.com/Pomax/EasyPageComments", + "homepage": "", + "size": 43, + "stargazers_count": 17, + "watchers_count": 17, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 11, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 4, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 11, + "open_issues": 4, + "watchers": 17, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 11, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-20/easy_page_comments.commit b/apigh/2023-04-20/easy_page_comments.commit new file mode 100644 index 00000000..8483705f --- /dev/null +++ b/apigh/2023-04-20/easy_page_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "c436d8a7f5855426fe6406522c47edae97296ab6", + "node_id": "MDY6Q29tbWl0MjY3MTc4OTpjNDM2ZDhhN2Y1ODU1NDI2ZmU2NDA2NTIyYzQ3ZWRhZTk3Mjk2YWI2", + "commit": { + "author": { + "name": "Pomax", + "email": "pomax@nihongoresources.com", + "date": "2019-01-21T17:09:47Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2019-01-21T17:09:47Z" + }, + "message": "Update README.md", + "tree": { + "sha": "99ef37c704b4bbb6da4753ed474855f6be3c7226", + "url": "https://api.github.com/repos/Pomax/EasyPageComments/git/trees/99ef37c704b4bbb6da4753ed474855f6be3c7226" + }, + "url": "https://api.github.com/repos/Pomax/EasyPageComments/git/commits/c436d8a7f5855426fe6406522c47edae97296ab6", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJcRfzbCRBK7hj4Ov3rIwAAdHIIAGs6o2wklMqoUNqi/Mb+bNEI\nfcwvuhRxuSjfSCM6ZITtYimzLugPMilnY92huNe4/gf7npCh1YaXRt9hq/sRyNb6\n0k3Qwf5jCYM/zWf5mWOqTEQSXs4A+mlHPPN7X3Ml3NB0CGkMOpmTEdQxDzsO3lfT\ndH59dTEElS0LOKsbl2rxMqdD0mAjpBrmgmwfoHSQrH/DC7OyFpKlKjqX045jwKNs\nPNk/6H/5ikkxOOhKh7J3RDeLpIeIpbYAFYezxWBo/IAtzciw5tlvNN6HeGMsi0wO\nuv/9UGq0wmMvaJoqA/7Ja6EQeitH4svBih2gLDDT3gJd/8pqRfg4A1X4kcZsrXo=\n=v/+E\n-----END PGP SIGNATURE-----\n", + "payload": "tree 99ef37c704b4bbb6da4753ed474855f6be3c7226\nparent 138aa137a6a6936a87ba5487b31529b82d7852bc\nauthor Pomax 1548090587 -0800\ncommitter GitHub 1548090587 -0800\n\nUpdate README.md" + } + }, + "url": "https://api.github.com/repos/Pomax/EasyPageComments/commits/c436d8a7f5855426fe6406522c47edae97296ab6", + "html_url": "https://github.com/Pomax/EasyPageComments/commit/c436d8a7f5855426fe6406522c47edae97296ab6", + "comments_url": "https://api.github.com/repos/Pomax/EasyPageComments/commits/c436d8a7f5855426fe6406522c47edae97296ab6/comments", + "author": { + "login": "Pomax", + "id": 177243, + "node_id": "MDQ6VXNlcjE3NzI0Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/177243?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Pomax", + "html_url": "https://github.com/Pomax", + "followers_url": "https://api.github.com/users/Pomax/followers", + "following_url": "https://api.github.com/users/Pomax/following{/other_user}", + "gists_url": "https://api.github.com/users/Pomax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Pomax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Pomax/subscriptions", + "organizations_url": "https://api.github.com/users/Pomax/orgs", + "repos_url": "https://api.github.com/users/Pomax/repos", + "events_url": "https://api.github.com/users/Pomax/events{/privacy}", + "received_events_url": "https://api.github.com/users/Pomax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "138aa137a6a6936a87ba5487b31529b82d7852bc", + "url": "https://api.github.com/repos/Pomax/EasyPageComments/commits/138aa137a6a6936a87ba5487b31529b82d7852bc", + "html_url": "https://github.com/Pomax/EasyPageComments/commit/138aa137a6a6936a87ba5487b31529b82d7852bc" + } + ], + "stats": { + "total": 6, + "additions": 6, + "deletions": 0 + }, + "files": [ + { + "sha": "c7775ee8e35b6fa15009478210a80ad0a6e466a5", + "filename": "README.md", + "status": "modified", + "additions": 6, + "deletions": 0, + "changes": 6, + "blob_url": "https://github.com/Pomax/EasyPageComments/blob/c436d8a7f5855426fe6406522c47edae97296ab6/README.md", + "raw_url": "https://github.com/Pomax/EasyPageComments/raw/c436d8a7f5855426fe6406522c47edae97296ab6/README.md", + "contents_url": "https://api.github.com/repos/Pomax/EasyPageComments/contents/README.md?ref=c436d8a7f5855426fe6406522c47edae97296ab6", + "patch": "@@ -1,3 +1,9 @@\n+# THIS PROJECT IS NO LONGER MAINTAINED\n+\n+I wrote this in 2011, for a version of PHP that no longer exists. If you're considering using this package for your PHP user management, please, *please* look for a newer, better thing first.\n+\n+---\n+\n # EasyPageComments\n \n (c) 2011 Mike \"Pomax\" Kamermans" + } + ] +} diff --git a/apigh/2023-04-20/glosa b/apigh/2023-04-20/glosa new file mode 100644 index 00000000..cfc22a39 --- /dev/null +++ b/apigh/2023-04-20/glosa @@ -0,0 +1,144 @@ +{ + "id": 244964861, + "node_id": "MDEwOlJlcG9zaXRvcnkyNDQ5NjQ4NjE=", + "name": "glosa-server", + "full_name": "glosa/glosa-server", + "private": false, + "owner": { + "login": "glosa", + "id": 63453299, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjYzNDUzMjk5", + "avatar_url": "https://avatars.githubusercontent.com/u/63453299?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/glosa", + "html_url": "https://github.com/glosa", + "followers_url": "https://api.github.com/users/glosa/followers", + "following_url": "https://api.github.com/users/glosa/following{/other_user}", + "gists_url": "https://api.github.com/users/glosa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glosa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glosa/subscriptions", + "organizations_url": "https://api.github.com/users/glosa/orgs", + "repos_url": "https://api.github.com/users/glosa/repos", + "events_url": "https://api.github.com/users/glosa/events{/privacy}", + "received_events_url": "https://api.github.com/users/glosa/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/glosa/glosa-server", + "description": "Comments for static sites. Clone of Disqus, but faster, Opensource and sexy.", + "fork": false, + "url": "https://api.github.com/repos/glosa/glosa-server", + "forks_url": "https://api.github.com/repos/glosa/glosa-server/forks", + "keys_url": "https://api.github.com/repos/glosa/glosa-server/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/glosa/glosa-server/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/glosa/glosa-server/teams", + "hooks_url": "https://api.github.com/repos/glosa/glosa-server/hooks", + "issue_events_url": "https://api.github.com/repos/glosa/glosa-server/issues/events{/number}", + "events_url": "https://api.github.com/repos/glosa/glosa-server/events", + "assignees_url": "https://api.github.com/repos/glosa/glosa-server/assignees{/user}", + "branches_url": "https://api.github.com/repos/glosa/glosa-server/branches{/branch}", + "tags_url": "https://api.github.com/repos/glosa/glosa-server/tags", + "blobs_url": "https://api.github.com/repos/glosa/glosa-server/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/glosa/glosa-server/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/glosa/glosa-server/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/glosa/glosa-server/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/glosa/glosa-server/statuses/{sha}", + "languages_url": "https://api.github.com/repos/glosa/glosa-server/languages", + "stargazers_url": "https://api.github.com/repos/glosa/glosa-server/stargazers", + "contributors_url": "https://api.github.com/repos/glosa/glosa-server/contributors", + "subscribers_url": "https://api.github.com/repos/glosa/glosa-server/subscribers", + "subscription_url": "https://api.github.com/repos/glosa/glosa-server/subscription", + "commits_url": "https://api.github.com/repos/glosa/glosa-server/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/glosa/glosa-server/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/glosa/glosa-server/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/glosa/glosa-server/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/{+path}", + "compare_url": "https://api.github.com/repos/glosa/glosa-server/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/glosa/glosa-server/merges", + "archive_url": "https://api.github.com/repos/glosa/glosa-server/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/glosa/glosa-server/downloads", + "issues_url": "https://api.github.com/repos/glosa/glosa-server/issues{/number}", + "pulls_url": "https://api.github.com/repos/glosa/glosa-server/pulls{/number}", + "milestones_url": "https://api.github.com/repos/glosa/glosa-server/milestones{/number}", + "notifications_url": "https://api.github.com/repos/glosa/glosa-server/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/glosa/glosa-server/labels{/name}", + "releases_url": "https://api.github.com/repos/glosa/glosa-server/releases{/id}", + "deployments_url": "https://api.github.com/repos/glosa/glosa-server/deployments", + "created_at": "2020-03-04T17:40:40Z", + "updated_at": "2023-02-27T03:49:57Z", + "pushed_at": "2021-02-22T22:13:32Z", + "git_url": "git://github.com/glosa/glosa-server.git", + "ssh_url": "git@github.com:glosa/glosa-server.git", + "clone_url": "https://github.com/glosa/glosa-server.git", + "svn_url": "https://github.com/glosa/glosa-server", + "homepage": "", + "size": 30660, + "stargazers_count": 77, + "watchers_count": 77, + "language": "HTML", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "clojure", + "comment", + "comments-manager", + "comments-system", + "disqus", + "java", + "opensource" + ], + "visibility": "public", + "forks": 6, + "open_issues": 0, + "watchers": 77, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "glosa", + "id": 63453299, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjYzNDUzMjk5", + "avatar_url": "https://avatars.githubusercontent.com/u/63453299?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/glosa", + "html_url": "https://github.com/glosa", + "followers_url": "https://api.github.com/users/glosa/followers", + "following_url": "https://api.github.com/users/glosa/following{/other_user}", + "gists_url": "https://api.github.com/users/glosa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glosa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glosa/subscriptions", + "organizations_url": "https://api.github.com/users/glosa/orgs", + "repos_url": "https://api.github.com/users/glosa/repos", + "events_url": "https://api.github.com/users/glosa/events{/privacy}", + "received_events_url": "https://api.github.com/users/glosa/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 6, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-20/glosa.commit b/apigh/2023-04-20/glosa.commit new file mode 100644 index 00000000..881f4a23 --- /dev/null +++ b/apigh/2023-04-20/glosa.commit @@ -0,0 +1,151 @@ +{ + "sha": "5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "node_id": "MDY6Q29tbWl0MjQ0OTY0ODYxOjVmNGI5MWVlYWRmZTBkZmU4MDliMGViN2Y4NWZlMjQyZmRiYjMzNGE=", + "commit": { + "author": { + "name": "Andros Fenollosa", + "email": "tanrax@users.noreply.github.com", + "date": "2021-02-22T22:11:57Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-02-22T22:11:57Z" + }, + "message": "Merge pull request #9 from glosa/develop\n\nFix Delete request", + "tree": { + "sha": "2ebb7a4c8fc1a9ff628b29fea060974a4c2c049b", + "url": "https://api.github.com/repos/glosa/glosa-server/git/trees/2ebb7a4c8fc1a9ff628b29fea060974a4c2c049b" + }, + "url": "https://api.github.com/repos/glosa/glosa-server/git/commits/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJgNCwtCRBK7hj4Ov3rIwAAdHIIAG7ybudp78eEuTuq4UdchM8K\n2rmNlffcyEHQQ//LLFS37J7PoOq5nVNa4A3FjzEDVFSGFpQ7ytvvm8STKhx14dnE\ntfsXdlVi060+ayceFa5td6y1oF64AmviEMzM4Tpjnlx1yYbEgCwDDtyKVHfiBTae\nrUsjAEFzK6P4Cuh+f2zGsfUBj/RIsqFvDYRw0PNoU3mEawky+Z8Rf2PXPO+hLb3x\nu4Q+kUhJHReqf62W1acOwSc3uLqb1syuQ64oISJCmGvlI6PZQ/D8MAl3q2efaKGR\nn+zIb51FK3p3WHZyUzCxp8t5MD2As+yLEDzik2tW3BwcR37szrX18RSwg0ceCIg=\n=8A2t\n-----END PGP SIGNATURE-----\n", + "payload": "tree 2ebb7a4c8fc1a9ff628b29fea060974a4c2c049b\nparent 2822a326cea46abc7f5b0d00b6da6261866ee86f\nparent e926379f543ba9b0b18a41e53fe7d91cae2ad970\nauthor Andros Fenollosa 1614031917 +0100\ncommitter GitHub 1614031917 +0100\n\nMerge pull request #9 from glosa/develop\n\nFix Delete request" + } + }, + "url": "https://api.github.com/repos/glosa/glosa-server/commits/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "html_url": "https://github.com/glosa/glosa-server/commit/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "comments_url": "https://api.github.com/repos/glosa/glosa-server/commits/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/comments", + "author": { + "login": "tanrax", + "id": 4553672, + "node_id": "MDQ6VXNlcjQ1NTM2NzI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4553672?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tanrax", + "html_url": "https://github.com/tanrax", + "followers_url": "https://api.github.com/users/tanrax/followers", + "following_url": "https://api.github.com/users/tanrax/following{/other_user}", + "gists_url": "https://api.github.com/users/tanrax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tanrax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tanrax/subscriptions", + "organizations_url": "https://api.github.com/users/tanrax/orgs", + "repos_url": "https://api.github.com/users/tanrax/repos", + "events_url": "https://api.github.com/users/tanrax/events{/privacy}", + "received_events_url": "https://api.github.com/users/tanrax/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "2822a326cea46abc7f5b0d00b6da6261866ee86f", + "url": "https://api.github.com/repos/glosa/glosa-server/commits/2822a326cea46abc7f5b0d00b6da6261866ee86f", + "html_url": "https://github.com/glosa/glosa-server/commit/2822a326cea46abc7f5b0d00b6da6261866ee86f" + }, + { + "sha": "e926379f543ba9b0b18a41e53fe7d91cae2ad970", + "url": "https://api.github.com/repos/glosa/glosa-server/commits/e926379f543ba9b0b18a41e53fe7d91cae2ad970", + "html_url": "https://github.com/glosa/glosa-server/commit/e926379f543ba9b0b18a41e53fe7d91cae2ad970" + } + ], + "stats": { + "total": 24, + "additions": 11, + "deletions": 13 + }, + "files": [ + { + "sha": "ebc1d19308b7f61ef10d80fdea5e729fde883fba", + "filename": "README.md", + "status": "modified", + "additions": 2, + "deletions": 4, + "changes": 6, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/README.md", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/README.md", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/README.md?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -532,7 +532,7 @@ Delete a comment for ID. [Authorization required](#authorization).\n **Method**: `DELETE`\n \n ``` sh\n-/api/v1/comments/\n+/api/v1/comments/{id}\n ```\n \n | Param | Value | Description |\n@@ -544,9 +544,7 @@ Delete a comment for ID. [Authorization required](#authorization).\n Delete comment with id `1234`.\n \n ``` sh\n-curl -XDELETE -H \"Authorization: Bearer mysecret\" -H \"Content-type: application/json\" -d '{\n- \"id\": 1234\n-}' 'http://localhost:4000/api/v1/comments/\n+curl -XDELETE -H \"Authorization: Bearer mysecret\" -H \"Content-type: application/json\" http://localhost:4000/api/v1/comments/1234\n ```\n \n ##### Success response" + }, + { + "sha": "8149fcd485663e24111bd580a431d29de113c7db", + "filename": "project.clj", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/project.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/project.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/project.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -1,4 +1,4 @@\n-(defproject glosa \"1.3.6\"\n+(defproject glosa \"1.3.8\"\n :description \"glosa\"\n :url \"https://github.com/tanrax/glosa\"\n :license {:name \"EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0\"" + }, + { + "sha": "6bad908e7fa694ec5a368bd3ac199887c67c8890", + "filename": "src/glosa/core.clj", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fcore.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fcore.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/src%2Fglosa%2Fcore.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -13,7 +13,7 @@\n (wrap-defaults (assoc-in site-defaults [:security :anti-forgery] false))\n (wrap-cors\n :access-control-allow-origin [(re-pattern (if (config :debug) \".*\" (config :domain-cli)))]\n- :access-control-allow-methods [:get :post])\n+ :access-control-allow-methods [:get :post :put :delete])\n (#(if (config :debug) (wrap-reload %) %))))\n \n (defn -main [& args]" + }, + { + "sha": "6949d2b2b870f8c4501190d70e172be3e085dea2", + "filename": "src/glosa/urls.clj", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Furls.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Furls.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/src%2Fglosa%2Furls.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -22,7 +22,7 @@\n (POST \"/comments/latest/:pag\" [] view-private/get-latest-comments)\n (POST \"/threads/search/:query\" [] view-private/get-search-threads)\n (PUT \"/comments/\" [] view-private/update-comment)\n- (DELETE \"/comments/\" [] view-private/delete-comment)))\n+ (DELETE \"/comments/:id\" [] view-private/delete-comment)))\n \n (defroutes resources-routes\n ;; Resources (statics)" + }, + { + "sha": "4d81edcca0760f3ba9abc07647ff88ec3b00b2e8", + "filename": "src/glosa/views/private.clj", + "status": "modified", + "additions": 6, + "deletions": 6, + "changes": 12, + "blob_url": "https://github.com/glosa/glosa-server/blob/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fviews%2Fprivate.clj", + "raw_url": "https://github.com/glosa/glosa-server/raw/5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a/src%2Fglosa%2Fviews%2Fprivate.clj", + "contents_url": "https://api.github.com/repos/glosa/glosa-server/contents/src%2Fglosa%2Fviews%2Fprivate.clj?ref=5f4b91eeadfe0dfe809b0eb7f85fe242fdbb334a", + "patch": "@@ -38,10 +38,10 @@\n (response-401 req))))\n \n (defn delete-comment\n-\"Delete one comment\"\n-[req]\n-(let [id (:id (get-JSON req))]\n- (if (check-bearer-token req)\n- (render-JSON req {:deleted (database/delete-comment id) :id (bigint id)})\n- (response-401 req))))\n+ \"Delete one comment\"\n+ [req]\n+ (let [id (-> req :params :id)]\n+ (if (check-bearer-token req)\n+ (render-JSON req {:deleted (database/delete-comment id) :id (bigint id)})\n+ (response-401 req))))\n " + } + ] +} diff --git a/apigh/2023-04-20/gotell b/apigh/2023-04-20/gotell new file mode 100644 index 00000000..598f2e30 --- /dev/null +++ b/apigh/2023-04-20/gotell @@ -0,0 +1,138 @@ +{ + "id": 68969663, + "node_id": "MDEwOlJlcG9zaXRvcnk2ODk2OTY2Mw==", + "name": "gotell", + "full_name": "netlify/gotell", + "private": false, + "owner": { + "login": "netlify", + "id": 7892489, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc4OTI0ODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7892489?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/netlify", + "html_url": "https://github.com/netlify", + "followers_url": "https://api.github.com/users/netlify/followers", + "following_url": "https://api.github.com/users/netlify/following{/other_user}", + "gists_url": "https://api.github.com/users/netlify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/netlify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/netlify/subscriptions", + "organizations_url": "https://api.github.com/users/netlify/orgs", + "repos_url": "https://api.github.com/users/netlify/repos", + "events_url": "https://api.github.com/users/netlify/events{/privacy}", + "received_events_url": "https://api.github.com/users/netlify/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/netlify/gotell", + "description": "Netlify Comments is an API and build tool for handling large amounts of comments for JAMstack products", + "fork": false, + "url": "https://api.github.com/repos/netlify/gotell", + "forks_url": "https://api.github.com/repos/netlify/gotell/forks", + "keys_url": "https://api.github.com/repos/netlify/gotell/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/netlify/gotell/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/netlify/gotell/teams", + "hooks_url": "https://api.github.com/repos/netlify/gotell/hooks", + "issue_events_url": "https://api.github.com/repos/netlify/gotell/issues/events{/number}", + "events_url": "https://api.github.com/repos/netlify/gotell/events", + "assignees_url": "https://api.github.com/repos/netlify/gotell/assignees{/user}", + "branches_url": "https://api.github.com/repos/netlify/gotell/branches{/branch}", + "tags_url": "https://api.github.com/repos/netlify/gotell/tags", + "blobs_url": "https://api.github.com/repos/netlify/gotell/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/netlify/gotell/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/netlify/gotell/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/netlify/gotell/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/netlify/gotell/statuses/{sha}", + "languages_url": "https://api.github.com/repos/netlify/gotell/languages", + "stargazers_url": "https://api.github.com/repos/netlify/gotell/stargazers", + "contributors_url": "https://api.github.com/repos/netlify/gotell/contributors", + "subscribers_url": "https://api.github.com/repos/netlify/gotell/subscribers", + "subscription_url": "https://api.github.com/repos/netlify/gotell/subscription", + "commits_url": "https://api.github.com/repos/netlify/gotell/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/netlify/gotell/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/netlify/gotell/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/netlify/gotell/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/netlify/gotell/contents/{+path}", + "compare_url": "https://api.github.com/repos/netlify/gotell/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/netlify/gotell/merges", + "archive_url": "https://api.github.com/repos/netlify/gotell/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/netlify/gotell/downloads", + "issues_url": "https://api.github.com/repos/netlify/gotell/issues{/number}", + "pulls_url": "https://api.github.com/repos/netlify/gotell/pulls{/number}", + "milestones_url": "https://api.github.com/repos/netlify/gotell/milestones{/number}", + "notifications_url": "https://api.github.com/repos/netlify/gotell/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/netlify/gotell/labels{/name}", + "releases_url": "https://api.github.com/repos/netlify/gotell/releases{/id}", + "deployments_url": "https://api.github.com/repos/netlify/gotell/deployments", + "created_at": "2016-09-22T23:11:29Z", + "updated_at": "2023-03-01T09:17:31Z", + "pushed_at": "2021-08-20T19:19:23Z", + "git_url": "git://github.com/netlify/gotell.git", + "ssh_url": "git@github.com:netlify/gotell.git", + "clone_url": "https://github.com/netlify/gotell.git", + "svn_url": "https://github.com/netlify/gotell", + "homepage": null, + "size": 58, + "stargazers_count": 277, + "watchers_count": 277, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 19, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 19, + "open_issues": 8, + "watchers": 277, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "netlify", + "id": 7892489, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjc4OTI0ODk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7892489?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/netlify", + "html_url": "https://github.com/netlify", + "followers_url": "https://api.github.com/users/netlify/followers", + "following_url": "https://api.github.com/users/netlify/following{/other_user}", + "gists_url": "https://api.github.com/users/netlify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/netlify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/netlify/subscriptions", + "organizations_url": "https://api.github.com/users/netlify/orgs", + "repos_url": "https://api.github.com/users/netlify/repos", + "events_url": "https://api.github.com/users/netlify/events{/privacy}", + "received_events_url": "https://api.github.com/users/netlify/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 19, + "subscribers_count": 17 +} diff --git a/apigh/2023-04-20/gotell.commit b/apigh/2023-04-20/gotell.commit new file mode 100644 index 00000000..c2afadee --- /dev/null +++ b/apigh/2023-04-20/gotell.commit @@ -0,0 +1,98 @@ +{ + "sha": "034af979ddb085e742d6e1288740b8443661a1e6", + "node_id": "MDY6Q29tbWl0Njg5Njk2NjM6MDM0YWY5NzlkZGIwODVlNzQyZDZlMTI4ODc0MGI4NDQzNjYxYTFlNg==", + "commit": { + "author": { + "name": "Marcus Weiner", + "email": "marcus@netlify.com", + "date": "2019-09-11T17:48:49Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2019-09-11T17:48:49Z" + }, + "message": "Truncate commit message if first paragraph is over 256 chars (#15)", + "tree": { + "sha": "a105ba66365a8fdc304e76f81732ca6f8c35353e", + "url": "https://api.github.com/repos/netlify/gotell/git/trees/a105ba66365a8fdc304e76f81732ca6f8c35353e" + }, + "url": "https://api.github.com/repos/netlify/gotell/git/commits/034af979ddb085e742d6e1288740b8443661a1e6", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJdeTOBCRBK7hj4Ov3rIwAAdHIIAKOG2eK0RhZzuh+dm4brZW2l\nhcT/qqxTu5W/VQqVGuMiRAo6TCT+WEXnhLVmFCnZ9tMpkvz2v5LzpW7b7xw37R48\nmSX/RmvqVlnlmgyLLTa/lAAUlg4PfRu9YzjapnrxhnwdnEX1Ww8a7JRtlnuh7eRX\ntgUMOif0qOoeyyGJ6tTYAfH1o11GNS0iAkPExaOMyAMHQBFACdbml5qBV2o/yPw/\noGNYUdzh6QFzpDK0vXvPaPk/Z5AVyog6DRAiu+ZrbZyyPUuMe+xZ1EIJmnHUB7pq\nUkGWje6yiiRyx5Rgh1fbyV2O8kB2nc+WenWAI43IiH4CXA+Sm4WMO2CkFN5Qqd0=\n=HRx3\n-----END PGP SIGNATURE-----\n", + "payload": "tree a105ba66365a8fdc304e76f81732ca6f8c35353e\nparent 54c777f322a694c916e170c7fc521985f32d898d\nauthor Marcus Weiner 1568224129 +0200\ncommitter GitHub 1568224129 +0200\n\nTruncate commit message if first paragraph is over 256 chars (#15)\n\n" + } + }, + "url": "https://api.github.com/repos/netlify/gotell/commits/034af979ddb085e742d6e1288740b8443661a1e6", + "html_url": "https://github.com/netlify/gotell/commit/034af979ddb085e742d6e1288740b8443661a1e6", + "comments_url": "https://api.github.com/repos/netlify/gotell/commits/034af979ddb085e742d6e1288740b8443661a1e6/comments", + "author": { + "login": "mraerino", + "id": 4941459, + "node_id": "MDQ6VXNlcjQ5NDE0NTk=", + "avatar_url": "https://avatars.githubusercontent.com/u/4941459?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mraerino", + "html_url": "https://github.com/mraerino", + "followers_url": "https://api.github.com/users/mraerino/followers", + "following_url": "https://api.github.com/users/mraerino/following{/other_user}", + "gists_url": "https://api.github.com/users/mraerino/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mraerino/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mraerino/subscriptions", + "organizations_url": "https://api.github.com/users/mraerino/orgs", + "repos_url": "https://api.github.com/users/mraerino/repos", + "events_url": "https://api.github.com/users/mraerino/events{/privacy}", + "received_events_url": "https://api.github.com/users/mraerino/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "54c777f322a694c916e170c7fc521985f32d898d", + "url": "https://api.github.com/repos/netlify/gotell/commits/54c777f322a694c916e170c7fc521985f32d898d", + "html_url": "https://github.com/netlify/gotell/commit/54c777f322a694c916e170c7fc521985f32d898d" + } + ], + "stats": { + "total": 6, + "additions": 4, + "deletions": 2 + }, + "files": [ + { + "sha": "20e0dfdca41f8ea2f799af677effae9f88084272", + "filename": "api/server.go", + "status": "modified", + "additions": 4, + "deletions": 2, + "changes": 6, + "blob_url": "https://github.com/netlify/gotell/blob/034af979ddb085e742d6e1288740b8443661a1e6/api%2Fserver.go", + "raw_url": "https://github.com/netlify/gotell/raw/034af979ddb085e742d6e1288740b8443661a1e6/api%2Fserver.go", + "contents_url": "https://api.github.com/repos/netlify/gotell/contents/api%2Fserver.go?ref=034af979ddb085e742d6e1288740b8443661a1e6", + "patch": "@@ -108,6 +108,10 @@ func (s *Server) postComment(ctx context.Context, w http.ResponseWriter, req *ht\n \t\tfmt.Sprintf(\"%v-%v.json\", (time.Now().UnixNano()/1000000), name),\n \t)\n \n+\tmessage := firstParagraph\n+\tif len(message) > 255 {\n+\t\tmessage = message[:255]\n+\t}\n \tcontent, _ := json.Marshal(comment)\n \tbranch := \"master\"\n \n@@ -129,7 +133,6 @@ func (s *Server) postComment(ctx context.Context, w http.ResponseWriter, req *ht\n \t\t\tjsonError(w, fmt.Sprintf(\"Failed to create comment branch: %v\", err), 500)\n \t\t\treturn\n \t\t}\n-\t\tmessage := firstParagraph\n \t\t_, _, err = s.client.Repositories.CreateFile(ctx, parts[0], parts[1], pathname, &github.RepositoryContentFileOptions{\n \t\t\tMessage: &message,\n \t\t\tContent: content,\n@@ -152,7 +155,6 @@ func (s *Server) postComment(ctx context.Context, w http.ResponseWriter, req *ht\n \t\t\treturn\n \t\t}\n \t} else {\n-\t\tmessage := firstParagraph\n \t\t_, _, err = s.client.Repositories.CreateFile(ctx, parts[0], parts[1], pathname, &github.RepositoryContentFileOptions{\n \t\t\tMessage: &message,\n \t\t\tContent: content," + } + ] +} diff --git a/apigh/2023-04-20/hashover b/apigh/2023-04-20/hashover new file mode 100644 index 00000000..1ba48d68 --- /dev/null +++ b/apigh/2023-04-20/hashover @@ -0,0 +1,118 @@ +{ + "id": 18091549, + "node_id": "MDEwOlJlcG9zaXRvcnkxODA5MTU0OQ==", + "name": "hashover", + "full_name": "jacobwb/hashover", + "private": false, + "owner": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jacobwb/hashover", + "description": "Free and Open Source PHP Comment System", + "fork": false, + "url": "https://api.github.com/repos/jacobwb/hashover", + "forks_url": "https://api.github.com/repos/jacobwb/hashover/forks", + "keys_url": "https://api.github.com/repos/jacobwb/hashover/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jacobwb/hashover/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jacobwb/hashover/teams", + "hooks_url": "https://api.github.com/repos/jacobwb/hashover/hooks", + "issue_events_url": "https://api.github.com/repos/jacobwb/hashover/issues/events{/number}", + "events_url": "https://api.github.com/repos/jacobwb/hashover/events", + "assignees_url": "https://api.github.com/repos/jacobwb/hashover/assignees{/user}", + "branches_url": "https://api.github.com/repos/jacobwb/hashover/branches{/branch}", + "tags_url": "https://api.github.com/repos/jacobwb/hashover/tags", + "blobs_url": "https://api.github.com/repos/jacobwb/hashover/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jacobwb/hashover/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jacobwb/hashover/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jacobwb/hashover/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jacobwb/hashover/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jacobwb/hashover/languages", + "stargazers_url": "https://api.github.com/repos/jacobwb/hashover/stargazers", + "contributors_url": "https://api.github.com/repos/jacobwb/hashover/contributors", + "subscribers_url": "https://api.github.com/repos/jacobwb/hashover/subscribers", + "subscription_url": "https://api.github.com/repos/jacobwb/hashover/subscription", + "commits_url": "https://api.github.com/repos/jacobwb/hashover/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jacobwb/hashover/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jacobwb/hashover/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jacobwb/hashover/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jacobwb/hashover/contents/{+path}", + "compare_url": "https://api.github.com/repos/jacobwb/hashover/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jacobwb/hashover/merges", + "archive_url": "https://api.github.com/repos/jacobwb/hashover/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jacobwb/hashover/downloads", + "issues_url": "https://api.github.com/repos/jacobwb/hashover/issues{/number}", + "pulls_url": "https://api.github.com/repos/jacobwb/hashover/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jacobwb/hashover/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jacobwb/hashover/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jacobwb/hashover/labels{/name}", + "releases_url": "https://api.github.com/repos/jacobwb/hashover/releases{/id}", + "deployments_url": "https://api.github.com/repos/jacobwb/hashover/deployments", + "created_at": "2014-03-25T07:00:12Z", + "updated_at": "2023-04-05T05:22:51Z", + "pushed_at": "2022-03-02T06:17:57Z", + "git_url": "git://github.com/jacobwb/hashover.git", + "ssh_url": "git@github.com:jacobwb/hashover.git", + "clone_url": "https://github.com/jacobwb/hashover.git", + "svn_url": "https://github.com/jacobwb/hashover", + "homepage": "http://tildehash.com/?page=hashover", + "size": 124, + "stargazers_count": 243, + "watchers_count": 243, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 28, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 5, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 28, + "open_issues": 5, + "watchers": 243, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 28, + "subscribers_count": 22 +} diff --git a/apigh/2023-04-20/hashover.commit b/apigh/2023-04-20/hashover.commit new file mode 100644 index 00000000..b105fc29 --- /dev/null +++ b/apigh/2023-04-20/hashover.commit @@ -0,0 +1,98 @@ +{ + "sha": "19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "node_id": "C_kwDOARQOHdoAKDE5YmRmMTE4OWZmMzM5ZWJiMGM1M2E0Mjg2MTNlYWQ3YzMxNmExZWI", + "commit": { + "author": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-03-02T06:16:14Z" + }, + "committer": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-03-02T06:16:14Z" + }, + "message": "Addressing #34", + "tree": { + "sha": "9ffa73fe3ec5027450916f1617e1c335dff466b0", + "url": "https://api.github.com/repos/jacobwb/hashover/git/trees/9ffa73fe3ec5027450916f1617e1c335dff466b0" + }, + "url": "https://api.github.com/repos/jacobwb/hashover/git/commits/19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCAAdFiEEq4pVVPF17yxZ5cYw5kqpM55vbrAFAmIfC7YACgkQ5kqpM55v\nbrBooA/9HI5Ls4yK0EnpsFkNnnycU/gAGoe94VrkKN26/l1AB4pqvz5rya4fAkJV\n+G8Y0zRTJiboGJ30ITtvf+AX9eIvhpX/aALwMLUxcMMFpHgt4KkO9ej/DccHJdlh\nOFnLFfgnjV2KbNmhP8dgQeA2jSI3dD2ezTuzxpLFi035QmMuu/Ks/d7V5/cEgrUt\neqKYM8so+rtv5QOK2BUqeA5kEVP7EhZDRejAF+NBXiiIf8XuGR6jhPOf656/LSUc\neHkKU6nG+9CJL3gDPFBXi71RZjBGyXbbIruaglEMB+WDbBx4YbaLpD/2qH8sCsoI\nKXR0gBVAYFxicPt9J2FRH0tzkJrvK2mkumlFeYiWUAcHmuKIuAKg8nJGRl+M46wS\nEuLWXFhCzwciQF7aj0CWr/SIs06p20gnSBWXQaO83ink/oVjQveUuj/o75Ax2Ztg\nwAeYkaZdxrD9sOHfZYosy4x4opjF87mjSYEX/wTgYcepJ3TviO8o+Cg28oo2rE9Y\nE6MYpxQgT/yKFXMBJ2L7n0NnpmO9qBX/mfQCRQaWfQ9HJvhPOnQAOfypbAoXBOBP\nxCkuUmQjlT/4pAt30rOkUCihkUzpvMDlKa4HLrQpOEJsg2qOcFIGbtnmLBmGLLZw\nuX0ZzWhN/jXyKp/+N3L63ULnt1NXIBXhLBpz3EndQtCam5R6UmM=\n=OTh1\n-----END PGP SIGNATURE-----", + "payload": "tree 9ffa73fe3ec5027450916f1617e1c335dff466b0\nparent 1eb12da19474c18137a93e0d195d729f60317494\nauthor Jacob Barkdull 1646201774 -0800\ncommitter Jacob Barkdull 1646201774 -0800\n\nAddressing #34\n" + } + }, + "url": "https://api.github.com/repos/jacobwb/hashover/commits/19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "html_url": "https://github.com/jacobwb/hashover/commit/19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "comments_url": "https://api.github.com/repos/jacobwb/hashover/commits/19bdf1189ff339ebb0c53a428613ead7c316a1eb/comments", + "author": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1eb12da19474c18137a93e0d195d729f60317494", + "url": "https://api.github.com/repos/jacobwb/hashover/commits/1eb12da19474c18137a93e0d195d729f60317494", + "html_url": "https://github.com/jacobwb/hashover/commit/1eb12da19474c18137a93e0d195d729f60317494" + } + ], + "stats": { + "total": 6, + "additions": 3, + "deletions": 3 + }, + "files": [ + { + "sha": "8ed72c1e97f3e348ed00f075aebf75af800dcd09", + "filename": "scripts/encryption.php", + "status": "modified", + "additions": 3, + "deletions": 3, + "changes": 6, + "blob_url": "https://github.com/jacobwb/hashover/blob/19bdf1189ff339ebb0c53a428613ead7c316a1eb/scripts%2Fencryption.php", + "raw_url": "https://github.com/jacobwb/hashover/raw/19bdf1189ff339ebb0c53a428613ead7c316a1eb/scripts%2Fencryption.php", + "contents_url": "https://api.github.com/repos/jacobwb/hashover/contents/scripts%2Fencryption.php?ref=19bdf1189ff339ebb0c53a428613ead7c316a1eb", + "patch": "@@ -27,13 +27,13 @@ function encrypt($string) {\n \t\t$k = array();\n \n \t\tfor ($i2 = 0; $i2 < $kl; $i2++) {\n-\t\t\t$k[$i2] = ord($encryption_key{$i2}) & 0x1F;\n+\t\t\t$k[$i2] = ord($encryption_key[$i2]) & 0x1F;\n \t\t}\n \t\t$j = 0;\n \n \t\tfor ($i2 = 0; $i2 < strlen($str); $i2++) {\n-\t\t\t$e = ord($str{$i2});\n-\t\t\t$str{$i2} = $e & 0xE0 ? chr($e^$k[$j]) : chr($e);\n+\t\t\t$e = ord($str[$i2]);\n+\t\t\t$str[$i2] = $e & 0xE0 ? chr($e^$k[$j]) : chr($e);\n \t\t\t$j++; $j = $j == $kl ? 0 : $j;\n \t\t}\n \t\treturn $str;" + } + ] +} diff --git a/apigh/2023-04-20/hashover2 b/apigh/2023-04-20/hashover2 new file mode 100644 index 00000000..655db5d3 --- /dev/null +++ b/apigh/2023-04-20/hashover2 @@ -0,0 +1,129 @@ +{ + "id": 18096322, + "node_id": "MDEwOlJlcG9zaXRvcnkxODA5NjMyMg==", + "name": "hashover-next", + "full_name": "jacobwb/hashover-next", + "private": false, + "owner": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jacobwb/hashover-next", + "description": "This branch will be HashOver 2.0", + "fork": false, + "url": "https://api.github.com/repos/jacobwb/hashover-next", + "forks_url": "https://api.github.com/repos/jacobwb/hashover-next/forks", + "keys_url": "https://api.github.com/repos/jacobwb/hashover-next/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jacobwb/hashover-next/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jacobwb/hashover-next/teams", + "hooks_url": "https://api.github.com/repos/jacobwb/hashover-next/hooks", + "issue_events_url": "https://api.github.com/repos/jacobwb/hashover-next/issues/events{/number}", + "events_url": "https://api.github.com/repos/jacobwb/hashover-next/events", + "assignees_url": "https://api.github.com/repos/jacobwb/hashover-next/assignees{/user}", + "branches_url": "https://api.github.com/repos/jacobwb/hashover-next/branches{/branch}", + "tags_url": "https://api.github.com/repos/jacobwb/hashover-next/tags", + "blobs_url": "https://api.github.com/repos/jacobwb/hashover-next/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jacobwb/hashover-next/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jacobwb/hashover-next/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jacobwb/hashover-next/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jacobwb/hashover-next/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jacobwb/hashover-next/languages", + "stargazers_url": "https://api.github.com/repos/jacobwb/hashover-next/stargazers", + "contributors_url": "https://api.github.com/repos/jacobwb/hashover-next/contributors", + "subscribers_url": "https://api.github.com/repos/jacobwb/hashover-next/subscribers", + "subscription_url": "https://api.github.com/repos/jacobwb/hashover-next/subscription", + "commits_url": "https://api.github.com/repos/jacobwb/hashover-next/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jacobwb/hashover-next/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jacobwb/hashover-next/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jacobwb/hashover-next/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jacobwb/hashover-next/contents/{+path}", + "compare_url": "https://api.github.com/repos/jacobwb/hashover-next/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jacobwb/hashover-next/merges", + "archive_url": "https://api.github.com/repos/jacobwb/hashover-next/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jacobwb/hashover-next/downloads", + "issues_url": "https://api.github.com/repos/jacobwb/hashover-next/issues{/number}", + "pulls_url": "https://api.github.com/repos/jacobwb/hashover-next/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jacobwb/hashover-next/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jacobwb/hashover-next/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jacobwb/hashover-next/labels{/name}", + "releases_url": "https://api.github.com/repos/jacobwb/hashover-next/releases{/id}", + "deployments_url": "https://api.github.com/repos/jacobwb/hashover-next/deployments", + "created_at": "2014-03-25T10:21:16Z", + "updated_at": "2023-04-14T05:53:32Z", + "pushed_at": "2022-11-19T20:43:27Z", + "git_url": "git://github.com/jacobwb/hashover-next.git", + "ssh_url": "git@github.com:jacobwb/hashover-next.git", + "clone_url": "https://github.com/jacobwb/hashover-next.git", + "svn_url": "https://github.com/jacobwb/hashover-next", + "homepage": "", + "size": 2838, + "stargazers_count": 409, + "watchers_count": 409, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 89, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 103, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "agpl", + "comments", + "free-software", + "freesoftware", + "hashover", + "javascript", + "json", + "open-source", + "opensource", + "php", + "sql", + "xml" + ], + "visibility": "public", + "forks": 89, + "open_issues": 103, + "watchers": 409, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 89, + "subscribers_count": 25 +} diff --git a/apigh/2023-04-20/hashover2.commit b/apigh/2023-04-20/hashover2.commit new file mode 100644 index 00000000..799a097f --- /dev/null +++ b/apigh/2023-04-20/hashover2.commit @@ -0,0 +1,110 @@ +{ + "sha": "58c7b12f2e2146786760c8a308fe90559f12bcff", + "node_id": "C_kwDOARQgwtoAKDU4YzdiMTJmMmUyMTQ2Nzg2NzYwYzhhMzA4ZmU5MDU1OWYxMmJjZmY", + "commit": { + "author": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-11-19T20:42:19Z" + }, + "committer": { + "name": "Jacob Barkdull", + "email": "jacobbarkdull@gmail.com", + "date": "2022-11-19T20:42:19Z" + }, + "message": "Set thread name in likes and edit info scripts, closes #338", + "tree": { + "sha": "41010df14da9cae224416894d003ffe8030e88b7", + "url": "https://api.github.com/repos/jacobwb/hashover-next/git/trees/41010df14da9cae224416894d003ffe8030e88b7" + }, + "url": "https://api.github.com/repos/jacobwb/hashover-next/git/commits/58c7b12f2e2146786760c8a308fe90559f12bcff", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCAAdFiEEq4pVVPF17yxZ5cYw5kqpM55vbrAFAmN5P+kACgkQ5kqpM55v\nbrDfrg/+OlvitQoIheB5aZfWoIKx4unHR+bWVyhnQ6aLFpTcXDlaJpTBv0mqJUIQ\nxA+rTkC+2orSGSYw2Dc8/CV6fsUy2NcEUPfCEc1+KeB/mnY0UkaL/f4s+5x1yDp4\nKOeuWzEa+3E8AjRQa4LzcYDFf35vllqioT5XfXHxJNGCkxBmoSmlKhW4ixgFjn6z\nZwAu3a8g58VGDTJG481uAlNcnE90Vuk+jku3E1gk32W+VVY1Np5uBvQc+fymn8Cc\nOuojJmq8Hz7Gi5eZcVOrRtI13w3kYZR1nu1l/AFFpB8vFZUhzh9EvnYPGddzAjRT\naJODmDuO7Sme8G39hlwviTGbsHPvDjkUQowmGu5LiaTdluPnbxuXhpYBGchj7ykC\nuAENL+3PI3PDNk8A+R2kBWZ08XsjOojoGptKbY2aF3uROyFbIo9NisYaAgb9Vt8R\nuRkSLo40HSi4E/qkAG/qa4SVoq1WQiA+GNgY6aRgQJSomTqcGbBKYDvkHrwkhw9n\nz9iAaBdEewq/c7XvbajuarW5AuHEj1SatTbE23fC+KoinrF+mPxm2ThHA+rAwi0z\n35kz7lAEBxdCYPr3CPQB8sT24jcHZzZn+jXKANCBiqMA/hgdri4/p8N+3yXJh0sy\ntrsHPA+J+TDJ+ARkTIB4rWQ3Mdg8TReWsCEIiC4gy+EW1XuSa9I=\n=51ZT\n-----END PGP SIGNATURE-----", + "payload": "tree 41010df14da9cae224416894d003ffe8030e88b7\nparent 3a4f29a1d26b020dd7c52a94155de571fb9714fb\nauthor Jacob Barkdull 1668890539 -0800\ncommitter Jacob Barkdull 1668890539 -0800\n\nSet thread name in likes and edit info scripts, closes #338\n" + } + }, + "url": "https://api.github.com/repos/jacobwb/hashover-next/commits/58c7b12f2e2146786760c8a308fe90559f12bcff", + "html_url": "https://github.com/jacobwb/hashover-next/commit/58c7b12f2e2146786760c8a308fe90559f12bcff", + "comments_url": "https://api.github.com/repos/jacobwb/hashover-next/commits/58c7b12f2e2146786760c8a308fe90559f12bcff/comments", + "author": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "jacobwb", + "id": 4677622, + "node_id": "MDQ6VXNlcjQ2Nzc2MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/4677622?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jacobwb", + "html_url": "https://github.com/jacobwb", + "followers_url": "https://api.github.com/users/jacobwb/followers", + "following_url": "https://api.github.com/users/jacobwb/following{/other_user}", + "gists_url": "https://api.github.com/users/jacobwb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jacobwb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jacobwb/subscriptions", + "organizations_url": "https://api.github.com/users/jacobwb/orgs", + "repos_url": "https://api.github.com/users/jacobwb/repos", + "events_url": "https://api.github.com/users/jacobwb/events{/privacy}", + "received_events_url": "https://api.github.com/users/jacobwb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "3a4f29a1d26b020dd7c52a94155de571fb9714fb", + "url": "https://api.github.com/repos/jacobwb/hashover-next/commits/3a4f29a1d26b020dd7c52a94155de571fb9714fb", + "html_url": "https://github.com/jacobwb/hashover-next/commit/3a4f29a1d26b020dd7c52a94155de571fb9714fb" + } + ], + "stats": { + "total": 6, + "additions": 6, + "deletions": 0 + }, + "files": [ + { + "sha": "bc67b06b38690bc4984e0ecd6c5d7c24778f8278", + "filename": "backend/comment-info.php", + "status": "modified", + "additions": 3, + "deletions": 0, + "changes": 3, + "blob_url": "https://github.com/jacobwb/hashover-next/blob/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Fcomment-info.php", + "raw_url": "https://github.com/jacobwb/hashover-next/raw/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Fcomment-info.php", + "contents_url": "https://api.github.com/repos/jacobwb/hashover-next/contents/backend%2Fcomment-info.php?ref=58c7b12f2e2146786760c8a308fe90559f12bcff", + "patch": "@@ -117,6 +117,9 @@ function get_json_response ($hashover)\n \t// Set page URL from POST/GET data\n \t$hashover->setup->setPageURL ('request');\n \n+\t// Set thread name from POST/GET data\n+\t$hashover->setup->setThreadName ('request');\n+\n \t// Initiate comment processing\n \t$hashover->initiate ();\n " + }, + { + "sha": "73f6d415262ea6335bc95f1085c579e54aec2e29", + "filename": "backend/like.php", + "status": "modified", + "additions": 3, + "deletions": 0, + "changes": 3, + "blob_url": "https://github.com/jacobwb/hashover-next/blob/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Flike.php", + "raw_url": "https://github.com/jacobwb/hashover-next/raw/58c7b12f2e2146786760c8a308fe90559f12bcff/backend%2Flike.php", + "contents_url": "https://api.github.com/repos/jacobwb/hashover-next/contents/backend%2Flike.php?ref=58c7b12f2e2146786760c8a308fe90559f12bcff", + "patch": "@@ -173,6 +173,9 @@ function get_json_response ($hashover)\n \t// Set page URL from POST/GET data\n \t$hashover->setup->setPageURL ('request');\n \n+\t// Set thread name from POST/GET data\n+\t$hashover->setup->setThreadName ('request');\n+\n \t// Initiate comment processing\n \t$hashover->initiate ();\n " + } + ] +} diff --git a/apigh/2023-04-20/isso b/apigh/2023-04-20/isso new file mode 100644 index 00000000..a66491c8 --- /dev/null +++ b/apigh/2023-04-20/isso @@ -0,0 +1,122 @@ +{ + "id": 6268419, + "node_id": "MDEwOlJlcG9zaXRvcnk2MjY4NDE5", + "name": "isso", + "full_name": "posativ/isso", + "private": false, + "owner": { + "login": "posativ", + "id": 337602, + "node_id": "MDQ6VXNlcjMzNzYwMg==", + "avatar_url": "https://avatars.githubusercontent.com/u/337602?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/posativ", + "html_url": "https://github.com/posativ", + "followers_url": "https://api.github.com/users/posativ/followers", + "following_url": "https://api.github.com/users/posativ/following{/other_user}", + "gists_url": "https://api.github.com/users/posativ/gists{/gist_id}", + "starred_url": "https://api.github.com/users/posativ/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/posativ/subscriptions", + "organizations_url": "https://api.github.com/users/posativ/orgs", + "repos_url": "https://api.github.com/users/posativ/repos", + "events_url": "https://api.github.com/users/posativ/events{/privacy}", + "received_events_url": "https://api.github.com/users/posativ/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/posativ/isso", + "description": "a Disqus alternative", + "fork": false, + "url": "https://api.github.com/repos/posativ/isso", + "forks_url": "https://api.github.com/repos/posativ/isso/forks", + "keys_url": "https://api.github.com/repos/posativ/isso/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/posativ/isso/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/posativ/isso/teams", + "hooks_url": "https://api.github.com/repos/posativ/isso/hooks", + "issue_events_url": "https://api.github.com/repos/posativ/isso/issues/events{/number}", + "events_url": "https://api.github.com/repos/posativ/isso/events", + "assignees_url": "https://api.github.com/repos/posativ/isso/assignees{/user}", + "branches_url": "https://api.github.com/repos/posativ/isso/branches{/branch}", + "tags_url": "https://api.github.com/repos/posativ/isso/tags", + "blobs_url": "https://api.github.com/repos/posativ/isso/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/posativ/isso/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/posativ/isso/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/posativ/isso/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/posativ/isso/statuses/{sha}", + "languages_url": "https://api.github.com/repos/posativ/isso/languages", + "stargazers_url": "https://api.github.com/repos/posativ/isso/stargazers", + "contributors_url": "https://api.github.com/repos/posativ/isso/contributors", + "subscribers_url": "https://api.github.com/repos/posativ/isso/subscribers", + "subscription_url": "https://api.github.com/repos/posativ/isso/subscription", + "commits_url": "https://api.github.com/repos/posativ/isso/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/posativ/isso/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/posativ/isso/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/posativ/isso/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/posativ/isso/contents/{+path}", + "compare_url": "https://api.github.com/repos/posativ/isso/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/posativ/isso/merges", + "archive_url": "https://api.github.com/repos/posativ/isso/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/posativ/isso/downloads", + "issues_url": "https://api.github.com/repos/posativ/isso/issues{/number}", + "pulls_url": "https://api.github.com/repos/posativ/isso/pulls{/number}", + "milestones_url": "https://api.github.com/repos/posativ/isso/milestones{/number}", + "notifications_url": "https://api.github.com/repos/posativ/isso/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/posativ/isso/labels{/name}", + "releases_url": "https://api.github.com/repos/posativ/isso/releases{/id}", + "deployments_url": "https://api.github.com/repos/posativ/isso/deployments", + "created_at": "2012-10-17T20:46:45Z", + "updated_at": "2023-04-20T01:21:06Z", + "pushed_at": "2023-04-18T06:57:33Z", + "git_url": "git://github.com/posativ/isso.git", + "ssh_url": "git@github.com:posativ/isso.git", + "clone_url": "https://github.com/posativ/isso.git", + "svn_url": "https://github.com/posativ/isso", + "homepage": "https://isso-comments.de", + "size": 3704, + "stargazers_count": 4780, + "watchers_count": 4780, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": true, + "forks_count": 429, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 70, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting", + "disqus", + "javascript", + "self-hosted", + "sqlite3" + ], + "visibility": "public", + "forks": 429, + "open_issues": 70, + "watchers": 4780, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 429, + "subscribers_count": 92 +} diff --git a/apigh/2023-04-20/isso.commit b/apigh/2023-04-20/isso.commit new file mode 100644 index 00000000..ed1c8ed1 --- /dev/null +++ b/apigh/2023-04-20/isso.commit @@ -0,0 +1,103 @@ +{ + "sha": "64374a8af978f1cfd4a91875c18a309122c7d9ca", + "node_id": "C_kwDOAF-mA9oAKDY0Mzc0YThhZjk3OGYxY2ZkNGE5MTg3NWMxOGEzMDkxMjJjN2Q5Y2E", + "commit": { + "author": { + "name": "ix5", + "email": "ix5@users.noreply.github.com", + "date": "2023-03-10T03:09:40Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2023-03-10T03:09:40Z" + }, + "message": "Merge pull request #947 from 123wowow123/patch-1\n\ndocs: testing-client: Fix typo in make command", + "tree": { + "sha": "e2a7c32169fd0dcb9748b636d9d8a97b12210b20", + "url": "https://api.github.com/repos/posativ/isso/git/trees/e2a7c32169fd0dcb9748b636d9d8a97b12210b20" + }, + "url": "https://api.github.com/repos/posativ/isso/git/commits/64374a8af978f1cfd4a91875c18a309122c7d9ca", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJkCp90CRBK7hj4Ov3rIwAAy9EIACEctWSqI2ZDEXnpwEcsL+cm\nZolwQZZR3bqJxJ0IaffB4k4lfghWxOTplwwITC5iMgoxbghyuq+8Y2YdjwJdmwAZ\niCIy2fL4Fya6ut7fMbB8fgpUfvPx7e3FeBSpRP7uw/bLZoS4yaBRmRUh5TQh2tFK\nGNRHnP5K5CL/59MxxqbsoE03OkLIIKU2wiy+nh7+NhPTWHYkVlDelEBHOEHfHN4+\nh4jbp00wOZ8AxYd0BB6XAp6jMeI6RkCXY9vGxQFFxFS+//UYE4Am4vVQAMANeLxo\nsW1Op1BT9Tri0si4f1a4a92K025k2eekcA37kmLxPHLNVsPyr1QFXv8I2sHmHfw=\n=bQvu\n-----END PGP SIGNATURE-----\n", + "payload": "tree e2a7c32169fd0dcb9748b636d9d8a97b12210b20\nparent 6e23ab6f119560c5745760ee0e91276ec43b6c75\nparent 6925be70d5a87145abe0f752a86a3b0e526ba493\nauthor ix5 1678417780 +0100\ncommitter GitHub 1678417780 +0100\n\nMerge pull request #947 from 123wowow123/patch-1\n\ndocs: testing-client: Fix typo in make command" + } + }, + "url": "https://api.github.com/repos/posativ/isso/commits/64374a8af978f1cfd4a91875c18a309122c7d9ca", + "html_url": "https://github.com/posativ/isso/commit/64374a8af978f1cfd4a91875c18a309122c7d9ca", + "comments_url": "https://api.github.com/repos/posativ/isso/commits/64374a8af978f1cfd4a91875c18a309122c7d9ca/comments", + "author": { + "login": "ix5", + "id": 10212877, + "node_id": "MDQ6VXNlcjEwMjEyODc3", + "avatar_url": "https://avatars.githubusercontent.com/u/10212877?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ix5", + "html_url": "https://github.com/ix5", + "followers_url": "https://api.github.com/users/ix5/followers", + "following_url": "https://api.github.com/users/ix5/following{/other_user}", + "gists_url": "https://api.github.com/users/ix5/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ix5/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ix5/subscriptions", + "organizations_url": "https://api.github.com/users/ix5/orgs", + "repos_url": "https://api.github.com/users/ix5/repos", + "events_url": "https://api.github.com/users/ix5/events{/privacy}", + "received_events_url": "https://api.github.com/users/ix5/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "6e23ab6f119560c5745760ee0e91276ec43b6c75", + "url": "https://api.github.com/repos/posativ/isso/commits/6e23ab6f119560c5745760ee0e91276ec43b6c75", + "html_url": "https://github.com/posativ/isso/commit/6e23ab6f119560c5745760ee0e91276ec43b6c75" + }, + { + "sha": "6925be70d5a87145abe0f752a86a3b0e526ba493", + "url": "https://api.github.com/repos/posativ/isso/commits/6925be70d5a87145abe0f752a86a3b0e526ba493", + "html_url": "https://github.com/posativ/isso/commit/6925be70d5a87145abe0f752a86a3b0e526ba493" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "39cf244b534da871618389c83f47faa263ed1dd6", + "filename": "docs/docs/technical-docs/testing-client.rst", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/posativ/isso/blob/64374a8af978f1cfd4a91875c18a309122c7d9ca/docs%2Fdocs%2Ftechnical-docs%2Ftesting-client.rst", + "raw_url": "https://github.com/posativ/isso/raw/64374a8af978f1cfd4a91875c18a309122c7d9ca/docs%2Fdocs%2Ftechnical-docs%2Ftesting-client.rst", + "contents_url": "https://api.github.com/repos/posativ/isso/contents/docs%2Fdocs%2Ftechnical-docs%2Ftesting-client.rst?ref=64374a8af978f1cfd4a91875c18a309122c7d9ca", + "patch": "@@ -34,7 +34,7 @@ Then run the unit tests:\n \n .. code-block:: bash\n \n- $ npm run tests-unit\n+ $ npm run test-unit\n \n You should receive output that looks similar to the following:\n " + } + ] +} diff --git a/apigh/2023-04-20/jamstack_comments_engine b/apigh/2023-04-20/jamstack_comments_engine new file mode 100644 index 00000000..b6cd498a --- /dev/null +++ b/apigh/2023-04-20/jamstack_comments_engine @@ -0,0 +1,116 @@ +{ + "id": 126199142, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjYxOTkxNDI=", + "name": "jamstack-comments-engine", + "full_name": "philhawksworth/jamstack-comments-engine", + "private": false, + "owner": { + "login": "philhawksworth", + "id": 5865, + "node_id": "MDQ6VXNlcjU4NjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/5865?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/philhawksworth", + "html_url": "https://github.com/philhawksworth", + "followers_url": "https://api.github.com/users/philhawksworth/followers", + "following_url": "https://api.github.com/users/philhawksworth/following{/other_user}", + "gists_url": "https://api.github.com/users/philhawksworth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/philhawksworth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/philhawksworth/subscriptions", + "organizations_url": "https://api.github.com/users/philhawksworth/orgs", + "repos_url": "https://api.github.com/users/philhawksworth/repos", + "events_url": "https://api.github.com/users/philhawksworth/events{/privacy}", + "received_events_url": "https://api.github.com/users/philhawksworth/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/philhawksworth/jamstack-comments-engine", + "description": "An example of a comments engine you could add to any JAMstack site hosted on Netlify", + "fork": false, + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine", + "forks_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/forks", + "keys_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/teams", + "hooks_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/hooks", + "issue_events_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/issues/events{/number}", + "events_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/events", + "assignees_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/assignees{/user}", + "branches_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/branches{/branch}", + "tags_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/tags", + "blobs_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/statuses/{sha}", + "languages_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/languages", + "stargazers_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/stargazers", + "contributors_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/contributors", + "subscribers_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/subscribers", + "subscription_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/subscription", + "commits_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/contents/{+path}", + "compare_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/merges", + "archive_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/downloads", + "issues_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/issues{/number}", + "pulls_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/pulls{/number}", + "milestones_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/milestones{/number}", + "notifications_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/labels{/name}", + "releases_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/releases{/id}", + "deployments_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/deployments", + "created_at": "2018-03-21T15:21:06Z", + "updated_at": "2023-04-01T00:45:10Z", + "pushed_at": "2023-01-09T22:22:38Z", + "git_url": "git://github.com/philhawksworth/jamstack-comments-engine.git", + "ssh_url": "git@github.com:philhawksworth/jamstack-comments-engine.git", + "clone_url": "https://github.com/philhawksworth/jamstack-comments-engine.git", + "svn_url": "https://github.com/philhawksworth/jamstack-comments-engine", + "homepage": "https://jamstack-comments.netlify.com/", + "size": 1745, + "stargazers_count": 150, + "watchers_count": 150, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 21, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comments", + "jamstack", + "netlify", + "slack", + "static-site" + ], + "visibility": "public", + "forks": 41, + "open_issues": 21, + "watchers": 150, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 41, + "subscribers_count": 4 +} diff --git a/apigh/2023-04-20/jamstack_comments_engine.commit b/apigh/2023-04-20/jamstack_comments_engine.commit new file mode 100644 index 00000000..95576e17 --- /dev/null +++ b/apigh/2023-04-20/jamstack_comments_engine.commit @@ -0,0 +1,98 @@ +{ + "sha": "5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "node_id": "MDY6Q29tbWl0MTI2MTk5MTQyOjVkZDQ3Yzk0MDExYzUzMTFiZjk5YzIxZGNkYmU2Y2VkMTdkNWE1MGY=", + "commit": { + "author": { + "name": "Phil Hawksworth", + "email": "phil@netlify.com", + "date": "2020-07-09T12:17:43Z" + }, + "committer": { + "name": "Phil Hawksworth", + "email": "phil@netlify.com", + "date": "2020-07-09T12:17:43Z" + }, + "message": "revert but hardcode handler", + "tree": { + "sha": "82afd134dde0c5dd45a13e406b874ada75866bae", + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/trees/82afd134dde0c5dd45a13e406b874ada75866bae" + }, + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/git/commits/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "html_url": "https://github.com/philhawksworth/jamstack-comments-engine/commit/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "comments_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f/comments", + "author": { + "login": "philhawksworth", + "id": 5865, + "node_id": "MDQ6VXNlcjU4NjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/5865?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/philhawksworth", + "html_url": "https://github.com/philhawksworth", + "followers_url": "https://api.github.com/users/philhawksworth/followers", + "following_url": "https://api.github.com/users/philhawksworth/following{/other_user}", + "gists_url": "https://api.github.com/users/philhawksworth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/philhawksworth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/philhawksworth/subscriptions", + "organizations_url": "https://api.github.com/users/philhawksworth/orgs", + "repos_url": "https://api.github.com/users/philhawksworth/repos", + "events_url": "https://api.github.com/users/philhawksworth/events{/privacy}", + "received_events_url": "https://api.github.com/users/philhawksworth/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "philhawksworth", + "id": 5865, + "node_id": "MDQ6VXNlcjU4NjU=", + "avatar_url": "https://avatars.githubusercontent.com/u/5865?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/philhawksworth", + "html_url": "https://github.com/philhawksworth", + "followers_url": "https://api.github.com/users/philhawksworth/followers", + "following_url": "https://api.github.com/users/philhawksworth/following{/other_user}", + "gists_url": "https://api.github.com/users/philhawksworth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/philhawksworth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/philhawksworth/subscriptions", + "organizations_url": "https://api.github.com/users/philhawksworth/orgs", + "repos_url": "https://api.github.com/users/philhawksworth/repos", + "events_url": "https://api.github.com/users/philhawksworth/events{/privacy}", + "received_events_url": "https://api.github.com/users/philhawksworth/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "83732fcfd0739073adcb67232e92f509afa011cc", + "url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/commits/83732fcfd0739073adcb67232e92f509afa011cc", + "html_url": "https://github.com/philhawksworth/jamstack-comments-engine/commit/83732fcfd0739073adcb67232e92f509afa011cc" + } + ], + "stats": { + "total": 10, + "additions": 3, + "deletions": 7 + }, + "files": [ + { + "sha": "1885346a783d6f32fee233cfc727b53558026595", + "filename": "src/functions/comment-handler.js", + "status": "modified", + "additions": 3, + "deletions": 7, + "changes": 10, + "blob_url": "https://github.com/philhawksworth/jamstack-comments-engine/blob/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f/src%2Ffunctions%2Fcomment-handler.js", + "raw_url": "https://github.com/philhawksworth/jamstack-comments-engine/raw/5dd47c94011c5311bf99c21dcdbe6ced17d5a50f/src%2Ffunctions%2Fcomment-handler.js", + "contents_url": "https://api.github.com/repos/philhawksworth/jamstack-comments-engine/contents/src%2Ffunctions%2Fcomment-handler.js?ref=5dd47c94011c5311bf99c21dcdbe6ced17d5a50f", + "patch": "@@ -4,13 +4,8 @@ var request = require(\"request\");\n \n // populate environment variables locally.\n require('dotenv').config()\n-const {\n- SLACK_WEBHOOK_URL\n-} = process.env;\n-\n-// hardcoding this for a moment... TODO: replace request with somethign that follows redirects\n-const URL = \"https://jamstack-comments.netlify.com/\"\n \n+const URL = \"https://jamstack-comments.netlify.com\";\n \n /*\n Our serverless function handler\n@@ -21,6 +16,7 @@ export function handler(event, context, callback) {\n var body = JSON.parse(event.body);\n \n // prepare call to the Slack API\n+ var slackURL = process.env.SLACK_WEBHOOK_URL\n var slackPayload = {\n \"text\": \"New comment on \" + URL,\n \t \"attachments\": [\n@@ -54,7 +50,7 @@ export function handler(event, context, callback) {\n };\n \n // post the notification to Slack\n- request.post({url:SLACK_WEBHOOK_URL, json: slackPayload}, function(err, httpResponse, body) {\n+ request.post({url:slackURL, json: slackPayload}, function(err, httpResponse, body) {\n var msg;\n if (err) {\n msg = 'Post to Slack failed:' + err;" + } + ] +} diff --git a/apigh/2023-04-20/jekyll_aws_comments b/apigh/2023-04-20/jekyll_aws_comments new file mode 100644 index 00000000..4a7c8e63 --- /dev/null +++ b/apigh/2023-04-20/jekyll_aws_comments @@ -0,0 +1,123 @@ +{ + "id": 52218241, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjIxODI0MQ==", + "name": "jekyll-aws-comments", + "full_name": "ummels/jekyll-aws-comments", + "private": false, + "owner": { + "login": "ummels", + "id": 287491, + "node_id": "MDQ6VXNlcjI4NzQ5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/287491?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ummels", + "html_url": "https://github.com/ummels", + "followers_url": "https://api.github.com/users/ummels/followers", + "following_url": "https://api.github.com/users/ummels/following{/other_user}", + "gists_url": "https://api.github.com/users/ummels/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ummels/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ummels/subscriptions", + "organizations_url": "https://api.github.com/users/ummels/orgs", + "repos_url": "https://api.github.com/users/ummels/repos", + "events_url": "https://api.github.com/users/ummels/events{/privacy}", + "received_events_url": "https://api.github.com/users/ummels/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/ummels/jekyll-aws-comments", + "description": "Static comments for Jekyll with AWS Lambda and GitHub.", + "fork": false, + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments", + "forks_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/forks", + "keys_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/teams", + "hooks_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/hooks", + "issue_events_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/events", + "assignees_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/tags", + "blobs_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/languages", + "stargazers_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/stargazers", + "contributors_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/contributors", + "subscribers_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/subscribers", + "subscription_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/subscription", + "commits_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/merges", + "archive_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/downloads", + "issues_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/deployments", + "created_at": "2016-02-21T17:25:51Z", + "updated_at": "2018-09-30T01:49:22Z", + "pushed_at": "2017-04-25T20:56:37Z", + "git_url": "git://github.com/ummels/jekyll-aws-comments.git", + "ssh_url": "git@github.com:ummels/jekyll-aws-comments.git", + "clone_url": "https://github.com/ummels/jekyll-aws-comments.git", + "svn_url": "https://github.com/ummels/jekyll-aws-comments", + "homepage": "http://ummels.github.io/jekyll-aws-comments/", + "size": 32, + "stargazers_count": 17, + "watchers_count": 17, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 2, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "isc", + "name": "ISC License", + "spdx_id": "ISC", + "url": "https://api.github.com/licenses/isc", + "node_id": "MDc6TGljZW5zZTEw" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "aws", + "aws-lambda", + "comments", + "github", + "jeyll", + "nodejs" + ], + "visibility": "public", + "forks": 2, + "open_issues": 0, + "watchers": 17, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 2, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/jekyll_aws_comments.commit b/apigh/2023-04-20/jekyll_aws_comments.commit new file mode 100644 index 00000000..9cfb2df0 --- /dev/null +++ b/apigh/2023-04-20/jekyll_aws_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "e51eb3522f6959a843668c02252df890da5c7d14", + "node_id": "MDY6Q29tbWl0NTIyMTgyNDE6ZTUxZWIzNTIyZjY5NTlhODQzNjY4YzAyMjUyZGY4OTBkYTVjN2QxNA==", + "commit": { + "author": { + "name": "Michael Ummels", + "email": "michael@ummels.de", + "date": "2017-04-25T20:40:54Z" + }, + "committer": { + "name": "Michael Ummels", + "email": "michael@ummels.de", + "date": "2017-04-25T20:41:40Z" + }, + "message": "Fix commit title", + "tree": { + "sha": "64c2494f837586fd7f6965b2c485a3c203ad5445", + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/trees/64c2494f837586fd7f6965b2c485a3c203ad5445" + }, + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/git/commits/e51eb3522f6959a843668c02252df890da5c7d14", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits/e51eb3522f6959a843668c02252df890da5c7d14", + "html_url": "https://github.com/ummels/jekyll-aws-comments/commit/e51eb3522f6959a843668c02252df890da5c7d14", + "comments_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits/e51eb3522f6959a843668c02252df890da5c7d14/comments", + "author": { + "login": "ummels", + "id": 287491, + "node_id": "MDQ6VXNlcjI4NzQ5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/287491?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ummels", + "html_url": "https://github.com/ummels", + "followers_url": "https://api.github.com/users/ummels/followers", + "following_url": "https://api.github.com/users/ummels/following{/other_user}", + "gists_url": "https://api.github.com/users/ummels/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ummels/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ummels/subscriptions", + "organizations_url": "https://api.github.com/users/ummels/orgs", + "repos_url": "https://api.github.com/users/ummels/repos", + "events_url": "https://api.github.com/users/ummels/events{/privacy}", + "received_events_url": "https://api.github.com/users/ummels/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "ummels", + "id": 287491, + "node_id": "MDQ6VXNlcjI4NzQ5MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/287491?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ummels", + "html_url": "https://github.com/ummels", + "followers_url": "https://api.github.com/users/ummels/followers", + "following_url": "https://api.github.com/users/ummels/following{/other_user}", + "gists_url": "https://api.github.com/users/ummels/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ummels/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ummels/subscriptions", + "organizations_url": "https://api.github.com/users/ummels/orgs", + "repos_url": "https://api.github.com/users/ummels/repos", + "events_url": "https://api.github.com/users/ummels/events{/privacy}", + "received_events_url": "https://api.github.com/users/ummels/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "6974a6f74f9d30b887ea18516c2053bd1bfae231", + "url": "https://api.github.com/repos/ummels/jekyll-aws-comments/commits/6974a6f74f9d30b887ea18516c2053bd1bfae231", + "html_url": "https://github.com/ummels/jekyll-aws-comments/commit/6974a6f74f9d30b887ea18516c2053bd1bfae231" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "45a1ed8311cce515267d06e72b080b343d48d48e", + "filename": "comments.js", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/ummels/jekyll-aws-comments/blob/e51eb3522f6959a843668c02252df890da5c7d14/comments.js", + "raw_url": "https://github.com/ummels/jekyll-aws-comments/raw/e51eb3522f6959a843668c02252df890da5c7d14/comments.js", + "contents_url": "https://api.github.com/repos/ummels/jekyll-aws-comments/contents/comments.js?ref=e51eb3522f6959a843668c02252df890da5c7d14", + "patch": "@@ -36,7 +36,7 @@ Comments.prototype.submit = function(event) {\n .then(() => // Create pull request\n repo.pulls.create({\n title: 'New comment from ' + name,\n- body: name + ' commented on \\'' + event.postId + '\\'.',\n+ body: name + ' commented on \\'' + event.pageId + '\\'.',\n head: branch,\n base: base\n }))" + } + ] +} diff --git a/apigh/2023-04-20/jekyll_blog_comments b/apigh/2023-04-20/jekyll_blog_comments new file mode 100644 index 00000000..451a089d --- /dev/null +++ b/apigh/2023-04-20/jekyll_blog_comments @@ -0,0 +1,142 @@ +{ + "id": 128683274, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjg2ODMyNzQ=", + "name": "jekyll-blog-comments", + "full_name": "Azure-Functions/jekyll-blog-comments", + "private": false, + "owner": { + "login": "Azure-Functions", + "id": 39969417, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM5OTY5NDE3", + "avatar_url": "https://avatars.githubusercontent.com/u/39969417?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Azure-Functions", + "html_url": "https://github.com/Azure-Functions", + "followers_url": "https://api.github.com/users/Azure-Functions/followers", + "following_url": "https://api.github.com/users/Azure-Functions/following{/other_user}", + "gists_url": "https://api.github.com/users/Azure-Functions/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Azure-Functions/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Azure-Functions/subscriptions", + "organizations_url": "https://api.github.com/users/Azure-Functions/orgs", + "repos_url": "https://api.github.com/users/Azure-Functions/repos", + "events_url": "https://api.github.com/users/Azure-Functions/events{/privacy}", + "received_events_url": "https://api.github.com/users/Azure-Functions/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/Azure-Functions/jekyll-blog-comments", + "description": "Create pull requests for blog comments posted via a form (v1 function)", + "fork": false, + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments", + "forks_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/forks", + "keys_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/teams", + "hooks_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/hooks", + "issue_events_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/events", + "assignees_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/tags", + "blobs_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/languages", + "stargazers_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/stargazers", + "contributors_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/contributors", + "subscribers_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/subscribers", + "subscription_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/subscription", + "commits_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/merges", + "archive_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/downloads", + "issues_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/deployments", + "created_at": "2018-04-08T21:26:36Z", + "updated_at": "2023-04-16T03:31:18Z", + "pushed_at": "2021-07-01T07:29:27Z", + "git_url": "git://github.com/Azure-Functions/jekyll-blog-comments.git", + "ssh_url": "git@github.com:Azure-Functions/jekyll-blog-comments.git", + "clone_url": "https://github.com/Azure-Functions/jekyll-blog-comments.git", + "svn_url": "https://github.com/Azure-Functions/jekyll-blog-comments", + "homepage": "", + "size": 89, + "stargazers_count": 20, + "watchers_count": 20, + "language": "C#", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 44, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "azure-functions", + "blog", + "comments", + "jekyll", + "pull-requests" + ], + "visibility": "public", + "forks": 44, + "open_issues": 0, + "watchers": 20, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "Azure-Functions", + "id": 39969417, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM5OTY5NDE3", + "avatar_url": "https://avatars.githubusercontent.com/u/39969417?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Azure-Functions", + "html_url": "https://github.com/Azure-Functions", + "followers_url": "https://api.github.com/users/Azure-Functions/followers", + "following_url": "https://api.github.com/users/Azure-Functions/following{/other_user}", + "gists_url": "https://api.github.com/users/Azure-Functions/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Azure-Functions/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Azure-Functions/subscriptions", + "organizations_url": "https://api.github.com/users/Azure-Functions/orgs", + "repos_url": "https://api.github.com/users/Azure-Functions/repos", + "events_url": "https://api.github.com/users/Azure-Functions/events{/privacy}", + "received_events_url": "https://api.github.com/users/Azure-Functions/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 44, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-20/jekyll_blog_comments.commit b/apigh/2023-04-20/jekyll_blog_comments.commit new file mode 100644 index 00000000..89d51acc --- /dev/null +++ b/apigh/2023-04-20/jekyll_blog_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "83d9cac50be836e03391c976243763f398adb463", + "node_id": "MDY6Q29tbWl0MTI4NjgzMjc0OjgzZDljYWM1MGJlODM2ZTAzMzkxYzk3NjI0Mzc2M2YzOThhZGI0NjM=", + "commit": { + "author": { + "name": "Damien Guard", + "email": "damieng@gmail.com", + "date": "2021-07-01T07:29:27Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-07-01T07:29:27Z" + }, + "message": "Update README.md", + "tree": { + "sha": "ff362826b3483ea14b32b94c51ed044fdf75aa74", + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/trees/ff362826b3483ea14b32b94c51ed044fdf75aa74" + }, + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/git/commits/83d9cac50be836e03391c976243763f398adb463", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJg3W7XCRBK7hj4Ov3rIwAA8xUIAESdtFXdy+ZUT7NnaLOpdSXz\n2o7zGSJSqyhoy7O/+ALebb+Q6seZIVlJav5fBAozA1ByrRZu01NBfDH4vA8L8wPe\nVGDwYTk2z3vfiWZn5cZmFQXUa1rF3NPEBjWonsrCyAuEHP+UG6HhK1xtXxkM6zPL\ngF5H1oU3IAnrfKzNE5/U07GYlrmL3VRTiWZilCe3HRGEjzm9JXcUYaew3Nl2vPVi\ni8tb1xyRvDA5Ect9OfJbIUxqGj+w66onejXj4d85HtEQtMddQfFHxwGHXbMOSrLE\nZ0Xxaw1B5YYXE66b2v4guJtbS3Nznje4guuZPomVeD/2EWaKYyAxqx3N+iw2l/M=\n=TtLn\n-----END PGP SIGNATURE-----\n", + "payload": "tree ff362826b3483ea14b32b94c51ed044fdf75aa74\nparent ec667dfe72453462c7f10b72df49e72fbc1c88fd\nauthor Damien Guard 1625124567 +0100\ncommitter GitHub 1625124567 +0100\n\nUpdate README.md" + } + }, + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits/83d9cac50be836e03391c976243763f398adb463", + "html_url": "https://github.com/Azure-Functions/jekyll-blog-comments/commit/83d9cac50be836e03391c976243763f398adb463", + "comments_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits/83d9cac50be836e03391c976243763f398adb463/comments", + "author": { + "login": "damieng", + "id": 118951, + "node_id": "MDQ6VXNlcjExODk1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/118951?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/damieng", + "html_url": "https://github.com/damieng", + "followers_url": "https://api.github.com/users/damieng/followers", + "following_url": "https://api.github.com/users/damieng/following{/other_user}", + "gists_url": "https://api.github.com/users/damieng/gists{/gist_id}", + "starred_url": "https://api.github.com/users/damieng/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/damieng/subscriptions", + "organizations_url": "https://api.github.com/users/damieng/orgs", + "repos_url": "https://api.github.com/users/damieng/repos", + "events_url": "https://api.github.com/users/damieng/events{/privacy}", + "received_events_url": "https://api.github.com/users/damieng/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ec667dfe72453462c7f10b72df49e72fbc1c88fd", + "url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/commits/ec667dfe72453462c7f10b72df49e72fbc1c88fd", + "html_url": "https://github.com/Azure-Functions/jekyll-blog-comments/commit/ec667dfe72453462c7f10b72df49e72fbc1c88fd" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "1b2bd1f820f78ac6e2cc9d0ee75f5604902cf18f", + "filename": "README.md", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/Azure-Functions/jekyll-blog-comments/blob/83d9cac50be836e03391c976243763f398adb463/README.md", + "raw_url": "https://github.com/Azure-Functions/jekyll-blog-comments/raw/83d9cac50be836e03391c976243763f398adb463/README.md", + "contents_url": "https://api.github.com/repos/Azure-Functions/jekyll-blog-comments/contents/README.md?ref=83d9cac50be836e03391c976243763f398adb463", + "patch": "@@ -24,4 +24,4 @@ To set this up, you'll need to have an [Azure Portal account](https://portal.azu\n | `CommentFallbackCommitEmail` | The email address to use for GitHub commits and PR's if the form does not supply one.\n | `SentimentAnalysis.SubscriptionKey` | Subscription Key for Microsoft Azure Recognition, if you don't want to use, just leave empty.\n | `SentimentAnalysis.Region` | Region for your Subscription key (E.g.: westus)\n-| `SentimentAlaysis.Lang` | Language for comment, [find lang code here](https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/language-support)\n\\ No newline at end of file\n+| `SentimentAnalysis.Lang` | Language for comment, [find lang code here](https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/language-support)" + } + ] +} diff --git a/apigh/2023-04-20/jekyll_static_comments b/apigh/2023-04-20/jekyll_static_comments new file mode 100644 index 00000000..49bf0b5d --- /dev/null +++ b/apigh/2023-04-20/jekyll_static_comments @@ -0,0 +1,118 @@ +{ + "id": 2070097, + "node_id": "MDEwOlJlcG9zaXRvcnkyMDcwMDk3", + "name": "jekyll-static-comments", + "full_name": "mpalmer/jekyll-static-comments", + "private": false, + "owner": { + "login": "mpalmer", + "id": 357, + "node_id": "MDQ6VXNlcjM1Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/357?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mpalmer", + "html_url": "https://github.com/mpalmer", + "followers_url": "https://api.github.com/users/mpalmer/followers", + "following_url": "https://api.github.com/users/mpalmer/following{/other_user}", + "gists_url": "https://api.github.com/users/mpalmer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mpalmer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mpalmer/subscriptions", + "organizations_url": "https://api.github.com/users/mpalmer/orgs", + "repos_url": "https://api.github.com/users/mpalmer/repos", + "events_url": "https://api.github.com/users/mpalmer/events{/privacy}", + "received_events_url": "https://api.github.com/users/mpalmer/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/mpalmer/jekyll-static-comments", + "description": "A plugin for Jekyll to implement a static-file based comments system", + "fork": false, + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments", + "forks_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/forks", + "keys_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/teams", + "hooks_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/hooks", + "issue_events_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/events", + "assignees_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/tags", + "blobs_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/languages", + "stargazers_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/stargazers", + "contributors_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/contributors", + "subscribers_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/subscribers", + "subscription_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/subscription", + "commits_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/merges", + "archive_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/downloads", + "issues_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/deployments", + "created_at": "2011-07-19T02:55:53Z", + "updated_at": "2023-02-08T21:04:30Z", + "pushed_at": "2016-02-15T04:14:38Z", + "git_url": "git://github.com/mpalmer/jekyll-static-comments.git", + "ssh_url": "git@github.com:mpalmer/jekyll-static-comments.git", + "clone_url": "https://github.com/mpalmer/jekyll-static-comments.git", + "svn_url": "https://github.com/mpalmer/jekyll-static-comments", + "homepage": "http://theshed.hezmatt.org/jekyll-static-comments/", + "size": 161, + "stargazers_count": 191, + "watchers_count": 191, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 34, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "gpl-3.0", + "name": "GNU General Public License v3.0", + "spdx_id": "GPL-3.0", + "url": "https://api.github.com/licenses/gpl-3.0", + "node_id": "MDc6TGljZW5zZTk=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 34, + "open_issues": 8, + "watchers": 191, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 34, + "subscribers_count": 11 +} diff --git a/apigh/2023-04-20/jekyll_static_comments.commit b/apigh/2023-04-20/jekyll_static_comments.commit new file mode 100644 index 00000000..cff2003a --- /dev/null +++ b/apigh/2023-04-20/jekyll_static_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "node_id": "MDY6Q29tbWl0MjA3MDA5Nzo0YjMwYmQ2MmQ5MzdkMmJhNmU3ZjE2ZmM1ZmU4MDgyYWJiMGQzZjFl", + "commit": { + "author": { + "name": "Matt Palmer", + "email": "mpalmer@hezmatt.org", + "date": "2014-02-11T22:47:43Z" + }, + "committer": { + "name": "Matt Palmer", + "email": "mpalmer@hezmatt.org", + "date": "2014-02-11T22:48:33Z" + }, + "message": "Pass through any args given to to_liquid", + "tree": { + "sha": "e9a655bf938a39f0df0ebcc89ce0dab5dafdec0b", + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/trees/e9a655bf938a39f0df0ebcc89ce0dab5dafdec0b" + }, + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/git/commits/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "html_url": "https://github.com/mpalmer/jekyll-static-comments/commit/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "comments_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e/comments", + "author": { + "login": "mpalmer", + "id": 357, + "node_id": "MDQ6VXNlcjM1Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/357?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mpalmer", + "html_url": "https://github.com/mpalmer", + "followers_url": "https://api.github.com/users/mpalmer/followers", + "following_url": "https://api.github.com/users/mpalmer/following{/other_user}", + "gists_url": "https://api.github.com/users/mpalmer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mpalmer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mpalmer/subscriptions", + "organizations_url": "https://api.github.com/users/mpalmer/orgs", + "repos_url": "https://api.github.com/users/mpalmer/repos", + "events_url": "https://api.github.com/users/mpalmer/events{/privacy}", + "received_events_url": "https://api.github.com/users/mpalmer/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "mpalmer", + "id": 357, + "node_id": "MDQ6VXNlcjM1Nw==", + "avatar_url": "https://avatars.githubusercontent.com/u/357?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mpalmer", + "html_url": "https://github.com/mpalmer", + "followers_url": "https://api.github.com/users/mpalmer/followers", + "following_url": "https://api.github.com/users/mpalmer/following{/other_user}", + "gists_url": "https://api.github.com/users/mpalmer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mpalmer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mpalmer/subscriptions", + "organizations_url": "https://api.github.com/users/mpalmer/orgs", + "repos_url": "https://api.github.com/users/mpalmer/repos", + "events_url": "https://api.github.com/users/mpalmer/events{/privacy}", + "received_events_url": "https://api.github.com/users/mpalmer/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ef2507a8112e0a5d984c1648f2c20850a129830a", + "url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/commits/ef2507a8112e0a5d984c1648f2c20850a129830a", + "html_url": "https://github.com/mpalmer/jekyll-static-comments/commit/ef2507a8112e0a5d984c1648f2c20850a129830a" + } + ], + "stats": { + "total": 4, + "additions": 2, + "deletions": 2 + }, + "files": [ + { + "sha": "86c00f2175fe7d789262447fe3e210315d3aafd8", + "filename": "static_comments.rb", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/mpalmer/jekyll-static-comments/blob/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e/static_comments.rb", + "raw_url": "https://github.com/mpalmer/jekyll-static-comments/raw/4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e/static_comments.rb", + "contents_url": "https://api.github.com/repos/mpalmer/jekyll-static-comments/contents/static_comments.rb?ref=4b30bd62d937d2ba6e7f16fc5fe8082abb0d3f1e", + "patch": "@@ -21,8 +21,8 @@\n class Jekyll::Post\n \talias :to_liquid_without_comments :to_liquid\n \t\n-\tdef to_liquid\n-\t\tdata = to_liquid_without_comments\n+\tdef to_liquid(*args)\n+\t\tdata = to_liquid_without_comments(*args)\n \t\tdata['comments'] = StaticComments::find_for_post(self)\n \t\tdata['comment_count'] = data['comments'].length\n \t\tdata" + } + ] +} diff --git a/apigh/2023-04-20/jekyll_webmention_io b/apigh/2023-04-20/jekyll_webmention_io new file mode 100644 index 00000000..fb5f46b7 --- /dev/null +++ b/apigh/2023-04-20/jekyll_webmention_io @@ -0,0 +1,118 @@ +{ + "id": 26774428, + "node_id": "MDEwOlJlcG9zaXRvcnkyNjc3NDQyOA==", + "name": "jekyll-webmention_io", + "full_name": "aarongustafson/jekyll-webmention_io", + "private": false, + "owner": { + "login": "aarongustafson", + "id": 75736, + "node_id": "MDQ6VXNlcjc1NzM2", + "avatar_url": "https://avatars.githubusercontent.com/u/75736?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/aarongustafson", + "html_url": "https://github.com/aarongustafson", + "followers_url": "https://api.github.com/users/aarongustafson/followers", + "following_url": "https://api.github.com/users/aarongustafson/following{/other_user}", + "gists_url": "https://api.github.com/users/aarongustafson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aarongustafson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aarongustafson/subscriptions", + "organizations_url": "https://api.github.com/users/aarongustafson/orgs", + "repos_url": "https://api.github.com/users/aarongustafson/repos", + "events_url": "https://api.github.com/users/aarongustafson/events{/privacy}", + "received_events_url": "https://api.github.com/users/aarongustafson/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/aarongustafson/jekyll-webmention_io", + "description": "A Jekyll Plugin for rendering Webmentions via Webmention.io", + "fork": false, + "url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io", + "forks_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/forks", + "keys_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/teams", + "hooks_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/hooks", + "issue_events_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/issues/events{/number}", + "events_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/events", + "assignees_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/assignees{/user}", + "branches_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/branches{/branch}", + "tags_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/tags", + "blobs_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/statuses/{sha}", + "languages_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/languages", + "stargazers_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/stargazers", + "contributors_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/contributors", + "subscribers_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/subscribers", + "subscription_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/subscription", + "commits_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/contents/{+path}", + "compare_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/merges", + "archive_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/downloads", + "issues_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/issues{/number}", + "pulls_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/pulls{/number}", + "milestones_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/milestones{/number}", + "notifications_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/labels{/name}", + "releases_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/releases{/id}", + "deployments_url": "https://api.github.com/repos/aarongustafson/jekyll-webmention_io/deployments", + "created_at": "2014-11-17T19:56:36Z", + "updated_at": "2023-03-19T21:12:51Z", + "pushed_at": "2023-04-12T12:11:57Z", + "git_url": "git://github.com/aarongustafson/jekyll-webmention_io.git", + "ssh_url": "git@github.com:aarongustafson/jekyll-webmention_io.git", + "clone_url": "https://github.com/aarongustafson/jekyll-webmention_io.git", + "svn_url": "https://github.com/aarongustafson/jekyll-webmention_io", + "homepage": "https://aarongustafson.github.io/jekyll-webmention_io/", + "size": 447, + "stargazers_count": 135, + "watchers_count": 135, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "has_discussions": false, + "forks_count": 27, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 6, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 27, + "open_issues": 6, + "watchers": 135, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 27, + "subscribers_count": 14 +} diff --git a/apigh/2023-04-20/jekyll_webmention_io.commit b/apigh/2023-04-20/jekyll_webmention_io.commit new file mode 100644 index 00000000..493d57dc --- /dev/null +++ b/apigh/2023-04-20/jekyll_webmention_io.commit @@ -0,0 +1,4 @@ +{ + "message": "No commit found for SHA: master", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-20/jp_comment b/apigh/2023-04-20/jp_comment new file mode 100644 index 00000000..f19647e2 --- /dev/null +++ b/apigh/2023-04-20/jp_comment @@ -0,0 +1,4 @@ +{ + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/reference/repos#get-a-repository" +} diff --git a/apigh/2023-04-20/jp_comment.commit b/apigh/2023-04-20/jp_comment.commit new file mode 100644 index 00000000..5834b547 --- /dev/null +++ b/apigh/2023-04-20/jp_comment.commit @@ -0,0 +1,4 @@ +{ + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/commits/commits#get-a-commit" +} diff --git a/apigh/2023-04-20/jskomment b/apigh/2023-04-20/jskomment new file mode 100644 index 00000000..ed24010f --- /dev/null +++ b/apigh/2023-04-20/jskomment @@ -0,0 +1,112 @@ +{ + "id": 15030920, + "node_id": "MDEwOlJlcG9zaXRvcnkxNTAzMDkyMA==", + "name": "jskomment", + "full_name": "monperrus/jskomment", + "private": false, + "owner": { + "login": "monperrus", + "id": 803666, + "node_id": "MDQ6VXNlcjgwMzY2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/803666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/monperrus", + "html_url": "https://github.com/monperrus", + "followers_url": "https://api.github.com/users/monperrus/followers", + "following_url": "https://api.github.com/users/monperrus/following{/other_user}", + "gists_url": "https://api.github.com/users/monperrus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/monperrus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/monperrus/subscriptions", + "organizations_url": "https://api.github.com/users/monperrus/orgs", + "repos_url": "https://api.github.com/users/monperrus/repos", + "events_url": "https://api.github.com/users/monperrus/events{/privacy}", + "received_events_url": "https://api.github.com/users/monperrus/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/monperrus/jskomment", + "description": "open source AJAX commenting system", + "fork": false, + "url": "https://api.github.com/repos/monperrus/jskomment", + "forks_url": "https://api.github.com/repos/monperrus/jskomment/forks", + "keys_url": "https://api.github.com/repos/monperrus/jskomment/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/monperrus/jskomment/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/monperrus/jskomment/teams", + "hooks_url": "https://api.github.com/repos/monperrus/jskomment/hooks", + "issue_events_url": "https://api.github.com/repos/monperrus/jskomment/issues/events{/number}", + "events_url": "https://api.github.com/repos/monperrus/jskomment/events", + "assignees_url": "https://api.github.com/repos/monperrus/jskomment/assignees{/user}", + "branches_url": "https://api.github.com/repos/monperrus/jskomment/branches{/branch}", + "tags_url": "https://api.github.com/repos/monperrus/jskomment/tags", + "blobs_url": "https://api.github.com/repos/monperrus/jskomment/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/monperrus/jskomment/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/monperrus/jskomment/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/monperrus/jskomment/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/monperrus/jskomment/statuses/{sha}", + "languages_url": "https://api.github.com/repos/monperrus/jskomment/languages", + "stargazers_url": "https://api.github.com/repos/monperrus/jskomment/stargazers", + "contributors_url": "https://api.github.com/repos/monperrus/jskomment/contributors", + "subscribers_url": "https://api.github.com/repos/monperrus/jskomment/subscribers", + "subscription_url": "https://api.github.com/repos/monperrus/jskomment/subscription", + "commits_url": "https://api.github.com/repos/monperrus/jskomment/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/monperrus/jskomment/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/monperrus/jskomment/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/monperrus/jskomment/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/{+path}", + "compare_url": "https://api.github.com/repos/monperrus/jskomment/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/monperrus/jskomment/merges", + "archive_url": "https://api.github.com/repos/monperrus/jskomment/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/monperrus/jskomment/downloads", + "issues_url": "https://api.github.com/repos/monperrus/jskomment/issues{/number}", + "pulls_url": "https://api.github.com/repos/monperrus/jskomment/pulls{/number}", + "milestones_url": "https://api.github.com/repos/monperrus/jskomment/milestones{/number}", + "notifications_url": "https://api.github.com/repos/monperrus/jskomment/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/monperrus/jskomment/labels{/name}", + "releases_url": "https://api.github.com/repos/monperrus/jskomment/releases{/id}", + "deployments_url": "https://api.github.com/repos/monperrus/jskomment/deployments", + "created_at": "2013-12-08T20:39:08Z", + "updated_at": "2023-03-12T21:36:40Z", + "pushed_at": "2023-03-12T21:37:26Z", + "git_url": "git://github.com/monperrus/jskomment.git", + "ssh_url": "git@github.com:monperrus/jskomment.git", + "clone_url": "https://github.com/monperrus/jskomment.git", + "svn_url": "https://github.com/monperrus/jskomment", + "homepage": null, + "size": 31, + "stargazers_count": 36, + "watchers_count": 36, + "language": "JavaScript", + "has_issues": false, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 6, + "open_issues": 1, + "watchers": 36, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 6, + "subscribers_count": 7 +} diff --git a/apigh/2023-04-20/jskomment.commit b/apigh/2023-04-20/jskomment.commit new file mode 100644 index 00000000..453bb3e4 --- /dev/null +++ b/apigh/2023-04-20/jskomment.commit @@ -0,0 +1,122 @@ +{ + "sha": "89a810517d17e2310bfba4050ea35b683ee43184", + "node_id": "C_kwDOAOVaiNoAKDg5YTgxMDUxN2QxN2UyMzEwYmZiYTQwNTBlYTM1YjY4M2VlNDMxODQ", + "commit": { + "author": { + "name": "Martin Monperrus", + "email": "martin.monperrus@gnieh.org", + "date": "2023-03-12T21:35:54Z" + }, + "committer": { + "name": "Martin Monperrus", + "email": "martin.monperrus@gnieh.org", + "date": "2023-03-12T21:36:25Z" + }, + "message": "@monperrus at work", + "tree": { + "sha": "43cba55c606b853b68885843e5174d99f0172ea6", + "url": "https://api.github.com/repos/monperrus/jskomment/git/trees/43cba55c606b853b68885843e5174d99f0172ea6" + }, + "url": "https://api.github.com/repos/monperrus/jskomment/git/commits/89a810517d17e2310bfba4050ea35b683ee43184", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/monperrus/jskomment/commits/89a810517d17e2310bfba4050ea35b683ee43184", + "html_url": "https://github.com/monperrus/jskomment/commit/89a810517d17e2310bfba4050ea35b683ee43184", + "comments_url": "https://api.github.com/repos/monperrus/jskomment/commits/89a810517d17e2310bfba4050ea35b683ee43184/comments", + "author": { + "login": "monperrus", + "id": 803666, + "node_id": "MDQ6VXNlcjgwMzY2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/803666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/monperrus", + "html_url": "https://github.com/monperrus", + "followers_url": "https://api.github.com/users/monperrus/followers", + "following_url": "https://api.github.com/users/monperrus/following{/other_user}", + "gists_url": "https://api.github.com/users/monperrus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/monperrus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/monperrus/subscriptions", + "organizations_url": "https://api.github.com/users/monperrus/orgs", + "repos_url": "https://api.github.com/users/monperrus/repos", + "events_url": "https://api.github.com/users/monperrus/events{/privacy}", + "received_events_url": "https://api.github.com/users/monperrus/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "monperrus", + "id": 803666, + "node_id": "MDQ6VXNlcjgwMzY2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/803666?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/monperrus", + "html_url": "https://github.com/monperrus", + "followers_url": "https://api.github.com/users/monperrus/followers", + "following_url": "https://api.github.com/users/monperrus/following{/other_user}", + "gists_url": "https://api.github.com/users/monperrus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/monperrus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/monperrus/subscriptions", + "organizations_url": "https://api.github.com/users/monperrus/orgs", + "repos_url": "https://api.github.com/users/monperrus/repos", + "events_url": "https://api.github.com/users/monperrus/events{/privacy}", + "received_events_url": "https://api.github.com/users/monperrus/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "47ea032a88850425093ff2a9c9a6a12b726d0b98", + "url": "https://api.github.com/repos/monperrus/jskomment/commits/47ea032a88850425093ff2a9c9a6a12b726d0b98", + "html_url": "https://github.com/monperrus/jskomment/commit/47ea032a88850425093ff2a9c9a6a12b726d0b98" + } + ], + "stats": { + "total": 37, + "additions": 22, + "deletions": 15 + }, + "files": [ + { + "sha": "60ba1f26a635b5add1e62df42ab45d5bc0008ccd", + "filename": "client/jskomment-core.js", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/monperrus/jskomment/blob/89a810517d17e2310bfba4050ea35b683ee43184/client%2Fjskomment-core.js", + "raw_url": "https://github.com/monperrus/jskomment/raw/89a810517d17e2310bfba4050ea35b683ee43184/client%2Fjskomment-core.js", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/client%2Fjskomment-core.js?ref=89a810517d17e2310bfba4050ea35b683ee43184", + "patch": "@@ -51,7 +51,7 @@ JSKOMMENT.format_function = JSKOMMENT_CONFIG.format_function || function (str) {\n \n // the default function that returns the primary key of comments (the URL minus the anchor)\n JSKOMMENT.get_comment_key_function = JSKOMMENT_CONFIG.get_comment_key_function || function () {\n- return document.location.href.split('#')[0];\n+ return document.location.href.replace('https:','http:').split('#')[0];\n };\n \n \n@@ -270,7 +270,7 @@ JSKOMMENT.createAddCommentElement = function (text, k) {\n +'
      New comment from :
      '\n +'
      Email (optional, for pingback): :
      '\n +''\n- +'
      '\n +''); \n \n form.submit(" + }, + { + "sha": "0cafff9abcdb28731c3b04a7a50ac122d892475f", + "filename": "server/jskomment.php", + "status": "modified", + "additions": 19, + "deletions": 12, + "changes": 31, + "blob_url": "https://github.com/monperrus/jskomment/blob/89a810517d17e2310bfba4050ea35b683ee43184/server%2Fjskomment.php", + "raw_url": "https://github.com/monperrus/jskomment/raw/89a810517d17e2310bfba4050ea35b683ee43184/server%2Fjskomment.php", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/server%2Fjskomment.php?ref=89a810517d17e2310bfba4050ea35b683ee43184", + "patch": "@@ -1,4 +1,4 @@\n-
      A comment has been posted on \".$result['title'].\":

      \".\n+ \"> A comment has been posted on \".$result['title'].\"

      \".\n str_replace(\"\\n\",\"
      \",htmlentities($comment['comment'])), \n- \"From: \".JSKOMMENT_EMAIL.\"\\r\\n\".\n+ \"From: <\".JSKOMMENT_EMAIL.\">\\r\\n\".\n+ \"Reply-to: <\".$result['email'].\">\\r\\n\".\n \"MIME-Version: 1.0\" . \"\\r\\n\" .\n \"Content-type: text/html; charset=UTF-8\" . \"\\r\\n\"\n );\n@@ -233,4 +240,4 @@ function main() {\n \n main();\n \n-?>\n\\ No newline at end of file\n+?>" + }, + { + "sha": "4254d09cac1f357ff59296e634c47e1e23db7fe5", + "filename": "test.html", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/monperrus/jskomment/blob/89a810517d17e2310bfba4050ea35b683ee43184/test.html", + "raw_url": "https://github.com/monperrus/jskomment/raw/89a810517d17e2310bfba4050ea35b683ee43184/test.html", + "contents_url": "https://api.github.com/repos/monperrus/jskomment/contents/test.html?ref=89a810517d17e2310bfba4050ea35b683ee43184", + "patch": "@@ -2,7 +2,7 @@\n \n JSKOMMENT Test\n \n-\n+\n \n \n " + } + ] +} diff --git a/apigh/2023-04-20/just_comments b/apigh/2023-04-20/just_comments new file mode 100644 index 00000000..f392166a --- /dev/null +++ b/apigh/2023-04-20/just_comments @@ -0,0 +1,138 @@ +{ + "id": 198278341, + "node_id": "MDEwOlJlcG9zaXRvcnkxOTgyNzgzNDE=", + "name": "jc-server", + "full_name": "JustComments/jc-server", + "private": false, + "owner": { + "login": "JustComments", + "id": 36104652, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM2MTA0NjUy", + "avatar_url": "https://avatars.githubusercontent.com/u/36104652?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/JustComments", + "html_url": "https://github.com/JustComments", + "followers_url": "https://api.github.com/users/JustComments/followers", + "following_url": "https://api.github.com/users/JustComments/following{/other_user}", + "gists_url": "https://api.github.com/users/JustComments/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JustComments/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JustComments/subscriptions", + "organizations_url": "https://api.github.com/users/JustComments/orgs", + "repos_url": "https://api.github.com/users/JustComments/repos", + "events_url": "https://api.github.com/users/JustComments/events{/privacy}", + "received_events_url": "https://api.github.com/users/JustComments/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/JustComments/jc-server", + "description": "Basic open-source implementation of the server for JustComments", + "fork": false, + "url": "https://api.github.com/repos/JustComments/jc-server", + "forks_url": "https://api.github.com/repos/JustComments/jc-server/forks", + "keys_url": "https://api.github.com/repos/JustComments/jc-server/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/JustComments/jc-server/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/JustComments/jc-server/teams", + "hooks_url": "https://api.github.com/repos/JustComments/jc-server/hooks", + "issue_events_url": "https://api.github.com/repos/JustComments/jc-server/issues/events{/number}", + "events_url": "https://api.github.com/repos/JustComments/jc-server/events", + "assignees_url": "https://api.github.com/repos/JustComments/jc-server/assignees{/user}", + "branches_url": "https://api.github.com/repos/JustComments/jc-server/branches{/branch}", + "tags_url": "https://api.github.com/repos/JustComments/jc-server/tags", + "blobs_url": "https://api.github.com/repos/JustComments/jc-server/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/JustComments/jc-server/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/JustComments/jc-server/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/JustComments/jc-server/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/JustComments/jc-server/statuses/{sha}", + "languages_url": "https://api.github.com/repos/JustComments/jc-server/languages", + "stargazers_url": "https://api.github.com/repos/JustComments/jc-server/stargazers", + "contributors_url": "https://api.github.com/repos/JustComments/jc-server/contributors", + "subscribers_url": "https://api.github.com/repos/JustComments/jc-server/subscribers", + "subscription_url": "https://api.github.com/repos/JustComments/jc-server/subscription", + "commits_url": "https://api.github.com/repos/JustComments/jc-server/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/JustComments/jc-server/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/JustComments/jc-server/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/JustComments/jc-server/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/JustComments/jc-server/contents/{+path}", + "compare_url": "https://api.github.com/repos/JustComments/jc-server/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/JustComments/jc-server/merges", + "archive_url": "https://api.github.com/repos/JustComments/jc-server/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/JustComments/jc-server/downloads", + "issues_url": "https://api.github.com/repos/JustComments/jc-server/issues{/number}", + "pulls_url": "https://api.github.com/repos/JustComments/jc-server/pulls{/number}", + "milestones_url": "https://api.github.com/repos/JustComments/jc-server/milestones{/number}", + "notifications_url": "https://api.github.com/repos/JustComments/jc-server/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/JustComments/jc-server/labels{/name}", + "releases_url": "https://api.github.com/repos/JustComments/jc-server/releases{/id}", + "deployments_url": "https://api.github.com/repos/JustComments/jc-server/deployments", + "created_at": "2019-07-22T18:13:02Z", + "updated_at": "2022-08-28T19:40:36Z", + "pushed_at": "2022-12-10T23:17:35Z", + "git_url": "git://github.com/JustComments/jc-server.git", + "ssh_url": "git@github.com:JustComments/jc-server.git", + "clone_url": "https://github.com/JustComments/jc-server.git", + "svn_url": "https://github.com/JustComments/jc-server", + "homepage": "https://just-comments.com", + "size": 46, + "stargazers_count": 20, + "watchers_count": 20, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 4, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 5, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 4, + "open_issues": 5, + "watchers": 20, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "JustComments", + "id": 36104652, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM2MTA0NjUy", + "avatar_url": "https://avatars.githubusercontent.com/u/36104652?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/JustComments", + "html_url": "https://github.com/JustComments", + "followers_url": "https://api.github.com/users/JustComments/followers", + "following_url": "https://api.github.com/users/JustComments/following{/other_user}", + "gists_url": "https://api.github.com/users/JustComments/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JustComments/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JustComments/subscriptions", + "organizations_url": "https://api.github.com/users/JustComments/orgs", + "repos_url": "https://api.github.com/users/JustComments/repos", + "events_url": "https://api.github.com/users/JustComments/events{/privacy}", + "received_events_url": "https://api.github.com/users/JustComments/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 4, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/just_comments.commit b/apigh/2023-04-20/just_comments.commit new file mode 100644 index 00000000..21e67f75 --- /dev/null +++ b/apigh/2023-04-20/just_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "node_id": "MDY6Q29tbWl0MTk4Mjc4MzQxOmQyZjM5NWY0ZTgwOGE1NWIzNGNiODFiYTEzMmY0MTAwYjhjZDhjMTQ=", + "commit": { + "author": { + "name": "Alex R", + "email": "alexei.rudenko@gmail.com", + "date": "2019-07-26T13:18:59Z" + }, + "committer": { + "name": "Alex R", + "email": "alexei.rudenko@gmail.com", + "date": "2019-07-26T13:18:59Z" + }, + "message": "Update readme", + "tree": { + "sha": "b6b87d857a1566d8c39f0fe515cb6e79606921d3", + "url": "https://api.github.com/repos/JustComments/jc-server/git/trees/b6b87d857a1566d8c39f0fe515cb6e79606921d3" + }, + "url": "https://api.github.com/repos/JustComments/jc-server/git/commits/d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/JustComments/jc-server/commits/d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "html_url": "https://github.com/JustComments/jc-server/commit/d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "comments_url": "https://api.github.com/repos/JustComments/jc-server/commits/d2f395f4e808a55b34cb81ba132f4100b8cd8c14/comments", + "author": { + "login": "OrKoN", + "id": 399150, + "node_id": "MDQ6VXNlcjM5OTE1MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/399150?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/OrKoN", + "html_url": "https://github.com/OrKoN", + "followers_url": "https://api.github.com/users/OrKoN/followers", + "following_url": "https://api.github.com/users/OrKoN/following{/other_user}", + "gists_url": "https://api.github.com/users/OrKoN/gists{/gist_id}", + "starred_url": "https://api.github.com/users/OrKoN/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/OrKoN/subscriptions", + "organizations_url": "https://api.github.com/users/OrKoN/orgs", + "repos_url": "https://api.github.com/users/OrKoN/repos", + "events_url": "https://api.github.com/users/OrKoN/events{/privacy}", + "received_events_url": "https://api.github.com/users/OrKoN/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "OrKoN", + "id": 399150, + "node_id": "MDQ6VXNlcjM5OTE1MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/399150?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/OrKoN", + "html_url": "https://github.com/OrKoN", + "followers_url": "https://api.github.com/users/OrKoN/followers", + "following_url": "https://api.github.com/users/OrKoN/following{/other_user}", + "gists_url": "https://api.github.com/users/OrKoN/gists{/gist_id}", + "starred_url": "https://api.github.com/users/OrKoN/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/OrKoN/subscriptions", + "organizations_url": "https://api.github.com/users/OrKoN/orgs", + "repos_url": "https://api.github.com/users/OrKoN/repos", + "events_url": "https://api.github.com/users/OrKoN/events{/privacy}", + "received_events_url": "https://api.github.com/users/OrKoN/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "699fafa93e8c3b955918ec027e4b7f036cd72664", + "url": "https://api.github.com/repos/JustComments/jc-server/commits/699fafa93e8c3b955918ec027e4b7f036cd72664", + "html_url": "https://github.com/JustComments/jc-server/commit/699fafa93e8c3b955918ec027e4b7f036cd72664" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "f50467cce5c8589dfbd3c7f9da18b221b9731020", + "filename": "README.md", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/JustComments/jc-server/blob/d2f395f4e808a55b34cb81ba132f4100b8cd8c14/README.md", + "raw_url": "https://github.com/JustComments/jc-server/raw/d2f395f4e808a55b34cb81ba132f4100b8cd8c14/README.md", + "contents_url": "https://api.github.com/repos/JustComments/jc-server/contents/README.md?ref=d2f395f4e808a55b34cb81ba132f4100b8cd8c14", + "patch": "@@ -41,7 +41,7 @@ the port in `config.js`.\n ## Frontend Setup\n \n - Clone https://github.com/JustComments/jc-widget and run `npm install`.\n-- Adjust `API_ENDPOINT` variable in Webpack via CLI and or in the source to\n+- Adjust `API_ENDPOINT` variable in Webpack via CLI or in the source to\n point to 3434.\n - Run `npm start` and open `http://localhost:3333/`.\n " + } + ] +} diff --git a/apigh/2023-04-20/juvia b/apigh/2023-04-20/juvia new file mode 100644 index 00000000..1b79c440 --- /dev/null +++ b/apigh/2023-04-20/juvia @@ -0,0 +1,138 @@ +{ + "id": 2193655, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTkzNjU1", + "name": "juvia", + "full_name": "phusion/juvia", + "private": false, + "owner": { + "login": "phusion", + "id": 830588, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjgzMDU4OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/830588?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phusion", + "html_url": "https://github.com/phusion", + "followers_url": "https://api.github.com/users/phusion/followers", + "following_url": "https://api.github.com/users/phusion/following{/other_user}", + "gists_url": "https://api.github.com/users/phusion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phusion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phusion/subscriptions", + "organizations_url": "https://api.github.com/users/phusion/orgs", + "repos_url": "https://api.github.com/users/phusion/repos", + "events_url": "https://api.github.com/users/phusion/events{/privacy}", + "received_events_url": "https://api.github.com/users/phusion/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/phusion/juvia", + "description": "A commenting server similar to Disqus and IntenseDebate.", + "fork": false, + "url": "https://api.github.com/repos/phusion/juvia", + "forks_url": "https://api.github.com/repos/phusion/juvia/forks", + "keys_url": "https://api.github.com/repos/phusion/juvia/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/phusion/juvia/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/phusion/juvia/teams", + "hooks_url": "https://api.github.com/repos/phusion/juvia/hooks", + "issue_events_url": "https://api.github.com/repos/phusion/juvia/issues/events{/number}", + "events_url": "https://api.github.com/repos/phusion/juvia/events", + "assignees_url": "https://api.github.com/repos/phusion/juvia/assignees{/user}", + "branches_url": "https://api.github.com/repos/phusion/juvia/branches{/branch}", + "tags_url": "https://api.github.com/repos/phusion/juvia/tags", + "blobs_url": "https://api.github.com/repos/phusion/juvia/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/phusion/juvia/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/phusion/juvia/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/phusion/juvia/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/phusion/juvia/statuses/{sha}", + "languages_url": "https://api.github.com/repos/phusion/juvia/languages", + "stargazers_url": "https://api.github.com/repos/phusion/juvia/stargazers", + "contributors_url": "https://api.github.com/repos/phusion/juvia/contributors", + "subscribers_url": "https://api.github.com/repos/phusion/juvia/subscribers", + "subscription_url": "https://api.github.com/repos/phusion/juvia/subscription", + "commits_url": "https://api.github.com/repos/phusion/juvia/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/phusion/juvia/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/phusion/juvia/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/phusion/juvia/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/phusion/juvia/contents/{+path}", + "compare_url": "https://api.github.com/repos/phusion/juvia/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/phusion/juvia/merges", + "archive_url": "https://api.github.com/repos/phusion/juvia/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/phusion/juvia/downloads", + "issues_url": "https://api.github.com/repos/phusion/juvia/issues{/number}", + "pulls_url": "https://api.github.com/repos/phusion/juvia/pulls{/number}", + "milestones_url": "https://api.github.com/repos/phusion/juvia/milestones{/number}", + "notifications_url": "https://api.github.com/repos/phusion/juvia/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/phusion/juvia/labels{/name}", + "releases_url": "https://api.github.com/repos/phusion/juvia/releases{/id}", + "deployments_url": "https://api.github.com/repos/phusion/juvia/deployments", + "created_at": "2011-08-11T20:45:43Z", + "updated_at": "2023-04-19T06:16:37Z", + "pushed_at": "2020-09-22T09:39:09Z", + "git_url": "git://github.com/phusion/juvia.git", + "ssh_url": "git@github.com:phusion/juvia.git", + "clone_url": "https://github.com/phusion/juvia.git", + "svn_url": "https://github.com/phusion/juvia", + "homepage": "http://phusion.github.io/juvia/", + "size": 704, + "stargazers_count": 1036, + "watchers_count": 1036, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 96, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 29, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 96, + "open_issues": 29, + "watchers": 1036, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "phusion", + "id": 830588, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjgzMDU4OA==", + "avatar_url": "https://avatars.githubusercontent.com/u/830588?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phusion", + "html_url": "https://github.com/phusion", + "followers_url": "https://api.github.com/users/phusion/followers", + "following_url": "https://api.github.com/users/phusion/following{/other_user}", + "gists_url": "https://api.github.com/users/phusion/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phusion/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phusion/subscriptions", + "organizations_url": "https://api.github.com/users/phusion/orgs", + "repos_url": "https://api.github.com/users/phusion/repos", + "events_url": "https://api.github.com/users/phusion/events{/privacy}", + "received_events_url": "https://api.github.com/users/phusion/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 96, + "subscribers_count": 44 +} diff --git a/apigh/2023-04-20/juvia.commit b/apigh/2023-04-20/juvia.commit new file mode 100644 index 00000000..879fc801 --- /dev/null +++ b/apigh/2023-04-20/juvia.commit @@ -0,0 +1,98 @@ +{ + "sha": "e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "node_id": "MDY6Q29tbWl0MjE5MzY1NTplODAzZmVmOTdhZjcxMjBlMDFkODVmZTI4ZTVlNTE3N2NlY2Q5ZWI5", + "commit": { + "author": { + "name": "Andrey Nikiforov", + "email": "a.d.nikiforov@gmail.com", + "date": "2020-09-22T09:39:08Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2020-09-22T09:39:08Z" + }, + "message": "Update README\n\nRemove maintainers wanted badge, update TODO.", + "tree": { + "sha": "6cd9a43f98845c4bedd33078f6b336c8be25702c", + "url": "https://api.github.com/repos/phusion/juvia/git/trees/6cd9a43f98845c4bedd33078f6b336c8be25702c" + }, + "url": "https://api.github.com/repos/phusion/juvia/git/commits/e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfacY8CRBK7hj4Ov3rIwAAdHIIAHbGpc0fS+HzaSymbV6POnaB\ndtYcg2yTmlZPa+AK9B4Ag/ZFKxZYBl2Ul8i35Ywt4YOaTSxiRGvADwFL6e5d4SJN\n0u0Bbc1ceKwjSrAS6kjQP+CfybUuPK1YOhzKOcoCZCD8xjwNpxxJj2PGoHCgarVQ\nRDEaWrdXkXLMZpRHk2qNjleJJwpxnsV5OzhGNMaDMGf9NKXg7bAJ65wVjAUyKHQW\nHWnR1L9PXszYye5ZYHATsLgQ9tc5VI+SwK7T5KZf2AEnQkH/PGTZkMGpKiSg7Tq0\nP5mtOXJd2TQdUlqOFx87F4C00DxYlzPC/OD03qeEdkSC4BXcwT5iWZzynTrRcBg=\n=9C7J\n-----END PGP SIGNATURE-----\n", + "payload": "tree 6cd9a43f98845c4bedd33078f6b336c8be25702c\nparent cbd840b863008de2bef9c6afeac481c3dae36b0c\nauthor Andrey Nikiforov 1600767548 +0400\ncommitter GitHub 1600767548 +0400\n\nUpdate README\n\nRemove maintainers wanted badge, update TODO." + } + }, + "url": "https://api.github.com/repos/phusion/juvia/commits/e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "html_url": "https://github.com/phusion/juvia/commit/e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "comments_url": "https://api.github.com/repos/phusion/juvia/commits/e803fef97af7120e01d85fe28e5e5177cecd9eb9/comments", + "author": { + "login": "adnikiforov", + "id": 5015596, + "node_id": "MDQ6VXNlcjUwMTU1OTY=", + "avatar_url": "https://avatars.githubusercontent.com/u/5015596?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/adnikiforov", + "html_url": "https://github.com/adnikiforov", + "followers_url": "https://api.github.com/users/adnikiforov/followers", + "following_url": "https://api.github.com/users/adnikiforov/following{/other_user}", + "gists_url": "https://api.github.com/users/adnikiforov/gists{/gist_id}", + "starred_url": "https://api.github.com/users/adnikiforov/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/adnikiforov/subscriptions", + "organizations_url": "https://api.github.com/users/adnikiforov/orgs", + "repos_url": "https://api.github.com/users/adnikiforov/repos", + "events_url": "https://api.github.com/users/adnikiforov/events{/privacy}", + "received_events_url": "https://api.github.com/users/adnikiforov/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "cbd840b863008de2bef9c6afeac481c3dae36b0c", + "url": "https://api.github.com/repos/phusion/juvia/commits/cbd840b863008de2bef9c6afeac481c3dae36b0c", + "html_url": "https://github.com/phusion/juvia/commit/cbd840b863008de2bef9c6afeac481c3dae36b0c" + } + ], + "stats": { + "total": 14, + "additions": 10, + "deletions": 4 + }, + "files": [ + { + "sha": "89c1453da8d5e33c24a4e76063554606e09fd489", + "filename": "README.md", + "status": "modified", + "additions": 10, + "deletions": 4, + "changes": 14, + "blob_url": "https://github.com/phusion/juvia/blob/e803fef97af7120e01d85fe28e5e5177cecd9eb9/README.md", + "raw_url": "https://github.com/phusion/juvia/raw/e803fef97af7120e01d85fe28e5e5177cecd9eb9/README.md", + "contents_url": "https://api.github.com/repos/phusion/juvia/contents/README.md?ref=e803fef97af7120e01d85fe28e5e5177cecd9eb9", + "patch": "@@ -1,10 +1,8 @@\n-[![Maintainers Wanted](https://img.shields.io/badge/maintainers-wanted-red.svg)](https://github.com/pickhardt/maintainers-wanted)\n-\n # About Juvia\n \n ![Logo](https://github.com/phusion/juvia/raw/master/app/assets/images/logo-128.png)\n \n-**Juvia is currently unmaintained. If you're interested in taking over maintenance, please open an issue and tell us about it.**\n+**Juvia is currently maintained, but we surely will appreciate new contributors.**\n \n Juvia is an open source commenting system. It allows you to outsource your commenting needs to an external system so that you don't have to build your own commenting system for each website or each web app. Embedding a Juvia commenting page only involves pasting a JavaScript snippet into your web page.\n \n@@ -67,7 +65,15 @@ James Smith has written a Rails helper gem for embedding Juvia comments into Rai\n \n ## TODO\n \n-The following contributions would be very welcome:\n+Juvia is pretty broken and outdated at the moment. That means we have to stabilize and update components first. That's what we are gonna do:\n+\n+* Update libraries and gems, replace highly outdated dependencies, make project work on modern Ruby branch, lint code (probably have to push to Rails 5 or 6, Rails 4 is pretty outdated at the moment already)\n+* Add dependabot, github actions to CI/CD, mandatody CI for pull requests (if possible)\n+* Make and publish a rodmap based on issues, TODO and common sense\n+* Work on the TODO list\n+* Documentation, user guides\n+\n+Some features we will like to implement in the future:\n * Juvia works fine but we need more tests to prevent things from breaking in the future.\n * Document the `list_topics` API call.\n * A Quote/Reply button for each comment." + } + ] +} diff --git a/apigh/2023-04-20/komentify b/apigh/2023-04-20/komentify new file mode 100644 index 00000000..2c91e09e --- /dev/null +++ b/apigh/2023-04-20/komentify @@ -0,0 +1,141 @@ +{ + "id": 28002781, + "node_id": "MDEwOlJlcG9zaXRvcnkyODAwMjc4MQ==", + "name": "meteor-comments-ui", + "full_name": "komentify/meteor-comments-ui", + "private": false, + "owner": { + "login": "komentify", + "id": 20106090, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIwMTA2MDkw", + "avatar_url": "https://avatars.githubusercontent.com/u/20106090?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/komentify", + "html_url": "https://github.com/komentify", + "followers_url": "https://api.github.com/users/komentify/followers", + "following_url": "https://api.github.com/users/komentify/following{/other_user}", + "gists_url": "https://api.github.com/users/komentify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/komentify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/komentify/subscriptions", + "organizations_url": "https://api.github.com/users/komentify/orgs", + "repos_url": "https://api.github.com/users/komentify/repos", + "events_url": "https://api.github.com/users/komentify/events{/privacy}", + "received_events_url": "https://api.github.com/users/komentify/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/komentify/meteor-comments-ui", + "description": "Simple templates for comment functionality in your Meteor App", + "fork": false, + "url": "https://api.github.com/repos/komentify/meteor-comments-ui", + "forks_url": "https://api.github.com/repos/komentify/meteor-comments-ui/forks", + "keys_url": "https://api.github.com/repos/komentify/meteor-comments-ui/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/komentify/meteor-comments-ui/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/komentify/meteor-comments-ui/teams", + "hooks_url": "https://api.github.com/repos/komentify/meteor-comments-ui/hooks", + "issue_events_url": "https://api.github.com/repos/komentify/meteor-comments-ui/issues/events{/number}", + "events_url": "https://api.github.com/repos/komentify/meteor-comments-ui/events", + "assignees_url": "https://api.github.com/repos/komentify/meteor-comments-ui/assignees{/user}", + "branches_url": "https://api.github.com/repos/komentify/meteor-comments-ui/branches{/branch}", + "tags_url": "https://api.github.com/repos/komentify/meteor-comments-ui/tags", + "blobs_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/komentify/meteor-comments-ui/statuses/{sha}", + "languages_url": "https://api.github.com/repos/komentify/meteor-comments-ui/languages", + "stargazers_url": "https://api.github.com/repos/komentify/meteor-comments-ui/stargazers", + "contributors_url": "https://api.github.com/repos/komentify/meteor-comments-ui/contributors", + "subscribers_url": "https://api.github.com/repos/komentify/meteor-comments-ui/subscribers", + "subscription_url": "https://api.github.com/repos/komentify/meteor-comments-ui/subscription", + "commits_url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/komentify/meteor-comments-ui/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/komentify/meteor-comments-ui/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/komentify/meteor-comments-ui/contents/{+path}", + "compare_url": "https://api.github.com/repos/komentify/meteor-comments-ui/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/komentify/meteor-comments-ui/merges", + "archive_url": "https://api.github.com/repos/komentify/meteor-comments-ui/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/komentify/meteor-comments-ui/downloads", + "issues_url": "https://api.github.com/repos/komentify/meteor-comments-ui/issues{/number}", + "pulls_url": "https://api.github.com/repos/komentify/meteor-comments-ui/pulls{/number}", + "milestones_url": "https://api.github.com/repos/komentify/meteor-comments-ui/milestones{/number}", + "notifications_url": "https://api.github.com/repos/komentify/meteor-comments-ui/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/komentify/meteor-comments-ui/labels{/name}", + "releases_url": "https://api.github.com/repos/komentify/meteor-comments-ui/releases{/id}", + "deployments_url": "https://api.github.com/repos/komentify/meteor-comments-ui/deployments", + "created_at": "2014-12-14T18:02:53Z", + "updated_at": "2022-11-11T00:29:42Z", + "pushed_at": "2019-08-23T12:04:09Z", + "git_url": "git://github.com/komentify/meteor-comments-ui.git", + "ssh_url": "git@github.com:komentify/meteor-comments-ui.git", + "clone_url": "https://github.com/komentify/meteor-comments-ui.git", + "svn_url": "https://github.com/komentify/meteor-comments-ui", + "homepage": "", + "size": 1192, + "stargazers_count": 76, + "watchers_count": 76, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 40, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 11, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "javascript", + "meteor", + "meteor-package", + "widget" + ], + "visibility": "public", + "forks": 40, + "open_issues": 11, + "watchers": 76, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "komentify", + "id": 20106090, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIwMTA2MDkw", + "avatar_url": "https://avatars.githubusercontent.com/u/20106090?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/komentify", + "html_url": "https://github.com/komentify", + "followers_url": "https://api.github.com/users/komentify/followers", + "following_url": "https://api.github.com/users/komentify/following{/other_user}", + "gists_url": "https://api.github.com/users/komentify/gists{/gist_id}", + "starred_url": "https://api.github.com/users/komentify/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/komentify/subscriptions", + "organizations_url": "https://api.github.com/users/komentify/orgs", + "repos_url": "https://api.github.com/users/komentify/repos", + "events_url": "https://api.github.com/users/komentify/events{/privacy}", + "received_events_url": "https://api.github.com/users/komentify/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 40, + "subscribers_count": 6 +} diff --git a/apigh/2023-04-20/komentify.commit b/apigh/2023-04-20/komentify.commit new file mode 100644 index 00000000..b75cba8b --- /dev/null +++ b/apigh/2023-04-20/komentify.commit @@ -0,0 +1,98 @@ +{ + "sha": "5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "node_id": "MDY6Q29tbWl0MjgwMDI3ODE6NWIxNjVjZTFhOGI5ZWZiZGJiZjM2MDhhY2EyM2ExYzZiNDllNTViZg==", + "commit": { + "author": { + "name": "Matteo De Micheli", + "email": "matteodem@protonmail.com", + "date": "2017-06-09T12:07:39Z" + }, + "committer": { + "name": "Matteo De Micheli", + "email": "matteodem@protonmail.com", + "date": "2017-06-09T12:07:39Z" + }, + "message": "tag version 1.4.3", + "tree": { + "sha": "c6902ff95fea398d342e29aa0077a784d3235461", + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/trees/c6902ff95fea398d342e29aa0077a784d3235461" + }, + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/git/commits/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "html_url": "https://github.com/komentify/meteor-comments-ui/commit/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "comments_url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf/comments", + "author": { + "login": "matteodem", + "id": 1301147, + "node_id": "MDQ6VXNlcjEzMDExNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1301147?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/matteodem", + "html_url": "https://github.com/matteodem", + "followers_url": "https://api.github.com/users/matteodem/followers", + "following_url": "https://api.github.com/users/matteodem/following{/other_user}", + "gists_url": "https://api.github.com/users/matteodem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/matteodem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/matteodem/subscriptions", + "organizations_url": "https://api.github.com/users/matteodem/orgs", + "repos_url": "https://api.github.com/users/matteodem/repos", + "events_url": "https://api.github.com/users/matteodem/events{/privacy}", + "received_events_url": "https://api.github.com/users/matteodem/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "matteodem", + "id": 1301147, + "node_id": "MDQ6VXNlcjEzMDExNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1301147?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/matteodem", + "html_url": "https://github.com/matteodem", + "followers_url": "https://api.github.com/users/matteodem/followers", + "following_url": "https://api.github.com/users/matteodem/following{/other_user}", + "gists_url": "https://api.github.com/users/matteodem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/matteodem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/matteodem/subscriptions", + "organizations_url": "https://api.github.com/users/matteodem/orgs", + "repos_url": "https://api.github.com/users/matteodem/repos", + "events_url": "https://api.github.com/users/matteodem/events{/privacy}", + "received_events_url": "https://api.github.com/users/matteodem/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "5198bf5cf0f65d7ecc6db4b8899eb3a545a9ae87", + "url": "https://api.github.com/repos/komentify/meteor-comments-ui/commits/5198bf5cf0f65d7ecc6db4b8899eb3a545a9ae87", + "html_url": "https://github.com/komentify/meteor-comments-ui/commit/5198bf5cf0f65d7ecc6db4b8899eb3a545a9ae87" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "040d95e51f3058474f6d9fc9b0986e56620eaf25", + "filename": "package.js", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/komentify/meteor-comments-ui/blob/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf/package.js", + "raw_url": "https://github.com/komentify/meteor-comments-ui/raw/5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf/package.js", + "contents_url": "https://api.github.com/repos/komentify/meteor-comments-ui/contents/package.js?ref=5b165ce1a8b9efbdbbf3608aca23a1c6b49e55bf", + "patch": "@@ -1,7 +1,7 @@\n Package.describe({\n name: 'arkham:comments-ui',\n summary: 'Simple templates for disqus-like comment functionality',\n- version: '1.4.2',\n+ version: '1.4.3',\n git: 'https://github.com/komentify/meteor-comments-ui.git'\n });\n " + } + ] +} diff --git a/apigh/2023-04-20/kucos b/apigh/2023-04-20/kucos new file mode 100644 index 00000000..dacffc7f --- /dev/null +++ b/apigh/2023-04-20/kucos @@ -0,0 +1,143 @@ +{ + "id": 274461653, + "node_id": "MDEwOlJlcG9zaXRvcnkyNzQ0NjE2NTM=", + "name": "kucos", + "full_name": "kucosjs/kucos", + "private": false, + "owner": { + "login": "kucosjs", + "id": 67328936, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY3MzI4OTM2", + "avatar_url": "https://avatars.githubusercontent.com/u/67328936?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kucosjs", + "html_url": "https://github.com/kucosjs", + "followers_url": "https://api.github.com/users/kucosjs/followers", + "following_url": "https://api.github.com/users/kucosjs/following{/other_user}", + "gists_url": "https://api.github.com/users/kucosjs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kucosjs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kucosjs/subscriptions", + "organizations_url": "https://api.github.com/users/kucosjs/orgs", + "repos_url": "https://api.github.com/users/kucosjs/repos", + "events_url": "https://api.github.com/users/kucosjs/events{/privacy}", + "received_events_url": "https://api.github.com/users/kucosjs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/kucosjs/kucos", + "description": "Open source comments and kudos server for static websites", + "fork": false, + "url": "https://api.github.com/repos/kucosjs/kucos", + "forks_url": "https://api.github.com/repos/kucosjs/kucos/forks", + "keys_url": "https://api.github.com/repos/kucosjs/kucos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kucosjs/kucos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kucosjs/kucos/teams", + "hooks_url": "https://api.github.com/repos/kucosjs/kucos/hooks", + "issue_events_url": "https://api.github.com/repos/kucosjs/kucos/issues/events{/number}", + "events_url": "https://api.github.com/repos/kucosjs/kucos/events", + "assignees_url": "https://api.github.com/repos/kucosjs/kucos/assignees{/user}", + "branches_url": "https://api.github.com/repos/kucosjs/kucos/branches{/branch}", + "tags_url": "https://api.github.com/repos/kucosjs/kucos/tags", + "blobs_url": "https://api.github.com/repos/kucosjs/kucos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kucosjs/kucos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kucosjs/kucos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kucosjs/kucos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kucosjs/kucos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kucosjs/kucos/languages", + "stargazers_url": "https://api.github.com/repos/kucosjs/kucos/stargazers", + "contributors_url": "https://api.github.com/repos/kucosjs/kucos/contributors", + "subscribers_url": "https://api.github.com/repos/kucosjs/kucos/subscribers", + "subscription_url": "https://api.github.com/repos/kucosjs/kucos/subscription", + "commits_url": "https://api.github.com/repos/kucosjs/kucos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kucosjs/kucos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kucosjs/kucos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kucosjs/kucos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kucosjs/kucos/contents/{+path}", + "compare_url": "https://api.github.com/repos/kucosjs/kucos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kucosjs/kucos/merges", + "archive_url": "https://api.github.com/repos/kucosjs/kucos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kucosjs/kucos/downloads", + "issues_url": "https://api.github.com/repos/kucosjs/kucos/issues{/number}", + "pulls_url": "https://api.github.com/repos/kucosjs/kucos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kucosjs/kucos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kucosjs/kucos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kucosjs/kucos/labels{/name}", + "releases_url": "https://api.github.com/repos/kucosjs/kucos/releases{/id}", + "deployments_url": "https://api.github.com/repos/kucosjs/kucos/deployments", + "created_at": "2020-06-23T16:56:46Z", + "updated_at": "2023-01-20T03:50:54Z", + "pushed_at": "2021-06-06T08:11:28Z", + "git_url": "git://github.com/kucosjs/kucos.git", + "ssh_url": "git@github.com:kucosjs/kucos.git", + "clone_url": "https://github.com/kucosjs/kucos.git", + "svn_url": "https://github.com/kucosjs/kucos", + "homepage": "https://kucos.js.org", + "size": 118, + "stargazers_count": 40, + "watchers_count": 40, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 2, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "blog", + "comment-system", + "commenting-system", + "kudos", + "serverless", + "static-website" + ], + "visibility": "public", + "forks": 2, + "open_issues": 0, + "watchers": 40, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "kucosjs", + "id": 67328936, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY3MzI4OTM2", + "avatar_url": "https://avatars.githubusercontent.com/u/67328936?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kucosjs", + "html_url": "https://github.com/kucosjs", + "followers_url": "https://api.github.com/users/kucosjs/followers", + "following_url": "https://api.github.com/users/kucosjs/following{/other_user}", + "gists_url": "https://api.github.com/users/kucosjs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kucosjs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kucosjs/subscriptions", + "organizations_url": "https://api.github.com/users/kucosjs/orgs", + "repos_url": "https://api.github.com/users/kucosjs/repos", + "events_url": "https://api.github.com/users/kucosjs/events{/privacy}", + "received_events_url": "https://api.github.com/users/kucosjs/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 2, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/kucos.commit b/apigh/2023-04-20/kucos.commit new file mode 100644 index 00000000..82180c75 --- /dev/null +++ b/apigh/2023-04-20/kucos.commit @@ -0,0 +1,98 @@ +{ + "sha": "c8b6e096fab39497a369d46419acaf7ce1a25015", + "node_id": "MDY6Q29tbWl0Mjc0NDYxNjUzOmM4YjZlMDk2ZmFiMzk0OTdhMzY5ZDQ2NDE5YWNhZjdjZTFhMjUwMTU=", + "commit": { + "author": { + "name": "Sebastian Korotkiewicz", + "email": "skorotkiewicz@gmail.com", + "date": "2021-06-06T08:11:04Z" + }, + "committer": { + "name": "Sebastian Korotkiewicz", + "email": "skorotkiewicz@gmail.com", + "date": "2021-06-06T08:11:04Z" + }, + "message": "remove unused dependencies", + "tree": { + "sha": "cda241368129e6afe5af75046d05a66e62f96871", + "url": "https://api.github.com/repos/kucosjs/kucos/git/trees/cda241368129e6afe5af75046d05a66e62f96871" + }, + "url": "https://api.github.com/repos/kucosjs/kucos/git/commits/c8b6e096fab39497a369d46419acaf7ce1a25015", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCAAdFiEEtJji5BCQL4rsEI9PW9xVe0lr2w0FAmC8gx8ACgkQW9xVe0lr\n2w2MQRAAhsdqn9yR9zLGH02eEwtzvdlfG3fa+cPHBXQrXqNXey57+zwjDzo6KYo4\nGGuGNnSrc2eKZMOIBXY7WpMgRP4lXuR5Lbsz35K6TicLyhd5MKc/m04ydjq20xve\nAFbMzNcU9e4BIcBW9gCR2Cl4CcwK7I9AwDF6Y67hQc+toHYQ8wWyTh8C6z2wfCK7\natSDN5YTWi7jHQp+aVzW/bXT0MdIIqVwcD20NN8DNHK2kpQmfK6c823FGx65Uh/w\nAOReuoBdkR7ATMl4wNI/F4H0TVnF4Hze8Zu87TklwbL8e9eVemiWwaHAMoTU7dWT\nNtxTe+l9i9ObHTUqDS1rjPB1YtCn9Vt7p8Nix2N8CGegBQ3jcPBVvLFerolfb9kW\nIoSmbCXvuqENom3RvOmJjWPJft3N0ZcBIx06CKcbn1i0Z02cHeWp8PBZVfHuBmMO\nLA/XgoaE19tPZ3PJfkjbC0nnHUkvpeafWf3XmDEvIin0/u7aR68cz/G0fB30HzYZ\n3Al2cJZxOtGXocRpTIXS28Hx1N3f9Ou0usO6veOgYNVCN+ItMuvTk/a8Dzvueuve\nCK3+SnVldj8Sz65CumIm0jbKJRxribTE1j249+Ayu1ApFkk8xrspnerQ2YQw27SM\nGjfvaOA1lgast4+M9/+DwoD7nwafWaEt12eTn5Cs5KlLsiEJd0w=\n=YkU2\n-----END PGP SIGNATURE-----", + "payload": "tree cda241368129e6afe5af75046d05a66e62f96871\nparent a75696cc4fd6a6e89619e77aba0e672f7c9f5475\nauthor Sebastian Korotkiewicz 1622967064 +0200\ncommitter Sebastian Korotkiewicz 1622967064 +0200\n\nremove unused dependencies\n" + } + }, + "url": "https://api.github.com/repos/kucosjs/kucos/commits/c8b6e096fab39497a369d46419acaf7ce1a25015", + "html_url": "https://github.com/kucosjs/kucos/commit/c8b6e096fab39497a369d46419acaf7ce1a25015", + "comments_url": "https://api.github.com/repos/kucosjs/kucos/commits/c8b6e096fab39497a369d46419acaf7ce1a25015/comments", + "author": { + "login": "skorotkiewicz", + "id": 899351, + "node_id": "MDQ6VXNlcjg5OTM1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/899351?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skorotkiewicz", + "html_url": "https://github.com/skorotkiewicz", + "followers_url": "https://api.github.com/users/skorotkiewicz/followers", + "following_url": "https://api.github.com/users/skorotkiewicz/following{/other_user}", + "gists_url": "https://api.github.com/users/skorotkiewicz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skorotkiewicz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skorotkiewicz/subscriptions", + "organizations_url": "https://api.github.com/users/skorotkiewicz/orgs", + "repos_url": "https://api.github.com/users/skorotkiewicz/repos", + "events_url": "https://api.github.com/users/skorotkiewicz/events{/privacy}", + "received_events_url": "https://api.github.com/users/skorotkiewicz/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "skorotkiewicz", + "id": 899351, + "node_id": "MDQ6VXNlcjg5OTM1MQ==", + "avatar_url": "https://avatars.githubusercontent.com/u/899351?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/skorotkiewicz", + "html_url": "https://github.com/skorotkiewicz", + "followers_url": "https://api.github.com/users/skorotkiewicz/followers", + "following_url": "https://api.github.com/users/skorotkiewicz/following{/other_user}", + "gists_url": "https://api.github.com/users/skorotkiewicz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skorotkiewicz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skorotkiewicz/subscriptions", + "organizations_url": "https://api.github.com/users/skorotkiewicz/orgs", + "repos_url": "https://api.github.com/users/skorotkiewicz/repos", + "events_url": "https://api.github.com/users/skorotkiewicz/events{/privacy}", + "received_events_url": "https://api.github.com/users/skorotkiewicz/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "a75696cc4fd6a6e89619e77aba0e672f7c9f5475", + "url": "https://api.github.com/repos/kucosjs/kucos/commits/a75696cc4fd6a6e89619e77aba0e672f7c9f5475", + "html_url": "https://github.com/kucosjs/kucos/commit/a75696cc4fd6a6e89619e77aba0e672f7c9f5475" + } + ], + "stats": { + "total": 1, + "additions": 0, + "deletions": 1 + }, + "files": [ + { + "sha": "8b9b180c5dfd8c896c727497a66b93be88d15636", + "filename": "package.json", + "status": "modified", + "additions": 0, + "deletions": 1, + "changes": 1, + "blob_url": "https://github.com/kucosjs/kucos/blob/c8b6e096fab39497a369d46419acaf7ce1a25015/package.json", + "raw_url": "https://github.com/kucosjs/kucos/raw/c8b6e096fab39497a369d46419acaf7ce1a25015/package.json", + "contents_url": "https://api.github.com/repos/kucosjs/kucos/contents/package.json?ref=c8b6e096fab39497a369d46419acaf7ce1a25015", + "patch": "@@ -28,7 +28,6 @@\n \"dependencies\": {\n \"akismet-api\": \"^5.0.0\",\n \"async\": \"^3.1.0\",\n- \"axios\": \"^0.19.2\",\n \"cookie-parser\": \"^1.4.5\",\n \"cors\": \"^2.8.5\",\n \"debug\": \"latest\"," + } + ] +} diff --git a/apigh/2023-04-20/lambda_comments b/apigh/2023-04-20/lambda_comments new file mode 100644 index 00000000..ced7aec9 --- /dev/null +++ b/apigh/2023-04-20/lambda_comments @@ -0,0 +1,118 @@ +{ + "id": 55813505, + "node_id": "MDEwOlJlcG9zaXRvcnk1NTgxMzUwNQ==", + "name": "lambda-comments", + "full_name": "jimpick/lambda-comments", + "private": false, + "owner": { + "login": "jimpick", + "id": 20886, + "node_id": "MDQ6VXNlcjIwODg2", + "avatar_url": "https://avatars.githubusercontent.com/u/20886?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jimpick", + "html_url": "https://github.com/jimpick", + "followers_url": "https://api.github.com/users/jimpick/followers", + "following_url": "https://api.github.com/users/jimpick/following{/other_user}", + "gists_url": "https://api.github.com/users/jimpick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jimpick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jimpick/subscriptions", + "organizations_url": "https://api.github.com/users/jimpick/orgs", + "repos_url": "https://api.github.com/users/jimpick/repos", + "events_url": "https://api.github.com/users/jimpick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jimpick/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jimpick/lambda-comments", + "description": "Blog commenting system built with AWS Lambda", + "fork": false, + "url": "https://api.github.com/repos/jimpick/lambda-comments", + "forks_url": "https://api.github.com/repos/jimpick/lambda-comments/forks", + "keys_url": "https://api.github.com/repos/jimpick/lambda-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jimpick/lambda-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jimpick/lambda-comments/teams", + "hooks_url": "https://api.github.com/repos/jimpick/lambda-comments/hooks", + "issue_events_url": "https://api.github.com/repos/jimpick/lambda-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/jimpick/lambda-comments/events", + "assignees_url": "https://api.github.com/repos/jimpick/lambda-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/jimpick/lambda-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/jimpick/lambda-comments/tags", + "blobs_url": "https://api.github.com/repos/jimpick/lambda-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jimpick/lambda-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jimpick/lambda-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jimpick/lambda-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jimpick/lambda-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jimpick/lambda-comments/languages", + "stargazers_url": "https://api.github.com/repos/jimpick/lambda-comments/stargazers", + "contributors_url": "https://api.github.com/repos/jimpick/lambda-comments/contributors", + "subscribers_url": "https://api.github.com/repos/jimpick/lambda-comments/subscribers", + "subscription_url": "https://api.github.com/repos/jimpick/lambda-comments/subscription", + "commits_url": "https://api.github.com/repos/jimpick/lambda-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jimpick/lambda-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jimpick/lambda-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jimpick/lambda-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jimpick/lambda-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/jimpick/lambda-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jimpick/lambda-comments/merges", + "archive_url": "https://api.github.com/repos/jimpick/lambda-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jimpick/lambda-comments/downloads", + "issues_url": "https://api.github.com/repos/jimpick/lambda-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/jimpick/lambda-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jimpick/lambda-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jimpick/lambda-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jimpick/lambda-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/jimpick/lambda-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/jimpick/lambda-comments/deployments", + "created_at": "2016-04-08T22:29:06Z", + "updated_at": "2023-03-25T18:54:52Z", + "pushed_at": "2016-09-16T01:16:15Z", + "git_url": "git://github.com/jimpick/lambda-comments.git", + "ssh_url": "git@github.com:jimpick/lambda-comments.git", + "clone_url": "https://github.com/jimpick/lambda-comments.git", + "svn_url": "https://github.com/jimpick/lambda-comments", + "homepage": "", + "size": 394, + "stargazers_count": 624, + "watchers_count": 624, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 32, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 8, + "license": { + "key": "isc", + "name": "ISC License", + "spdx_id": "ISC", + "url": "https://api.github.com/licenses/isc", + "node_id": "MDc6TGljZW5zZTEw" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 32, + "open_issues": 8, + "watchers": 624, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 32, + "subscribers_count": 17 +} diff --git a/apigh/2023-04-20/lambda_comments.commit b/apigh/2023-04-20/lambda_comments.commit new file mode 100644 index 00000000..a6da6170 --- /dev/null +++ b/apigh/2023-04-20/lambda_comments.commit @@ -0,0 +1,103 @@ +{ + "sha": "9ef01f837d579921c04bef2694f4c0192d81885a", + "node_id": "MDY6Q29tbWl0NTU4MTM1MDU6OWVmMDFmODM3ZDU3OTkyMWMwNGJlZjI2OTRmNGMwMTkyZDgxODg1YQ==", + "commit": { + "author": { + "name": "Jim Pick", + "email": "jim@backblend.com", + "date": "2016-07-27T00:40:53Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2016-07-27T00:40:53Z" + }, + "message": "Merge pull request #13 from kabo/master\n\nCloses #10", + "tree": { + "sha": "a56a56bfed2b466aa3c782ddc3c8f289a4e8d5f2", + "url": "https://api.github.com/repos/jimpick/lambda-comments/git/trees/a56a56bfed2b466aa3c782ddc3c8f289a4e8d5f2" + }, + "url": "https://api.github.com/repos/jimpick/lambda-comments/git/commits/9ef01f837d579921c04bef2694f4c0192d81885a", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/jimpick/lambda-comments/commits/9ef01f837d579921c04bef2694f4c0192d81885a", + "html_url": "https://github.com/jimpick/lambda-comments/commit/9ef01f837d579921c04bef2694f4c0192d81885a", + "comments_url": "https://api.github.com/repos/jimpick/lambda-comments/commits/9ef01f837d579921c04bef2694f4c0192d81885a/comments", + "author": { + "login": "jimpick", + "id": 20886, + "node_id": "MDQ6VXNlcjIwODg2", + "avatar_url": "https://avatars.githubusercontent.com/u/20886?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jimpick", + "html_url": "https://github.com/jimpick", + "followers_url": "https://api.github.com/users/jimpick/followers", + "following_url": "https://api.github.com/users/jimpick/following{/other_user}", + "gists_url": "https://api.github.com/users/jimpick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jimpick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jimpick/subscriptions", + "organizations_url": "https://api.github.com/users/jimpick/orgs", + "repos_url": "https://api.github.com/users/jimpick/repos", + "events_url": "https://api.github.com/users/jimpick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jimpick/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "7f6b5b1b450563d2b5720f04b50d4efec0e585f2", + "url": "https://api.github.com/repos/jimpick/lambda-comments/commits/7f6b5b1b450563d2b5720f04b50d4efec0e585f2", + "html_url": "https://github.com/jimpick/lambda-comments/commit/7f6b5b1b450563d2b5720f04b50d4efec0e585f2" + }, + { + "sha": "90ddbae0a1c871cc81396f88ae8cac75632c74aa", + "url": "https://api.github.com/repos/jimpick/lambda-comments/commits/90ddbae0a1c871cc81396f88ae8cac75632c74aa", + "html_url": "https://github.com/jimpick/lambda-comments/commit/90ddbae0a1c871cc81396f88ae8cac75632c74aa" + } + ], + "stats": { + "total": 5, + "additions": 3, + "deletions": 2 + }, + "files": [ + { + "sha": "a44604c81890df2b50580902ffd33960d1cb09c2", + "filename": "deploy/cloudformation/cloudformation.sh", + "status": "modified", + "additions": 3, + "deletions": 2, + "changes": 5, + "blob_url": "https://github.com/jimpick/lambda-comments/blob/9ef01f837d579921c04bef2694f4c0192d81885a/deploy%2Fcloudformation%2Fcloudformation.sh", + "raw_url": "https://github.com/jimpick/lambda-comments/raw/9ef01f837d579921c04bef2694f4c0192d81885a/deploy%2Fcloudformation%2Fcloudformation.sh", + "contents_url": "https://api.github.com/repos/jimpick/lambda-comments/contents/deploy%2Fcloudformation%2Fcloudformation.sh?ref=9ef01f837d579921c04bef2694f4c0192d81885a", + "patch": "@@ -19,16 +19,17 @@ BABEL_NODE=$DIR/../../node_modules/babel-cli/bin/babel-node.js\n BIN_DIR=$DIR/../../bin\n STACK_NAME=$($BABEL_NODE $BIN_DIR/dump-config.js CLOUDFORMATION)\n ORIGIN=$($BABEL_NODE $BIN_DIR/dump-config.js ORIGIN)\n+REGION=$($BABEL_NODE $BIN_DIR/dump-config.js REGION)\n \n if [ \"$ACTION\" = \"delete-stack\" ]; then\n aws cloudformation delete-stack \\\n- --region us-west-2 \\\n+ --region $REGION \\\n --stack-name $STACK_NAME\n exit 0\n fi\n \n aws cloudformation $ACTION \\\n- --region us-west-2 \\\n+ --region $REGION \\\n --stack-name $STACK_NAME \\\n --template-body file://$DIR/lambda-comments.json \\\n --capabilities CAPABILITY_IAM \\" + } + ] +} diff --git a/apigh/2023-04-20/master b/apigh/2023-04-20/master new file mode 100644 index 00000000..1ef1c09f --- /dev/null +++ b/apigh/2023-04-20/master @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/11591946", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-20/master.commit b/apigh/2023-04-20/master.commit new file mode 100644 index 00000000..96279562 --- /dev/null +++ b/apigh/2023-04-20/master.commit @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/11591946/commits/master", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-20/mouthful b/apigh/2023-04-20/mouthful new file mode 100644 index 00000000..01981009 --- /dev/null +++ b/apigh/2023-04-20/mouthful @@ -0,0 +1,126 @@ +{ + "id": 120190957, + "node_id": "MDEwOlJlcG9zaXRvcnkxMjAxOTA5NTc=", + "name": "mouthful", + "full_name": "vkuznecovas/mouthful", + "private": false, + "owner": { + "login": "vkuznecovas", + "id": 18392269, + "node_id": "MDQ6VXNlcjE4MzkyMjY5", + "avatar_url": "https://avatars.githubusercontent.com/u/18392269?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vkuznecovas", + "html_url": "https://github.com/vkuznecovas", + "followers_url": "https://api.github.com/users/vkuznecovas/followers", + "following_url": "https://api.github.com/users/vkuznecovas/following{/other_user}", + "gists_url": "https://api.github.com/users/vkuznecovas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vkuznecovas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vkuznecovas/subscriptions", + "organizations_url": "https://api.github.com/users/vkuznecovas/orgs", + "repos_url": "https://api.github.com/users/vkuznecovas/repos", + "events_url": "https://api.github.com/users/vkuznecovas/events{/privacy}", + "received_events_url": "https://api.github.com/users/vkuznecovas/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/vkuznecovas/mouthful", + "description": "Mouthful is a self-hosted alternative to Disqus", + "fork": false, + "url": "https://api.github.com/repos/vkuznecovas/mouthful", + "forks_url": "https://api.github.com/repos/vkuznecovas/mouthful/forks", + "keys_url": "https://api.github.com/repos/vkuznecovas/mouthful/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vkuznecovas/mouthful/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vkuznecovas/mouthful/teams", + "hooks_url": "https://api.github.com/repos/vkuznecovas/mouthful/hooks", + "issue_events_url": "https://api.github.com/repos/vkuznecovas/mouthful/issues/events{/number}", + "events_url": "https://api.github.com/repos/vkuznecovas/mouthful/events", + "assignees_url": "https://api.github.com/repos/vkuznecovas/mouthful/assignees{/user}", + "branches_url": "https://api.github.com/repos/vkuznecovas/mouthful/branches{/branch}", + "tags_url": "https://api.github.com/repos/vkuznecovas/mouthful/tags", + "blobs_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vkuznecovas/mouthful/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vkuznecovas/mouthful/languages", + "stargazers_url": "https://api.github.com/repos/vkuznecovas/mouthful/stargazers", + "contributors_url": "https://api.github.com/repos/vkuznecovas/mouthful/contributors", + "subscribers_url": "https://api.github.com/repos/vkuznecovas/mouthful/subscribers", + "subscription_url": "https://api.github.com/repos/vkuznecovas/mouthful/subscription", + "commits_url": "https://api.github.com/repos/vkuznecovas/mouthful/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vkuznecovas/mouthful/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vkuznecovas/mouthful/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vkuznecovas/mouthful/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/{+path}", + "compare_url": "https://api.github.com/repos/vkuznecovas/mouthful/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vkuznecovas/mouthful/merges", + "archive_url": "https://api.github.com/repos/vkuznecovas/mouthful/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vkuznecovas/mouthful/downloads", + "issues_url": "https://api.github.com/repos/vkuznecovas/mouthful/issues{/number}", + "pulls_url": "https://api.github.com/repos/vkuznecovas/mouthful/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vkuznecovas/mouthful/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vkuznecovas/mouthful/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vkuznecovas/mouthful/labels{/name}", + "releases_url": "https://api.github.com/repos/vkuznecovas/mouthful/releases{/id}", + "deployments_url": "https://api.github.com/repos/vkuznecovas/mouthful/deployments", + "created_at": "2018-02-04T14:15:26Z", + "updated_at": "2023-04-18T03:50:58Z", + "pushed_at": "2023-03-07T03:18:17Z", + "git_url": "git://github.com/vkuznecovas/mouthful.git", + "ssh_url": "git@github.com:vkuznecovas/mouthful.git", + "clone_url": "https://github.com/vkuznecovas/mouthful.git", + "svn_url": "https://github.com/vkuznecovas/mouthful", + "homepage": "https://mouthful.dizzy.zone/", + "size": 5659, + "stargazers_count": 747, + "watchers_count": 747, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 38, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 32, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting-engines", + "comments", + "disqus", + "dynamodb", + "go", + "golang", + "mysql", + "postgres", + "preact" + ], + "visibility": "public", + "forks": 38, + "open_issues": 32, + "watchers": 747, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 38, + "subscribers_count": 15 +} diff --git a/apigh/2023-04-20/mouthful.commit b/apigh/2023-04-20/mouthful.commit new file mode 100644 index 00000000..329f592b --- /dev/null +++ b/apigh/2023-04-20/mouthful.commit @@ -0,0 +1,139 @@ +{ + "sha": "09e72e1bce516138377e35d16d7987cd15824433", + "node_id": "MDY6Q29tbWl0MTIwMTkwOTU3OjA5ZTcyZTFiY2U1MTYxMzgzNzdlMzVkMTZkNzk4N2NkMTU4MjQ0MzM=", + "commit": { + "author": { + "name": "Viktoras", + "email": "vkuznecovas@users.noreply.github.com", + "date": "2021-02-28T11:42:16Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-02-28T11:42:16Z" + }, + "message": "Merge pull request #122 from vkuznecovas/fix-docker-fetching\n\nPass context to docker when building instead of pulling from github", + "tree": { + "sha": "a17ee57811c2e401a68ec9542228164f997b789e", + "url": "https://api.github.com/repos/vkuznecovas/mouthful/git/trees/a17ee57811c2e401a68ec9542228164f997b789e" + }, + "url": "https://api.github.com/repos/vkuznecovas/mouthful/git/commits/09e72e1bce516138377e35d16d7987cd15824433", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJgO4GYCRBK7hj4Ov3rIwAAdHIIAAkVQNbBXsSkWCTCOMN+nRrq\nu0LgHQSBM7ZMA29GGAB0MotSAMZo2ebNmd4ZbhOFKBNKcyq4PEBFeIT300RvL0a7\nawc0aB+XSe7YSyBrnAQvsKQ/FFWYAXa2fvh1AQZEkZnBdh3H3KujlN0y5aayjrMI\nK0uQ0kNtf7E43NFXvJJcoJAQbZex0+YUeDwQ13dtGivwCVQoV5q+NGu8DMhRU+fa\nCwNBhl2IAFD4M/xH4MndhprYCXxp//G/ZM5yBe8ygs0150ly3W6wHMKFNsLfNffN\nfrtisossQGpqbYYWjfbJQqbqC97H2HromUD3OQxpDsLiXx/LRRWzqb4S3GRprFc=\n=XKKv\n-----END PGP SIGNATURE-----\n", + "payload": "tree a17ee57811c2e401a68ec9542228164f997b789e\nparent 1abb7572f8a5019fb826fb9057fc821aa9e54760\nparent 9c992f12abe8810d677fa777a2b6f166b2469daf\nauthor Viktoras 1614512536 +0200\ncommitter GitHub 1614512536 +0200\n\nMerge pull request #122 from vkuznecovas/fix-docker-fetching\n\nPass context to docker when building instead of pulling from github" + } + }, + "url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/09e72e1bce516138377e35d16d7987cd15824433", + "html_url": "https://github.com/vkuznecovas/mouthful/commit/09e72e1bce516138377e35d16d7987cd15824433", + "comments_url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/09e72e1bce516138377e35d16d7987cd15824433/comments", + "author": { + "login": "vkuznecovas", + "id": 18392269, + "node_id": "MDQ6VXNlcjE4MzkyMjY5", + "avatar_url": "https://avatars.githubusercontent.com/u/18392269?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vkuznecovas", + "html_url": "https://github.com/vkuznecovas", + "followers_url": "https://api.github.com/users/vkuznecovas/followers", + "following_url": "https://api.github.com/users/vkuznecovas/following{/other_user}", + "gists_url": "https://api.github.com/users/vkuznecovas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vkuznecovas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vkuznecovas/subscriptions", + "organizations_url": "https://api.github.com/users/vkuznecovas/orgs", + "repos_url": "https://api.github.com/users/vkuznecovas/repos", + "events_url": "https://api.github.com/users/vkuznecovas/events{/privacy}", + "received_events_url": "https://api.github.com/users/vkuznecovas/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1abb7572f8a5019fb826fb9057fc821aa9e54760", + "url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/1abb7572f8a5019fb826fb9057fc821aa9e54760", + "html_url": "https://github.com/vkuznecovas/mouthful/commit/1abb7572f8a5019fb826fb9057fc821aa9e54760" + }, + { + "sha": "9c992f12abe8810d677fa777a2b6f166b2469daf", + "url": "https://api.github.com/repos/vkuznecovas/mouthful/commits/9c992f12abe8810d677fa777a2b6f166b2469daf", + "html_url": "https://github.com/vkuznecovas/mouthful/commit/9c992f12abe8810d677fa777a2b6f166b2469daf" + } + ], + "stats": { + "total": 372, + "additions": 364, + "deletions": 8 + }, + "files": [ + { + "sha": "b603977f9428c2e38134839540f70027f41592cb", + "filename": ".dockerignore", + "status": "modified", + "additions": 6, + "deletions": 2, + "changes": 8, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/.dockerignore", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/.dockerignore", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/.dockerignore?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -1,2 +1,6 @@\n-**\n-!dist\n\\ No newline at end of file\n+dist\n+data\n+goreleaser-build\n+static\n+client/build\n+client/node_modules" + }, + { + "sha": "e85616dc6af592072598cee3abcc96667438963a", + "filename": "Dockerfile", + "status": "modified", + "additions": 3, + "deletions": 5, + "changes": 8, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/Dockerfile", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/Dockerfile", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/Dockerfile?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -1,17 +1,15 @@\n FROM golang:1.15.2-alpine\n-ARG MOUTHFUL_VER\n ENV CGO_ENABLED=${CGO_ENABLED:-1} \\\n GOOS=${GOOS:-linux} \\\n MOUTHFUL_VER=${MOUTHFUL_VER:-master}\n RUN set -ex; \\\n apk add --no-cache bash build-base curl git && \\\n echo \"http://dl-cdn.alpinelinux.org/alpine/edge/community\" >> /etc/apk/repositories && \\\n echo \"http://dl-cdn.alpinelinux.org/alpine/edge/main\" >> /etc/apk/repositories && \\\n- apk add --no-cache upx nodejs nodejs-npm && \\\n- go get -d github.com/vkuznecovas/mouthful\n+ apk add --no-cache upx nodejs nodejs-npm \n WORKDIR /go/src/github.com/vkuznecovas/mouthful\n-RUN git checkout $MOUTHFUL_VER && \\\n- ./build.sh && \\\n+COPY . /go/src/github.com/vkuznecovas/mouthful\n+RUN ./build.sh && \\\n cd dist/ && \\\n upx --best mouthful\n " + }, + { + "sha": "6be5e6b0209af88b216a24039b6f7dde95aed40f", + "filename": "go.mod", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/go.mod", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/go.mod", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/go.mod?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -18,7 +18,7 @@ require (\n \tgithub.com/labstack/echo v3.3.10+incompatible // indirect\n \tgithub.com/labstack/gommon v0.3.0 // indirect\n \tgithub.com/lib/pq v1.8.0\n-\tgithub.com/markbates/goth v1.64.2\n+\tgithub.com/markbates/goth v1.67.1\n \tgithub.com/mattn/go-sqlite3 v1.14.3\n \tgithub.com/microcosm-cc/bluemonday v1.0.4\n \tgithub.com/patrickmn/go-cache v2.1.0+incompatible" + }, + { + "sha": "96e61b2c900c598e198c0b4b26871b60b1879507", + "filename": "go.sum", + "status": "modified", + "additions": 354, + "deletions": 0, + "changes": 354, + "blob_url": "https://github.com/vkuznecovas/mouthful/blob/09e72e1bce516138377e35d16d7987cd15824433/go.sum", + "raw_url": "https://github.com/vkuznecovas/mouthful/raw/09e72e1bce516138377e35d16d7987cd15824433/go.sum", + "contents_url": "https://api.github.com/repos/vkuznecovas/mouthful/contents/go.sum?ref=09e72e1bce516138377e35d16d7987cd15824433", + "patch": "@@ -1,4 +1,39 @@\n+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\n+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\n+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=\n+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=\n+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=\n+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=\n+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=\n+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=\n+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=\n+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=\n+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=\n+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=\n+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=\n+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=\n+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=\n+cloud.google.com/go v0.67.0/go.mod h1:YNan/mUhNZFrYUor0vqrsQ0Ffl7Xtm/ACOy/vsTS858=\n+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=\n+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=\n+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=\n+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=\n+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=\n+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=\n+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=\n+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=\n+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=\n+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=\n+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=\n+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=\n+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=\n+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=\n+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=\n+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=\n+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=\n+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=\n github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\n+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=\n github.com/appleboy/gofight v1.0.4 h1:CaO/h/RHl+EigTqZ37BQhu6FnbUaJ2ngZG6NtPcOtR8=\n github.com/appleboy/gofight v2.0.0+incompatible h1:ECVMVpNJFBztDbnA7ead4Ffm6mizKKb6QyR78F+j4eY=\n github.com/appleboy/gofight v2.0.0+incompatible/go.mod h1:H/tvof1oZHnZdlBd+AeODZGkk1C+D2na0NXr0iXuZHA=\n@@ -14,15 +49,25 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU\n github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=\n github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY=\n github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=\n+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=\n github.com/chris-ramon/douceur v0.2.0 h1:IDMEdxlEUUBYBKE4z/mJnFyVXox+MjuEVDJNN27glkU=\n github.com/chris-ramon/douceur v0.2.0/go.mod h1:wDW5xjJdeoMm1mRt4sD4c/LbF/mWdEpRXQKjTR8nIBE=\n+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=\n+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=\n+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=\n+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\n+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=\n github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=\n github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=\n github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\n github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\n github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\n github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=\n github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=\n+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\n+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=\n+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=\n+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=\n github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=\n github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=\n github.com/gin-contrib/cors v1.3.1 h1:doAsuITavI4IOcd0Y19U4B+O0dNWihRyX//nn4sEmgA=\n@@ -37,6 +82,9 @@ github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmC\n github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=\n github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=\n github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=\n+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=\n+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=\n+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=\n github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=\n github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=\n github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=\n@@ -54,12 +102,58 @@ github.com/gofrs/uuid v1.2.0 h1:coDhrjgyJaglxSjxuJdqQSSdUpG3w6p1OwN2od6frBU=\n github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=\n github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84=\n github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=\n+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\n+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\n+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\n+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\n+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\n+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\n+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=\n+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\n+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\n+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=\n+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=\n+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\n github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\n github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\n github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=\n github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\n+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\n+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=\n+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\n+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\n+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\n+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\n+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\n+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=\n+github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=\n+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\n github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=\n+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\n+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\n+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\n+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\n+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\n+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n+github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=\n+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\n github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\n+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=\n+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=\n+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\n+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\n+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/pprof v0.0.0-20200905233945-acf8798be1f7/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=\n+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=\n+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=\n+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=\n github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=\n github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=\n github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=\n@@ -75,6 +169,9 @@ github.com/gorilla/sessions v1.1.3 h1:uXoZdcdA5XdXF3QzuSlheVRUvjl+1rKY7zBXL68L9R\n github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=\n github.com/guregu/dynamo v1.9.1 h1:d4j31Dp4hbf3pFDv0LCz9g/TInTaitxlMvXuOaF1MPg=\n github.com/guregu/dynamo v1.9.1/go.mod h1:nN6eZeNSiD92T5IVTmEhO6pRZblJZ8cQ+0e0dVFExjc=\n+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\n+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\n+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=\n github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4=\n github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=\n github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=\n@@ -86,7 +183,10 @@ github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhB\n github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\n github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=\n github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\n+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=\n+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=\n github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nVr8KZVXJSS97Jo8pJ0jgq29P6H7dG0oplUA86MQw=\n+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=\n github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=\n github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=\n github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\n@@ -109,6 +209,8 @@ github.com/markbates/going v1.0.0 h1:DQw0ZP7NbNlFGcKbcE/IVSOAFzScxRtLpd0rLMzLhq0\n github.com/markbates/going v1.0.0/go.mod h1:I6mnB4BPnEeqo85ynXIx1ZFLLbtiLHNXVgWeFO9OGOA=\n github.com/markbates/goth v1.64.2 h1:HDFwyuB6/ATU1USTvd/Rb3C9XE0VAxeuciSz+aUZHHA=\n github.com/markbates/goth v1.64.2/go.mod h1:hSFJFfH56BfFCX4+hBIxyd3o5VzuH5rNwKVRsFr/JPk=\n+github.com/markbates/goth v1.67.1 h1:gU5B0pzHVyhnJPwGynfFnkfvaQ39C1Sy+ewdl+bhAOw=\n+github.com/markbates/goth v1.67.1/go.mod h1:EyLFHGU5ySr2GXRDyJH5nu2dA7parbC8QwIYW/rGcWg=\n github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=\n github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=\n github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=\n@@ -138,7 +240,9 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE\n github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=\n github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\n github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\n+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=\n github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=\n+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=\n github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=\n github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=\n github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\n@@ -168,33 +272,273 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw\n github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=\n github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8=\n github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=\n+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\n+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=\n+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=\n+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\n+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\n+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=\n golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\n+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=\n golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=\n+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\n+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\n+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\n+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=\n+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=\n+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=\n+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\n+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\n+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=\n+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=\n+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=\n+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=\n+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=\n+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\n+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\n+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\n+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\n+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=\n+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\n+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=\n+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=\n+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=\n+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=\n+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=\n+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\n+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=\n+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\n+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\n+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\n+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\n golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=\n+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=\n golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\n+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=\n+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200927032502-5d4f70055728/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n+golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 h1:YfxMZzv3PjGonQYNUaeU2+DhAdqOxerQ30JFB6WgAXo=\n+golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=\n golang.org/x/oauth2 v0.0.0-20180620175406-ef147856a6dd h1:QQhib242ErYDSMitlBm8V7wYCm/1a25hV8qMadIKLPA=\n golang.org/x/oauth2 v0.0.0-20180620175406-ef147856a6dd/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\n+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\n+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\n+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc=\n+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=\n+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\n+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\n golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\n golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\n+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=\n golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadLwykBIzs5q8Ez2SbHyc=\n+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\n+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\n golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\n+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\n golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=\n golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=\n golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\n+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\n+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\n+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\n golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\n+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\n+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\n+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\n+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\n+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\n+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\n+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\n+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\n+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\n+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\n+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\n+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\n+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=\n+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\n+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\n+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=\n+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\n+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\n+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\n+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=\n+golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=\n+golang.org/x/tools v0.0.0-20200929161345-d7fc70abf50f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=\n+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=\n+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=\n+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=\n+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\n+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\n+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\n+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\n+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=\n+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=\n+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\n+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=\n+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=\n+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=\n+google.golang.org/api v0.32.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=\n+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\n+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\n+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\n+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=\n+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\n google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=\n google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\n+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\n+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\n+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\n+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\n+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=\n+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=\n+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=\n+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=\n+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=\n+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=\n+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=\n+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/genproto v0.0.0-20200929141702-51c3e5b607fe/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=\n+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\n+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=\n+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=\n+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=\n+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=\n+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\n+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\n+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=\n+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=\n+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=\n+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=\n+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\n+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\n+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\n+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\n+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\n+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\n+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\n+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\n+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=\n+google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=\n+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=\n gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\n gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=\n gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\n+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=\n gopkg.in/gin-gonic/gin.v1 v1.3.0 h1:DjAu49rN1YttQsOkVCPlAO3INcZNFT0IKsNVMk5MRT4=\n gopkg.in/gin-gonic/gin.v1 v1.3.0/go.mod h1:Eljh74A/zAvUOQ835v6ySeZ+5gQG6tKjbZTaZ9iWU3A=\n gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=\n@@ -204,3 +548,13 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=\n gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\n gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=\n gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\n+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=\n+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\n+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=\n+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=\n+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=\n+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=" + } + ] +} diff --git a/apigh/2023-04-20/node_comments b/apigh/2023-04-20/node_comments new file mode 100644 index 00000000..b4409910 --- /dev/null +++ b/apigh/2023-04-20/node_comments @@ -0,0 +1,118 @@ +{ + "id": 2410546, + "node_id": "MDEwOlJlcG9zaXRvcnkyNDEwNTQ2", + "name": "node-comments", + "full_name": "pvorb/node-comments", + "private": false, + "owner": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/pvorb/node-comments", + "description": "providing commenting functionality with the help of mongodb and node.js", + "fork": false, + "url": "https://api.github.com/repos/pvorb/node-comments", + "forks_url": "https://api.github.com/repos/pvorb/node-comments/forks", + "keys_url": "https://api.github.com/repos/pvorb/node-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pvorb/node-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pvorb/node-comments/teams", + "hooks_url": "https://api.github.com/repos/pvorb/node-comments/hooks", + "issue_events_url": "https://api.github.com/repos/pvorb/node-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/pvorb/node-comments/events", + "assignees_url": "https://api.github.com/repos/pvorb/node-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/pvorb/node-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/pvorb/node-comments/tags", + "blobs_url": "https://api.github.com/repos/pvorb/node-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pvorb/node-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pvorb/node-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pvorb/node-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pvorb/node-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pvorb/node-comments/languages", + "stargazers_url": "https://api.github.com/repos/pvorb/node-comments/stargazers", + "contributors_url": "https://api.github.com/repos/pvorb/node-comments/contributors", + "subscribers_url": "https://api.github.com/repos/pvorb/node-comments/subscribers", + "subscription_url": "https://api.github.com/repos/pvorb/node-comments/subscription", + "commits_url": "https://api.github.com/repos/pvorb/node-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pvorb/node-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pvorb/node-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pvorb/node-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pvorb/node-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/pvorb/node-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pvorb/node-comments/merges", + "archive_url": "https://api.github.com/repos/pvorb/node-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pvorb/node-comments/downloads", + "issues_url": "https://api.github.com/repos/pvorb/node-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/pvorb/node-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pvorb/node-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pvorb/node-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pvorb/node-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/pvorb/node-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/pvorb/node-comments/deployments", + "created_at": "2011-09-18T17:35:12Z", + "updated_at": "2023-01-07T03:40:48Z", + "pushed_at": "2012-08-08T01:03:43Z", + "git_url": "git://github.com/pvorb/node-comments.git", + "ssh_url": "git@github.com:pvorb/node-comments.git", + "clone_url": "https://github.com/pvorb/node-comments.git", + "svn_url": "https://github.com/pvorb/node-comments", + "homepage": "https://npmjs.org/package/Comments", + "size": 337, + "stargazers_count": 16, + "watchers_count": 16, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 1, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 1, + "open_issues": 0, + "watchers": 16, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 1, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-20/node_comments.commit b/apigh/2023-04-20/node_comments.commit new file mode 100644 index 00000000..2d057c20 --- /dev/null +++ b/apigh/2023-04-20/node_comments.commit @@ -0,0 +1,98 @@ +{ + "sha": "341976b10140ea558a8666fd1e28e68f4fb11916", + "node_id": "MDY6Q29tbWl0MjQxMDU0NjozNDE5NzZiMTAxNDBlYTU1OGE4NjY2ZmQxZTI4ZTY4ZjRmYjExOTE2", + "commit": { + "author": { + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "date": "2012-08-08T01:03:43Z" + }, + "committer": { + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "date": "2012-08-08T01:03:43Z" + }, + "message": "Add link to MongoDB", + "tree": { + "sha": "aa2c9fbe5e8200d54d49b5c28981c93f4b426b3b", + "url": "https://api.github.com/repos/pvorb/node-comments/git/trees/aa2c9fbe5e8200d54d49b5c28981c93f4b426b3b" + }, + "url": "https://api.github.com/repos/pvorb/node-comments/git/commits/341976b10140ea558a8666fd1e28e68f4fb11916", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/pvorb/node-comments/commits/341976b10140ea558a8666fd1e28e68f4fb11916", + "html_url": "https://github.com/pvorb/node-comments/commit/341976b10140ea558a8666fd1e28e68f4fb11916", + "comments_url": "https://api.github.com/repos/pvorb/node-comments/commits/341976b10140ea558a8666fd1e28e68f4fb11916/comments", + "author": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "bfd5d89d7ea3b4d3c8de187f4a3b13a37832eb76", + "url": "https://api.github.com/repos/pvorb/node-comments/commits/bfd5d89d7ea3b4d3c8de187f4a3b13a37832eb76", + "html_url": "https://github.com/pvorb/node-comments/commit/bfd5d89d7ea3b4d3c8de187f4a3b13a37832eb76" + } + ], + "stats": { + "total": 7, + "additions": 4, + "deletions": 3 + }, + "files": [ + { + "sha": "b57de3a752fa0553e41cdc9955b8a382f3e85fb9", + "filename": "README.md", + "status": "modified", + "additions": 4, + "deletions": 3, + "changes": 7, + "blob_url": "https://github.com/pvorb/node-comments/blob/341976b10140ea558a8666fd1e28e68f4fb11916/README.md", + "raw_url": "https://github.com/pvorb/node-comments/raw/341976b10140ea558a8666fd1e28e68f4fb11916/README.md", + "contents_url": "https://api.github.com/repos/pvorb/node-comments/contents/README.md?ref=341976b10140ea558a8666fd1e28e68f4fb11916", + "patch": "@@ -165,15 +165,16 @@ HTTP status code to the given `ServerResponse` object.\n \n ## Installation\n \n-You need a running MongoDB before you can use **Comments**. On Debian\n+You need a running [MongoDB](http://www.mongodb.org/downloads) before you can\n+use **Comments**. On Debian\n \n-```bash\n+``` bash\n apt-get install mongodb\n ```\n \n Then install **Comments** with npm.\n \n-```bash\n+``` bash\n npm install -g Comments\n ```\n " + } + ] +} diff --git a/apigh/2023-04-20/platon b/apigh/2023-04-20/platon new file mode 100644 index 00000000..c9cbdb81 --- /dev/null +++ b/apigh/2023-04-20/platon @@ -0,0 +1,122 @@ +{ + "id": 38786195, + "node_id": "MDEwOlJlcG9zaXRvcnkzODc4NjE5NQ==", + "name": "platon", + "full_name": "pvorb/platon", + "private": false, + "owner": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/pvorb/platon", + "description": "Provides comments for your website(s)", + "fork": false, + "url": "https://api.github.com/repos/pvorb/platon", + "forks_url": "https://api.github.com/repos/pvorb/platon/forks", + "keys_url": "https://api.github.com/repos/pvorb/platon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pvorb/platon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pvorb/platon/teams", + "hooks_url": "https://api.github.com/repos/pvorb/platon/hooks", + "issue_events_url": "https://api.github.com/repos/pvorb/platon/issues/events{/number}", + "events_url": "https://api.github.com/repos/pvorb/platon/events", + "assignees_url": "https://api.github.com/repos/pvorb/platon/assignees{/user}", + "branches_url": "https://api.github.com/repos/pvorb/platon/branches{/branch}", + "tags_url": "https://api.github.com/repos/pvorb/platon/tags", + "blobs_url": "https://api.github.com/repos/pvorb/platon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pvorb/platon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pvorb/platon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pvorb/platon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pvorb/platon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pvorb/platon/languages", + "stargazers_url": "https://api.github.com/repos/pvorb/platon/stargazers", + "contributors_url": "https://api.github.com/repos/pvorb/platon/contributors", + "subscribers_url": "https://api.github.com/repos/pvorb/platon/subscribers", + "subscription_url": "https://api.github.com/repos/pvorb/platon/subscription", + "commits_url": "https://api.github.com/repos/pvorb/platon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pvorb/platon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pvorb/platon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pvorb/platon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/{+path}", + "compare_url": "https://api.github.com/repos/pvorb/platon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pvorb/platon/merges", + "archive_url": "https://api.github.com/repos/pvorb/platon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pvorb/platon/downloads", + "issues_url": "https://api.github.com/repos/pvorb/platon/issues{/number}", + "pulls_url": "https://api.github.com/repos/pvorb/platon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pvorb/platon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pvorb/platon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pvorb/platon/labels{/name}", + "releases_url": "https://api.github.com/repos/pvorb/platon/releases{/id}", + "deployments_url": "https://api.github.com/repos/pvorb/platon/deployments", + "created_at": "2015-07-08T23:52:38Z", + "updated_at": "2018-06-26T23:19:02Z", + "pushed_at": "2018-07-10T20:41:36Z", + "git_url": "git://github.com/pvorb/platon.git", + "ssh_url": "git@github.com:pvorb/platon.git", + "clone_url": "https://github.com/pvorb/platon.git", + "svn_url": "https://github.com/pvorb/platon", + "homepage": "", + "size": 673, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 1, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting", + "h2-database", + "microservice", + "rest-api", + "spring-boot" + ], + "visibility": "public", + "forks": 1, + "open_issues": 3, + "watchers": 2, + "default_branch": "develop", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 1, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-20/platon.commit b/apigh/2023-04-20/platon.commit new file mode 100644 index 00000000..5cb7456c --- /dev/null +++ b/apigh/2023-04-20/platon.commit @@ -0,0 +1,559 @@ +{ + "sha": "d75b60f3e5fc292268724b82c533c008b9822467", + "node_id": "MDY6Q29tbWl0Mzg3ODYxOTU6ZDc1YjYwZjNlNWZjMjkyMjY4NzI0YjgyYzUzM2MwMDhiOTgyMjQ2Nw==", + "commit": { + "author": { + "name": "Paul Vorbach", + "email": "paul@vorba.ch", + "date": "2016-02-16T23:53:05Z" + }, + "committer": { + "name": "Paul Vorbach", + "email": "paul@vorba.ch", + "date": "2016-02-16T23:53:05Z" + }, + "message": "Merge branch 'release/0.1.0'", + "tree": { + "sha": "c496a57fbeb2df428905a2d6b40688d69d0b1a1c", + "url": "https://api.github.com/repos/pvorb/platon/git/trees/c496a57fbeb2df428905a2d6b40688d69d0b1a1c" + }, + "url": "https://api.github.com/repos/pvorb/platon/git/commits/d75b60f3e5fc292268724b82c533c008b9822467", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/pvorb/platon/commits/d75b60f3e5fc292268724b82c533c008b9822467", + "html_url": "https://github.com/pvorb/platon/commit/d75b60f3e5fc292268724b82c533c008b9822467", + "comments_url": "https://api.github.com/repos/pvorb/platon/commits/d75b60f3e5fc292268724b82c533c008b9822467/comments", + "author": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "pvorb", + "id": 183534, + "node_id": "MDQ6VXNlcjE4MzUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/183534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pvorb", + "html_url": "https://github.com/pvorb", + "followers_url": "https://api.github.com/users/pvorb/followers", + "following_url": "https://api.github.com/users/pvorb/following{/other_user}", + "gists_url": "https://api.github.com/users/pvorb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pvorb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pvorb/subscriptions", + "organizations_url": "https://api.github.com/users/pvorb/orgs", + "repos_url": "https://api.github.com/users/pvorb/repos", + "events_url": "https://api.github.com/users/pvorb/events{/privacy}", + "received_events_url": "https://api.github.com/users/pvorb/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "5c5470aec46c06f4d82366be38650dfe28380d5a", + "url": "https://api.github.com/repos/pvorb/platon/commits/5c5470aec46c06f4d82366be38650dfe28380d5a", + "html_url": "https://github.com/pvorb/platon/commit/5c5470aec46c06f4d82366be38650dfe28380d5a" + }, + { + "sha": "24ff64377224a2c5ee1b4f6431db54880463d276", + "url": "https://api.github.com/repos/pvorb/platon/commits/24ff64377224a2c5ee1b4f6431db54880463d276", + "html_url": "https://github.com/pvorb/platon/commit/24ff64377224a2c5ee1b4f6431db54880463d276" + } + ], + "stats": { + "total": 2395, + "additions": 2395, + "deletions": 0 + }, + "files": [ + { + "sha": "5b0c19ee6c5bbee3d53b58cc16c73bc3141bd96a", + "filename": ".gitignore", + "status": "added", + "additions": 6, + "deletions": 0, + "changes": 6, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/.gitignore", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/.gitignore", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/.gitignore?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,6 @@\n+/target/\n+/.idea/\n+/*.iml\n+/*.db\n+\n+/src/main/resources/bower_components/" + }, + { + "sha": "9d80c4a8c0389b8c9069bfb0170f6a8476b249d0", + "filename": ".gitlab-ci.yml", + "status": "added", + "additions": 22, + "deletions": 0, + "changes": 22, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/.gitlab-ci.yml", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/.gitlab-ci.yml", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/.gitlab-ci.yml?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,22 @@\n+image: maven:3-jdk-8\n+\n+before_script:\n+ - export MAVEN_OPTS=\"-Xms256m -Xmx512m -Dmaven.repo.local=.m2/repository\"\n+\n+cache:\n+ key: \"$CI_BUILD_NAME\"\n+ untracked: true\n+\n+stages:\n+ - build\n+ - test\n+\n+compile:\n+ stage: build\n+ script:\n+ - mvn -B compile\n+\n+tests:\n+ stage: test\n+ script:\n+ - mvn -B test" + }, + { + "sha": "69d34662b9225947a0bf4bccd10b795d6f90023e", + "filename": "LICENSE", + "status": "added", + "additions": 21, + "deletions": 0, + "changes": 21, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/LICENSE", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/LICENSE", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/LICENSE?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2016 Paul Vorbach\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE." + }, + { + "sha": "e3aa3c03eed72b25f36d84fdf33672757153ec15", + "filename": "README.md", + "status": "modified", + "additions": 30, + "deletions": 0, + "changes": 30, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/README.md", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/README.md", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/README.md?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -1 +1,31 @@\n # platon\n+\n+A comment server similar to disqus and isso\n+\n+\n+## Development\n+\n+### Build\n+\n+~~~\n+mvn clean package\n+~~~\n+\n+### Run\n+\n+~~~\n+mvn spring-boot:run\n+~~~\n+\n+By default, the server will start under [localhost:8080](http://localhost:8080/).\n+\n+### Test\n+\n+~~~\n+mvn clean test\n+~~~\n+\n+\n+## License\n+\n+The MIT License (MIT)" + }, + { + "sha": "33dd56ebca4ecbcf45b946fa7fcbb6d9ecf100a3", + "filename": "pom.xml", + "status": "added", + "additions": 186, + "deletions": 0, + "changes": 186, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/pom.xml", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/pom.xml", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/pom.xml?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,186 @@\n+\n+ 4.0.0\n+\n+ de.vorb\n+ platon\n+ 0.1.0\n+ jar\n+\n+ Platon\n+ https://gitlab.com/pvorb/platon\n+ A comment server\n+\n+ \n+ scm:git:git://gitlab.com/pvorb/platon.git\n+ scm:git:ssh://git@gitlab.com:pvorb/platon.git\n+ https://gitlab.com/pvorb/platon.git\n+ \n+\n+ \n+ \n+ MIT License\n+ http://www.opensource.org/licenses/mit-license.php\n+ repo\n+ \n+ \n+\n+ \n+ \n+ pvorb\n+ Paul Vorbach\n+ paul@vorba.ch\n+ \n+ \n+\n+ \n+ \n+ 1.8\n+ 1.8\n+\n+ \n+ 18.0\n+ 3.4\n+ 2.6.1\n+ 1.1\n+ 1.2\n+ 1.4.190\n+ 3.2.1\n+\n+ \n+ 4.12\n+ 0.28\n+ \n+\n+ \n+ org.springframework.boot\n+ spring-boot-starter-parent\n+ 1.3.2.RELEASE\n+ \n+\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-web\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-tomcat\n+ \n+ \n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-undertow\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-jersey\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-tomcat\n+ \n+ \n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-data-jpa\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-mail\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-freemarker\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-devtools\n+ \n+\n+ \n+ com.google.guava\n+ guava\n+ ${guava.version}\n+ \n+ \n+ org.apache.commons\n+ commons-lang3\n+ ${commons-lang.version}\n+ \n+\n+ \n+ com.fasterxml.jackson.datatype\n+ jackson-datatype-jsr310\n+ ${jackson-jsr310.version}\n+ \n+ \n+ com.googlecode.owasp-java-html-sanitizer\n+ owasp-java-html-sanitizer\n+ ${owasp-java-html.version}\n+ \n+ \n+ org.owasp.encoder\n+ encoder\n+ ${encoder.version}\n+ \n+ \n+ com.h2database\n+ h2\n+ ${h2.version}\n+ \n+ \n+ org.flywaydb\n+ flyway-core\n+ ${flyway.version}\n+ \n+\n+ \n+ junit\n+ junit\n+ ${junit.version}\n+ test\n+ \n+ \n+ com.google.truth\n+ truth\n+ ${truth.version}\n+ \n+ \n+ org.springframework.boot\n+ spring-boot-starter-test\n+ test\n+ \n+ \n+\n+ \n+ \n+ \n+ org.springframework.boot\n+ spring-boot-maven-plugin\n+ \n+ \n+ org.jacoco\n+ jacoco-maven-plugin\n+ 0.7.5.201505241946\n+ \n+ \n+ \n+ prepare-agent\n+ \n+ \n+ \n+ report\n+ test\n+ \n+ report\n+ \n+ \n+ \n+ \n+ \n+ \n+\n+" + }, + { + "sha": "8c3caec9bee9644780a355a5af3cce35b938bf3b", + "filename": "src/main/java/de/vorb/platon/PlatonApp.java", + "status": "added", + "additions": 82, + "deletions": 0, + "changes": 82, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2FPlatonApp.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2FPlatonApp.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2FPlatonApp.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,82 @@\n+package de.vorb.platon;\n+\n+import de.vorb.platon.security.HmacRequestVerifier;\n+import de.vorb.platon.security.SecretKeyProvider;\n+import de.vorb.platon.util.CurrentTimeProvider;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import org.owasp.html.HtmlPolicyBuilder;\n+import org.owasp.html.PolicyFactory;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import org.springframework.beans.factory.annotation.Value;\n+import org.springframework.boot.SpringApplication;\n+import org.springframework.boot.autoconfigure.SpringBootApplication;\n+import org.springframework.context.annotation.Bean;\n+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;\n+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;\n+\n+import javax.crypto.KeyGenerator;\n+import javax.crypto.SecretKey;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Base64;\n+\n+@SpringBootApplication\n+public class PlatonApp {\n+\n+ private static final Logger logger = LoggerFactory.getLogger(PlatonApp.class);\n+\n+ public static void main(String... args) {\n+ SpringApplication.run(PlatonApp.class, args);\n+ }\n+\n+ private final SecretKey secretKey;\n+\n+ public PlatonApp() throws NoSuchAlgorithmException {\n+ secretKey = KeyGenerator.getInstance(HmacRequestVerifier.HMAC_ALGORITHM.toString()).generateKey();\n+\n+ logger.info(\"Secret key: {}\", Base64.getEncoder().encodeToString(secretKey.getEncoded()));\n+ }\n+\n+ @Bean\n+ public WebMvcConfigurerAdapter staticResourceHandlerConfigurer() {\n+ return new WebMvcConfigurerAdapter() {\n+ @Override\n+ public void addResourceHandlers(ResourceHandlerRegistry registry) {\n+ registry.addResourceHandler(\"classpath:/static\");\n+ }\n+ };\n+ }\n+\n+ @Bean\n+ public SecretKeyProvider secretKeyProvider() {\n+ return () -> secretKey;\n+ }\n+\n+ @Bean\n+ public CurrentTimeProvider timeProvider() {\n+ return () -> Instant.now();\n+ }\n+\n+ private static final HtmlPolicyBuilder htmlContentPolicyBuilder = new HtmlPolicyBuilder()\n+ .allowUrlProtocols(\"http\", \"https\", \"mailto\")\n+ .allowAttributes(\"href\").onElements(\"a\")\n+ .allowAttributes(\"src\", \"width\", \"height\", \"alt\").onElements(\"img\")\n+ .allowAttributes(\"class\").onElements(\"div\", \"span\");\n+\n+ @Value(\"${platon.input.html_elements}\")\n+ private String htmlElements;\n+\n+ @Bean\n+ public InputSanitizer htmlInputSanitizer() {\n+ final String[] htmlElementList = htmlElements.split(\"\\\\s*,\\\\s*\");\n+\n+ htmlContentPolicyBuilder.allowElements(htmlElementList);\n+\n+ final PolicyFactory htmlContentPolicy = htmlContentPolicyBuilder.toFactory();\n+\n+ return htmlContentPolicy::sanitize;\n+ }\n+\n+}" + }, + { + "sha": "df4200edd9a9e249c2d8de46774098aa2ea97436", + "filename": "src/main/java/de/vorb/platon/model/Comment.java", + "status": "added", + "additions": 331, + "deletions": 0, + "changes": 331, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FComment.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FComment.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FComment.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,331 @@\n+package de.vorb.platon.model;\n+\n+\n+import de.vorb.platon.web.rest.json.ByteArraySerializer;\n+\n+import com.fasterxml.jackson.annotation.JsonIgnore;\n+import com.fasterxml.jackson.annotation.JsonValue;\n+import com.fasterxml.jackson.databind.annotation.JsonSerialize;\n+import com.google.common.base.MoreObjects;\n+import com.google.common.base.Preconditions;\n+import org.apache.commons.codec.digest.MessageDigestAlgorithms;\n+import org.apache.commons.lang3.StringUtils;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import org.springframework.data.annotation.CreatedDate;\n+import org.springframework.data.annotation.LastModifiedDate;\n+\n+import javax.persistence.Column;\n+import javax.persistence.Entity;\n+import javax.persistence.FetchType;\n+import javax.persistence.GeneratedValue;\n+import javax.persistence.GenerationType;\n+import javax.persistence.Id;\n+import javax.persistence.JoinColumn;\n+import javax.persistence.Lob;\n+import javax.persistence.ManyToOne;\n+import javax.persistence.OneToOne;\n+import javax.persistence.SequenceGenerator;\n+import javax.persistence.Table;\n+import java.nio.charset.StandardCharsets;\n+import java.security.MessageDigest;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Arrays;\n+import java.util.Objects;\n+\n+\n+@Entity\n+@Table(name = \"COMMENTS\")\n+public class Comment {\n+\n+ private static final Logger logger = LoggerFactory.getLogger(Comment.class);\n+\n+ private static final int LIMIT_AUTHOR = 128;\n+ private static final int LIMIT_URL = 256;\n+\n+ @Id\n+ @Column(name = \"ID\")\n+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = \"comment_id_seq_gen\")\n+ @SequenceGenerator(name = \"comment_id_seq_gen\", sequenceName = \"COMMENT_ID_SEQ\", allocationSize = 1)\n+ private Long id;\n+\n+ @ManyToOne(fetch = FetchType.LAZY)\n+ @JoinColumn(name = \"THREAD_ID\", nullable = false)\n+ @JsonIgnore\n+ private CommentThread thread;\n+\n+ @OneToOne(fetch = FetchType.EAGER)\n+ @JoinColumn(name = \"PARENT_ID\", nullable = true)\n+ @JsonIgnore\n+ private Comment parent;\n+\n+ @Column(name = \"CREATION_DATE\", nullable = false)\n+ @CreatedDate\n+ private Instant creationDate;\n+\n+ @Column(name = \"LAST_MODIFICATION_DATE\", nullable = false)\n+ @LastModifiedDate\n+ private Instant lastModificationDate;\n+\n+ @Column(name = \"STATUS\", nullable = false)\n+ private Status status = Status.PUBLIC;\n+\n+ @Column(name = \"TEXT\", nullable = false)\n+ @Lob\n+ private String text;\n+\n+ @Column(name = \"AUTHOR\", length = LIMIT_AUTHOR, nullable = true)\n+ private String author;\n+\n+ @Column(name = \"EMAIL_HASH\", columnDefinition = \"BINARY(16) NULL\")\n+ @JsonSerialize(using = ByteArraySerializer.class)\n+ private byte[] emailHash;\n+\n+ @Column(name = \"URL\", length = LIMIT_URL, nullable = true)\n+ private String url;\n+\n+ protected Comment() {}\n+\n+ public Long getId() {\n+ return id;\n+ }\n+\n+ public void setId(Long id) {\n+ this.id = id;\n+ }\n+\n+ public CommentThread getThread() {\n+ return thread;\n+ }\n+\n+ public void setThread(CommentThread thread) {\n+ this.thread = thread;\n+ }\n+\n+ public Comment getParent() {\n+ return parent;\n+ }\n+\n+ protected void setParent(Comment parent) {\n+ this.parent = parent;\n+ }\n+\n+ public Long getParentId() {\n+ return parent != null ? parent.getId() : null;\n+ }\n+\n+ protected void setParentId(Long parentId) {\n+ if (parentId != null) {\n+ parent = new Comment();\n+ parent.setId(parentId);\n+ } else if (parent != null) {\n+ parent = null;\n+ }\n+ }\n+\n+ public Instant getCreationDate() {\n+ return creationDate;\n+ }\n+\n+ public void setCreationDate(Instant creationDate) {\n+ this.creationDate = creationDate;\n+ }\n+\n+ public Instant getLastModificationDate() {\n+ return lastModificationDate;\n+ }\n+\n+ public void setLastModificationDate(Instant lastModificationDate) {\n+ this.lastModificationDate = lastModificationDate;\n+ }\n+\n+ public Status getStatus() {\n+ return status;\n+ }\n+\n+ protected void setStatus(Status status) {\n+ Preconditions.checkNotNull(status);\n+ this.status = status;\n+ }\n+\n+ public String getText() {\n+ return text;\n+ }\n+\n+ public void setText(String text) {\n+ Preconditions.checkNotNull(text);\n+ this.text = text;\n+ }\n+\n+ public String getAuthor() {\n+ return author;\n+ }\n+\n+ public void setAuthor(String author) {\n+ this.author = StringUtils.left(author, LIMIT_AUTHOR);\n+ }\n+\n+ public byte[] getEmailHash() {\n+ return emailHash;\n+ }\n+\n+ protected void setEmailHash(byte[] emailHash) {\n+ Preconditions.checkArgument(emailHash == null || emailHash.length == 16, \"emailHash has invalid length\");\n+ this.emailHash = emailHash;\n+ }\n+\n+ protected void setEmail(String email) {\n+ if (email == null) {\n+ this.emailHash = null;\n+ return;\n+ }\n+\n+ final byte[] stringBytes = email.getBytes(StandardCharsets.UTF_8);\n+ try {\n+ emailHash = MessageDigest.getInstance(MessageDigestAlgorithms.MD5).digest(stringBytes);\n+ } catch (NoSuchAlgorithmException e) {\n+ logger.error(\"No implementation of MessageDigest algorithm MD5 available on this platform\");\n+ }\n+ }\n+\n+ public String getUrl() {\n+ return url;\n+ }\n+\n+ public void setUrl(String url) {\n+ this.url = StringUtils.left(url, LIMIT_URL);\n+ }\n+\n+ @Override\n+ public boolean equals(Object o) {\n+ if (this == o) return true;\n+ if (o == null || getClass() != o.getClass()) return false;\n+ Comment comment = (Comment) o;\n+ return Objects.equals(id, comment.id) &&\n+ Objects.equals(thread, comment.thread) &&\n+ Objects.equals(parent, comment.parent) &&\n+ Objects.equals(status, comment.status) &&\n+ Objects.equals(text, comment.text) &&\n+ Objects.equals(author, comment.author) &&\n+ Arrays.equals(emailHash, comment.emailHash) &&\n+ Objects.equals(url, comment.url);\n+ }\n+\n+ @Override\n+ public int hashCode() {\n+ return Objects.hash(id, thread, parent, text, author, url) * 31 + Arrays.hashCode(emailHash);\n+ }\n+\n+ @Override\n+ public String toString() {\n+ return MoreObjects.toStringHelper(this)\n+ .omitNullValues()\n+ .add(\"id\", id)\n+ .add(\"thread\", thread)\n+ .add(\"text\", text != null && text.length() > 1024\n+ ? StringUtils.left(text, 1021) + \"...\"\n+ : text)\n+ .add(\"author\", author)\n+ .toString();\n+ }\n+\n+ public enum Status {\n+ DELETED(0),\n+ PUBLIC(1),\n+ AWAITING_MODERATION(2);\n+\n+ private final int value;\n+\n+ Status(int intValue) {\n+ value = (byte) intValue;\n+ }\n+\n+ @JsonValue\n+ public int getValue() {\n+ return value;\n+ }\n+\n+ public static Status fromValue(int value) {\n+ for (Status status : Status.values()) {\n+ if (status.value == value) {\n+ return status;\n+ }\n+ }\n+\n+ throw new IllegalArgumentException(\"Unknown status\");\n+ }\n+ }\n+\n+ public static Builder builder() {\n+ return new Builder();\n+ }\n+\n+ public static class Builder {\n+\n+ private final Comment comment = new Comment();\n+\n+ private Builder() {}\n+\n+ public Builder id(Long id) {\n+ comment.setId(id);\n+ return this;\n+ }\n+\n+ public Builder thread(CommentThread thread) {\n+ comment.setThread(thread);\n+ return this;\n+ }\n+\n+ public Builder parent(Comment parentComment) {\n+ comment.setParent(parentComment);\n+ return this;\n+ }\n+\n+ public Builder parentId(Long parentId) {\n+ comment.setParentId(parentId);\n+ return this;\n+ }\n+\n+ public Builder creationDate(Instant creationDate) {\n+ comment.setCreationDate(creationDate);\n+ return this;\n+ }\n+\n+ public Builder modificationDate(Instant modificationDate) {\n+ comment.setLastModificationDate(modificationDate);\n+ return this;\n+ }\n+\n+ public Builder text(String text) {\n+ comment.setText(text);\n+ return this;\n+ }\n+\n+ public Builder author(String author) {\n+ comment.setAuthor(author);\n+ return this;\n+ }\n+\n+ public Builder emailHash(byte[] emailHash) {\n+ comment.setEmailHash(emailHash);\n+ return this;\n+ }\n+\n+ public Builder email(String email) {\n+ comment.setEmail(email);\n+ return this;\n+ }\n+\n+ public Builder url(String url) {\n+ comment.setUrl(url);\n+ return this;\n+ }\n+\n+ public Comment build() {\n+ return comment;\n+ }\n+\n+ }\n+\n+}" + }, + { + "sha": "8824c6101f3f0480dde34537c47cc5593499b9bf", + "filename": "src/main/java/de/vorb/platon/model/CommentThread.java", + "status": "added", + "additions": 139, + "deletions": 0, + "changes": 139, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThread.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThread.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThread.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,139 @@\n+package de.vorb.platon.model;\n+\n+import com.google.common.base.MoreObjects;\n+import com.google.common.collect.Lists;\n+import org.apache.commons.lang3.StringUtils;\n+\n+import javax.persistence.Column;\n+import javax.persistence.Entity;\n+import javax.persistence.FetchType;\n+import javax.persistence.GeneratedValue;\n+import javax.persistence.GenerationType;\n+import javax.persistence.Id;\n+import javax.persistence.NamedAttributeNode;\n+import javax.persistence.NamedEntityGraph;\n+import javax.persistence.OneToMany;\n+import javax.persistence.SequenceGenerator;\n+import javax.persistence.Table;\n+import java.util.List;\n+import java.util.Objects;\n+\n+@Entity\n+@Table(name = \"THREADS\")\n+@NamedEntityGraph(name = \"CommentThread.detail\", attributeNodes = @NamedAttributeNode(\"comments\"))\n+public class CommentThread {\n+\n+ private static final int LIMIT_URL = 256;\n+ private static final int LIMIT_TITLE = 512;\n+\n+ @Id\n+ @Column(name = \"ID\")\n+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = \"thread_id_seq_gen\")\n+ @SequenceGenerator(name = \"thread_id_seq_gen\", sequenceName = \"THREAD_ID_SEQ\", allocationSize = 1)\n+ private Long id;\n+\n+ @Column(name = \"URL\", length = LIMIT_URL, nullable = false)\n+ private String url;\n+\n+ @Column(name = \"TITLE\", length = LIMIT_TITLE, nullable = true)\n+ private String title;\n+\n+ @OneToMany(mappedBy = \"thread\", fetch = FetchType.LAZY)\n+ private List comments;\n+\n+\n+ protected CommentThread() {}\n+\n+\n+ public Long getId() {\n+ return id;\n+ }\n+\n+ protected void setId(Long id) {\n+ this.id = id;\n+ }\n+\n+ public String getUrl() {\n+ return url;\n+ }\n+\n+ protected void setUrl(String url) {\n+ this.url = StringUtils.left(url, LIMIT_URL);\n+ }\n+\n+ public String getTitle() {\n+ return title;\n+ }\n+\n+ protected void setTitle(String title) {\n+ this.title = StringUtils.left(title, LIMIT_TITLE);\n+ }\n+\n+ public List getComments() {\n+ return this.comments;\n+ }\n+\n+ @Override\n+ public boolean equals(Object o) {\n+ if (this == o) return true;\n+ if (o == null || getClass() != o.getClass()) return false;\n+ CommentThread that = (CommentThread) o;\n+ return Objects.equals(id, that.id) &&\n+ Objects.equals(url, that.url) &&\n+ Objects.equals(title, that.title);\n+ }\n+\n+ public boolean equalsById(CommentThread commentThread) {\n+ if (this == commentThread) return true;\n+ if (commentThread == null || commentThread.id == null || id == null) return false;\n+ return Objects.equals(id, commentThread.id);\n+ }\n+\n+ @Override\n+ public int hashCode() {\n+ return Objects.hash(id, url, title);\n+ }\n+\n+ @Override\n+ public String toString() {\n+ return MoreObjects.toStringHelper(this)\n+ .omitNullValues()\n+ .add(\"id\", id)\n+ .add(\"url\", url)\n+ .toString();\n+ }\n+\n+ public static Builder builder() {\n+ return new Builder();\n+ }\n+\n+ public static class Builder {\n+\n+ private final CommentThread commentThread = new CommentThread();\n+\n+ private Builder() {\n+ commentThread.comments = Lists.newArrayList();\n+ }\n+\n+ public Builder id(Long id) {\n+ commentThread.setId(id);\n+ return this;\n+ }\n+\n+ public Builder url(String url) {\n+ commentThread.setUrl(url);\n+ return this;\n+ }\n+\n+ public Builder title(String title) {\n+ commentThread.setTitle(title);\n+ return this;\n+ }\n+\n+ public CommentThread build() {\n+ return commentThread;\n+ }\n+\n+ }\n+\n+}" + }, + { + "sha": "70df57af486e921ab5de83f33c12fdbd1ad5989d", + "filename": "src/main/java/de/vorb/platon/persistence/CommentRepository.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentRepository.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentRepository.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentRepository.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+\n+import org.springframework.data.jpa.repository.Modifying;\n+import org.springframework.data.jpa.repository.Query;\n+import org.springframework.data.repository.PagingAndSortingRepository;\n+import org.springframework.data.repository.query.Param;\n+import org.springframework.stereotype.Repository;\n+\n+import java.util.List;\n+\n+@Repository\n+public interface CommentRepository extends PagingAndSortingRepository {\n+\n+ @Query(\"select c from Comment c where c.thread = :thread and c.status > 0 order by c.creationDate asc\")\n+ List findByThread(@Param(\"thread\") CommentThread thread);\n+\n+ @Modifying\n+ @Query(\"update Comment c set c.status = :status where c.id = :commentId\")\n+ void setStatus(@Param(\"commentId\") Long commentId, @Param(\"status\") Comment.Status status);\n+\n+}" + }, + { + "sha": "85a95e74d4e5336835a30d50762d1a667f9d760f", + "filename": "src/main/java/de/vorb/platon/persistence/CommentStatusConverter.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverter.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverter.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverter.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.Comment;\n+\n+import org.springframework.stereotype.Component;\n+\n+import javax.persistence.AttributeConverter;\n+import javax.persistence.Converter;\n+\n+@Component\n+@Converter(autoApply = true)\n+public class CommentStatusConverter implements AttributeConverter {\n+\n+ @Override\n+ public Integer convertToDatabaseColumn(Comment.Status attribute) {\n+ return attribute.getValue();\n+ }\n+\n+ @Override\n+ public Comment.Status convertToEntityAttribute(Integer dbData) {\n+ return Comment.Status.fromValue(dbData);\n+ }\n+\n+}" + }, + { + "sha": "0885b3b5539583c2053af75ca914b07a36c0b89a", + "filename": "src/main/java/de/vorb/platon/persistence/CommentThreadRepository.java", + "status": "added", + "additions": 17, + "deletions": 0, + "changes": 17, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentThreadRepository.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentThreadRepository.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentThreadRepository.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,17 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.CommentThread;\n+\n+import org.springframework.data.jpa.repository.EntityGraph;\n+import org.springframework.data.repository.PagingAndSortingRepository;\n+import org.springframework.stereotype.Repository;\n+import org.springframework.transaction.annotation.Transactional;\n+\n+@Repository\n+public interface CommentThreadRepository extends PagingAndSortingRepository {\n+\n+ @Transactional(readOnly = true)\n+ @EntityGraph(value = \"CommentThread.detail\", type = EntityGraph.EntityGraphType.LOAD)\n+ CommentThread getByUrl(String url);\n+\n+}" + }, + { + "sha": "9f4a6cf016fd552e60b4971d9f6ea87c7dfde7d8", + "filename": "src/main/java/de/vorb/platon/persistence/Jsr310InstantTimestampConverter.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverter.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverter.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverter.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.persistence;\n+\n+import org.springframework.stereotype.Component;\n+\n+import javax.persistence.AttributeConverter;\n+import javax.persistence.Converter;\n+import java.sql.Timestamp;\n+import java.time.Instant;\n+\n+@Component\n+@Converter(autoApply = true)\n+public class Jsr310InstantTimestampConverter implements AttributeConverter {\n+\n+ @Override\n+ public Timestamp convertToDatabaseColumn(Instant attribute) {\n+ return attribute == null ? null : Timestamp.from(attribute);\n+ }\n+\n+ @Override\n+ public Instant convertToEntityAttribute(Timestamp dbData) {\n+ return dbData == null ? null : dbData.toInstant();\n+ }\n+\n+}" + }, + { + "sha": "821215c29e0dade97d256f7f8691290130407d6c", + "filename": "src/main/java/de/vorb/platon/security/HmacRequestVerifier.java", + "status": "added", + "additions": 66, + "deletions": 0, + "changes": 66, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifier.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifier.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifier.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,66 @@\n+package de.vorb.platon.security;\n+\n+import de.vorb.platon.util.CurrentTimeProvider;\n+\n+import org.apache.commons.codec.digest.HmacAlgorithms;\n+import org.springframework.stereotype.Service;\n+\n+import javax.crypto.Mac;\n+import javax.crypto.SecretKey;\n+import javax.inject.Inject;\n+import java.nio.charset.StandardCharsets;\n+import java.security.InvalidKeyException;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Arrays;\n+\n+@Service\n+public class HmacRequestVerifier implements RequestVerifier {\n+\n+ public static final HmacAlgorithms HMAC_ALGORITHM = HmacAlgorithms.HMAC_SHA_256;\n+\n+ private final CurrentTimeProvider currentTimeProvider;\n+\n+ private final Mac mac;\n+\n+ @Inject\n+ public HmacRequestVerifier(SecretKeyProvider keyProvider, CurrentTimeProvider currentTimeProvider) {\n+\n+ this.currentTimeProvider = currentTimeProvider;\n+\n+ final SecretKey key = keyProvider.getSecretKey();\n+\n+ try {\n+ mac = Mac.getInstance(HMAC_ALGORITHM.toString());\n+ mac.init(key);\n+ } catch (NoSuchAlgorithmException e) {\n+ throw new SecurityException(\n+ String.format(\"Could not find an implementation of the %s algorithm\", HMAC_ALGORITHM), e);\n+ } catch (InvalidKeyException e) {\n+ throw new SecurityException(\"The supplied key provider returned an invalid key\", e);\n+ }\n+ }\n+\n+ @Override\n+ public byte[] getSignatureToken(String identifier, Instant expirationDate) {\n+ final byte[] signatureSource = getSignatureSource(identifier, expirationDate);\n+\n+ return mac.doFinal(signatureSource);\n+ }\n+\n+ private byte[] getSignatureSource(String identifier, Instant expirationDate) {\n+ return String.format(\"%s|%s\", identifier, expirationDate).getBytes(StandardCharsets.UTF_8);\n+ }\n+\n+ @Override\n+ public boolean isRequestValid(String identifier, Instant expirationDate, byte[] signatureToken) {\n+ if (currentTimeProvider.get().isAfter(expirationDate)) {\n+ return false;\n+ }\n+\n+ final byte[] referenceSignature = getSignatureToken(identifier, expirationDate);\n+\n+ return Arrays.equals(signatureToken, referenceSignature);\n+ }\n+\n+}" + }, + { + "sha": "b1bd44c1ed04a205e992cdcbdccd3f3b9ed92016", + "filename": "src/main/java/de/vorb/platon/security/RequestVerifier.java", + "status": "added", + "additions": 11, + "deletions": 0, + "changes": 11, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FRequestVerifier.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FRequestVerifier.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FRequestVerifier.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,11 @@\n+package de.vorb.platon.security;\n+\n+import java.time.Instant;\n+\n+public interface RequestVerifier {\n+\n+ byte[] getSignatureToken(String identifier, Instant expirationDate);\n+\n+ boolean isRequestValid(String identifier, Instant expirationDate, byte[] signatureToken);\n+\n+}" + }, + { + "sha": "9cc6eff787633b51b15fd654c4c38a1c9958a007", + "filename": "src/main/java/de/vorb/platon/security/SecretKeyProvider.java", + "status": "added", + "additions": 9, + "deletions": 0, + "changes": 9, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecretKeyProvider.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecretKeyProvider.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecretKeyProvider.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,9 @@\n+package de.vorb.platon.security;\n+\n+import javax.crypto.SecretKey;\n+\n+public interface SecretKeyProvider {\n+\n+ SecretKey getSecretKey();\n+\n+}" + }, + { + "sha": "3a4e9f16a5fc859a49503fc18d417c2a7729092d", + "filename": "src/main/java/de/vorb/platon/security/SecurityException.java", + "status": "added", + "additions": 9, + "deletions": 0, + "changes": 9, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecurityException.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecurityException.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FSecurityException.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,9 @@\n+package de.vorb.platon.security;\n+\n+public class SecurityException extends RuntimeException {\n+\n+ public SecurityException(String message, Throwable cause) {\n+ super(message, cause);\n+ }\n+\n+}" + }, + { + "sha": "ec276d4a511f915ef877e198a25bc560f70d3f82", + "filename": "src/main/java/de/vorb/platon/util/CurrentTimeProvider.java", + "status": "added", + "additions": 7, + "deletions": 0, + "changes": 7, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FCurrentTimeProvider.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FCurrentTimeProvider.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FCurrentTimeProvider.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,7 @@\n+package de.vorb.platon.util;\n+\n+import java.time.Instant;\n+import java.util.function.Supplier;\n+\n+@FunctionalInterface\n+public interface CurrentTimeProvider extends Supplier {}" + }, + { + "sha": "c8a71e3095947514f0bc6c946cf242dbaa763566", + "filename": "src/main/java/de/vorb/platon/util/InputSanitizer.java", + "status": "added", + "additions": 8, + "deletions": 0, + "changes": 8, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FInputSanitizer.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FInputSanitizer.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Futil%2FInputSanitizer.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,8 @@\n+package de.vorb.platon.util;\n+\n+@FunctionalInterface\n+public interface InputSanitizer {\n+\n+ String sanitize(String input);\n+\n+}" + }, + { + "sha": "f03ec87b4c69f52971696a5e97f4fd595758cccd", + "filename": "src/main/java/de/vorb/platon/web/mvc/IndexController.java", + "status": "added", + "additions": 15, + "deletions": 0, + "changes": 15, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Fmvc%2FIndexController.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Fmvc%2FIndexController.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Fmvc%2FIndexController.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,15 @@\n+package de.vorb.platon.web.mvc;\n+\n+import org.springframework.stereotype.Controller;\n+import org.springframework.web.bind.annotation.RequestMapping;\n+import org.springframework.web.bind.annotation.RequestMethod;\n+\n+@Controller\n+public class IndexController {\n+\n+ @RequestMapping(value = \"/\", method = RequestMethod.GET)\n+ public String getIndex() {\n+ return \"index\";\n+ }\n+\n+}" + }, + { + "sha": "b852700d3829202659f6bc378918ed6a89bf0d52", + "filename": "src/main/java/de/vorb/platon/web/rest/CommentResource.java", + "status": "added", + "additions": 271, + "deletions": 0, + "changes": 271, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResource.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResource.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResource.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,271 @@\n+package de.vorb.platon.web.rest;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+import de.vorb.platon.persistence.CommentRepository;\n+import de.vorb.platon.persistence.CommentThreadRepository;\n+import de.vorb.platon.security.RequestVerifier;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import com.google.common.base.Preconditions;\n+import org.owasp.encoder.Encode;\n+import org.owasp.html.HtmlPolicyBuilder;\n+import org.owasp.html.PolicyFactory;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import org.springframework.stereotype.Component;\n+import org.springframework.transaction.annotation.Transactional;\n+\n+import javax.inject.Inject;\n+import javax.validation.constraints.NotNull;\n+import javax.ws.rs.BadRequestException;\n+import javax.ws.rs.Consumes;\n+import javax.ws.rs.DELETE;\n+import javax.ws.rs.GET;\n+import javax.ws.rs.HeaderParam;\n+import javax.ws.rs.NotFoundException;\n+import javax.ws.rs.POST;\n+import javax.ws.rs.PUT;\n+import javax.ws.rs.Path;\n+import javax.ws.rs.PathParam;\n+import javax.ws.rs.Produces;\n+import javax.ws.rs.QueryParam;\n+import javax.ws.rs.core.MediaType;\n+import javax.ws.rs.core.Response;\n+import javax.ws.rs.core.UriBuilder;\n+import java.net.URI;\n+import java.nio.charset.StandardCharsets;\n+import java.time.Instant;\n+import java.time.format.DateTimeParseException;\n+import java.time.temporal.ChronoUnit;\n+import java.util.Base64;\n+import java.util.List;\n+\n+@Component\n+@Path(\"comments\")\n+@Consumes(MediaType.APPLICATION_JSON)\n+@Produces(MediaType.APPLICATION_JSON)\n+public class CommentResource {\n+\n+ private static final Logger logger = LoggerFactory.getLogger(CommentResource.class);\n+\n+ private static final String SIGNATURE_HEADER = \"X-Signature\";\n+\n+ private static final PolicyFactory NO_HTML_POLICY = new HtmlPolicyBuilder().toFactory();\n+\n+\n+ private final CommentThreadRepository threadRepository;\n+ private final CommentRepository commentRepository;\n+\n+ private final RequestVerifier requestVerifier;\n+ private final InputSanitizer inputSanitizer;\n+\n+\n+ @Inject\n+ public CommentResource(CommentThreadRepository threadRepository, CommentRepository commentRepository,\n+ RequestVerifier requestVerifier, InputSanitizer inputSanitizer) {\n+\n+ this.threadRepository = threadRepository;\n+ this.commentRepository = commentRepository;\n+\n+ this.requestVerifier = requestVerifier;\n+ this.inputSanitizer = inputSanitizer;\n+ }\n+\n+\n+ @GET\n+ @Path(\"{id}\")\n+ @Transactional(readOnly = true)\n+ public Comment getComment(\n+ @NotNull @PathParam(\"id\") Long commentId) {\n+\n+ final Comment comment = commentRepository.findOne(commentId);\n+\n+ if (comment == null || comment.getStatus() != Comment.Status.PUBLIC) {\n+ throw new NotFoundException(String.format(\"No comment found with id = %d\", commentId));\n+ } else {\n+ return comment;\n+ }\n+ }\n+\n+\n+ @GET\n+ @Transactional(readOnly = true)\n+ public List findCommentsByThreadUrl(\n+ @NotNull @QueryParam(\"threadUrl\") String threadUrl) {\n+\n+ final CommentThread thread = threadRepository.getByUrl(threadUrl);\n+ if (thread == null) {\n+ throw new NotFoundException(String.format(\"No thread found with url = '%s'\", threadUrl));\n+ } else {\n+ return commentRepository.findByThread(thread);\n+ }\n+ }\n+\n+\n+ @POST\n+ @Transactional\n+ public Response postComment(\n+ @NotNull @QueryParam(\"threadUrl\") String threadUrl,\n+ @NotNull @QueryParam(\"title\") String title,\n+ @NotNull Comment comment) {\n+\n+ if (comment.getId() != null) {\n+ throw new BadRequestException(\"Comment id is not null\");\n+ }\n+\n+ CommentThread thread = threadRepository.getByUrl(threadUrl);\n+ if (thread == null) {\n+\n+ thread =\n+ CommentThread.builder()\n+ .url(threadUrl)\n+ .title(title)\n+ .build();\n+\n+ threadRepository.save(thread);\n+\n+ logger.info(\"Created new {}\", thread);\n+ }\n+\n+ comment.setThread(thread);\n+ comment.setCreationDate(Instant.now());\n+ comment.setLastModificationDate(comment.getCreationDate());\n+\n+ assertParentBelongsToSameThread(comment);\n+\n+ sanitizeComment(comment);\n+\n+ commentRepository.save(comment);\n+\n+ logger.info(\"Posted new comment to {}\", thread);\n+\n+ final URI commentUri = getUriFromId(comment.getId());\n+\n+ final String identifier = commentUri.toString();\n+ final Instant expirationDate = comment.getCreationDate().plus(2, ChronoUnit.HOURS);\n+ final byte[] signature = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ return Response.created(commentUri)\n+ .header(SIGNATURE_HEADER, String.format(\"%s|%s|%s\", identifier, expirationDate,\n+ Base64.getEncoder().encodeToString(signature)))\n+ .entity(comment)\n+ .build();\n+ }\n+\n+ @Transactional(readOnly = true)\n+ protected void assertParentBelongsToSameThread(Comment comment) {\n+\n+ final Long parentId = comment.getParentId();\n+ if (parentId == null) {\n+ return;\n+ }\n+\n+ final Comment parentComment = commentRepository.findOne(parentId);\n+\n+ if (parentComment == null) {\n+ throw new BadRequestException(\"Parent comment does not exist\");\n+ }\n+\n+ final boolean parentBelongsToSameThread = comment.getThread().equalsById(parentComment.getThread());\n+\n+ if (!parentBelongsToSameThread) {\n+ throw new BadRequestException(\"Parent comment does not belong to same thread\");\n+ }\n+\n+ }\n+\n+\n+ @PUT\n+ @Path(\"{id}\")\n+ @Transactional(noRollbackFor = BadRequestException.class)\n+ public void updateComment(\n+ @NotNull @HeaderParam(SIGNATURE_HEADER) String signature,\n+ @NotNull @PathParam(\"id\") Long commentId,\n+ @NotNull Comment comment) {\n+\n+ if (!commentId.equals(comment.getId())) {\n+ throw new BadRequestException(\n+ String.format(\"Comment ids do not match (%d != %d)\", comment.getId(), commentId));\n+ }\n+\n+ verifyValidRequest(signature, commentId);\n+\n+ if (commentRepository.exists(commentId)) {\n+\n+ sanitizeComment(comment);\n+\n+ commentRepository.save(comment);\n+\n+ } else {\n+ throw new BadRequestException(String.format(\"Comment with id = %d does not exist\", commentId));\n+ }\n+ }\n+\n+\n+ protected void sanitizeComment(Comment comment) {\n+ if (comment.getAuthor() != null) {\n+ comment.setAuthor(NO_HTML_POLICY.sanitize(comment.getAuthor()));\n+ }\n+\n+ if (comment.getUrl() != null) {\n+ comment.setUrl(Encode.forHtmlAttribute(comment.getUrl()));\n+ }\n+\n+ final String requestText = comment.getText();\n+ final String sanitizedText = inputSanitizer.sanitize(requestText);\n+ comment.setText(sanitizedText);\n+ }\n+\n+\n+ @DELETE\n+ @Path(\"{id}\")\n+ @Transactional\n+ public void deleteComment(\n+ @NotNull @HeaderParam(SIGNATURE_HEADER) String signature,\n+ @NotNull @PathParam(\"id\") Long commentId) {\n+\n+ verifyValidRequest(signature, commentId);\n+\n+ if (commentRepository.exists(commentId)) {\n+\n+ commentRepository.setStatus(commentId, Comment.Status.DELETED);\n+ logger.info(\"Deleted comment with id = {}\", commentId);\n+\n+ } else {\n+ throw new BadRequestException(String.format(\"Comment with id = %d does not exist\", commentId));\n+ }\n+\n+ }\n+\n+ private void verifyValidRequest(String signature, Long commentId) {\n+\n+ final String[] signatureComponents = signature.split(\"\\\\|\");\n+\n+ try {\n+\n+ Preconditions.checkArgument(signatureComponents.length == 3);\n+\n+ final String identifier = signatureComponents[0];\n+ final String referenceIdentifier = getUriFromId(commentId).toString();\n+\n+ Preconditions.checkArgument(identifier.equals(referenceIdentifier));\n+\n+ final Instant expirationDate = Instant.parse(signatureComponents[1]);\n+ final byte[] signatureToken =\n+ Base64.getDecoder().decode(signatureComponents[2].getBytes(StandardCharsets.UTF_8));\n+\n+ if (!requestVerifier.isRequestValid(identifier, expirationDate, signatureToken)) {\n+ throw new BadRequestException(\"Authentication signature is invalid or has expired\");\n+ }\n+\n+ } catch (IllegalArgumentException | DateTimeParseException e) {\n+ throw new BadRequestException(\"Illegal authentication signature provided\");\n+ }\n+ }\n+\n+ private URI getUriFromId(long commentId) {\n+ return UriBuilder.fromResource(getClass()).segment(\"{id}\").build(commentId);\n+ }\n+\n+}" + }, + { + "sha": "a46c356ebd3ad4e8809876c69fda2a87ae317c63", + "filename": "src/main/java/de/vorb/platon/web/rest/ObjectMapperContextResolver.java", + "status": "added", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolver.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolver.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolver.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,24 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.fasterxml.jackson.databind.ObjectMapper;\n+import com.fasterxml.jackson.databind.SerializationFeature;\n+\n+import javax.ws.rs.ext.ContextResolver;\n+import javax.ws.rs.ext.Provider;\n+\n+@Provider\n+public class ObjectMapperContextResolver implements ContextResolver {\n+\n+ private final ObjectMapper objectMapper;\n+\n+ public ObjectMapperContextResolver() {\n+ objectMapper = new ObjectMapper();\n+ objectMapper.findAndRegisterModules();\n+ objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);\n+ }\n+\n+ @Override\n+ public ObjectMapper getContext(Class type) {\n+ return objectMapper;\n+ }\n+}" + }, + { + "sha": "0bcd81a437c0924b488138473de47eeba9ce2e10", + "filename": "src/main/java/de/vorb/platon/web/rest/PoweredByResponseFilter.java", + "status": "added", + "additions": 14, + "deletions": 0, + "changes": 14, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilter.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilter.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilter.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,14 @@\n+package de.vorb.platon.web.rest;\n+\n+import javax.ws.rs.container.ContainerRequestContext;\n+import javax.ws.rs.container.ContainerResponseContext;\n+import javax.ws.rs.container.ContainerResponseFilter;\n+import java.io.IOException;\n+\n+public class PoweredByResponseFilter implements ContainerResponseFilter {\n+ @Override\n+ public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)\n+ throws IOException {\n+ responseContext.getHeaders().add(\"X-Powered-By\", \"Platon\");\n+ }\n+}" + }, + { + "sha": "123000b64a4658faca797bbd19d4a63a778702ef", + "filename": "src/main/java/de/vorb/platon/web/rest/RestResourceConfig.java", + "status": "added", + "additions": 22, + "deletions": 0, + "changes": 22, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfig.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfig.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfig.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,22 @@\n+package de.vorb.platon.web.rest;\n+\n+import org.glassfish.jersey.filter.LoggingFilter;\n+import org.glassfish.jersey.server.ResourceConfig;\n+import org.glassfish.jersey.server.spring.scope.RequestContextFilter;\n+import org.springframework.stereotype.Component;\n+\n+import javax.ws.rs.ApplicationPath;\n+\n+@Component\n+@ApplicationPath(\"/api\")\n+public class RestResourceConfig extends ResourceConfig {\n+\n+ public RestResourceConfig() {\n+ register(RequestContextFilter.class);\n+ register(PoweredByResponseFilter.class);\n+ register(CommentResource.class);\n+ register(LoggingFilter.class);\n+ register(ObjectMapperContextResolver.class);\n+ }\n+\n+}" + }, + { + "sha": "8a77e910df71d2af424ece1d1620e74be7de12bf", + "filename": "src/main/java/de/vorb/platon/web/rest/json/ByteArraySerializer.java", + "status": "added", + "additions": 18, + "deletions": 0, + "changes": 18, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializer.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializer.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializer.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,18 @@\n+package de.vorb.platon.web.rest.json;\n+\n+import com.fasterxml.jackson.core.JsonGenerator;\n+import com.fasterxml.jackson.databind.JsonSerializer;\n+import com.fasterxml.jackson.databind.SerializerProvider;\n+\n+import java.io.IOException;\n+import java.math.BigInteger;\n+\n+public class ByteArraySerializer extends JsonSerializer {\n+\n+ @Override\n+ public void serialize(byte[] bytes, JsonGenerator gen, SerializerProvider serializers) throws IOException {\n+ final BigInteger bi = new BigInteger(1, bytes);\n+ gen.writeString(String.format(\"%0\" + (bytes.length << 1) + \"x\", bi));\n+ }\n+\n+}" + }, + { + "sha": "b723a9b9cbfd3843cb821766e7289ce75586fbbf", + "filename": "src/main/resources/config/application.properties", + "status": "added", + "additions": 12, + "deletions": 0, + "changes": 12, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fconfig%2Fapplication.properties", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fconfig%2Fapplication.properties", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fresources%2Fconfig%2Fapplication.properties?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,12 @@\n+# database\n+spring.datasource.url = jdbc:h2:file:./platon\n+spring.jpa.database = H2\n+spring.jpa.generate-ddl = false\n+spring.jpa.hibernate.ddl-auto = none\n+\n+# input sanitization\n+platon.input.html_elements = h1, h2, h3, h4, h5, h6,\\\n+ br, p, hr, div, span,\\\n+ a, img, em, strong,\\\n+ ol, ul, li\\\n+ blockquote, code, pre" + }, + { + "sha": "6fa0ecc6de3548e1e3eed2893bc56c3e8376bd5b", + "filename": "src/main/resources/db/migration/V0.1.0__initial_schema.sql", + "status": "added", + "additions": 35, + "deletions": 0, + "changes": 35, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fdb%2Fmigration%2FV0.1.0__initial_schema.sql", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Fdb%2Fmigration%2FV0.1.0__initial_schema.sql", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fresources%2Fdb%2Fmigration%2FV0.1.0__initial_schema.sql?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,35 @@\n+-- sequences\n+CREATE SEQUENCE thread_id_seq START WITH 1 INCREMENT BY 1 CACHE 1;\n+\n+CREATE SEQUENCE comment_id_seq START WITH 1 INCREMENT BY 1 CACHE 1;\n+\n+-- tables\n+CREATE TABLE threads (\n+ id BIGINT PRIMARY KEY,\n+ url VARCHAR(256) NOT NULL,\n+ title VARCHAR(512) NULL\n+);\n+\n+CREATE TABLE comments (\n+ id BIGINT PRIMARY KEY,\n+ thread_id BIGINT NOT NULL,\n+ parent_id BIGINT NULL,\n+ creation_date TIMESTAMP NOT NULL,\n+ last_modification_date TIMESTAMP NOT NULL,\n+ status TINYINT NOT NULL,\n+ text CLOB NOT NULL,\n+ author VARCHAR(128) NULL,\n+ email_hash BINARY(16) NULL,\n+ url VARCHAR(256) NULL,\n+ FOREIGN KEY (thread_id) REFERENCES threads (id),\n+ FOREIGN KEY (parent_id) REFERENCES comments (id)\n+);\n+\n+-- indexes\n+CREATE INDEX thread_id_idx ON threads (id);\n+CREATE INDEX thread_url_idx ON threads (url);\n+\n+CREATE INDEX comment_id_idx ON comments (id);\n+CREATE INDEX comment_thread_id_idx ON comments (thread_id);\n+CREATE INDEX comment_creation_date_idx ON comments (creation_date);\n+CREATE INDEX comment_status_idx ON comments (status);" + }, + { + "sha": "2d8d6bd7ce1e6f6f4af2ccc90a8efce3b09170e1", + "filename": "src/main/resources/templates/index.ftl", + "status": "added", + "additions": 13, + "deletions": 0, + "changes": 13, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Ftemplates%2Findex.ftl", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Fmain%2Fresources%2Ftemplates%2Findex.ftl", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Fmain%2Fresources%2Ftemplates%2Findex.ftl?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,13 @@\n+\n+\n+\n+ \n+ Platon comment server\n+<#include \"head.ftl\" />\n+\n+\n+

      The Platon comment server

      \n+\n+

      GitHub Repository

      \n+\n+" + }, + { + "sha": "c28860949abd0d26f3f5f1ac720beee7596409f3", + "filename": "src/test/java/de/vorb/platon/model/CommentTest.java", + "status": "added", + "additions": 86, + "deletions": 0, + "changes": 86, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,86 @@\n+package de.vorb.platon.model;\n+\n+import com.google.common.truth.Truth;\n+import org.apache.commons.codec.digest.MessageDigestAlgorithms;\n+import org.junit.Test;\n+\n+import java.nio.charset.StandardCharsets;\n+import java.security.MessageDigest;\n+import java.util.Arrays;\n+import java.util.function.Supplier;\n+\n+public class CommentTest {\n+\n+ @Test\n+ public void testSetParentId() throws Exception {\n+\n+ final Comment comment = new Comment();\n+ final long parentId = 42;\n+\n+ comment.setParentId(parentId);\n+\n+ Truth.assertThat(comment.getParentId()).isEqualTo(parentId);\n+\n+ comment.setParentId(null);\n+\n+ Truth.assertThat(comment.getParent()).isNull();\n+\n+ }\n+\n+ @Test\n+ public void testSetEmail() throws Exception {\n+\n+ final Comment comment = new Comment();\n+ comment.setEmail(null);\n+\n+ Truth.assertThat(comment.getEmailHash()).isNull();\n+\n+ final String emailAddress = \"user@example.com\";\n+ comment.setEmail(emailAddress);\n+\n+ final byte[] referenceHash = MessageDigest.getInstance(MessageDigestAlgorithms.MD5)\n+ .digest(emailAddress.getBytes(StandardCharsets.UTF_8));\n+\n+ Truth.assertThat(Arrays.equals(comment.getEmailHash(), referenceHash)).isTrue();\n+\n+ }\n+\n+ @Test\n+ public void testSetEmailHash() throws Exception {\n+ new Comment().setEmailHash(new byte[16]);\n+ }\n+\n+ @Test(expected = IllegalArgumentException.class)\n+ public void testSetEmailHashWithInvalidLength() throws Exception {\n+ new Comment().setEmailHash(new byte[0]);\n+ }\n+\n+ @Test\n+ public void testEquals() throws Exception {\n+\n+ final Comment comment = new Comment();\n+ Truth.assertThat(comment).isNotEqualTo(null);\n+ Truth.assertThat(comment).isEqualTo(comment);\n+ Truth.assertThat(comment).isEqualTo(new Comment());\n+\n+ Truth.assertThat(NEW_COMMENT.get()).isEqualTo(NEW_COMMENT.get());\n+ }\n+\n+ @Test\n+ public void testHashCode() throws Exception {\n+ Truth.assertThat(NEW_COMMENT.get().hashCode()).isEqualTo(NEW_COMMENT.get().hashCode());\n+ }\n+\n+ private static final Supplier NEW_COMMENT = () -> {\n+ final Comment c = new Comment();\n+ c.setId(2L);\n+ c.setParentId(1L);\n+ c.setThread(new CommentThread());\n+ c.setText(\"Comment text\");\n+ c.setAuthor(\"User\");\n+ c.setEmail(\"user@example.com\");\n+ c.setUrl(\"http://example.com\");\n+ return c;\n+ };\n+\n+}" + }, + { + "sha": "6d142484d16dd1cf68581abf21cdc0e54b5045b4", + "filename": "src/test/java/de/vorb/platon/model/CommentThreadTest.java", + "status": "added", + "additions": 60, + "deletions": 0, + "changes": 60, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThreadTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThreadTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fmodel%2FCommentThreadTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,60 @@\n+package de.vorb.platon.model;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+public class CommentThreadTest {\n+\n+ @Test\n+ public void testEqualsById() throws Exception {\n+\n+ final CommentThread thread1 = CommentThread.builder().id(1L).build();\n+\n+ Truth.assertThat(thread1.equalsById(thread1)).isTrue();\n+\n+ final CommentThread thread1Copy = CommentThread.builder().id(1L).build();\n+\n+ Truth.assertThat(thread1.equalsById(thread1Copy)).isTrue();\n+ Truth.assertThat(thread1Copy.equalsById(thread1)).isTrue();\n+\n+ final CommentThread thread2 = CommentThread.builder().id(2L).build();\n+\n+ Truth.assertThat(thread1.equalsById(thread2)).isFalse();\n+ Truth.assertThat(thread2.equalsById(thread1)).isFalse();\n+\n+ final CommentThread threadWithNullId = new CommentThread();\n+\n+ Truth.assertThat(thread1.equalsById(threadWithNullId)).isFalse();\n+ Truth.assertThat(threadWithNullId.equalsById(thread1)).isFalse();\n+\n+ final CommentThread anotherThreadWithNullId = new CommentThread();\n+\n+ Truth.assertThat(threadWithNullId.equalsById(anotherThreadWithNullId)).isFalse();\n+ Truth.assertThat(anotherThreadWithNullId.equalsById(threadWithNullId)).isFalse();\n+\n+ }\n+\n+ @Test\n+ public void testHashCode() throws Exception {\n+ final String articleUrl = \"http://example.com/article\";\n+ final String articleTitle = \"Article\";\n+\n+ final CommentThread thread1 =\n+ CommentThread.builder()\n+ .id(42L)\n+ .url(articleUrl)\n+ .title(articleTitle)\n+ .build();\n+\n+ final CommentThread thread2 =\n+ CommentThread.builder()\n+ .id(42L)\n+ .url(articleUrl)\n+ .title(articleTitle)\n+ .build();\n+\n+ Truth.assertThat(thread1).isEqualTo(thread2);\n+ Truth.assertThat(thread1.hashCode()).isEqualTo(thread2.hashCode());\n+ }\n+\n+}" + }, + { + "sha": "c58d73c24831a5f9304d3f51e1b95b9598e2669b", + "filename": "src/test/java/de/vorb/platon/persistence/CommentStatusConverterTest.java", + "status": "added", + "additions": 41, + "deletions": 0, + "changes": 41, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverterTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverterTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FCommentStatusConverterTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,41 @@\n+package de.vorb.platon.persistence;\n+\n+import de.vorb.platon.model.Comment;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+public class CommentStatusConverterTest {\n+\n+ private final CommentStatusConverter converter = new CommentStatusConverter();\n+\n+ @Test\n+ public void testConvertToDatabaseColumn() throws Exception {\n+ for (Comment.Status status : Comment.Status.values()) {\n+ Truth.assertThat(converter.convertToDatabaseColumn(status)).isEqualTo(status.getValue());\n+ }\n+ }\n+\n+ @Test\n+ public void testConvertToEntityAttribute() throws Exception {\n+ for (Comment.Status status : Comment.Status.values()) {\n+ Truth.assertThat(converter.convertToEntityAttribute(status.getValue())).isEqualTo(status);\n+ }\n+ }\n+\n+ @Test(expected = NullPointerException.class)\n+ public void testConvertNullToDatabaseColumn() {\n+ converter.convertToDatabaseColumn(null);\n+ }\n+\n+ @Test(expected = NullPointerException.class)\n+ public void testConvertNullToEntityAttribute() {\n+ converter.convertToEntityAttribute(null);\n+ }\n+\n+ @Test(expected = IllegalArgumentException.class)\n+ public void testConvertUnknownByteToEntityAttribute() throws Exception {\n+ converter.convertToEntityAttribute(-1);\n+ }\n+\n+}" + }, + { + "sha": "9d87aaca91499fdd51a05519a79f4c52b14939cf", + "filename": "src/test/java/de/vorb/platon/persistence/Jsr310InstantTimestampConverterTest.java", + "status": "added", + "additions": 32, + "deletions": 0, + "changes": 32, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverterTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverterTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fpersistence%2FJsr310InstantTimestampConverterTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,32 @@\n+package de.vorb.platon.persistence;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+import javax.persistence.AttributeConverter;\n+import java.sql.Timestamp;\n+import java.time.Instant;\n+\n+public class Jsr310InstantTimestampConverterTest {\n+\n+ final Jsr310InstantTimestampConverter converter = new Jsr310InstantTimestampConverter();\n+\n+ @Test\n+ public void testInstantTimestampConversion() throws Exception {\n+\n+ final Instant instant = Instant.now();\n+\n+ final Instant converted =\n+ converter.convertToEntityAttribute(\n+ converter.convertToDatabaseColumn(instant));\n+\n+ Truth.assertThat(converted).isEqualTo(instant);\n+\n+ }\n+\n+ @Test\n+ public void testConversionsWithNull() throws Exception {\n+ Truth.assertThat(converter.convertToDatabaseColumn(null)).isNull();\n+ Truth.assertThat(converter.convertToEntityAttribute(null)).isNull();\n+ }\n+}" + }, + { + "sha": "b9bbee915568771bf4f50b22bbe54fda9875d122", + "filename": "src/test/java/de/vorb/platon/security/HmacRequestVerifierTest.java", + "status": "added", + "additions": 101, + "deletions": 0, + "changes": 101, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifierTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifierTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2FHmacRequestVerifierTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,101 @@\n+package de.vorb.platon.security;\n+\n+import de.vorb.platon.util.CurrentTimeProvider;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+import org.springframework.test.annotation.Repeat;\n+\n+import javax.crypto.KeyGenerator;\n+import javax.crypto.SecretKey;\n+import java.time.Instant;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class HmacRequestVerifierTest {\n+\n+ @Mock\n+ private SecretKeyProvider secretKeyProvider;\n+\n+ @Mock\n+ private CurrentTimeProvider currentTimeProvider;\n+\n+ private HmacRequestVerifier requestVerifier;\n+\n+ @Before\n+ public void setUp() throws Exception {\n+\n+ // generate a secret key once and always return that secret key\n+ final SecretKey secretKey = KeyGenerator.getInstance(\n+ HmacRequestVerifier.HMAC_ALGORITHM.toString()).generateKey();\n+ Mockito.when(secretKeyProvider.getSecretKey()).thenReturn(secretKey);\n+\n+ requestVerifier = new HmacRequestVerifier(secretKeyProvider, currentTimeProvider);\n+\n+ }\n+\n+ @Test(expected = SecurityException.class)\n+ public void testInvalidKey() throws Exception {\n+\n+ Mockito.when(secretKeyProvider.getSecretKey()).thenReturn(null);\n+\n+ new HmacRequestVerifier(secretKeyProvider, currentTimeProvider);\n+\n+ }\n+\n+ @Test\n+ @Repeat(10)\n+ public void testGetSignatureTokenIsRepeatable() throws Exception {\n+\n+ final String identifier = \"comment/1\";\n+ final Instant expirationDate = Instant.now();\n+\n+ final byte[] firstSignatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+ final byte[] secondSignatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ Truth.assertThat(firstSignatureToken).isEqualTo(secondSignatureToken);\n+\n+ }\n+\n+ @Test\n+ public void testTokenExpiration() throws Exception {\n+\n+ final String identifier = \"comment/1\";\n+\n+ final Instant currentTime = Instant.now();\n+ Mockito.when(currentTimeProvider.get()).thenReturn(currentTime);\n+\n+ final Instant expirationDate = currentTime.minusMillis(1); // token expired 1ms ago\n+ final byte[] signatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ final boolean validity = requestVerifier.isRequestValid(identifier, expirationDate, signatureToken);\n+\n+ Truth.assertThat(validity).isFalse();\n+\n+ }\n+\n+ @Test\n+ public void testCannotFakeExpirationDate() throws Exception {\n+\n+ final String identifier = \"comment/1\";\n+\n+ final Instant currentTime = Instant.now();\n+ Mockito.when(currentTimeProvider.get()).thenReturn(currentTime);\n+\n+ final Instant expirationDate = currentTime.minusMillis(1);\n+ final byte[] signatureToken = requestVerifier.getSignatureToken(identifier, expirationDate);\n+\n+ // a user attempts to set the expiration date manually (without changing the token)\n+ final Instant fakedExpirationDate = currentTime;\n+\n+ final boolean validity = requestVerifier.isRequestValid(identifier, fakedExpirationDate, signatureToken);\n+\n+ Truth.assertThat(validity).isFalse();\n+\n+ }\n+\n+}" + }, + { + "sha": "34a2ea7b544a2791eaed01491d6c87c8304a7e3d", + "filename": "src/test/java/de/vorb/platon/security/mock/InsecureRequestVerifier.java", + "status": "added", + "additions": 29, + "deletions": 0, + "changes": 29, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2Fmock%2FInsecureRequestVerifier.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2Fmock%2FInsecureRequestVerifier.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fsecurity%2Fmock%2FInsecureRequestVerifier.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,29 @@\n+package de.vorb.platon.security.mock;\n+\n+import de.vorb.platon.security.RequestVerifier;\n+\n+import java.nio.charset.StandardCharsets;\n+import java.security.MessageDigest;\n+import java.security.NoSuchAlgorithmException;\n+import java.time.Instant;\n+import java.util.Arrays;\n+\n+public class InsecureRequestVerifier implements RequestVerifier {\n+\n+ @Override\n+ public byte[] getSignatureToken(String identifier, Instant expirationDate) {\n+ try {\n+ return MessageDigest.getInstance(\"SHA-1\").digest(\n+ String.format(\"%s|%s\", identifier, expirationDate).getBytes(StandardCharsets.UTF_8));\n+ } catch (NoSuchAlgorithmException e) {\n+ throw new RuntimeException(e);\n+ }\n+ }\n+\n+ @Override\n+ public boolean isRequestValid(String identifier, Instant expirationDate, byte[] signatureToken) {\n+ final byte[] referenceSignature = getSignatureToken(identifier, expirationDate);\n+ return Arrays.equals(referenceSignature, signatureToken);\n+ }\n+\n+}" + }, + { + "sha": "e570e8e9c7dc9c4016204c533cae2a3f925563d8", + "filename": "src/test/java/de/vorb/platon/web/rest/CommentResourcePostWithParentTest.java", + "status": "added", + "additions": 162, + "deletions": 0, + "changes": 162, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourcePostWithParentTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourcePostWithParentTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourcePostWithParentTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,162 @@\n+package de.vorb.platon.web.rest;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+import de.vorb.platon.persistence.CommentRepository;\n+import de.vorb.platon.persistence.CommentThreadRepository;\n+import de.vorb.platon.security.RequestVerifier;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import javax.ws.rs.BadRequestException;\n+import javax.ws.rs.core.Response;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class CommentResourcePostWithParentTest {\n+\n+ @Mock\n+ private CommentThreadRepository threadRepository;\n+\n+ @Mock\n+ private CommentRepository commentRepository;\n+\n+ @Mock\n+ private RequestVerifier requestVerifier;\n+\n+ private final InputSanitizer htmlInputSanitizer = String::trim;\n+\n+ private CommentResource commentResource;\n+\n+\n+ private CommentThread thread;\n+\n+\n+ private Comment existingParentComment;\n+\n+ private Comment nonExistingParentComment;\n+\n+ private Comment existingParentFromOtherThread;\n+\n+\n+ @Before\n+ public void setUp() throws Exception {\n+\n+ Mockito.when(requestVerifier.getSignatureToken(Mockito.any(), Mockito.any())).thenReturn(new byte[0]);\n+ Mockito.when(requestVerifier.isRequestValid(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);\n+\n+\n+ final long threadId = 42;\n+ thread =\n+ Mockito.spy(CommentThread.builder()\n+ .url(\"http://example.com/article\")\n+ .title(\"Article\")\n+ .build());\n+\n+ Mockito.when(thread.getId()).thenReturn(threadId);\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(thread.getUrl()))).thenReturn(thread);\n+\n+\n+ final long existingParentId = 4711;\n+ existingParentComment =\n+ Mockito.spy(Comment.builder()\n+ .thread(thread)\n+ .text(\"Existing parent\")\n+ .build());\n+ Mockito.when(existingParentComment.getId()).thenReturn(existingParentId);\n+\n+ Mockito.when(commentRepository.findOne(Mockito.eq(existingParentId))).thenReturn(existingParentComment);\n+\n+\n+ final long nonExistingParentId = 4712;\n+ nonExistingParentComment =\n+ Mockito.spy(Comment.builder()\n+ .thread(thread)\n+ .text(\"Non-existing parent\")\n+ .build());\n+ Mockito.when(nonExistingParentComment.getId()).thenReturn(nonExistingParentId);\n+\n+ Mockito.when(commentRepository.findOne(Mockito.eq(nonExistingParentId))).thenReturn(null);\n+\n+\n+ final long otherThreadId = 43;\n+ final CommentThread otherThread =\n+ Mockito.spy(CommentThread.builder()\n+ .url(\"http://example.com/other-article\")\n+ .title(\"Other article\")\n+ .build());\n+ Mockito.when(otherThread.getId()).thenReturn(otherThreadId);\n+\n+ final long existingParentFromOtherThreadId = 4713;\n+ existingParentFromOtherThread =\n+ Mockito.spy(Comment.builder()\n+ .thread(otherThread)\n+ .text(\"Existing parent from other thread\")\n+ .build());\n+ Mockito.when(existingParentFromOtherThread.getId()).thenReturn(existingParentFromOtherThreadId);\n+\n+ Mockito.when(commentRepository.findOne(Mockito.eq(existingParentFromOtherThreadId)))\n+ .thenReturn(existingParentFromOtherThread);\n+\n+ commentResource = new CommentResource(threadRepository, commentRepository, requestVerifier, htmlInputSanitizer);\n+ }\n+\n+ @Test\n+ public void testWithExistingParent() throws Exception {\n+\n+ final Comment newChildComment =\n+ Comment.builder()\n+ .parent(existingParentComment)\n+ .text(\"Child\")\n+ .build();\n+\n+ Mockito.when(commentRepository.save(Mockito.eq(newChildComment))).then(invocation -> {\n+ newChildComment.setId(4711L);\n+ return newChildComment;\n+ });\n+\n+ final Response response = commentResource.postComment(thread.getUrl(), thread.getTitle(), newChildComment);\n+\n+ Truth.assertThat(response.getStatus()).isEqualTo(Response.Status.CREATED.getStatusCode());\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testWithNonExistingParent() throws Exception {\n+\n+ final Comment newChildComment =\n+ Comment.builder()\n+ .parent(nonExistingParentComment)\n+ .text(\"Child\")\n+ .build();\n+\n+ Mockito.when(commentRepository.save(Mockito.eq(newChildComment))).then(invocation -> {\n+ newChildComment.setId(4711L);\n+ return newChildComment;\n+ });\n+\n+ commentResource.postComment(thread.getUrl(), thread.getTitle(), newChildComment);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testWithParentFromOtherThread() throws Exception {\n+\n+ final Comment newChildComment =\n+ Comment.builder()\n+ .parent(existingParentFromOtherThread)\n+ .text(\"Child\")\n+ .build();\n+\n+ commentResource.postComment(thread.getUrl(), thread.getTitle(), newChildComment);\n+\n+ }\n+\n+}" + }, + { + "sha": "87045396514d1975ea900b0796d96b62d716db82", + "filename": "src/test/java/de/vorb/platon/web/rest/CommentResourceTest.java", + "status": "added", + "additions": 321, + "deletions": 0, + "changes": 321, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourceTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourceTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FCommentResourceTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,321 @@\n+package de.vorb.platon.web.rest;\n+\n+import de.vorb.platon.model.Comment;\n+import de.vorb.platon.model.CommentThread;\n+import de.vorb.platon.persistence.CommentRepository;\n+import de.vorb.platon.persistence.CommentThreadRepository;\n+import de.vorb.platon.security.RequestVerifier;\n+import de.vorb.platon.util.InputSanitizer;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.ArgumentCaptor;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import javax.ws.rs.BadRequestException;\n+import javax.ws.rs.NotFoundException;\n+import java.time.Instant;\n+import java.util.Base64;\n+import java.util.List;\n+import java.util.Random;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class CommentResourceTest {\n+\n+ private static final CommentThread emptyThread =\n+ CommentThread.builder()\n+ .url(\"http://example.com/article\")\n+ .title(\"An empty comment thread\")\n+ .build();\n+\n+ private static final CommentThread nonEmptyThread =\n+ CommentThread.builder()\n+ .url(\"http://example.com/article-with-comments\")\n+ .title(\"A non-empty comment thread\")\n+ .build();\n+\n+ static {\n+ final Comment comment =\n+ Comment.builder()\n+ .id(4711L)\n+ .thread(nonEmptyThread)\n+ .text(\"Text\")\n+ .author(\"Author\")\n+ .build();\n+\n+ nonEmptyThread.getComments().add(comment);\n+ }\n+\n+ @Mock\n+ private CommentRepository commentRepository;\n+\n+ @Mock\n+ private CommentThreadRepository threadRepository;\n+\n+ @Mock\n+ private RequestVerifier requestVerifier;\n+\n+ private final InputSanitizer htmlInputSanitizer = String::trim;\n+\n+ private CommentResource commentResource;\n+\n+ private final Comment updateComment = Comment.builder().id(42L).text(\"Text\").build();\n+ private final String defaultRequestSignature = getSignature(\"comments/42\", Instant.now());\n+\n+ @Before\n+ public void setUp() throws Exception {\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(null))).thenReturn(null);\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(emptyThread.getUrl()))).thenReturn(emptyThread);\n+\n+ Mockito.when(threadRepository.getByUrl(Mockito.eq(nonEmptyThread.getUrl()))).thenReturn(nonEmptyThread);\n+\n+ final Random rng = new Random();\n+ Mockito.when(commentRepository.save(Mockito.any(Comment.class))).then(invocation -> {\n+ final Comment comment = invocation.getArgumentAt(0, Comment.class);\n+ comment.setId(rng.nextLong());\n+ return comment;\n+ });\n+\n+ Mockito.when(commentRepository.findByThread(nonEmptyThread)).thenReturn(nonEmptyThread.getComments());\n+\n+ Mockito.when(requestVerifier.getSignatureToken(Mockito.any(), Mockito.any())).thenReturn(new byte[0]);\n+ Mockito.when(requestVerifier.isRequestValid(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);\n+\n+ commentResource = new CommentResource(threadRepository, commentRepository, requestVerifier, htmlInputSanitizer);\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetCommentsByThreadUrlNull() throws Exception {\n+ commentResource.findCommentsByThreadUrl(null);\n+ }\n+\n+ @Test\n+ public void testGetCommentsByThreadUrlEmptyThread() throws Exception {\n+ Truth.assertThat(commentResource.findCommentsByThreadUrl(emptyThread.getUrl())).isEmpty();\n+ }\n+\n+ @Test\n+ public void testGetCommentsByThreadUrlNonEmptyThread() throws Exception {\n+ final List comments = commentResource.findCommentsByThreadUrl(nonEmptyThread.getUrl());\n+ Truth.assertThat(comments).isNotEmpty();\n+ }\n+\n+ @Test\n+ public void testGetCommentById() throws Exception {\n+\n+ final Comment comment = Mockito.mock(Comment.class);\n+ Mockito.when(comment.getStatus()).thenReturn(Comment.Status.PUBLIC);\n+ Mockito.when(commentRepository.findOne(Mockito.eq(4711L))).thenReturn(comment);\n+\n+ Truth.assertThat(commentResource.getComment(4711L)).isSameAs(comment);\n+\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetCommentAwaitingModerationById() throws Exception {\n+\n+ final Comment comment = Mockito.mock(Comment.class);\n+ Mockito.when(comment.getStatus()).thenReturn(Comment.Status.AWAITING_MODERATION);\n+ Mockito.when(commentRepository.findOne(Mockito.eq(4711L))).thenReturn(comment);\n+\n+ commentResource.getComment(4711L);\n+\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetDeletedCommentById() throws Exception {\n+\n+ final Comment comment = Mockito.mock(Comment.class);\n+ Mockito.when(comment.getStatus()).thenReturn(Comment.Status.DELETED);\n+ Mockito.when(commentRepository.findOne(Mockito.eq(4711L))).thenReturn(comment);\n+\n+ commentResource.getComment(4711L);\n+\n+ }\n+\n+ @Test(expected = NotFoundException.class)\n+ public void testGetCommentIdNotFound() throws Exception {\n+\n+ Mockito.when(commentRepository.findOne(Mockito.anyLong())).thenReturn(null);\n+ commentResource.getComment(4711L);\n+\n+ }\n+\n+ @Test\n+ public void testPostCommentToExistingThread() throws Exception {\n+ final Comment newComment =\n+ Mockito.spy(Comment.builder()\n+ .thread(nonEmptyThread)\n+ .text(\"Text\")\n+ .author(\"Author\")\n+ .build());\n+\n+ commentResource.postComment(nonEmptyThread.getUrl(), nonEmptyThread.getTitle(), newComment);\n+\n+ Mockito.verify(commentRepository).save(Mockito.same(newComment));\n+ }\n+\n+ @Test\n+ public void testPostCommentToNewThread() throws Exception {\n+ final String threadUrl = \"http://example.com/new-article\";\n+ final String threadTitle = \"New article\";\n+ final Comment newComment =\n+ Mockito.spy(Comment.builder()\n+ .text(\"Text\")\n+ .author(\"Author\")\n+ .build());\n+\n+ commentResource.postComment(threadUrl, threadTitle, newComment);\n+\n+ final ArgumentCaptor threadCaptor = ArgumentCaptor.forClass(CommentThread.class);\n+ Mockito.verify(threadRepository).save(threadCaptor.capture());\n+\n+ Truth.assertThat(threadCaptor.getValue().getUrl()).isEqualTo(threadUrl);\n+ Truth.assertThat(threadCaptor.getValue().getTitle()).isEqualTo(threadTitle);\n+\n+ Mockito.verify(commentRepository).save(Mockito.same(newComment));\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testPostCommentWithId() throws Exception {\n+ final Comment comment = Comment.builder().id(1337L).build();\n+ commentResource.postComment(\"http://example.com/article\", \"Article\", comment);\n+ }\n+\n+ @Test\n+ public void testUpdateComment() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(Mockito.eq(updateComment.getId()))).thenReturn(true);\n+\n+ commentResource.updateComment(defaultRequestSignature, updateComment.getId(), updateComment);\n+\n+ Mockito.verify(commentRepository).save(updateComment);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testUpdateCommentWithMismatchingId() throws Exception {\n+\n+ commentResource.updateComment(defaultRequestSignature, updateComment.getId() + 1, updateComment);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testUpdateNonExistingComment() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(Mockito.eq(updateComment.getId()))).thenReturn(false);\n+\n+ commentResource.updateComment(defaultRequestSignature, updateComment.getId(), updateComment);\n+\n+ }\n+\n+ @Test\n+ public void testDeleteCommentWithValidRequest() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(42L)).thenReturn(true);\n+\n+ commentResource.deleteComment(defaultRequestSignature, 42L);\n+\n+ Mockito.verify(commentRepository).setStatus(Mockito.eq(42L), Mockito.eq(Comment.Status.DELETED));\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteNonExistingComment() throws Exception {\n+\n+ Mockito.when(commentRepository.exists(42L)).thenReturn(false);\n+\n+ commentResource.deleteComment(defaultRequestSignature, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithInvalidRequest() throws Exception {\n+\n+ final String identifier = \"comments/42\";\n+ final Instant expirationDate = Instant.now();\n+\n+ final String signature = getSignature(identifier, expirationDate);\n+\n+ Mockito.when(requestVerifier.isRequestValid(Mockito.eq(identifier), Mockito.eq(expirationDate), Mockito.any()))\n+ .thenReturn(false);\n+\n+ commentResource.deleteComment(signature, 42L);\n+\n+ }\n+\n+ private String getSignature(String identifier, Instant expirationDate) {\n+ return String.format(\"%s|%s|%s\", identifier, expirationDate,\n+ Base64.getEncoder().encodeToString(\"token\".getBytes()));\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithInvalidNumberOfComponentsInSignature() throws Exception {\n+\n+ final String signatureWithInvalidNumberOfComponents = \"comments/42\";\n+ commentResource.deleteComment(signatureWithInvalidNumberOfComponents, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithInvalidBase64EncodedToken() throws Exception {\n+\n+ final String signatureWithBadBase64Encoding = \"comments/42|2016-01-01T00:00:00.000Z|SGVsbG8gV29ybGQ==\";\n+ commentResource.deleteComment(signatureWithBadBase64Encoding, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithNonParseableDateInSignature() throws Exception {\n+\n+ final String signatureWithNonParseableDate = \"comments/42|2016-01-01 00:00:00|SGVsbG8gV29ybGQ=\";\n+ commentResource.deleteComment(signatureWithNonParseableDate, 42L);\n+\n+ }\n+\n+ @Test(expected = BadRequestException.class)\n+ public void testDeleteCommentWithMismatchingIds() throws Exception {\n+\n+ final long commentId = 42;\n+ final String signatureWithMismatchingId = \"comments/43|2016-01-01T00:00:00.000Z|SGVsbG8gV29ybGQ=\";\n+\n+ commentResource.deleteComment(signatureWithMismatchingId, commentId);\n+\n+ }\n+\n+ @Test\n+ public void testSanitizeComment() throws Exception {\n+\n+ final InputSanitizer inputSanitizer = Mockito.mock(InputSanitizer.class);\n+\n+ final CommentResource commentResource = new CommentResource(\n+ Mockito.mock(CommentThreadRepository.class),\n+ Mockito.mock(CommentRepository.class),\n+ Mockito.mock(RequestVerifier.class),\n+ inputSanitizer\n+ );\n+\n+ final Comment comment = Comment.builder()\n+ .text(\"Some text\")\n+ .url(\"http://example.com/article?param1=foo¶m2=bar\")\n+ .author(\"Sam\")\n+ .build();\n+\n+ Mockito.when(inputSanitizer.sanitize(Mockito.eq(comment.getText()))).thenReturn(comment.getText());\n+\n+ commentResource.sanitizeComment(comment);\n+\n+ Mockito.verify(inputSanitizer).sanitize(Mockito.eq(comment.getText()));\n+\n+ Truth.assertThat(comment.getAuthor()).isEqualTo(\"Sam\");\n+ Truth.assertThat(comment.getUrl()).isEqualTo(\"http://example.com/article?param1=foo&param2=bar\");\n+\n+ }\n+\n+}" + }, + { + "sha": "d61cf8151120c961d56d5302677094770ca8a710", + "filename": "src/test/java/de/vorb/platon/web/rest/ObjectMapperContextResolverTest.java", + "status": "added", + "additions": 23, + "deletions": 0, + "changes": 23, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolverTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolverTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FObjectMapperContextResolverTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,23 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.fasterxml.jackson.databind.ObjectMapper;\n+import com.fasterxml.jackson.databind.SerializationFeature;\n+import com.google.common.truth.Truth;\n+import org.junit.Test;\n+\n+public class ObjectMapperContextResolverTest {\n+\n+ @Test\n+ public void testGetContext() throws Exception {\n+\n+ final int writeDatesAsTimestamps = SerializationFeature.WRITE_DATES_AS_TIMESTAMPS.getMask();\n+\n+ final ObjectMapper objectMapper = new ObjectMapperContextResolver().getContext(Object.class);\n+ final int serializationFeatures = objectMapper.getSerializationConfig().getSerializationFeatures();\n+\n+ // assert that write dates as timestampts is NOT enabled\n+ Truth.assertThat(serializationFeatures & writeDatesAsTimestamps).isEqualTo(0);\n+\n+ }\n+\n+}" + }, + { + "sha": "4a189f3e6cdc539e1a88b5757ce2b7a285e1557f", + "filename": "src/test/java/de/vorb/platon/web/rest/PoweredByResponseFilterTest.java", + "status": "added", + "additions": 37, + "deletions": 0, + "changes": 37, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilterTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilterTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FPoweredByResponseFilterTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,37 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.google.common.truth.Truth;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import javax.ws.rs.container.ContainerRequestContext;\n+import javax.ws.rs.container.ContainerResponseContext;\n+import javax.ws.rs.core.MultivaluedHashMap;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class PoweredByResponseFilterTest {\n+\n+ @Mock\n+ private ContainerRequestContext requestContext;\n+\n+ @Mock\n+ private ContainerResponseContext responseContext;\n+\n+ @Before\n+ public void setUp() throws Exception {\n+ Mockito.when(responseContext.getHeaders()).thenReturn(new MultivaluedHashMap<>());\n+ }\n+\n+ @Test\n+ public void testPoweredByHeader() throws Exception {\n+\n+ new PoweredByResponseFilter().filter(requestContext, responseContext);\n+\n+ Truth.assertThat(responseContext.getHeaders()).containsKey(\"X-Powered-By\");\n+\n+ }\n+}" + }, + { + "sha": "599f4830014944a06840b2f89093cba04092ff2a", + "filename": "src/test/java/de/vorb/platon/web/rest/RestResourceConfigTest.java", + "status": "added", + "additions": 28, + "deletions": 0, + "changes": 28, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfigTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfigTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2FRestResourceConfigTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,28 @@\n+package de.vorb.platon.web.rest;\n+\n+import com.google.common.truth.Truth;\n+import org.glassfish.jersey.filter.LoggingFilter;\n+import org.glassfish.jersey.server.spring.scope.RequestContextFilter;\n+import org.junit.Test;\n+\n+import java.util.Set;\n+\n+public class RestResourceConfigTest {\n+\n+ @Test\n+ public void testConstructor() throws Exception {\n+\n+ final RestResourceConfig restResourceConfig = new RestResourceConfig();\n+\n+ final Set> registeredClasses = restResourceConfig.getClasses();\n+\n+ // assert that the correct resources and filters are registered\n+ Truth.assertThat(registeredClasses).containsExactly(\n+ RequestContextFilter.class,\n+ PoweredByResponseFilter.class,\n+ CommentResource.class,\n+ LoggingFilter.class,\n+ ObjectMapperContextResolver.class);\n+\n+ }\n+}" + }, + { + "sha": "ec7ec60f73671db4aad9e3e4578cc2e78ad6e328", + "filename": "src/test/java/de/vorb/platon/web/rest/json/ByteArraySerializerTest.java", + "status": "added", + "additions": 35, + "deletions": 0, + "changes": 35, + "blob_url": "https://github.com/pvorb/platon/blob/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializerTest.java", + "raw_url": "https://github.com/pvorb/platon/raw/d75b60f3e5fc292268724b82c533c008b9822467/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializerTest.java", + "contents_url": "https://api.github.com/repos/pvorb/platon/contents/src%2Ftest%2Fjava%2Fde%2Fvorb%2Fplaton%2Fweb%2Frest%2Fjson%2FByteArraySerializerTest.java?ref=d75b60f3e5fc292268724b82c533c008b9822467", + "patch": "@@ -0,0 +1,35 @@\n+package de.vorb.platon.web.rest.json;\n+\n+import com.fasterxml.jackson.core.JsonGenerator;\n+import com.fasterxml.jackson.databind.SerializerProvider;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.mockito.Mock;\n+import org.mockito.Mockito;\n+import org.mockito.runners.MockitoJUnitRunner;\n+\n+import java.math.BigInteger;\n+\n+@RunWith(MockitoJUnitRunner.class)\n+public class ByteArraySerializerTest {\n+\n+ @Mock\n+ private JsonGenerator jsonGenerator;\n+\n+ @Mock\n+ private SerializerProvider serializerProvider;\n+\n+ @Test\n+ public void testSerialize() throws Exception {\n+\n+ final String sampleHash = \"341be97d9aff90c9978347f66f945b77\";\n+ final byte[] bytes = new BigInteger(sampleHash, 16).toByteArray();\n+\n+ new ByteArraySerializer().serialize(bytes, jsonGenerator, serializerProvider);\n+\n+ // verify that the byte array is correctly serialized\n+ Mockito.verify(jsonGenerator).writeString(Mockito.eq(sampleHash));\n+\n+ }\n+\n+}" + } + ] +} diff --git a/apigh/2023-04-20/react_comment_system b/apigh/2023-04-20/react_comment_system new file mode 100644 index 00000000..db512094 --- /dev/null +++ b/apigh/2023-04-20/react_comment_system @@ -0,0 +1,112 @@ +{ + "id": 77255057, + "node_id": "MDEwOlJlcG9zaXRvcnk3NzI1NTA1Nw==", + "name": "react-comment-system", + "full_name": "Bitveen/react-comment-system", + "private": false, + "owner": { + "login": "Bitveen", + "id": 7973668, + "node_id": "MDQ6VXNlcjc5NzM2Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/7973668?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Bitveen", + "html_url": "https://github.com/Bitveen", + "followers_url": "https://api.github.com/users/Bitveen/followers", + "following_url": "https://api.github.com/users/Bitveen/following{/other_user}", + "gists_url": "https://api.github.com/users/Bitveen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Bitveen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Bitveen/subscriptions", + "organizations_url": "https://api.github.com/users/Bitveen/orgs", + "repos_url": "https://api.github.com/users/Bitveen/repos", + "events_url": "https://api.github.com/users/Bitveen/events{/privacy}", + "received_events_url": "https://api.github.com/users/Bitveen/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/Bitveen/react-comment-system", + "description": "ะŸั€ะพัั‚ะฐั ัะธัั‚ะตะผะฐ ะบะพะผะผะตะฝั‚ะฐั€ะธะตะฒ ะฝะฐ React + Redux", + "fork": false, + "url": "https://api.github.com/repos/Bitveen/react-comment-system", + "forks_url": "https://api.github.com/repos/Bitveen/react-comment-system/forks", + "keys_url": "https://api.github.com/repos/Bitveen/react-comment-system/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Bitveen/react-comment-system/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Bitveen/react-comment-system/teams", + "hooks_url": "https://api.github.com/repos/Bitveen/react-comment-system/hooks", + "issue_events_url": "https://api.github.com/repos/Bitveen/react-comment-system/issues/events{/number}", + "events_url": "https://api.github.com/repos/Bitveen/react-comment-system/events", + "assignees_url": "https://api.github.com/repos/Bitveen/react-comment-system/assignees{/user}", + "branches_url": "https://api.github.com/repos/Bitveen/react-comment-system/branches{/branch}", + "tags_url": "https://api.github.com/repos/Bitveen/react-comment-system/tags", + "blobs_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Bitveen/react-comment-system/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Bitveen/react-comment-system/languages", + "stargazers_url": "https://api.github.com/repos/Bitveen/react-comment-system/stargazers", + "contributors_url": "https://api.github.com/repos/Bitveen/react-comment-system/contributors", + "subscribers_url": "https://api.github.com/repos/Bitveen/react-comment-system/subscribers", + "subscription_url": "https://api.github.com/repos/Bitveen/react-comment-system/subscription", + "commits_url": "https://api.github.com/repos/Bitveen/react-comment-system/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Bitveen/react-comment-system/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Bitveen/react-comment-system/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Bitveen/react-comment-system/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/{+path}", + "compare_url": "https://api.github.com/repos/Bitveen/react-comment-system/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Bitveen/react-comment-system/merges", + "archive_url": "https://api.github.com/repos/Bitveen/react-comment-system/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Bitveen/react-comment-system/downloads", + "issues_url": "https://api.github.com/repos/Bitveen/react-comment-system/issues{/number}", + "pulls_url": "https://api.github.com/repos/Bitveen/react-comment-system/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Bitveen/react-comment-system/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Bitveen/react-comment-system/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Bitveen/react-comment-system/labels{/name}", + "releases_url": "https://api.github.com/repos/Bitveen/react-comment-system/releases{/id}", + "deployments_url": "https://api.github.com/repos/Bitveen/react-comment-system/deployments", + "created_at": "2016-12-23T23:03:46Z", + "updated_at": "2016-12-25T14:41:38Z", + "pushed_at": "2016-12-23T23:45:22Z", + "git_url": "git://github.com/Bitveen/react-comment-system.git", + "ssh_url": "git@github.com:Bitveen/react-comment-system.git", + "clone_url": "https://github.com/Bitveen/react-comment-system.git", + "svn_url": "https://github.com/Bitveen/react-comment-system", + "homepage": "", + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/react_comment_system.commit b/apigh/2023-04-20/react_comment_system.commit new file mode 100644 index 00000000..d2b518fa --- /dev/null +++ b/apigh/2023-04-20/react_comment_system.commit @@ -0,0 +1,134 @@ +{ + "sha": "b015f3044e4e8f0add4b14437994b72754730b88", + "node_id": "MDY6Q29tbWl0NzcyNTUwNTc6YjAxNWYzMDQ0ZTRlOGYwYWRkNGIxNDQzNzk5NGI3Mjc1NDczMGI4OA==", + "commit": { + "author": { + "name": "Max", + "email": "bitveen@gmail.com", + "date": "2016-12-23T23:45:13Z" + }, + "committer": { + "name": "Max", + "email": "bitveen@gmail.com", + "date": "2016-12-23T23:45:13Z" + }, + "message": "make some tests", + "tree": { + "sha": "548a6c712a48ce18c1175f7035119b52207a8c26", + "url": "https://api.github.com/repos/Bitveen/react-comment-system/git/trees/548a6c712a48ce18c1175f7035119b52207a8c26" + }, + "url": "https://api.github.com/repos/Bitveen/react-comment-system/git/commits/b015f3044e4e8f0add4b14437994b72754730b88", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/Bitveen/react-comment-system/commits/b015f3044e4e8f0add4b14437994b72754730b88", + "html_url": "https://github.com/Bitveen/react-comment-system/commit/b015f3044e4e8f0add4b14437994b72754730b88", + "comments_url": "https://api.github.com/repos/Bitveen/react-comment-system/commits/b015f3044e4e8f0add4b14437994b72754730b88/comments", + "author": { + "login": "Bitveen", + "id": 7973668, + "node_id": "MDQ6VXNlcjc5NzM2Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/7973668?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Bitveen", + "html_url": "https://github.com/Bitveen", + "followers_url": "https://api.github.com/users/Bitveen/followers", + "following_url": "https://api.github.com/users/Bitveen/following{/other_user}", + "gists_url": "https://api.github.com/users/Bitveen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Bitveen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Bitveen/subscriptions", + "organizations_url": "https://api.github.com/users/Bitveen/orgs", + "repos_url": "https://api.github.com/users/Bitveen/repos", + "events_url": "https://api.github.com/users/Bitveen/events{/privacy}", + "received_events_url": "https://api.github.com/users/Bitveen/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "Bitveen", + "id": 7973668, + "node_id": "MDQ6VXNlcjc5NzM2Njg=", + "avatar_url": "https://avatars.githubusercontent.com/u/7973668?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Bitveen", + "html_url": "https://github.com/Bitveen", + "followers_url": "https://api.github.com/users/Bitveen/followers", + "following_url": "https://api.github.com/users/Bitveen/following{/other_user}", + "gists_url": "https://api.github.com/users/Bitveen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Bitveen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Bitveen/subscriptions", + "organizations_url": "https://api.github.com/users/Bitveen/orgs", + "repos_url": "https://api.github.com/users/Bitveen/repos", + "events_url": "https://api.github.com/users/Bitveen/events{/privacy}", + "received_events_url": "https://api.github.com/users/Bitveen/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "39f01538b2ca7f59643e325b73622036617c3eed", + "url": "https://api.github.com/repos/Bitveen/react-comment-system/commits/39f01538b2ca7f59643e325b73622036617c3eed", + "html_url": "https://github.com/Bitveen/react-comment-system/commit/39f01538b2ca7f59643e325b73622036617c3eed" + } + ], + "stats": { + "total": 30, + "additions": 27, + "deletions": 3 + }, + "files": [ + { + "sha": "c2042a53e3ea20fe309309297611dd170b79d650", + "filename": "public/bundle.js", + "status": "modified", + "additions": 2, + "deletions": 1, + "changes": 3, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/public%2Fbundle.js", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/public%2Fbundle.js", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/public%2Fbundle.js?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -23794,6 +23794,7 @@\n \tObject.defineProperty(exports, \"__esModule\", {\n \t value: true\n \t});\n+\texports.CommentForm = undefined;\n \n \tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n \n@@ -23813,7 +23814,7 @@\n \n \tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n \n-\tvar CommentForm = function (_Component) {\n+\tvar CommentForm = exports.CommentForm = function (_Component) {\n \t _inherits(CommentForm, _Component);\n \n \t function CommentForm(props) {" + }, + { + "sha": "07aec6a8b9f10af72c59e6ef314053a2dce0e4c6", + "filename": "src/components/CommentForm.jsx", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/src%2Fcomponents%2FCommentForm.jsx", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/src%2Fcomponents%2FCommentForm.jsx", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/src%2Fcomponents%2FCommentForm.jsx?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -2,7 +2,7 @@ import React, { Component } from \"react\";\n import { connect } from \"react-redux\";\n import { addComment } from \"actions\";\n \n-class CommentForm extends Component {\n+export class CommentForm extends Component {\n constructor(props) {\n super(props);\n this.handleSubmitForm = this.handleSubmitForm.bind(this);" + }, + { + "sha": "ea7112972a17ec64f18fe363e0b94f906fcaa712", + "filename": "src/tests/components/Comment.test.jsx", + "status": "modified", + "additions": 0, + "deletions": 1, + "changes": 1, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FComment.test.jsx", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FComment.test.jsx", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/src%2Ftests%2Fcomponents%2FComment.test.jsx?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -10,7 +10,6 @@ describe(\"Comment\", () => {\n expect(Comment).toExist();\n });\n \n- \n \n \n " + }, + { + "sha": "7e6ea4a9b82eeb531e2df1b607f34d8cd1ded129", + "filename": "src/tests/components/CommentForm.test.jsx", + "status": "modified", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/Bitveen/react-comment-system/blob/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FCommentForm.test.jsx", + "raw_url": "https://github.com/Bitveen/react-comment-system/raw/b015f3044e4e8f0add4b14437994b72754730b88/src%2Ftests%2Fcomponents%2FCommentForm.test.jsx", + "contents_url": "https://api.github.com/repos/Bitveen/react-comment-system/contents/src%2Ftests%2Fcomponents%2FCommentForm.test.jsx?ref=b015f3044e4e8f0add4b14437994b72754730b88", + "patch": "@@ -10,6 +10,30 @@ describe(\"CommentForm\", () => {\n expect(CommentForm).toExist();\n });\n \n+ // it(\"should dispatch ADD_COMMENT when valid comment text and author\", () => {\n+ // let author = \"Max\";\n+ // let text = \"Hello world\";\n+ //\n+ // let action = {\n+ // type: \"ADD_COMMENT\",\n+ // author,\n+ // text\n+ // };\n+ //\n+ // let spy = expect.createSpy();\n+ //\n+ // let commentForm = TestUtils.renderIntoDocument();\n+ //\n+ // let elem = ReactDOM.findDOMNode(commentForm);\n+ //\n+ // commentForm.refs.text.value = text;\n+ // commentForm.refs.author.value = author;\n+ //\n+ // TestUtils.Simulate.submit(elem.querySelector(\"form\"));\n+ // expect(spy).toHaveBeenCalledWith(action);\n+ //\n+ //\n+ // });\n \n \n " + } + ] +} diff --git a/apigh/2023-04-20/react_quietwater b/apigh/2023-04-20/react_quietwater new file mode 100644 index 00000000..471dd8e5 --- /dev/null +++ b/apigh/2023-04-20/react_quietwater @@ -0,0 +1,126 @@ +{ + "id": 86316646, + "node_id": "MDEwOlJlcG9zaXRvcnk4NjMxNjY0Ng==", + "name": "React-QuietWater", + "full_name": "NE-SmallTown/React-QuietWater", + "private": false, + "owner": { + "login": "NE-SmallTown", + "id": 18418010, + "node_id": "MDQ6VXNlcjE4NDE4MDEw", + "avatar_url": "https://avatars.githubusercontent.com/u/18418010?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/NE-SmallTown", + "html_url": "https://github.com/NE-SmallTown", + "followers_url": "https://api.github.com/users/NE-SmallTown/followers", + "following_url": "https://api.github.com/users/NE-SmallTown/following{/other_user}", + "gists_url": "https://api.github.com/users/NE-SmallTown/gists{/gist_id}", + "starred_url": "https://api.github.com/users/NE-SmallTown/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/NE-SmallTown/subscriptions", + "organizations_url": "https://api.github.com/users/NE-SmallTown/orgs", + "repos_url": "https://api.github.com/users/NE-SmallTown/repos", + "events_url": "https://api.github.com/users/NE-SmallTown/events{/privacy}", + "received_events_url": "https://api.github.com/users/NE-SmallTown/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/NE-SmallTown/React-QuietWater", + "description": "A comment component driven by React@16~", + "fork": false, + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater", + "forks_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/forks", + "keys_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/teams", + "hooks_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/hooks", + "issue_events_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/issues/events{/number}", + "events_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/events", + "assignees_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/assignees{/user}", + "branches_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/branches{/branch}", + "tags_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/tags", + "blobs_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/statuses/{sha}", + "languages_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/languages", + "stargazers_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/stargazers", + "contributors_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contributors", + "subscribers_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/subscribers", + "subscription_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/subscription", + "commits_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contents/{+path}", + "compare_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/merges", + "archive_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/downloads", + "issues_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/issues{/number}", + "pulls_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/pulls{/number}", + "milestones_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/milestones{/number}", + "notifications_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/labels{/name}", + "releases_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/releases{/id}", + "deployments_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/deployments", + "created_at": "2017-03-27T09:28:20Z", + "updated_at": "2019-03-28T10:13:58Z", + "pushed_at": "2017-09-12T05:40:43Z", + "git_url": "git://github.com/NE-SmallTown/React-QuietWater.git", + "ssh_url": "git@github.com:NE-SmallTown/React-QuietWater.git", + "clone_url": "https://github.com/NE-SmallTown/React-QuietWater.git", + "svn_url": "https://github.com/NE-SmallTown/React-QuietWater", + "homepage": "https://ne-smalltown.github.io/React-QuietWater/examples", + "size": 1539, + "stargazers_count": 6, + "watchers_count": 6, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "blog", + "blog-comment", + "comment", + "comments", + "comments-widget", + "component", + "react", + "react-component", + "react-components" + ], + "visibility": "public", + "forks": 0, + "open_issues": 1, + "watchers": 6, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 0, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/react_quietwater.commit b/apigh/2023-04-20/react_quietwater.commit new file mode 100644 index 00000000..31dcb5c8 --- /dev/null +++ b/apigh/2023-04-20/react_quietwater.commit @@ -0,0 +1,110 @@ +{ + "sha": "c91590261f288bfccaf658c207d798a35c355e8d", + "node_id": "MDY6Q29tbWl0ODYzMTY2NDY6YzkxNTkwMjYxZjI4OGJmY2NhZjY1OGMyMDdkNzk4YTM1YzM1NWU4ZA==", + "commit": { + "author": { + "name": "NE_SmallTown", + "email": "ne_smalltown@163.com", + "date": "2017-09-12T05:41:14Z" + }, + "committer": { + "name": "NE_SmallTown", + "email": "ne_smalltown@163.com", + "date": "2017-09-12T05:41:14Z" + }, + "message": "attempt to fix ci", + "tree": { + "sha": "7a9c192c789d6a6882ea20acb2b0be71f74efa21", + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/trees/7a9c192c789d6a6882ea20acb2b0be71f74efa21" + }, + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/git/commits/c91590261f288bfccaf658c207d798a35c355e8d", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits/c91590261f288bfccaf658c207d798a35c355e8d", + "html_url": "https://github.com/NE-SmallTown/React-QuietWater/commit/c91590261f288bfccaf658c207d798a35c355e8d", + "comments_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits/c91590261f288bfccaf658c207d798a35c355e8d/comments", + "author": { + "login": "NE-SmallTown", + "id": 18418010, + "node_id": "MDQ6VXNlcjE4NDE4MDEw", + "avatar_url": "https://avatars.githubusercontent.com/u/18418010?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/NE-SmallTown", + "html_url": "https://github.com/NE-SmallTown", + "followers_url": "https://api.github.com/users/NE-SmallTown/followers", + "following_url": "https://api.github.com/users/NE-SmallTown/following{/other_user}", + "gists_url": "https://api.github.com/users/NE-SmallTown/gists{/gist_id}", + "starred_url": "https://api.github.com/users/NE-SmallTown/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/NE-SmallTown/subscriptions", + "organizations_url": "https://api.github.com/users/NE-SmallTown/orgs", + "repos_url": "https://api.github.com/users/NE-SmallTown/repos", + "events_url": "https://api.github.com/users/NE-SmallTown/events{/privacy}", + "received_events_url": "https://api.github.com/users/NE-SmallTown/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "NE-SmallTown", + "id": 18418010, + "node_id": "MDQ6VXNlcjE4NDE4MDEw", + "avatar_url": "https://avatars.githubusercontent.com/u/18418010?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/NE-SmallTown", + "html_url": "https://github.com/NE-SmallTown", + "followers_url": "https://api.github.com/users/NE-SmallTown/followers", + "following_url": "https://api.github.com/users/NE-SmallTown/following{/other_user}", + "gists_url": "https://api.github.com/users/NE-SmallTown/gists{/gist_id}", + "starred_url": "https://api.github.com/users/NE-SmallTown/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/NE-SmallTown/subscriptions", + "organizations_url": "https://api.github.com/users/NE-SmallTown/orgs", + "repos_url": "https://api.github.com/users/NE-SmallTown/repos", + "events_url": "https://api.github.com/users/NE-SmallTown/events{/privacy}", + "received_events_url": "https://api.github.com/users/NE-SmallTown/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "0c9c8b2ef77f37a73cb04e301604a3d81ac7ac35", + "url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/commits/0c9c8b2ef77f37a73cb04e301604a3d81ac7ac35", + "html_url": "https://github.com/NE-SmallTown/React-QuietWater/commit/0c9c8b2ef77f37a73cb04e301604a3d81ac7ac35" + } + ], + "stats": { + "total": 4, + "additions": 3, + "deletions": 1 + }, + "files": [ + { + "sha": "8620c3198dcc3437fd53e8d9a9e1dba99a04de18", + "filename": ".babelrc", + "status": "modified", + "additions": 1, + "deletions": 0, + "changes": 1, + "blob_url": "https://github.com/NE-SmallTown/React-QuietWater/blob/c91590261f288bfccaf658c207d798a35c355e8d/.babelrc", + "raw_url": "https://github.com/NE-SmallTown/React-QuietWater/raw/c91590261f288bfccaf658c207d798a35c355e8d/.babelrc", + "contents_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contents/.babelrc?ref=c91590261f288bfccaf658c207d798a35c355e8d", + "patch": "@@ -3,6 +3,7 @@\n \"transform-decorators-legacy\",\n \"transform-object-rest-spread\",\n \"transform-export-extensions\",\n+ \"transform-class-properties\",\n [\n \"babel-plugin-react-css-modules-ne-smalltown\",\n {" + }, + { + "sha": "8a5d2c4756e4c5223516079e91a4206b34e58cb4", + "filename": "package.json", + "status": "modified", + "additions": 2, + "deletions": 1, + "changes": 3, + "blob_url": "https://github.com/NE-SmallTown/React-QuietWater/blob/c91590261f288bfccaf658c207d798a35c355e8d/package.json", + "raw_url": "https://github.com/NE-SmallTown/React-QuietWater/raw/c91590261f288bfccaf658c207d798a35c355e8d/package.json", + "contents_url": "https://api.github.com/repos/NE-SmallTown/React-QuietWater/contents/package.json?ref=c91590261f288bfccaf658c207d798a35c355e8d", + "patch": "@@ -23,7 +23,7 @@\n \"scripts\": {\n \"clean\": \"rimraf ./lib\",\n \"prebuild\": \"npm run clean\",\n- \"build\": \"./node_modules/.bin/babel src --out-dir lib --ignore src/examples/* && node ./bin/build\",\n+ \"build\": \"./node_modules/.bin/babel src --out-dir lib --ignore src/examples && node ./bin/build\",\n \"flow\": \"flow\",\n \"lint\": \"eslint src tests\",\n \"lint:fix\": \"npm run lint -- --fix\",\n@@ -94,6 +94,7 @@\n \"babel-loader\": \"^7.1.2\",\n \"babel-plugin-istanbul\": \"^3.0.0\",\n \"babel-plugin-react-css-modules-ne-smalltown\": \"^2.8.2\",\n+ \"babel-plugin-transform-class-properties\": \"^6.24.1\",\n \"babel-plugin-transform-decorators-legacy\": \"^1.3.4\",\n \"babel-plugin-transform-export-extensions\": \"^6.22.0\",\n \"babel-plugin-transform-object-rest-spread\": \"^6.23.0\"," + } + ] +} diff --git a/apigh/2023-04-20/realtime_commenting b/apigh/2023-04-20/realtime_commenting new file mode 100644 index 00000000..d5e30b54 --- /dev/null +++ b/apigh/2023-04-20/realtime_commenting @@ -0,0 +1,132 @@ +{ + "id": 3531293, + "node_id": "MDEwOlJlcG9zaXRvcnkzNTMxMjkz", + "name": "realtime-commenting", + "full_name": "pusher-community/realtime-commenting", + "private": false, + "owner": { + "login": "pusher-community", + "id": 12761934, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNzYxOTM0", + "avatar_url": "https://avatars.githubusercontent.com/u/12761934?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pusher-community", + "html_url": "https://github.com/pusher-community", + "followers_url": "https://api.github.com/users/pusher-community/followers", + "following_url": "https://api.github.com/users/pusher-community/following{/other_user}", + "gists_url": "https://api.github.com/users/pusher-community/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pusher-community/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pusher-community/subscriptions", + "organizations_url": "https://api.github.com/users/pusher-community/orgs", + "repos_url": "https://api.github.com/users/pusher-community/repos", + "events_url": "https://api.github.com/users/pusher-community/events{/privacy}", + "received_events_url": "https://api.github.com/users/pusher-community/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/pusher-community/realtime-commenting", + "description": "Realtime Blog Comment System", + "fork": false, + "url": "https://api.github.com/repos/pusher-community/realtime-commenting", + "forks_url": "https://api.github.com/repos/pusher-community/realtime-commenting/forks", + "keys_url": "https://api.github.com/repos/pusher-community/realtime-commenting/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pusher-community/realtime-commenting/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pusher-community/realtime-commenting/teams", + "hooks_url": "https://api.github.com/repos/pusher-community/realtime-commenting/hooks", + "issue_events_url": "https://api.github.com/repos/pusher-community/realtime-commenting/issues/events{/number}", + "events_url": "https://api.github.com/repos/pusher-community/realtime-commenting/events", + "assignees_url": "https://api.github.com/repos/pusher-community/realtime-commenting/assignees{/user}", + "branches_url": "https://api.github.com/repos/pusher-community/realtime-commenting/branches{/branch}", + "tags_url": "https://api.github.com/repos/pusher-community/realtime-commenting/tags", + "blobs_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pusher-community/realtime-commenting/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pusher-community/realtime-commenting/languages", + "stargazers_url": "https://api.github.com/repos/pusher-community/realtime-commenting/stargazers", + "contributors_url": "https://api.github.com/repos/pusher-community/realtime-commenting/contributors", + "subscribers_url": "https://api.github.com/repos/pusher-community/realtime-commenting/subscribers", + "subscription_url": "https://api.github.com/repos/pusher-community/realtime-commenting/subscription", + "commits_url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pusher-community/realtime-commenting/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pusher-community/realtime-commenting/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pusher-community/realtime-commenting/contents/{+path}", + "compare_url": "https://api.github.com/repos/pusher-community/realtime-commenting/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pusher-community/realtime-commenting/merges", + "archive_url": "https://api.github.com/repos/pusher-community/realtime-commenting/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pusher-community/realtime-commenting/downloads", + "issues_url": "https://api.github.com/repos/pusher-community/realtime-commenting/issues{/number}", + "pulls_url": "https://api.github.com/repos/pusher-community/realtime-commenting/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pusher-community/realtime-commenting/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pusher-community/realtime-commenting/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pusher-community/realtime-commenting/labels{/name}", + "releases_url": "https://api.github.com/repos/pusher-community/realtime-commenting/releases{/id}", + "deployments_url": "https://api.github.com/repos/pusher-community/realtime-commenting/deployments", + "created_at": "2012-02-24T00:16:21Z", + "updated_at": "2022-08-09T11:21:09Z", + "pushed_at": "2016-04-22T10:40:24Z", + "git_url": "git://github.com/pusher-community/realtime-commenting.git", + "ssh_url": "git@github.com:pusher-community/realtime-commenting.git", + "clone_url": "https://github.com/pusher-community/realtime-commenting.git", + "svn_url": "https://github.com/pusher-community/realtime-commenting", + "homepage": "http://realtime-commenting.herokuapp.com/", + "size": 44, + "stargazers_count": 64, + "watchers_count": 64, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 52, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 52, + "open_issues": 1, + "watchers": 64, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "pusher-community", + "id": 12761934, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEyNzYxOTM0", + "avatar_url": "https://avatars.githubusercontent.com/u/12761934?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pusher-community", + "html_url": "https://github.com/pusher-community", + "followers_url": "https://api.github.com/users/pusher-community/followers", + "following_url": "https://api.github.com/users/pusher-community/following{/other_user}", + "gists_url": "https://api.github.com/users/pusher-community/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pusher-community/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pusher-community/subscriptions", + "organizations_url": "https://api.github.com/users/pusher-community/orgs", + "repos_url": "https://api.github.com/users/pusher-community/repos", + "events_url": "https://api.github.com/users/pusher-community/events{/privacy}", + "received_events_url": "https://api.github.com/users/pusher-community/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 52, + "subscribers_count": 17 +} diff --git a/apigh/2023-04-20/realtime_commenting.commit b/apigh/2023-04-20/realtime_commenting.commit new file mode 100644 index 00000000..aaf36f4a --- /dev/null +++ b/apigh/2023-04-20/realtime_commenting.commit @@ -0,0 +1,98 @@ +{ + "sha": "9926833c3a33bd194bd69df34bc48d96e4da40b1", + "node_id": "MDY6Q29tbWl0MzUzMTI5Mzo5OTI2ODMzYzNhMzNiZDE5NGJkNjlkZjM0YmM0OGQ5NmU0ZGE0MGIx", + "commit": { + "author": { + "name": "zimbatm", + "email": "zimbatm@zimbatm.com", + "date": "2016-04-22T10:38:35Z" + }, + "committer": { + "name": "zimbatm", + "email": "zimbatm@zimbatm.com", + "date": "2016-04-22T10:39:42Z" + }, + "message": "Avoids potential duplicates\n\nThis could theoritically happen if the page is loaded and the pusher\nevent happens at the same time.", + "tree": { + "sha": "44c71a9808f02dec3de5fe5863b165b57a043750", + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/trees/44c71a9808f02dec3de5fe5863b165b57a043750" + }, + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/git/commits/9926833c3a33bd194bd69df34bc48d96e4da40b1", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits/9926833c3a33bd194bd69df34bc48d96e4da40b1", + "html_url": "https://github.com/pusher-community/realtime-commenting/commit/9926833c3a33bd194bd69df34bc48d96e4da40b1", + "comments_url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits/9926833c3a33bd194bd69df34bc48d96e4da40b1/comments", + "author": { + "login": "zimbatm", + "id": 3248, + "node_id": "MDQ6VXNlcjMyNDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3248?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/zimbatm", + "html_url": "https://github.com/zimbatm", + "followers_url": "https://api.github.com/users/zimbatm/followers", + "following_url": "https://api.github.com/users/zimbatm/following{/other_user}", + "gists_url": "https://api.github.com/users/zimbatm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zimbatm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zimbatm/subscriptions", + "organizations_url": "https://api.github.com/users/zimbatm/orgs", + "repos_url": "https://api.github.com/users/zimbatm/repos", + "events_url": "https://api.github.com/users/zimbatm/events{/privacy}", + "received_events_url": "https://api.github.com/users/zimbatm/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "zimbatm", + "id": 3248, + "node_id": "MDQ6VXNlcjMyNDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3248?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/zimbatm", + "html_url": "https://github.com/zimbatm", + "followers_url": "https://api.github.com/users/zimbatm/followers", + "following_url": "https://api.github.com/users/zimbatm/following{/other_user}", + "gists_url": "https://api.github.com/users/zimbatm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zimbatm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zimbatm/subscriptions", + "organizations_url": "https://api.github.com/users/zimbatm/orgs", + "repos_url": "https://api.github.com/users/zimbatm/repos", + "events_url": "https://api.github.com/users/zimbatm/events{/privacy}", + "received_events_url": "https://api.github.com/users/zimbatm/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "0c5447fa2554e09f18a74bc5b57c5b8998eb682f", + "url": "https://api.github.com/repos/pusher-community/realtime-commenting/commits/0c5447fa2554e09f18a74bc5b57c5b8998eb682f", + "html_url": "https://github.com/pusher-community/realtime-commenting/commit/0c5447fa2554e09f18a74bc5b57c5b8998eb682f" + } + ], + "stats": { + "total": 4, + "additions": 4, + "deletions": 0 + }, + "files": [ + { + "sha": "64d74f6b91b491b66ef507d2cb4cdd568589b7af", + "filename": "js/app.js", + "status": "modified", + "additions": 4, + "deletions": 0, + "changes": 4, + "blob_url": "https://github.com/pusher-community/realtime-commenting/blob/9926833c3a33bd194bd69df34bc48d96e4da40b1/js%2Fapp.js", + "raw_url": "https://github.com/pusher-community/realtime-commenting/raw/9926833c3a33bd194bd69df34bc48d96e4da40b1/js%2Fapp.js", + "contents_url": "https://api.github.com/repos/pusher-community/realtime-commenting/contents/js%2Fapp.js?ref=9926833c3a33bd194bd69df34bc48d96e4da40b1", + "patch": "@@ -44,6 +44,10 @@ function postError(jqXHR, textStatus, errorThrown) {\n }\n \n function displayComment(data) {\n+ if ($(\"#\" + data.id).length > 0) {\n+ // Ignore comment as it already exists\n+ return\n+ }\n var commentHtml = createComment(data);\n var commentEl = $(commentHtml);\n commentEl.hide();" + } + ] +} diff --git a/apigh/2023-04-20/remark b/apigh/2023-04-20/remark new file mode 100644 index 00000000..7531161f --- /dev/null +++ b/apigh/2023-04-20/remark @@ -0,0 +1,124 @@ +{ + "id": 114829503, + "node_id": "MDEwOlJlcG9zaXRvcnkxMTQ4Mjk1MDM=", + "name": "remark42", + "full_name": "umputun/remark42", + "private": false, + "owner": { + "login": "umputun", + "id": 535880, + "node_id": "MDQ6VXNlcjUzNTg4MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/535880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/umputun", + "html_url": "https://github.com/umputun", + "followers_url": "https://api.github.com/users/umputun/followers", + "following_url": "https://api.github.com/users/umputun/following{/other_user}", + "gists_url": "https://api.github.com/users/umputun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/umputun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/umputun/subscriptions", + "organizations_url": "https://api.github.com/users/umputun/orgs", + "repos_url": "https://api.github.com/users/umputun/repos", + "events_url": "https://api.github.com/users/umputun/events{/privacy}", + "received_events_url": "https://api.github.com/users/umputun/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/umputun/remark42", + "description": "comment engine", + "fork": false, + "url": "https://api.github.com/repos/umputun/remark42", + "forks_url": "https://api.github.com/repos/umputun/remark42/forks", + "keys_url": "https://api.github.com/repos/umputun/remark42/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/umputun/remark42/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/umputun/remark42/teams", + "hooks_url": "https://api.github.com/repos/umputun/remark42/hooks", + "issue_events_url": "https://api.github.com/repos/umputun/remark42/issues/events{/number}", + "events_url": "https://api.github.com/repos/umputun/remark42/events", + "assignees_url": "https://api.github.com/repos/umputun/remark42/assignees{/user}", + "branches_url": "https://api.github.com/repos/umputun/remark42/branches{/branch}", + "tags_url": "https://api.github.com/repos/umputun/remark42/tags", + "blobs_url": "https://api.github.com/repos/umputun/remark42/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/umputun/remark42/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/umputun/remark42/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/umputun/remark42/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/umputun/remark42/statuses/{sha}", + "languages_url": "https://api.github.com/repos/umputun/remark42/languages", + "stargazers_url": "https://api.github.com/repos/umputun/remark42/stargazers", + "contributors_url": "https://api.github.com/repos/umputun/remark42/contributors", + "subscribers_url": "https://api.github.com/repos/umputun/remark42/subscribers", + "subscription_url": "https://api.github.com/repos/umputun/remark42/subscription", + "commits_url": "https://api.github.com/repos/umputun/remark42/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/umputun/remark42/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/umputun/remark42/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/umputun/remark42/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/{+path}", + "compare_url": "https://api.github.com/repos/umputun/remark42/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/umputun/remark42/merges", + "archive_url": "https://api.github.com/repos/umputun/remark42/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/umputun/remark42/downloads", + "issues_url": "https://api.github.com/repos/umputun/remark42/issues{/number}", + "pulls_url": "https://api.github.com/repos/umputun/remark42/pulls{/number}", + "milestones_url": "https://api.github.com/repos/umputun/remark42/milestones{/number}", + "notifications_url": "https://api.github.com/repos/umputun/remark42/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/umputun/remark42/labels{/name}", + "releases_url": "https://api.github.com/repos/umputun/remark42/releases{/id}", + "deployments_url": "https://api.github.com/repos/umputun/remark42/deployments", + "created_at": "2017-12-20T01:42:35Z", + "updated_at": "2023-04-19T22:29:38Z", + "pushed_at": "2023-04-10T04:30:22Z", + "git_url": "git://github.com/umputun/remark42.git", + "ssh_url": "git@github.com:umputun/remark42.git", + "clone_url": "https://github.com/umputun/remark42.git", + "svn_url": "https://github.com/umputun/remark42", + "homepage": "https://remark42.com", + "size": 26778, + "stargazers_count": 4280, + "watchers_count": 4280, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": true, + "forks_count": 345, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 87, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "comment-system", + "commenting", + "commenting-engines", + "comments-widget", + "privacy", + "remark42", + "self-hosted" + ], + "visibility": "public", + "forks": 345, + "open_issues": 87, + "watchers": 4280, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 345, + "subscribers_count": 61 +} diff --git a/apigh/2023-04-20/remark.commit b/apigh/2023-04-20/remark.commit new file mode 100644 index 00000000..5e3a1d2d --- /dev/null +++ b/apigh/2023-04-20/remark.commit @@ -0,0 +1,146 @@ +{ + "sha": "26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "node_id": "C_kwDOBtgov9oAKDI2ZjgyYWQ5NWMwOWZlNzNjOTU5MzVkNGM1MDE0ZTk2MDZiYzdmZmI", + "commit": { + "author": { + "name": "Dmitry Verkhoturov", + "email": "paskal.07@gmail.com", + "date": "2023-01-09T20:19:34Z" + }, + "committer": { + "name": "Umputun", + "email": "umputun@gmail.com", + "date": "2023-04-10T04:30:21Z" + }, + "message": "don't allow relative links in comments\n\n(url) is a text inserted by default and never an intended URL.\n\nThat additional validation will ensure that users won't post relative\nlinks because they are rarely intended.", + "tree": { + "sha": "84c61c3a2b07b48559af573c7a58fdb3b4e412d0", + "url": "https://api.github.com/repos/umputun/remark42/git/trees/84c61c3a2b07b48559af573c7a58fdb3b4e412d0" + }, + "url": "https://api.github.com/repos/umputun/remark42/git/commits/26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/umputun/remark42/commits/26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "html_url": "https://github.com/umputun/remark42/commit/26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "comments_url": "https://api.github.com/repos/umputun/remark42/commits/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/comments", + "author": { + "login": "paskal", + "id": 712534, + "node_id": "MDQ6VXNlcjcxMjUzNA==", + "avatar_url": "https://avatars.githubusercontent.com/u/712534?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/paskal", + "html_url": "https://github.com/paskal", + "followers_url": "https://api.github.com/users/paskal/followers", + "following_url": "https://api.github.com/users/paskal/following{/other_user}", + "gists_url": "https://api.github.com/users/paskal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/paskal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/paskal/subscriptions", + "organizations_url": "https://api.github.com/users/paskal/orgs", + "repos_url": "https://api.github.com/users/paskal/repos", + "events_url": "https://api.github.com/users/paskal/events{/privacy}", + "received_events_url": "https://api.github.com/users/paskal/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "umputun", + "id": 535880, + "node_id": "MDQ6VXNlcjUzNTg4MA==", + "avatar_url": "https://avatars.githubusercontent.com/u/535880?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/umputun", + "html_url": "https://github.com/umputun", + "followers_url": "https://api.github.com/users/umputun/followers", + "following_url": "https://api.github.com/users/umputun/following{/other_user}", + "gists_url": "https://api.github.com/users/umputun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/umputun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/umputun/subscriptions", + "organizations_url": "https://api.github.com/users/umputun/orgs", + "repos_url": "https://api.github.com/users/umputun/repos", + "events_url": "https://api.github.com/users/umputun/events{/privacy}", + "received_events_url": "https://api.github.com/users/umputun/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "1b90604b2d019002e66c5f9f74c1e09ce45db2cd", + "url": "https://api.github.com/repos/umputun/remark42/commits/1b90604b2d019002e66c5f9f74c1e09ce45db2cd", + "html_url": "https://github.com/umputun/remark42/commit/1b90604b2d019002e66c5f9f74c1e09ce45db2cd" + } + ], + "stats": { + "total": 89, + "additions": 67, + "deletions": 22 + }, + "files": [ + { + "sha": "6537519b9f36661417fec9a1c547acdbd2256b67", + "filename": "backend/app/rest/api/rest_private_test.go", + "status": "modified", + "additions": 19, + "deletions": 0, + "changes": 19, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Frest%2Fapi%2Frest_private_test.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Frest%2Fapi%2Frest_private_test.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Frest%2Fapi%2Frest_private_test.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -166,6 +166,25 @@ func TestRest_CreateWithRestrictedWord(t *testing.T) {\n \tassert.Equal(t, \"invalid comment\", c[\"details\"])\n }\n \n+func TestRest_CreateRelativeURL(t *testing.T) {\n+\tts, _, teardown := startupT(t)\n+\tdefer teardown()\n+\n+\t// check that it's not possible to click insert URL button and not alter the URL in it (which is `url` by default)\n+\trelativeURLText := `{\"text\": \"here is a link with relative URL: [google.com](url)\", \"locator\":{\"url\": \"https://radio-t.com/blah1\", \"site\": \"remark42\"}}`\n+\tresp, err := post(t, ts.URL+\"/api/v1/comment\", relativeURLText)\n+\tassert.NoError(t, err)\n+\tassert.Equal(t, http.StatusBadRequest, resp.StatusCode)\n+\tb, err := io.ReadAll(resp.Body)\n+\tassert.NoError(t, err)\n+\tassert.NoError(t, resp.Body.Close())\n+\tc := R.JSON{}\n+\terr = json.Unmarshal(b, &c)\n+\tassert.NoError(t, err)\n+\tassert.Equal(t, \"links should start with mailto:, http:// or https://\", c[\"error\"])\n+\tassert.Equal(t, \"invalid comment\", c[\"details\"])\n+}\n+\n func TestRest_CreateRejected(t *testing.T) {\n \tts, _, teardown := startupT(t)\n \tdefer teardown()" + }, + { + "sha": "bd7c09f6d92b1c8c8d0c985c04e4c413fb3f2276", + "filename": "backend/app/store/comment.go", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fcomment.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fcomment.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fcomment.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -121,8 +121,8 @@ func (c *Comment) Sanitize() {\n \t// special case for embedding the quotes from Twitter\n \tp.AllowAttrs(\"class\").Matching(regexp.MustCompile(\"^twitter-tweet$\")).OnElements(\"blockquote\")\n \t// this is list of tag classes which could be produced by chroma code renderer\n-\t// source: https://github.com/alecthomas/chroma/blob/cc2dd5b/types.go#L211-L307\n-\tconst codeSpanClassRegex = \"^(bg|chroma|line|ln|lnt|hl|lntable|lntd|cl|w|err|x|k|kc\" +\n+\t// source: https://github.com/alecthomas/chroma/blob/c263f6f/types.go#L209-L306\n+\tconst codeSpanClassRegex = \"^(bg|chroma|line|ln|lnt|hl|lntable|lntd|lnlinks|cl|w|err|x|k|kc\" +\n \t\t\"|kd|kn|kp|kr|kt|n|na|nb|bp|nc|no|nd|ni|ne|nf|fm|py|nl|nn|nx|nt|nv|vc|vg\" +\n \t\t\"|vi|vm|l|ld|s|sa|sb|sc|dl|sd|s2|se|sh|si|sx|sr|s1|ss|m|mb|mf|mh|mi|il\" +\n \t\t\"|mo|o|ow|p|c|ch|cm|cp|cpf|c1|cs|g|gd|ge|gr|gh|gi|go|gp|gs|gu|gt|gl)$\"" + }, + { + "sha": "864a9b9fe5eaf142121cfcf3620a9e70c9284903", + "filename": "backend/app/store/formatter.go", + "status": "modified", + "additions": 17, + "deletions": 11, + "changes": 28, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fformatter.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fformatter.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fformatter.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -42,17 +42,8 @@ func (f *CommentFormatter) Format(c Comment) Comment {\n \n // FormatText converts text with markdown processor, applies external converters and shortens links\n func (f *CommentFormatter) FormatText(txt string) (res string) {\n-\tmdExt := bf.NoIntraEmphasis | bf.Tables | bf.FencedCode |\n-\t\tbf.Strikethrough | bf.SpaceHeadings | bf.HardLineBreak |\n-\t\tbf.BackslashLineBreak | bf.Autolink\n-\n-\trend := bf.NewHTMLRenderer(bf.HTMLRendererParameters{\n-\t\tFlags: bf.Smartypants | bf.SmartypantsFractions | bf.SmartypantsDashes | bf.SmartypantsAngledQuotes,\n-\t})\n-\n-\textRend := bfchroma.NewRenderer(bfchroma.Extend(rend), bfchroma.ChromaOptions(html.WithClasses(true)))\n-\n-\tres = string(bf.Run([]byte(txt), bf.WithExtensions(mdExt), bf.WithRenderer(extRend)))\n+\tmdExt, rend := GetMdExtensionsAndRenderer()\n+\tres = string(bf.Run([]byte(txt), bf.WithExtensions(mdExt), bf.WithRenderer(rend)))\n \tres = f.unEscape(res)\n \n \tfor _, conv := range f.converters {\n@@ -126,3 +117,18 @@ func (f *CommentFormatter) lazyImage(commentHTML string) (resHTML string) {\n \t}\n \treturn resHTML\n }\n+\n+// GetMdExtensionsAndRenderer returns blackfriday extensions and renderer used for rendering markdown\n+// within store module.\n+func GetMdExtensionsAndRenderer() (bf.Extensions, *bfchroma.Renderer) {\n+\tmdExt := bf.NoIntraEmphasis | bf.Tables | bf.FencedCode |\n+\t\tbf.Strikethrough | bf.SpaceHeadings | bf.HardLineBreak |\n+\t\tbf.BackslashLineBreak | bf.Autolink\n+\n+\trend := bf.NewHTMLRenderer(bf.HTMLRendererParameters{\n+\t\tFlags: bf.Smartypants | bf.SmartypantsFractions | bf.SmartypantsDashes | bf.SmartypantsAngledQuotes,\n+\t})\n+\n+\textRend := bfchroma.NewRenderer(bfchroma.Extend(rend), bfchroma.ChromaOptions(html.WithClasses(true)))\n+\treturn mdExt, extRend\n+}" + }, + { + "sha": "e03ccc2ad75001f48e49f4b0db81fbd8185e22db", + "filename": "backend/app/store/service/service.go", + "status": "modified", + "additions": 19, + "deletions": 2, + "changes": 21, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fservice%2Fservice.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -14,6 +14,7 @@ import (\n \tlog \"github.com/go-pkgz/lgr\"\n \t\"github.com/google/uuid\"\n \t\"github.com/hashicorp/go-multierror\"\n+\tbf \"github.com/russross/blackfriday/v2\"\n \n \t\"github.com/umputun/remark42/backend/app/store\"\n \t\"github.com/umputun/remark42/backend/app/store/admin\"\n@@ -627,7 +628,9 @@ func (s *DataStore) Counts(siteID string, postIDs []string) ([]store.PostInfo, e\n \treturn res, nil\n }\n \n-// ValidateComment checks if comment size below max and user fields set\n+// ValidateComment checks if comment size below max and user fields set.\n+// It also validates the absence of relative links as they are almost never the intention of the commenter,\n+// usually added by mistakes and only create confusion.\n func (s *DataStore) ValidateComment(c *store.Comment) error {\n \tmaxSize := s.MaxCommentSize\n \tif s.MaxCommentSize <= 0 {\n@@ -642,7 +645,21 @@ func (s *DataStore) ValidateComment(c *store.Comment) error {\n \tif c.User.ID == \"\" || c.User.Name == \"\" {\n \t\treturn fmt.Errorf(\"empty user info\")\n \t}\n-\treturn nil\n+\n+\tmdExt, rend := store.GetMdExtensionsAndRenderer()\n+\tparser := bf.New(bf.WithRenderer(rend), bf.WithExtensions(bf.CommonExtensions), bf.WithExtensions(mdExt))\n+\tvar wrongLinkError error\n+\tparser.Parse([]byte(c.Orig)).Walk(func(node *bf.Node, entering bool) bf.WalkStatus {\n+\t\tif len(node.LinkData.Destination) != 0 &&\n+\t\t\t!(strings.HasPrefix(string(node.LinkData.Destination), \"http://\") ||\n+\t\t\t\tstrings.HasPrefix(string(node.LinkData.Destination), \"https://\") ||\n+\t\t\t\tstrings.HasPrefix(string(node.LinkData.Destination), \"mailto:\")) {\n+\t\t\twrongLinkError = fmt.Errorf(\"links should start with mailto:, http:// or https://\")\n+\t\t\treturn bf.Terminate\n+\t\t}\n+\t\treturn bf.GoToNext\n+\t})\n+\treturn wrongLinkError\n }\n \n // IsAdmin checks if usesID in the list of admins" + }, + { + "sha": "13638fc522fe9c074879783092b81695ece48a2a", + "filename": "backend/app/store/service/service_test.go", + "status": "modified", + "additions": 10, + "deletions": 7, + "changes": 17, + "blob_url": "https://github.com/umputun/remark42/blob/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice_test.go", + "raw_url": "https://github.com/umputun/remark42/raw/26f82ad95c09fe73c95935d4c5014e9606bc7ffb/backend%2Fapp%2Fstore%2Fservice%2Fservice_test.go", + "contents_url": "https://api.github.com/repos/umputun/remark42/contents/backend%2Fapp%2Fstore%2Fservice%2Fservice_test.go?ref=26f82ad95c09fe73c95935d4c5014e9606bc7ffb", + "patch": "@@ -780,22 +780,25 @@ func TestService_ValidateComment(t *testing.T) {\n \n \ttbl := []struct {\n \t\tinp store.Comment\n-\t\terr error\n+\t\terr string\n \t}{\n-\t\t{inp: store.Comment{}, err: fmt.Errorf(\"empty comment text\")},\n-\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: nil},\n-\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\"}}, err: fmt.Errorf(\"empty user info\")},\n-\t\t{inp: store.Comment{Orig: longText, User: store.User{ID: \"myid\", Name: \"name\"}}, err: fmt.Errorf(\"comment text exceeded max allowed size 2000 (4000)\")},\n+\t\t{inp: store.Comment{}, err: \"empty comment text\"},\n+\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"\"},\n+\t\t{inp: store.Comment{Orig: \"something blah\", User: store.User{ID: \"myid\"}}, err: \"empty user info\"},\n+\t\t{inp: store.Comment{Orig: longText, User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"comment text exceeded max allowed size 2000 (4000)\"},\n+\t\t{inp: store.Comment{Orig: \"here is a link with relative URL: [google.com](url)\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"links should start with mailto:, http:// or https://\"},\n+\t\t{inp: store.Comment{Orig: \"here is a link with relative URL: [google.com](url)\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"links should start with mailto:, http:// or https://\"},\n+\t\t{inp: store.Comment{Orig: \"multiple links, one is bad: [test](http://test) [test2](bad_url) [test3](https://test3)\", User: store.User{ID: \"myid\", Name: \"name\"}}, err: \"links should start with mailto:, http:// or https://\"},\n \t}\n \n \tfor n, tt := range tbl {\n \t\terr := b.ValidateComment(&tt.inp)\n-\t\tif tt.err == nil {\n+\t\tif tt.err == \"\" {\n \t\t\tassert.NoError(t, err, \"check #%d\", n)\n \t\t\tcontinue\n \t\t}\n \t\trequire.Error(t, err)\n-\t\tassert.EqualError(t, tt.err, err.Error(), \"check #%d\", n)\n+\t\tassert.EqualError(t, err, tt.err, \"check #%d\", n)\n \t}\n }\n " + } + ] +} diff --git a/apigh/2023-04-20/rocket_firm b/apigh/2023-04-20/rocket_firm new file mode 100644 index 00000000..f8d0e1e9 --- /dev/null +++ b/apigh/2023-04-20/rocket_firm @@ -0,0 +1,118 @@ +{ + "id": 53047924, + "node_id": "MDEwOlJlcG9zaXRvcnk1MzA0NzkyNA==", + "name": "yii2-rocket-comments", + "full_name": "naffiq/yii2-rocket-comments", + "private": false, + "owner": { + "login": "naffiq", + "id": 3990098, + "node_id": "MDQ6VXNlcjM5OTAwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3990098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/naffiq", + "html_url": "https://github.com/naffiq", + "followers_url": "https://api.github.com/users/naffiq/followers", + "following_url": "https://api.github.com/users/naffiq/following{/other_user}", + "gists_url": "https://api.github.com/users/naffiq/gists{/gist_id}", + "starred_url": "https://api.github.com/users/naffiq/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/naffiq/subscriptions", + "organizations_url": "https://api.github.com/users/naffiq/orgs", + "repos_url": "https://api.github.com/users/naffiq/repos", + "events_url": "https://api.github.com/users/naffiq/events{/privacy}", + "received_events_url": "https://api.github.com/users/naffiq/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/naffiq/yii2-rocket-comments", + "description": "ะกะธัั‚ะตะผะฐ ะบะพะผะผะตะฝั‚ะฐั€ะธะตะฒ ั ั€ะตะนั‚ะธะฝะณะพะผ ะธ ะฟะปัŽัˆะบะฐะผะธ", + "fork": false, + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments", + "forks_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/forks", + "keys_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/teams", + "hooks_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/hooks", + "issue_events_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/events", + "assignees_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/tags", + "blobs_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/languages", + "stargazers_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/stargazers", + "contributors_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/contributors", + "subscribers_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/subscribers", + "subscription_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/subscription", + "commits_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/merges", + "archive_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/downloads", + "issues_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/deployments", + "created_at": "2016-03-03T12:17:01Z", + "updated_at": "2016-11-28T04:52:06Z", + "pushed_at": "2017-03-03T09:34:32Z", + "git_url": "git://github.com/naffiq/yii2-rocket-comments.git", + "ssh_url": "git@github.com:naffiq/yii2-rocket-comments.git", + "clone_url": "https://github.com/naffiq/yii2-rocket-comments.git", + "svn_url": "https://github.com/naffiq/yii2-rocket-comments", + "homepage": null, + "size": 61, + "stargazers_count": 1, + "watchers_count": 1, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 3, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 3, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 3, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/rocket_firm.commit b/apigh/2023-04-20/rocket_firm.commit new file mode 100644 index 00000000..1e3e3808 --- /dev/null +++ b/apigh/2023-04-20/rocket_firm.commit @@ -0,0 +1,98 @@ +{ + "sha": "0663fadc304731fafff3e15253e93e3b802fe68d", + "node_id": "MDY6Q29tbWl0NTMwNDc5MjQ6MDY2M2ZhZGMzMDQ3MzFmYWZmZjNlMTUyNTNlOTNlM2I4MDJmZTY4ZA==", + "commit": { + "author": { + "name": "Galymzhan Abdugalimov", + "email": "abdu.galymzhan@gmail.com", + "date": "2017-03-03T09:34:06Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2017-03-03T09:34:06Z" + }, + "message": "Updated date helper dependencies", + "tree": { + "sha": "d536a34b75128ecb4404b504bf7c5c71b8a00327", + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/trees/d536a34b75128ecb4404b504bf7c5c71b8a00327" + }, + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/git/commits/0663fadc304731fafff3e15253e93e3b802fe68d", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits/0663fadc304731fafff3e15253e93e3b802fe68d", + "html_url": "https://github.com/naffiq/yii2-rocket-comments/commit/0663fadc304731fafff3e15253e93e3b802fe68d", + "comments_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits/0663fadc304731fafff3e15253e93e3b802fe68d/comments", + "author": { + "login": "naffiq", + "id": 3990098, + "node_id": "MDQ6VXNlcjM5OTAwOTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/3990098?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/naffiq", + "html_url": "https://github.com/naffiq", + "followers_url": "https://api.github.com/users/naffiq/followers", + "following_url": "https://api.github.com/users/naffiq/following{/other_user}", + "gists_url": "https://api.github.com/users/naffiq/gists{/gist_id}", + "starred_url": "https://api.github.com/users/naffiq/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/naffiq/subscriptions", + "organizations_url": "https://api.github.com/users/naffiq/orgs", + "repos_url": "https://api.github.com/users/naffiq/repos", + "events_url": "https://api.github.com/users/naffiq/events{/privacy}", + "received_events_url": "https://api.github.com/users/naffiq/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "75c797f18ace657479620466d4e0433db92c0841", + "url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/commits/75c797f18ace657479620466d4e0433db92c0841", + "html_url": "https://github.com/naffiq/yii2-rocket-comments/commit/75c797f18ace657479620466d4e0433db92c0841" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "1a5435789949109403e23d050a591bde6b945e7f", + "filename": "composer.json", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/naffiq/yii2-rocket-comments/blob/0663fadc304731fafff3e15253e93e3b802fe68d/composer.json", + "raw_url": "https://github.com/naffiq/yii2-rocket-comments/raw/0663fadc304731fafff3e15253e93e3b802fe68d/composer.json", + "contents_url": "https://api.github.com/repos/naffiq/yii2-rocket-comments/contents/composer.json?ref=0663fadc304731fafff3e15253e93e3b802fe68d", + "patch": "@@ -4,7 +4,7 @@\n \"type\": \"yii2-extension\",\n \"require\": {\n \"yiisoft/yii2\": \"~2.0.0\",\n- \"naffiq/yii2-helpers\": \"^v0.0.2\",\n+ \"naffiq/yii2-helpers\": \"^v0.0.3\",\n \"creocoder/yii2-nested-sets\": \"^0.9.0\"\n },\n \"require-dev\": {" + } + ] +} diff --git a/apigh/2023-04-20/schnak b/apigh/2023-04-20/schnak new file mode 100644 index 00000000..23b9693a --- /dev/null +++ b/apigh/2023-04-20/schnak @@ -0,0 +1,142 @@ +{ + "id": 105789365, + "node_id": "MDEwOlJlcG9zaXRvcnkxMDU3ODkzNjU=", + "name": "schnack", + "full_name": "schn4ck/schnack", + "private": false, + "owner": { + "login": "schn4ck", + "id": 35145986, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM1MTQ1OTg2", + "avatar_url": "https://avatars.githubusercontent.com/u/35145986?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/schn4ck", + "html_url": "https://github.com/schn4ck", + "followers_url": "https://api.github.com/users/schn4ck/followers", + "following_url": "https://api.github.com/users/schn4ck/following{/other_user}", + "gists_url": "https://api.github.com/users/schn4ck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/schn4ck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/schn4ck/subscriptions", + "organizations_url": "https://api.github.com/users/schn4ck/orgs", + "repos_url": "https://api.github.com/users/schn4ck/repos", + "events_url": "https://api.github.com/users/schn4ck/events{/privacy}", + "received_events_url": "https://api.github.com/users/schn4ck/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/schn4ck/schnack", + "description": "๐Ÿ—ฃ๏ธ Simple self-hosted node app for Disqus-like drop-in commenting on static websites ", + "fork": false, + "url": "https://api.github.com/repos/schn4ck/schnack", + "forks_url": "https://api.github.com/repos/schn4ck/schnack/forks", + "keys_url": "https://api.github.com/repos/schn4ck/schnack/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/schn4ck/schnack/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/schn4ck/schnack/teams", + "hooks_url": "https://api.github.com/repos/schn4ck/schnack/hooks", + "issue_events_url": "https://api.github.com/repos/schn4ck/schnack/issues/events{/number}", + "events_url": "https://api.github.com/repos/schn4ck/schnack/events", + "assignees_url": "https://api.github.com/repos/schn4ck/schnack/assignees{/user}", + "branches_url": "https://api.github.com/repos/schn4ck/schnack/branches{/branch}", + "tags_url": "https://api.github.com/repos/schn4ck/schnack/tags", + "blobs_url": "https://api.github.com/repos/schn4ck/schnack/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/schn4ck/schnack/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/schn4ck/schnack/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/schn4ck/schnack/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/schn4ck/schnack/statuses/{sha}", + "languages_url": "https://api.github.com/repos/schn4ck/schnack/languages", + "stargazers_url": "https://api.github.com/repos/schn4ck/schnack/stargazers", + "contributors_url": "https://api.github.com/repos/schn4ck/schnack/contributors", + "subscribers_url": "https://api.github.com/repos/schn4ck/schnack/subscribers", + "subscription_url": "https://api.github.com/repos/schn4ck/schnack/subscription", + "commits_url": "https://api.github.com/repos/schn4ck/schnack/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/schn4ck/schnack/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/schn4ck/schnack/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/schn4ck/schnack/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/schn4ck/schnack/contents/{+path}", + "compare_url": "https://api.github.com/repos/schn4ck/schnack/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/schn4ck/schnack/merges", + "archive_url": "https://api.github.com/repos/schn4ck/schnack/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/schn4ck/schnack/downloads", + "issues_url": "https://api.github.com/repos/schn4ck/schnack/issues{/number}", + "pulls_url": "https://api.github.com/repos/schn4ck/schnack/pulls{/number}", + "milestones_url": "https://api.github.com/repos/schn4ck/schnack/milestones{/number}", + "notifications_url": "https://api.github.com/repos/schn4ck/schnack/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/schn4ck/schnack/labels{/name}", + "releases_url": "https://api.github.com/repos/schn4ck/schnack/releases{/id}", + "deployments_url": "https://api.github.com/repos/schn4ck/schnack/deployments", + "created_at": "2017-10-04T16:09:58Z", + "updated_at": "2023-04-19T11:09:40Z", + "pushed_at": "2023-03-03T07:38:46Z", + "git_url": "git://github.com/schn4ck/schnack.git", + "ssh_url": "git@github.com:schn4ck/schnack.git", + "clone_url": "https://github.com/schn4ck/schnack.git", + "svn_url": "https://github.com/schn4ck/schnack", + "homepage": "https://schnack.cool/", + "size": 1849, + "stargazers_count": 1795, + "watchers_count": 1795, + "language": "JavaScript", + "has_issues": true, + "has_projects": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 97, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 46, + "license": { + "key": "other", + "name": "Other", + "spdx_id": "NOASSERTION", + "url": null, + "node_id": "MDc6TGljZW5zZTA=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "commenting", + "disqus", + "disqus-clone", + "nodejs", + "schnack" + ], + "visibility": "public", + "forks": 97, + "open_issues": 46, + "watchers": 1795, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "schn4ck", + "id": 35145986, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjM1MTQ1OTg2", + "avatar_url": "https://avatars.githubusercontent.com/u/35145986?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/schn4ck", + "html_url": "https://github.com/schn4ck", + "followers_url": "https://api.github.com/users/schn4ck/followers", + "following_url": "https://api.github.com/users/schn4ck/following{/other_user}", + "gists_url": "https://api.github.com/users/schn4ck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/schn4ck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/schn4ck/subscriptions", + "organizations_url": "https://api.github.com/users/schn4ck/orgs", + "repos_url": "https://api.github.com/users/schn4ck/repos", + "events_url": "https://api.github.com/users/schn4ck/events{/privacy}", + "received_events_url": "https://api.github.com/users/schn4ck/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 97, + "subscribers_count": 27 +} diff --git a/apigh/2023-04-20/schnak.commit b/apigh/2023-04-20/schnak.commit new file mode 100644 index 00000000..3adf3f14 --- /dev/null +++ b/apigh/2023-04-20/schnak.commit @@ -0,0 +1,98 @@ +{ + "sha": "e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "node_id": "C_kwDOBk43tdoAKGU5MjhjMTRkOWI0YjNkNGUxZDFmZDlkMmJkYzNkMWU2NzFhZTBlNDk", + "commit": { + "author": { + "name": "dependabot[bot]", + "email": "49699333+dependabot[bot]@users.noreply.github.com", + "date": "2022-06-28T08:59:52Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2022-06-28T08:59:52Z" + }, + "message": "build(deps): bump hosted-git-info from 2.7.1 to 2.8.9 in /create-schnack (#133)\n\nBumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.7.1 to 2.8.9.\r\n- [Release notes](https://github.com/npm/hosted-git-info/releases)\r\n- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)\r\n- [Commits](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.9)\r\n\r\nSigned-off-by: dependabot[bot] \r\n\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>", + "tree": { + "sha": "787ef48872df9472f0829b31cae88fa9c07ac1ea", + "url": "https://api.github.com/repos/schn4ck/schnack/git/trees/787ef48872df9472f0829b31cae88fa9c07ac1ea" + }, + "url": "https://api.github.com/repos/schn4ck/schnack/git/commits/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJiusMICRBK7hj4Ov3rIwAAuTYIAGM90C9YvQXLdhT7HZZA/wfV\n0Knss076ILuzu8i3l9j6s5m2D69Jn8cA5762XyPHTkvTrw+I215qmlBECVaZH+Zn\ntxPz3bhVSZim2+KCTlNCQVmuZrXPt46vd2v8R5xRX+g4zPmfGOk7rRiBtEHJR0Jy\nWrTL9nJ0dL9Inm3XuAUj8LWaDVA3K1+ikQJLHeaZiqCwvlk2Dzw0CVFF9iZ9yh4B\n4Futcv+MYGUB7W0ybjOCKaCgCFB3ghk9JonTQkKcYQnGVKyRaQsWkHOvZaliWOAv\nItTEek8S+i4qu4zzD55e0um98hSclmd3X9f+14bhGuXcMuTUm6hM3Ygi2onjj1k=\n=kAix\n-----END PGP SIGNATURE-----\n", + "payload": "tree 787ef48872df9472f0829b31cae88fa9c07ac1ea\nparent ccabb2718f56ea56add522f8ec92ed853a912e75\nauthor dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1656406792 +0000\ncommitter GitHub 1656406792 +0000\n\nbuild(deps): bump hosted-git-info from 2.7.1 to 2.8.9 in /create-schnack (#133)\n\nBumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.7.1 to 2.8.9.\r\n- [Release notes](https://github.com/npm/hosted-git-info/releases)\r\n- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)\r\n- [Commits](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.9)\r\n\r\nSigned-off-by: dependabot[bot] \r\n\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>" + } + }, + "url": "https://api.github.com/repos/schn4ck/schnack/commits/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "html_url": "https://github.com/schn4ck/schnack/commit/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "comments_url": "https://api.github.com/repos/schn4ck/schnack/commits/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49/comments", + "author": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "ccabb2718f56ea56add522f8ec92ed853a912e75", + "url": "https://api.github.com/repos/schn4ck/schnack/commits/ccabb2718f56ea56add522f8ec92ed853a912e75", + "html_url": "https://github.com/schn4ck/schnack/commit/ccabb2718f56ea56add522f8ec92ed853a912e75" + } + ], + "stats": { + "total": 6, + "additions": 3, + "deletions": 3 + }, + "files": [ + { + "sha": "5b91d8fef204fed0c1ee20e94ec659f1576a6797", + "filename": "create-schnack/package-lock.json", + "status": "modified", + "additions": 3, + "deletions": 3, + "changes": 6, + "blob_url": "https://github.com/schn4ck/schnack/blob/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49/create-schnack%2Fpackage-lock.json", + "raw_url": "https://github.com/schn4ck/schnack/raw/e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49/create-schnack%2Fpackage-lock.json", + "contents_url": "https://api.github.com/repos/schn4ck/schnack/contents/create-schnack%2Fpackage-lock.json?ref=e928c14d9b4b3d4e1d1fd9d2bdc3d1e671ae0e49", + "patch": "@@ -976,9 +976,9 @@\n \t\t\t}\n \t\t},\n \t\t\"hosted-git-info\": {\n-\t\t\t\"version\": \"2.7.1\",\n-\t\t\t\"resolved\": \"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz\",\n-\t\t\t\"integrity\": \"sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==\",\n+\t\t\t\"version\": \"2.8.9\",\n+\t\t\t\"resolved\": \"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz\",\n+\t\t\t\"integrity\": \"sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==\",\n \t\t\t\"dev\": true\n \t\t},\n \t\t\"iconv-lite\": {" + } + ] +} diff --git a/apigh/2023-04-20/sidecar b/apigh/2023-04-20/sidecar new file mode 100644 index 00000000..70d3186e --- /dev/null +++ b/apigh/2023-04-20/sidecar @@ -0,0 +1,118 @@ +{ + "id": 91973311, + "node_id": "MDEwOlJlcG9zaXRvcnk5MTk3MzMxMQ==", + "name": "comment-sidecar", + "full_name": "phauer/comment-sidecar", + "private": false, + "owner": { + "login": "phauer", + "id": 6293139, + "node_id": "MDQ6VXNlcjYyOTMxMzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/6293139?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phauer", + "html_url": "https://github.com/phauer", + "followers_url": "https://api.github.com/users/phauer/followers", + "following_url": "https://api.github.com/users/phauer/following{/other_user}", + "gists_url": "https://api.github.com/users/phauer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phauer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phauer/subscriptions", + "organizations_url": "https://api.github.com/users/phauer/orgs", + "repos_url": "https://api.github.com/users/phauer/repos", + "events_url": "https://api.github.com/users/phauer/events{/privacy}", + "received_events_url": "https://api.github.com/users/phauer/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/phauer/comment-sidecar", + "description": "Lightweight, tracking-free, self-hosted comment service for web spaces supporting only PHP and MySQL ", + "fork": false, + "url": "https://api.github.com/repos/phauer/comment-sidecar", + "forks_url": "https://api.github.com/repos/phauer/comment-sidecar/forks", + "keys_url": "https://api.github.com/repos/phauer/comment-sidecar/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/phauer/comment-sidecar/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/phauer/comment-sidecar/teams", + "hooks_url": "https://api.github.com/repos/phauer/comment-sidecar/hooks", + "issue_events_url": "https://api.github.com/repos/phauer/comment-sidecar/issues/events{/number}", + "events_url": "https://api.github.com/repos/phauer/comment-sidecar/events", + "assignees_url": "https://api.github.com/repos/phauer/comment-sidecar/assignees{/user}", + "branches_url": "https://api.github.com/repos/phauer/comment-sidecar/branches{/branch}", + "tags_url": "https://api.github.com/repos/phauer/comment-sidecar/tags", + "blobs_url": "https://api.github.com/repos/phauer/comment-sidecar/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/phauer/comment-sidecar/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/phauer/comment-sidecar/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/phauer/comment-sidecar/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/phauer/comment-sidecar/statuses/{sha}", + "languages_url": "https://api.github.com/repos/phauer/comment-sidecar/languages", + "stargazers_url": "https://api.github.com/repos/phauer/comment-sidecar/stargazers", + "contributors_url": "https://api.github.com/repos/phauer/comment-sidecar/contributors", + "subscribers_url": "https://api.github.com/repos/phauer/comment-sidecar/subscribers", + "subscription_url": "https://api.github.com/repos/phauer/comment-sidecar/subscription", + "commits_url": "https://api.github.com/repos/phauer/comment-sidecar/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/phauer/comment-sidecar/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/phauer/comment-sidecar/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/phauer/comment-sidecar/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/phauer/comment-sidecar/contents/{+path}", + "compare_url": "https://api.github.com/repos/phauer/comment-sidecar/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/phauer/comment-sidecar/merges", + "archive_url": "https://api.github.com/repos/phauer/comment-sidecar/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/phauer/comment-sidecar/downloads", + "issues_url": "https://api.github.com/repos/phauer/comment-sidecar/issues{/number}", + "pulls_url": "https://api.github.com/repos/phauer/comment-sidecar/pulls{/number}", + "milestones_url": "https://api.github.com/repos/phauer/comment-sidecar/milestones{/number}", + "notifications_url": "https://api.github.com/repos/phauer/comment-sidecar/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/phauer/comment-sidecar/labels{/name}", + "releases_url": "https://api.github.com/repos/phauer/comment-sidecar/releases{/id}", + "deployments_url": "https://api.github.com/repos/phauer/comment-sidecar/deployments", + "created_at": "2017-05-21T16:57:57Z", + "updated_at": "2021-12-26T02:52:05Z", + "pushed_at": "2022-12-06T05:24:28Z", + "git_url": "git://github.com/phauer/comment-sidecar.git", + "ssh_url": "git@github.com:phauer/comment-sidecar.git", + "clone_url": "https://github.com/phauer/comment-sidecar.git", + "svn_url": "https://github.com/phauer/comment-sidecar", + "homepage": "", + "size": 668, + "stargazers_count": 36, + "watchers_count": 36, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 6, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 4, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 6, + "open_issues": 4, + "watchers": 36, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 6, + "subscribers_count": 3 +} diff --git a/apigh/2023-04-20/sidecar.commit b/apigh/2023-04-20/sidecar.commit new file mode 100644 index 00000000..8bbbfca2 --- /dev/null +++ b/apigh/2023-04-20/sidecar.commit @@ -0,0 +1,103 @@ +{ + "sha": "5447b222249d06277795e85bf01a0c1866b3c1f2", + "node_id": "MDY6Q29tbWl0OTE5NzMzMTE6NTQ0N2IyMjIyNDlkMDYyNzc3OTVlODViZjAxYTBjMTg2NmIzYzFmMg==", + "commit": { + "author": { + "name": "Philipp Hauer", + "email": "info@philipphauer.de", + "date": "2021-02-24T20:37:14Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2021-02-24T20:37:14Z" + }, + "message": "Merge pull request #3 from Pflugshaupt/patch-1\n\nUpdate en.php", + "tree": { + "sha": "b024bef0253f16a91dacc4eeced711974477495a", + "url": "https://api.github.com/repos/phauer/comment-sidecar/git/trees/b024bef0253f16a91dacc4eeced711974477495a" + }, + "url": "https://api.github.com/repos/phauer/comment-sidecar/git/commits/5447b222249d06277795e85bf01a0c1866b3c1f2", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJgNrj6CRBK7hj4Ov3rIwAAdHIIAKVTFmIKwCCbK1X+xH+/VQfO\nIQutNDFohYEKE47UcwdViHepKzG171gV6l42tK5NhYlGRyX6NMWH87K0N9Y8FzKP\n9K0JLi9PBIX7yuensAm7dlRa1gYcE6aoJTiPxwmktPxquj8JKFg1cqXwfzRRxkkl\ncinDXbDgMplR6SOD22HsRvFmY8Le+742XgBb/W+TJ+Y32Q+dE8iD12JyL5KW5ZqR\nVvElX8oRbL8CjfrmGlqzpvsH2OzJ9e4hJHaiedJkpXL1AEqmYpCD3yOG20tIrQvf\nJ/O3j7ir4YwZD3xYv4+gQ77qkFZ/wymMlfjLBskNVefMvo5n5jLbedqGlLZe+Us=\n=PdMI\n-----END PGP SIGNATURE-----\n", + "payload": "tree b024bef0253f16a91dacc4eeced711974477495a\nparent d3692fe73552cbc7b71e9625a9382a84a2090740\nparent d93b7f0d3fe774586be9d1e7cb5fa10ebef57062\nauthor Philipp Hauer 1614199034 +0100\ncommitter GitHub 1614199034 +0100\n\nMerge pull request #3 from Pflugshaupt/patch-1\n\nUpdate en.php" + } + }, + "url": "https://api.github.com/repos/phauer/comment-sidecar/commits/5447b222249d06277795e85bf01a0c1866b3c1f2", + "html_url": "https://github.com/phauer/comment-sidecar/commit/5447b222249d06277795e85bf01a0c1866b3c1f2", + "comments_url": "https://api.github.com/repos/phauer/comment-sidecar/commits/5447b222249d06277795e85bf01a0c1866b3c1f2/comments", + "author": { + "login": "phauer", + "id": 6293139, + "node_id": "MDQ6VXNlcjYyOTMxMzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/6293139?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/phauer", + "html_url": "https://github.com/phauer", + "followers_url": "https://api.github.com/users/phauer/followers", + "following_url": "https://api.github.com/users/phauer/following{/other_user}", + "gists_url": "https://api.github.com/users/phauer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/phauer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/phauer/subscriptions", + "organizations_url": "https://api.github.com/users/phauer/orgs", + "repos_url": "https://api.github.com/users/phauer/repos", + "events_url": "https://api.github.com/users/phauer/events{/privacy}", + "received_events_url": "https://api.github.com/users/phauer/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "d3692fe73552cbc7b71e9625a9382a84a2090740", + "url": "https://api.github.com/repos/phauer/comment-sidecar/commits/d3692fe73552cbc7b71e9625a9382a84a2090740", + "html_url": "https://github.com/phauer/comment-sidecar/commit/d3692fe73552cbc7b71e9625a9382a84a2090740" + }, + { + "sha": "d93b7f0d3fe774586be9d1e7cb5fa10ebef57062", + "url": "https://api.github.com/repos/phauer/comment-sidecar/commits/d93b7f0d3fe774586be9d1e7cb5fa10ebef57062", + "html_url": "https://github.com/phauer/comment-sidecar/commit/d93b7f0d3fe774586be9d1e7cb5fa10ebef57062" + } + ], + "stats": { + "total": 4, + "additions": 2, + "deletions": 2 + }, + "files": [ + { + "sha": "cae68f9208db4a41598317cf7ec06b52c98f2170", + "filename": "src/translations/en.php", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/phauer/comment-sidecar/blob/5447b222249d06277795e85bf01a0c1866b3c1f2/src%2Ftranslations%2Fen.php", + "raw_url": "https://github.com/phauer/comment-sidecar/raw/5447b222249d06277795e85bf01a0c1866b3c1f2/src%2Ftranslations%2Fen.php", + "contents_url": "https://api.github.com/repos/phauer/comment-sidecar/contents/src%2Ftranslations%2Fen.php?ref=5447b222249d06277795e85bf01a0c1866b3c1f2", + "patch": "@@ -24,8 +24,8 @@\n \n # reply notification e-mail\n 'subject' => 'Reply to your comment by {}',\n- 'introduction' => 'there is a reply to our comment.',\n+ 'introduction' => 'There is a reply to your comment.',\n 'author' => 'Author',\n 'message' => 'Message',\n 'unsubscribeDescription' => 'To unsubscribe mail notifications like this please click on the following link:',\n-);\n\\ No newline at end of file\n+);" + } + ] +} diff --git a/apigh/2023-04-20/site_point_nested_comments b/apigh/2023-04-20/site_point_nested_comments new file mode 100644 index 00000000..6fb535fa --- /dev/null +++ b/apigh/2023-04-20/site_point_nested_comments @@ -0,0 +1,112 @@ +{ + "id": 18562510, + "node_id": "MDEwOlJlcG9zaXRvcnkxODU2MjUxMA==", + "name": "SitePointNestedComments", + "full_name": "bodrovis/SitePointNestedComments", + "private": false, + "owner": { + "login": "bodrovis", + "id": 646942, + "node_id": "MDQ6VXNlcjY0Njk0Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/646942?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bodrovis", + "html_url": "https://github.com/bodrovis", + "followers_url": "https://api.github.com/users/bodrovis/followers", + "following_url": "https://api.github.com/users/bodrovis/following{/other_user}", + "gists_url": "https://api.github.com/users/bodrovis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bodrovis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bodrovis/subscriptions", + "organizations_url": "https://api.github.com/users/bodrovis/orgs", + "repos_url": "https://api.github.com/users/bodrovis/repos", + "events_url": "https://api.github.com/users/bodrovis/events{/privacy}", + "received_events_url": "https://api.github.com/users/bodrovis/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/bodrovis/SitePointNestedComments", + "description": "Source code for the Nested Comments with Rails article on Sitepoint", + "fork": false, + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments", + "forks_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/forks", + "keys_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/teams", + "hooks_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/hooks", + "issue_events_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/issues/events{/number}", + "events_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/events", + "assignees_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/assignees{/user}", + "branches_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/branches{/branch}", + "tags_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/tags", + "blobs_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/languages", + "stargazers_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/stargazers", + "contributors_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contributors", + "subscribers_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/subscribers", + "subscription_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/subscription", + "commits_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/{+path}", + "compare_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/merges", + "archive_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/downloads", + "issues_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/issues{/number}", + "pulls_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/labels{/name}", + "releases_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/releases{/id}", + "deployments_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/deployments", + "created_at": "2014-04-08T14:56:49Z", + "updated_at": "2023-01-28T17:50:26Z", + "pushed_at": "2016-11-29T17:50:26Z", + "git_url": "git://github.com/bodrovis/SitePointNestedComments.git", + "ssh_url": "git@github.com:bodrovis/SitePointNestedComments.git", + "clone_url": "https://github.com/bodrovis/SitePointNestedComments.git", + "svn_url": "https://github.com/bodrovis/SitePointNestedComments", + "homepage": "http://nested-comments.radiant-wind.com/", + "size": 59, + "stargazers_count": 15, + "watchers_count": 15, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 11, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 11, + "open_issues": 0, + "watchers": 15, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 11, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/site_point_nested_comments.commit b/apigh/2023-04-20/site_point_nested_comments.commit new file mode 100644 index 00000000..995f9168 --- /dev/null +++ b/apigh/2023-04-20/site_point_nested_comments.commit @@ -0,0 +1,84 @@ +{ + "sha": "f9259efece5ec29ce237eab422842057af3f05f7", + "node_id": "MDY6Q29tbWl0MTg1NjI1MTA6ZjkyNTllZmVjZTVlYzI5Y2UyMzdlYWI0MjI4NDIwNTdhZjNmMDVmNw==", + "commit": { + "author": { + "name": "bodrovis", + "email": "ibodrov@campaigner.ru", + "date": "2016-11-29T17:50:18Z" + }, + "committer": { + "name": "bodrovis", + "email": "ibodrov@campaigner.ru", + "date": "2016-11-29T17:50:18Z" + }, + "message": "update readme", + "tree": { + "sha": "c01bfcd62582b15198d27650708bd4d7e7b971a0", + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/trees/c01bfcd62582b15198d27650708bd4d7e7b971a0" + }, + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/git/commits/f9259efece5ec29ce237eab422842057af3f05f7", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits/f9259efece5ec29ce237eab422842057af3f05f7", + "html_url": "https://github.com/bodrovis/SitePointNestedComments/commit/f9259efece5ec29ce237eab422842057af3f05f7", + "comments_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits/f9259efece5ec29ce237eab422842057af3f05f7/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "0c84fbf0f0798806ea53611de60055553f9704b6", + "url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/commits/0c84fbf0f0798806ea53611de60055553f9704b6", + "html_url": "https://github.com/bodrovis/SitePointNestedComments/commit/0c84fbf0f0798806ea53611de60055553f9704b6" + } + ], + "stats": { + "total": 9, + "additions": 6, + "deletions": 3 + }, + "files": [ + { + "sha": "b8c27ebe6b647dbe45ac2a7a99f8dbfaa67919ee", + "filename": "Gemfile.lock", + "status": "modified", + "additions": 3, + "deletions": 0, + "changes": 3, + "blob_url": "https://github.com/bodrovis/SitePointNestedComments/blob/f9259efece5ec29ce237eab422842057af3f05f7/Gemfile.lock", + "raw_url": "https://github.com/bodrovis/SitePointNestedComments/raw/f9259efece5ec29ce237eab422842057af3f05f7/Gemfile.lock", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/Gemfile.lock?ref=f9259efece5ec29ce237eab422842057af3f05f7", + "patch": "@@ -160,3 +160,6 @@ DEPENDENCIES\n turbolinks\n tzinfo-data\n uglifier (>= 1.3.0)\n+\n+BUNDLED WITH\n+ 1.10.6" + }, + { + "sha": "38e292202efa4638e71ac28e5c12e2c317cfb792", + "filename": "README.md", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/bodrovis/SitePointNestedComments/blob/f9259efece5ec29ce237eab422842057af3f05f7/README.md", + "raw_url": "https://github.com/bodrovis/SitePointNestedComments/raw/f9259efece5ec29ce237eab422842057af3f05f7/README.md", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/README.md?ref=f9259efece5ec29ce237eab422842057af3f05f7", + "patch": "@@ -1,4 +1,4 @@\n Source code for the [Nested Comments with Rails](http://www.sitepoint.com/nested-comments-rails/) article on SitePoint,\n-created by Ilya Bodrov ([radiant-wind.com](http://radiant-wind.com)).\n+created by Ilya Bodrov ([bodrovis.tech](http://bodrovis.tech)).\n \n-[Working demo](http://nested-comments.radiant-wind.com).\n\\ No newline at end of file\n+[Working demo](http://nested-comments.bodrovis.tech).\n\\ No newline at end of file" + }, + { + "sha": "5195bcaf7354741574d9b3b143bd696380787fcf", + "filename": "app/views/layouts/application.html.erb", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/bodrovis/SitePointNestedComments/blob/f9259efece5ec29ce237eab422842057af3f05f7/app%2Fviews%2Flayouts%2Fapplication.html.erb", + "raw_url": "https://github.com/bodrovis/SitePointNestedComments/raw/f9259efece5ec29ce237eab422842057af3f05f7/app%2Fviews%2Flayouts%2Fapplication.html.erb", + "contents_url": "https://api.github.com/repos/bodrovis/SitePointNestedComments/contents/app%2Fviews%2Flayouts%2Fapplication.html.erb?ref=f9259efece5ec29ce237eab422842057af3f05f7", + "patch": "@@ -29,7 +29,7 @@\n \n
      \n
      \n-

      Created by Radiant Wind

      \n+

      Created by Radiant Wind

      \n
      \n
      \n " + } + ] +} diff --git a/apigh/2023-04-20/some_comments b/apigh/2023-04-20/some_comments new file mode 100644 index 00000000..d4bb952b --- /dev/null +++ b/apigh/2023-04-20/some_comments @@ -0,0 +1,118 @@ +{ + "id": 33710509, + "node_id": "MDEwOlJlcG9zaXRvcnkzMzcxMDUwOQ==", + "name": "some-comments", + "full_name": "fiddur/some-comments", + "private": false, + "owner": { + "login": "fiddur", + "id": 148166, + "node_id": "MDQ6VXNlcjE0ODE2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/148166?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fiddur", + "html_url": "https://github.com/fiddur", + "followers_url": "https://api.github.com/users/fiddur/followers", + "following_url": "https://api.github.com/users/fiddur/following{/other_user}", + "gists_url": "https://api.github.com/users/fiddur/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fiddur/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fiddur/subscriptions", + "organizations_url": "https://api.github.com/users/fiddur/orgs", + "repos_url": "https://api.github.com/users/fiddur/repos", + "events_url": "https://api.github.com/users/fiddur/events{/privacy}", + "received_events_url": "https://api.github.com/users/fiddur/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/fiddur/some-comments", + "description": "DEPRECATED: See Oratorium", + "fork": false, + "url": "https://api.github.com/repos/fiddur/some-comments", + "forks_url": "https://api.github.com/repos/fiddur/some-comments/forks", + "keys_url": "https://api.github.com/repos/fiddur/some-comments/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/fiddur/some-comments/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/fiddur/some-comments/teams", + "hooks_url": "https://api.github.com/repos/fiddur/some-comments/hooks", + "issue_events_url": "https://api.github.com/repos/fiddur/some-comments/issues/events{/number}", + "events_url": "https://api.github.com/repos/fiddur/some-comments/events", + "assignees_url": "https://api.github.com/repos/fiddur/some-comments/assignees{/user}", + "branches_url": "https://api.github.com/repos/fiddur/some-comments/branches{/branch}", + "tags_url": "https://api.github.com/repos/fiddur/some-comments/tags", + "blobs_url": "https://api.github.com/repos/fiddur/some-comments/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/fiddur/some-comments/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/fiddur/some-comments/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/fiddur/some-comments/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/fiddur/some-comments/statuses/{sha}", + "languages_url": "https://api.github.com/repos/fiddur/some-comments/languages", + "stargazers_url": "https://api.github.com/repos/fiddur/some-comments/stargazers", + "contributors_url": "https://api.github.com/repos/fiddur/some-comments/contributors", + "subscribers_url": "https://api.github.com/repos/fiddur/some-comments/subscribers", + "subscription_url": "https://api.github.com/repos/fiddur/some-comments/subscription", + "commits_url": "https://api.github.com/repos/fiddur/some-comments/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/fiddur/some-comments/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/fiddur/some-comments/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/fiddur/some-comments/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/fiddur/some-comments/contents/{+path}", + "compare_url": "https://api.github.com/repos/fiddur/some-comments/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/fiddur/some-comments/merges", + "archive_url": "https://api.github.com/repos/fiddur/some-comments/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/fiddur/some-comments/downloads", + "issues_url": "https://api.github.com/repos/fiddur/some-comments/issues{/number}", + "pulls_url": "https://api.github.com/repos/fiddur/some-comments/pulls{/number}", + "milestones_url": "https://api.github.com/repos/fiddur/some-comments/milestones{/number}", + "notifications_url": "https://api.github.com/repos/fiddur/some-comments/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/fiddur/some-comments/labels{/name}", + "releases_url": "https://api.github.com/repos/fiddur/some-comments/releases{/id}", + "deployments_url": "https://api.github.com/repos/fiddur/some-comments/deployments", + "created_at": "2015-04-10T05:38:20Z", + "updated_at": "2020-09-01T11:53:31Z", + "pushed_at": "2021-09-13T04:42:40Z", + "git_url": "git://github.com/fiddur/some-comments.git", + "ssh_url": "git@github.com:fiddur/some-comments.git", + "clone_url": "https://github.com/fiddur/some-comments.git", + "svn_url": "https://github.com/fiddur/some-comments", + "homepage": "https://github.com/fiddur/oratorium", + "size": 383, + "stargazers_count": 42, + "watchers_count": 42, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 7, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 35, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 7, + "open_issues": 35, + "watchers": 42, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 7, + "subscribers_count": 2 +} diff --git a/apigh/2023-04-20/some_comments.commit b/apigh/2023-04-20/some_comments.commit new file mode 100644 index 00000000..909855b5 --- /dev/null +++ b/apigh/2023-04-20/some_comments.commit @@ -0,0 +1,103 @@ +{ + "sha": "c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "node_id": "MDY6Q29tbWl0MzM3MTA1MDk6YzVmMmM2NjI2ODJlNGExOWU5Njk3Y2RiOWYyMmJmNDE5MDQ0MWVmNw==", + "commit": { + "author": { + "name": "Fredrik Liljegren", + "email": "fredrik@liljegren.org", + "date": "2018-06-15T14:36:48Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2018-06-15T14:36:48Z" + }, + "message": "Merge pull request #26 from fiddur/snyk-fix-33db910d\n\n[Snyk Update] New fixes for 2 vulnerable dependency paths", + "tree": { + "sha": "9e90c8f6d716c3d3bcf8b3223fbd26c5e306a9d0", + "url": "https://api.github.com/repos/fiddur/some-comments/git/trees/9e90c8f6d716c3d3bcf8b3223fbd26c5e306a9d0" + }, + "url": "https://api.github.com/repos/fiddur/some-comments/git/commits/c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJbI88ACRBK7hj4Ov3rIwAAdHIIAENEWro00PkFUeSSH7/InLFO\nonUe52BgIO+1mEYe8TK8/u8mmnG5ND6gFH7pGLlrYbA9rzEGOhfzkxRh85HeRxWR\n36mQh+k9Upote1OqaWTyvmM7hkEojU+CpeZnI/AZkRPOF+lNNUuVLMP9IlX5OUZA\nz70T9OR7zyGtjsB94i4ZJjrpe4AVC1uzzS8OXrbd8fafCs9Um8D1a7f8JF6RrCvY\nFTwstFG9tm494qpPxRafOTKVZylmiAiEntyQmUITbrXuX1eK6Ad9gsvGkwySLD9k\n8P0L5w+sT3eR+SoLj3p/38nCXTdHbmgq8IIos2QXOm2SoUuMsG4WZk1S9iHfp5Y=\n=gV6Q\n-----END PGP SIGNATURE-----\n", + "payload": "tree 9e90c8f6d716c3d3bcf8b3223fbd26c5e306a9d0\nparent 9d1998308302ee36d8c43b5eba0a0f6389969e34\nparent f12051f38fe02c8b8f6c50353df25cc5ad775ea9\nauthor Fredrik Liljegren 1529073408 +0200\ncommitter GitHub 1529073408 +0200\n\nMerge pull request #26 from fiddur/snyk-fix-33db910d\n\n[Snyk Update] New fixes for 2 vulnerable dependency paths" + } + }, + "url": "https://api.github.com/repos/fiddur/some-comments/commits/c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "html_url": "https://github.com/fiddur/some-comments/commit/c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "comments_url": "https://api.github.com/repos/fiddur/some-comments/commits/c5f2c662682e4a19e9697cdb9f22bf4190441ef7/comments", + "author": { + "login": "fiddur", + "id": 148166, + "node_id": "MDQ6VXNlcjE0ODE2Ng==", + "avatar_url": "https://avatars.githubusercontent.com/u/148166?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fiddur", + "html_url": "https://github.com/fiddur", + "followers_url": "https://api.github.com/users/fiddur/followers", + "following_url": "https://api.github.com/users/fiddur/following{/other_user}", + "gists_url": "https://api.github.com/users/fiddur/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fiddur/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fiddur/subscriptions", + "organizations_url": "https://api.github.com/users/fiddur/orgs", + "repos_url": "https://api.github.com/users/fiddur/repos", + "events_url": "https://api.github.com/users/fiddur/events{/privacy}", + "received_events_url": "https://api.github.com/users/fiddur/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "9d1998308302ee36d8c43b5eba0a0f6389969e34", + "url": "https://api.github.com/repos/fiddur/some-comments/commits/9d1998308302ee36d8c43b5eba0a0f6389969e34", + "html_url": "https://github.com/fiddur/some-comments/commit/9d1998308302ee36d8c43b5eba0a0f6389969e34" + }, + { + "sha": "f12051f38fe02c8b8f6c50353df25cc5ad775ea9", + "url": "https://api.github.com/repos/fiddur/some-comments/commits/f12051f38fe02c8b8f6c50353df25cc5ad775ea9", + "html_url": "https://github.com/fiddur/some-comments/commit/f12051f38fe02c8b8f6c50353df25cc5ad775ea9" + } + ], + "stats": { + "total": 2, + "additions": 1, + "deletions": 1 + }, + "files": [ + { + "sha": "d6a719c6e628fb5a3ba2e0deadb13b369253c05b", + "filename": "package.json", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/fiddur/some-comments/blob/c5f2c662682e4a19e9697cdb9f22bf4190441ef7/package.json", + "raw_url": "https://github.com/fiddur/some-comments/raw/c5f2c662682e4a19e9697cdb9f22bf4190441ef7/package.json", + "contents_url": "https://api.github.com/repos/fiddur/some-comments/contents/package.json?ref=c5f2c662682e4a19e9697cdb9f22bf4190441ef7", + "patch": "@@ -21,7 +21,7 @@\n \"cors\": \"^2.5.3\",\n \"express\": \"^4.12.3\",\n \"express-handlebars\": \"^2.0.1\",\n- \"grunt\": \"^0.4.5\",\n+ \"grunt\": \"^1.0.3\",\n \"handlebars\": \"^3.0.3\",\n \"jade\": \"^1.9.2\",\n \"jsonwebtoken\": \"^5.0.1\"," + } + ] +} diff --git a/apigh/2023-04-20/squabble b/apigh/2023-04-20/squabble new file mode 100644 index 00000000..dd56a8fa --- /dev/null +++ b/apigh/2023-04-20/squabble @@ -0,0 +1,132 @@ +{ + "id": 35555192, + "node_id": "MDEwOlJlcG9zaXRvcnkzNTU1NTE5Mg==", + "name": "squabble", + "full_name": "savaslabs/squabble", + "private": false, + "owner": { + "login": "savaslabs", + "id": 10981028, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEwOTgxMDI4", + "avatar_url": "https://avatars.githubusercontent.com/u/10981028?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/savaslabs", + "html_url": "https://github.com/savaslabs", + "followers_url": "https://api.github.com/users/savaslabs/followers", + "following_url": "https://api.github.com/users/savaslabs/following{/other_user}", + "gists_url": "https://api.github.com/users/savaslabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/savaslabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/savaslabs/subscriptions", + "organizations_url": "https://api.github.com/users/savaslabs/orgs", + "repos_url": "https://api.github.com/users/savaslabs/repos", + "events_url": "https://api.github.com/users/savaslabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/savaslabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/savaslabs/squabble", + "description": "Comment server built with Lumen, for use with static site generators (e.g. Jekyll)", + "fork": false, + "url": "https://api.github.com/repos/savaslabs/squabble", + "forks_url": "https://api.github.com/repos/savaslabs/squabble/forks", + "keys_url": "https://api.github.com/repos/savaslabs/squabble/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/savaslabs/squabble/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/savaslabs/squabble/teams", + "hooks_url": "https://api.github.com/repos/savaslabs/squabble/hooks", + "issue_events_url": "https://api.github.com/repos/savaslabs/squabble/issues/events{/number}", + "events_url": "https://api.github.com/repos/savaslabs/squabble/events", + "assignees_url": "https://api.github.com/repos/savaslabs/squabble/assignees{/user}", + "branches_url": "https://api.github.com/repos/savaslabs/squabble/branches{/branch}", + "tags_url": "https://api.github.com/repos/savaslabs/squabble/tags", + "blobs_url": "https://api.github.com/repos/savaslabs/squabble/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/savaslabs/squabble/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/savaslabs/squabble/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/savaslabs/squabble/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/savaslabs/squabble/statuses/{sha}", + "languages_url": "https://api.github.com/repos/savaslabs/squabble/languages", + "stargazers_url": "https://api.github.com/repos/savaslabs/squabble/stargazers", + "contributors_url": "https://api.github.com/repos/savaslabs/squabble/contributors", + "subscribers_url": "https://api.github.com/repos/savaslabs/squabble/subscribers", + "subscription_url": "https://api.github.com/repos/savaslabs/squabble/subscription", + "commits_url": "https://api.github.com/repos/savaslabs/squabble/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/savaslabs/squabble/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/savaslabs/squabble/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/savaslabs/squabble/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/savaslabs/squabble/contents/{+path}", + "compare_url": "https://api.github.com/repos/savaslabs/squabble/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/savaslabs/squabble/merges", + "archive_url": "https://api.github.com/repos/savaslabs/squabble/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/savaslabs/squabble/downloads", + "issues_url": "https://api.github.com/repos/savaslabs/squabble/issues{/number}", + "pulls_url": "https://api.github.com/repos/savaslabs/squabble/pulls{/number}", + "milestones_url": "https://api.github.com/repos/savaslabs/squabble/milestones{/number}", + "notifications_url": "https://api.github.com/repos/savaslabs/squabble/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/savaslabs/squabble/labels{/name}", + "releases_url": "https://api.github.com/repos/savaslabs/squabble/releases{/id}", + "deployments_url": "https://api.github.com/repos/savaslabs/squabble/deployments", + "created_at": "2015-05-13T14:52:01Z", + "updated_at": "2021-05-12T21:41:21Z", + "pushed_at": "2018-02-02T23:18:15Z", + "git_url": "git://github.com/savaslabs/squabble.git", + "ssh_url": "git@github.com:savaslabs/squabble.git", + "clone_url": "https://github.com/savaslabs/squabble.git", + "svn_url": "https://github.com/savaslabs/squabble", + "homepage": "http://savaslabs.com", + "size": 176, + "stargazers_count": 30, + "watchers_count": 30, + "language": "PHP", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 4, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 4, + "open_issues": 1, + "watchers": 30, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "savaslabs", + "id": 10981028, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjEwOTgxMDI4", + "avatar_url": "https://avatars.githubusercontent.com/u/10981028?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/savaslabs", + "html_url": "https://github.com/savaslabs", + "followers_url": "https://api.github.com/users/savaslabs/followers", + "following_url": "https://api.github.com/users/savaslabs/following{/other_user}", + "gists_url": "https://api.github.com/users/savaslabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/savaslabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/savaslabs/subscriptions", + "organizations_url": "https://api.github.com/users/savaslabs/orgs", + "repos_url": "https://api.github.com/users/savaslabs/repos", + "events_url": "https://api.github.com/users/savaslabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/savaslabs/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 4, + "subscribers_count": 10 +} diff --git a/apigh/2023-04-20/squabble.commit b/apigh/2023-04-20/squabble.commit new file mode 100644 index 00000000..71ece970 --- /dev/null +++ b/apigh/2023-04-20/squabble.commit @@ -0,0 +1,103 @@ +{ + "sha": "4c14db1bcad1f8b5866ce3705d783e997d627926", + "node_id": "MDY6Q29tbWl0MzU1NTUxOTI6NGMxNGRiMWJjYWQxZjhiNTg2NmNlMzcwNWQ3ODNlOTk3ZDYyNzkyNg==", + "commit": { + "author": { + "name": "Kosta Harlan", + "email": "kosta@fastmail.com", + "date": "2018-02-02T23:16:39Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2018-02-02T23:16:39Z" + }, + "message": "Merge pull request #23 from savaslabs/feature/5021-expose-email-hash\n\nIssue #5021: Expose email hash.", + "tree": { + "sha": "e86215ccd6de64310fb92111a7470c204908ae4e", + "url": "https://api.github.com/repos/savaslabs/squabble/git/trees/e86215ccd6de64310fb92111a7470c204908ae4e" + }, + "url": "https://api.github.com/repos/savaslabs/squabble/git/commits/4c14db1bcad1f8b5866ce3705d783e997d627926", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJadPFXCRBK7hj4Ov3rIwAAdHIIAEl6hzlI1X1kwsvcvOJjZWh6\nvqvL6+nOtSxhizVvNfHGYyd2W6qCkmgeCJSU/EHg6vr/zx8Iqj3f5TBWJgAO2Hlb\nkfMVCgJgL/IXh9MjqtwlqsvNRBjn2SLmqqkpAmB5AaYjI3WTe7E5mzHesZiHVMbD\nnNS0E0BerY6AurgQrVZKreDRJ3pMLsLXtGTNAR/dVcX8e9jicdi3bk/L+w14G4Rk\nicPVRDqbfNMZjwqt863IWxu/Yp6V164BiHF9PNVi5Uj2Mx+NBjDKe68oychIErvR\nntqceg1NsozVhc6Ji/APt2xP21Kf8OgzioJgqg88FXm7w2KrybqJSdaLq9mDtIg=\n=BHnn\n-----END PGP SIGNATURE-----\n", + "payload": "tree e86215ccd6de64310fb92111a7470c204908ae4e\nparent e972c97424757b2d031a46603bef5e6da2897d5c\nparent 7d699fbb3dec311dad4e3a43341a303dce682d22\nauthor Kosta Harlan 1517613399 -0800\ncommitter GitHub 1517613399 -0800\n\nMerge pull request #23 from savaslabs/feature/5021-expose-email-hash\n\nIssue #5021: Expose email hash." + } + }, + "url": "https://api.github.com/repos/savaslabs/squabble/commits/4c14db1bcad1f8b5866ce3705d783e997d627926", + "html_url": "https://github.com/savaslabs/squabble/commit/4c14db1bcad1f8b5866ce3705d783e997d627926", + "comments_url": "https://api.github.com/repos/savaslabs/squabble/commits/4c14db1bcad1f8b5866ce3705d783e997d627926/comments", + "author": { + "login": "kostajh", + "id": 208893, + "node_id": "MDQ6VXNlcjIwODg5Mw==", + "avatar_url": "https://avatars.githubusercontent.com/u/208893?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kostajh", + "html_url": "https://github.com/kostajh", + "followers_url": "https://api.github.com/users/kostajh/followers", + "following_url": "https://api.github.com/users/kostajh/following{/other_user}", + "gists_url": "https://api.github.com/users/kostajh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kostajh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kostajh/subscriptions", + "organizations_url": "https://api.github.com/users/kostajh/orgs", + "repos_url": "https://api.github.com/users/kostajh/repos", + "events_url": "https://api.github.com/users/kostajh/events{/privacy}", + "received_events_url": "https://api.github.com/users/kostajh/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "e972c97424757b2d031a46603bef5e6da2897d5c", + "url": "https://api.github.com/repos/savaslabs/squabble/commits/e972c97424757b2d031a46603bef5e6da2897d5c", + "html_url": "https://github.com/savaslabs/squabble/commit/e972c97424757b2d031a46603bef5e6da2897d5c" + }, + { + "sha": "7d699fbb3dec311dad4e3a43341a303dce682d22", + "url": "https://api.github.com/repos/savaslabs/squabble/commits/7d699fbb3dec311dad4e3a43341a303dce682d22", + "html_url": "https://github.com/savaslabs/squabble/commit/7d699fbb3dec311dad4e3a43341a303dce682d22" + } + ], + "stats": { + "total": 4, + "additions": 2, + "deletions": 2 + }, + "files": [ + { + "sha": "5b5cc9a88dbba9cedb13f1a752f0dc6022afbd2d", + "filename": "source/app/Comment.php", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/savaslabs/squabble/blob/4c14db1bcad1f8b5866ce3705d783e997d627926/source%2Fapp%2FComment.php", + "raw_url": "https://github.com/savaslabs/squabble/raw/4c14db1bcad1f8b5866ce3705d783e997d627926/source%2Fapp%2FComment.php", + "contents_url": "https://api.github.com/repos/savaslabs/squabble/contents/source%2Fapp%2FComment.php?ref=4c14db1bcad1f8b5866ce3705d783e997d627926", + "patch": "@@ -11,7 +11,7 @@ class Comment extends Model\n {\n protected $fillable = ['slug', 'comment', 'name', 'email', 'ip', 'token', 'savasian'];\n \n- protected $hidden = ['token', 'email', 'ip'];\n+ protected $hidden = ['token', 'ip'];\n \n public function getCommentAttribute($value)\n {\n@@ -30,7 +30,7 @@ public function getNameAttribute($value)\n \n public function getEmailAttribute($value)\n {\n- return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');\n+ return md5(strtolower(trim(htmlspecialchars($value, ENT_QUOTES, 'UTF-8'))));\n }\n \n public function getIpAttribute($value)" + } + ] +} diff --git a/apigh/2023-04-20/stapsher b/apigh/2023-04-20/stapsher new file mode 100644 index 00000000..6341474c --- /dev/null +++ b/apigh/2023-04-20/stapsher @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/129434257", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-20/stapsher.commit b/apigh/2023-04-20/stapsher.commit new file mode 100644 index 00000000..c8e453f4 --- /dev/null +++ b/apigh/2023-04-20/stapsher.commit @@ -0,0 +1,5 @@ +{ + "message": "Moved Permanently", + "url": "https://api.github.com/repositories/129434257/commits/master", + "documentation_url": "https://docs.github.com/v3/#http-redirects" +} diff --git a/apigh/2023-04-20/staticman b/apigh/2023-04-20/staticman new file mode 100644 index 00000000..12bb0a4f --- /dev/null +++ b/apigh/2023-04-20/staticman @@ -0,0 +1,122 @@ +{ + "id": 38880555, + "node_id": "MDEwOlJlcG9zaXRvcnkzODg4MDU1NQ==", + "name": "staticman", + "full_name": "eduardoboucas/staticman", + "private": false, + "owner": { + "login": "eduardoboucas", + "id": 4162329, + "node_id": "MDQ6VXNlcjQxNjIzMjk=", + "avatar_url": "https://avatars.githubusercontent.com/u/4162329?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/eduardoboucas", + "html_url": "https://github.com/eduardoboucas", + "followers_url": "https://api.github.com/users/eduardoboucas/followers", + "following_url": "https://api.github.com/users/eduardoboucas/following{/other_user}", + "gists_url": "https://api.github.com/users/eduardoboucas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/eduardoboucas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/eduardoboucas/subscriptions", + "organizations_url": "https://api.github.com/users/eduardoboucas/orgs", + "repos_url": "https://api.github.com/users/eduardoboucas/repos", + "events_url": "https://api.github.com/users/eduardoboucas/events{/privacy}", + "received_events_url": "https://api.github.com/users/eduardoboucas/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/eduardoboucas/staticman", + "description": "๐Ÿ’ช User-generated content for Git-powered websites", + "fork": false, + "url": "https://api.github.com/repos/eduardoboucas/staticman", + "forks_url": "https://api.github.com/repos/eduardoboucas/staticman/forks", + "keys_url": "https://api.github.com/repos/eduardoboucas/staticman/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/eduardoboucas/staticman/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/eduardoboucas/staticman/teams", + "hooks_url": "https://api.github.com/repos/eduardoboucas/staticman/hooks", + "issue_events_url": "https://api.github.com/repos/eduardoboucas/staticman/issues/events{/number}", + "events_url": "https://api.github.com/repos/eduardoboucas/staticman/events", + "assignees_url": "https://api.github.com/repos/eduardoboucas/staticman/assignees{/user}", + "branches_url": "https://api.github.com/repos/eduardoboucas/staticman/branches{/branch}", + "tags_url": "https://api.github.com/repos/eduardoboucas/staticman/tags", + "blobs_url": "https://api.github.com/repos/eduardoboucas/staticman/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/eduardoboucas/staticman/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/eduardoboucas/staticman/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/eduardoboucas/staticman/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/eduardoboucas/staticman/statuses/{sha}", + "languages_url": "https://api.github.com/repos/eduardoboucas/staticman/languages", + "stargazers_url": "https://api.github.com/repos/eduardoboucas/staticman/stargazers", + "contributors_url": "https://api.github.com/repos/eduardoboucas/staticman/contributors", + "subscribers_url": "https://api.github.com/repos/eduardoboucas/staticman/subscribers", + "subscription_url": "https://api.github.com/repos/eduardoboucas/staticman/subscription", + "commits_url": "https://api.github.com/repos/eduardoboucas/staticman/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/eduardoboucas/staticman/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/eduardoboucas/staticman/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/eduardoboucas/staticman/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/{+path}", + "compare_url": "https://api.github.com/repos/eduardoboucas/staticman/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/eduardoboucas/staticman/merges", + "archive_url": "https://api.github.com/repos/eduardoboucas/staticman/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/eduardoboucas/staticman/downloads", + "issues_url": "https://api.github.com/repos/eduardoboucas/staticman/issues{/number}", + "pulls_url": "https://api.github.com/repos/eduardoboucas/staticman/pulls{/number}", + "milestones_url": "https://api.github.com/repos/eduardoboucas/staticman/milestones{/number}", + "notifications_url": "https://api.github.com/repos/eduardoboucas/staticman/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/eduardoboucas/staticman/labels{/name}", + "releases_url": "https://api.github.com/repos/eduardoboucas/staticman/releases{/id}", + "deployments_url": "https://api.github.com/repos/eduardoboucas/staticman/deployments", + "created_at": "2015-07-10T13:00:03Z", + "updated_at": "2023-04-18T21:00:20Z", + "pushed_at": "2023-03-09T03:20:25Z", + "git_url": "git://github.com/eduardoboucas/staticman.git", + "ssh_url": "git@github.com:eduardoboucas/staticman.git", + "clone_url": "https://github.com/eduardoboucas/staticman.git", + "svn_url": "https://github.com/eduardoboucas/staticman", + "homepage": "https://staticman.net", + "size": 1520, + "stargazers_count": 2299, + "watchers_count": 2299, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "has_discussions": true, + "forks_count": 496, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 124, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "hugo", + "jekyll", + "metalsmith", + "middleman", + "static-site-generator" + ], + "visibility": "public", + "forks": 496, + "open_issues": 124, + "watchers": 2299, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "network_count": 496, + "subscribers_count": 41 +} diff --git a/apigh/2023-04-20/staticman.commit b/apigh/2023-04-20/staticman.commit new file mode 100644 index 00000000..cbe1a789 --- /dev/null +++ b/apigh/2023-04-20/staticman.commit @@ -0,0 +1,158 @@ +{ + "sha": "5d7ed7708775e3d4864382cca88d2d73ff875864", + "node_id": "MDY6Q29tbWl0Mzg4ODA1NTU6NWQ3ZWQ3NzA4Nzc1ZTNkNDg2NDM4MmNjYTg4ZDJkNzNmZjg3NTg2NA==", + "commit": { + "author": { + "name": "Alex Waibel", + "email": "alexwaibel@users.noreply.github.com", + "date": "2020-07-06T15:57:23Z" + }, + "committer": { + "name": "GitHub", + "email": "noreply@github.com", + "date": "2020-07-06T15:57:23Z" + }, + "message": "Fix incorrect error handling (#342) (#346)\n\n* Convert error handler to more modern class declaration.\r\n* Make GitHub and GitService actually throw errors rather than return them\r\n* Fix some broken unit and acceptance tests", + "tree": { + "sha": "064c1c78a9cb030e946face714b929f5f29ddda6", + "url": "https://api.github.com/repos/eduardoboucas/staticman/git/trees/064c1c78a9cb030e946face714b929f5f29ddda6" + }, + "url": "https://api.github.com/repos/eduardoboucas/staticman/git/commits/5d7ed7708775e3d4864382cca88d2d73ff875864", + "comment_count": 0, + "verification": { + "verified": true, + "reason": "valid", + "signature": "-----BEGIN PGP SIGNATURE-----\n\nwsBcBAABCAAQBQJfA0njCRBK7hj4Ov3rIwAAdHIIAGs7JUJlSEGrKT4sXrJAbDxO\nDLA+g+Iz5NxgC+3qixgjXyKCKqC9TAUeg0RnAA+T05En7kkPBz02XMgGkI6Kbkjb\nC1MYqba95+SlwQqwrr9tqi7PkdDN4IWeCuSaWQta6rMrAaO8Voe4XXQnff/mFWDg\nxlgGl5QYUtkm/7pHBKTfHhW0Nq7PHPS3iDUpbZuvNv0qc6uHqiAXVVtjrdbWcyoL\nxSRMgRposP+zTHMs/HUb+kplHnAB2XYfOwUGtSxQIirtNBhyZLwRypJv3Yo6XBKD\nxiK8Xnq6C3UkIBeWOLoeSltSAh45wuYehiwg/oDKFvMU2FmZRZtHdhDcE8OOjj4=\n=JtRe\n-----END PGP SIGNATURE-----\n", + "payload": "tree 064c1c78a9cb030e946face714b929f5f29ddda6\nparent 31ab851a14f64a9f299aa9cd55232014b9aee479\nauthor Alex Waibel 1594051043 -0400\ncommitter GitHub 1594051043 -0400\n\nFix incorrect error handling (#342) (#346)\n\n* Convert error handler to more modern class declaration.\r\n* Make GitHub and GitService actually throw errors rather than return them\r\n* Fix some broken unit and acceptance tests" + } + }, + "url": "https://api.github.com/repos/eduardoboucas/staticman/commits/5d7ed7708775e3d4864382cca88d2d73ff875864", + "html_url": "https://github.com/eduardoboucas/staticman/commit/5d7ed7708775e3d4864382cca88d2d73ff875864", + "comments_url": "https://api.github.com/repos/eduardoboucas/staticman/commits/5d7ed7708775e3d4864382cca88d2d73ff875864/comments", + "author": { + "login": "alexwaibel", + "id": 7026879, + "node_id": "MDQ6VXNlcjcwMjY4Nzk=", + "avatar_url": "https://avatars.githubusercontent.com/u/7026879?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/alexwaibel", + "html_url": "https://github.com/alexwaibel", + "followers_url": "https://api.github.com/users/alexwaibel/followers", + "following_url": "https://api.github.com/users/alexwaibel/following{/other_user}", + "gists_url": "https://api.github.com/users/alexwaibel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexwaibel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexwaibel/subscriptions", + "organizations_url": "https://api.github.com/users/alexwaibel/orgs", + "repos_url": "https://api.github.com/users/alexwaibel/repos", + "events_url": "https://api.github.com/users/alexwaibel/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexwaibel/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "web-flow", + "id": 19864447, + "node_id": "MDQ6VXNlcjE5ODY0NDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/web-flow", + "html_url": "https://github.com/web-flow", + "followers_url": "https://api.github.com/users/web-flow/followers", + "following_url": "https://api.github.com/users/web-flow/following{/other_user}", + "gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/web-flow/subscriptions", + "organizations_url": "https://api.github.com/users/web-flow/orgs", + "repos_url": "https://api.github.com/users/web-flow/repos", + "events_url": "https://api.github.com/users/web-flow/events{/privacy}", + "received_events_url": "https://api.github.com/users/web-flow/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "31ab851a14f64a9f299aa9cd55232014b9aee479", + "url": "https://api.github.com/repos/eduardoboucas/staticman/commits/31ab851a14f64a9f299aa9cd55232014b9aee479", + "html_url": "https://github.com/eduardoboucas/staticman/commit/31ab851a14f64a9f299aa9cd55232014b9aee479" + } + ], + "stats": { + "total": 288, + "additions": 173, + "deletions": 115 + }, + "files": [ + { + "sha": "cc5734de4fc8d1faf8a21d6acef2c8e42df0f8f3", + "filename": "lib/ErrorHandler.js", + "status": "modified", + "additions": 58, + "deletions": 56, + "changes": 114, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FErrorHandler.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FErrorHandler.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/lib%2FErrorHandler.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -17,81 +17,83 @@ class ApiError {\n }\n }\n \n-const ErrorHandler = function () {\n- this.ERROR_MESSAGES = {\n- 'missing-input-secret': 'reCAPTCHA: The secret parameter is missing',\n- 'invalid-input-secret': 'reCAPTCHA: The secret parameter is invalid or malformed',\n- 'missing-input-response': 'reCAPTCHA: The response parameter is missing',\n- 'invalid-input-response': 'reCAPTCHA: The response parameter is invalid or malformed',\n- 'RECAPTCHA_MISSING_CREDENTIALS': 'Missing reCAPTCHA API credentials',\n- 'RECAPTCHA_FAILED_DECRYPT': 'Could not decrypt reCAPTCHA secret',\n- 'RECAPTCHA_CONFIG_MISMATCH': 'reCAPTCHA options do not match Staticman config',\n- 'PARSING_ERROR': 'Error whilst parsing config file',\n- 'GITHUB_AUTH_TOKEN_MISSING': 'The site requires a valid GitHub authentication token to be supplied in the `options[github-token]` field',\n- 'MISSING_CONFIG_BLOCK': 'Error whilst parsing Staticman config file'\n+class ErrorHandler {\n+ constructor () {\n+ this.ERROR_MESSAGES = {\n+ 'missing-input-secret': 'reCAPTCHA: The secret parameter is missing',\n+ 'invalid-input-secret': 'reCAPTCHA: The secret parameter is invalid or malformed',\n+ 'missing-input-response': 'reCAPTCHA: The response parameter is missing',\n+ 'invalid-input-response': 'reCAPTCHA: The response parameter is invalid or malformed',\n+ 'RECAPTCHA_MISSING_CREDENTIALS': 'Missing reCAPTCHA API credentials',\n+ 'RECAPTCHA_FAILED_DECRYPT': 'Could not decrypt reCAPTCHA secret',\n+ 'RECAPTCHA_CONFIG_MISMATCH': 'reCAPTCHA options do not match Staticman config',\n+ 'PARSING_ERROR': 'Error whilst parsing config file',\n+ 'GITHUB_AUTH_TOKEN_MISSING': 'The site requires a valid GitHub authentication token to be supplied in the `options[github-token]` field',\n+ 'MISSING_CONFIG_BLOCK': 'Error whilst parsing Staticman config file'\n+ }\n+\n+ this.ERROR_CODE_ALIASES = {\n+ 'missing-input-secret': 'RECAPTCHA_MISSING_INPUT_SECRET',\n+ 'invalid-input-secret': 'RECAPTCHA_INVALID_INPUT_SECRET',\n+ 'missing-input-response': 'RECAPTCHA_MISSING_INPUT_RESPONSE',\n+ 'invalid-input-response': 'RECAPTCHA_INVALID_INPUT_RESPONSE'\n+ }\n }\n \n- this.ERROR_CODE_ALIASES = {\n- 'missing-input-secret': 'RECAPTCHA_MISSING_INPUT_SECRET',\n- 'invalid-input-secret': 'RECAPTCHA_INVALID_INPUT_SECRET',\n- 'missing-input-response': 'RECAPTCHA_MISSING_INPUT_RESPONSE',\n- 'invalid-input-response': 'RECAPTCHA_INVALID_INPUT_RESPONSE'\n+ getErrorCode (error) {\n+ return this.ERROR_CODE_ALIASES[error] || error\n }\n-}\n \n-ErrorHandler.prototype.getErrorCode = function (error) {\n- return this.ERROR_CODE_ALIASES[error] || error\n-}\n+ getMessage (error) {\n+ return this.ERROR_MESSAGES[error]\n+ }\n \n-ErrorHandler.prototype.getMessage = function (error) {\n- return this.ERROR_MESSAGES[error]\n-}\n+ log (err, instance) {\n+ let parameters = {}\n+ let prefix = ''\n \n-ErrorHandler.prototype.log = function (err, instance) {\n- let parameters = {}\n- let prefix = ''\n+ if (instance) {\n+ parameters = instance.getParameters()\n \n- if (instance) {\n- parameters = instance.getParameters()\n+ prefix += `${parameters.username}/${parameters.repository}`\n+ }\n \n- prefix += `${parameters.username}/${parameters.repository}`\n+ console.log(`${prefix}`, err)\n }\n \n- console.log(`${prefix}`, err)\n-}\n+ _save (errorCode, data = {}) {\n+ const {err} = data\n \n-ErrorHandler.prototype._save = function (errorCode, data = {}) {\n- const {err} = data\n+ if (err) {\n+ err._smErrorCode = err._smErrorCode || errorCode\n \n- if (err) {\n- err._smErrorCode = err._smErrorCode || errorCode\n+ // Re-wrap API request errors as these could expose\n+ // request/response details that the user should not\n+ // be allowed to see e.g. access tokens.\n+ // `request-promise` is the primary offender here,\n+ // but we similarly do not want others to leak too.\n+ if (\n+ err instanceof StatusCodeError ||\n+ err instanceof RequestError\n+ ) {\n+ const statusCode = err.statusCode || err.code\n \n- // Re-wrap API request errors as these could expose\n- // request/response details that the user should not\n- // be allowed to see e.g. access tokens.\n- // `request-promise` is the primary offender here,\n- // but we similarly do not want others to leak too.\n- if (\n- err instanceof StatusCodeError ||\n- err instanceof RequestError\n- ) {\n- const statusCode = err.statusCode || err.code\n+ return new ApiError(err.message, statusCode, err._smErrorCode)\n+ }\n \n- return new ApiError(err.message, statusCode, err._smErrorCode)\n+ return err\n }\n \n- return err\n- }\n+ let payload = {\n+ _smErrorCode: errorCode\n+ }\n \n- let payload = {\n- _smErrorCode: errorCode\n- }\n+ if (data.data) {\n+ payload.data = data.data\n+ }\n \n- if (data.data) {\n- payload.data = data.data\n+ return payload\n }\n-\n- return payload\n }\n \n const errorHandler = new ErrorHandler()" + }, + { + "sha": "67558241e9249a012095e0ae025a91e1d027bc1a", + "filename": "lib/GitHub.js", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitHub.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitHub.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/lib%2FGitHub.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -117,7 +117,7 @@ class GitHub extends GitService {\n console.log(err)\n }\n \n- return Promise.reject(errorHandler('GITHUB_WRITING_FILE', {err}))\n+ return Promise.reject(errorHandler('GITHUB_WRITING_FILE'))\n })\n }\n \n@@ -182,7 +182,7 @@ class GitHub extends GitService {\n try {\n return await super.readFile(filePath, getFullResponse)\n } catch (err) {\n- return errorHandler('GITHUB_READING_FILE', {err})\n+ throw errorHandler('GITHUB_READING_FILE', {err})\n }\n }\n " + }, + { + "sha": "1cc79663121b6cc603f2575332861836acf279bc", + "filename": "lib/GitService.js", + "status": "modified", + "additions": 2, + "deletions": 2, + "changes": 4, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitService.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/lib%2FGitService.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/lib%2FGitService.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -51,7 +51,7 @@ class GitService {\n try {\n content = Buffer.from(res.content, 'base64').toString()\n } catch (err) {\n- return errorHandler('GITHUB_READING_FILE', {err})\n+ throw errorHandler('GITHUB_READING_FILE', {err})\n }\n \n try {\n@@ -85,7 +85,7 @@ class GitService {\n errorData.data = err.message\n }\n \n- return errorHandler('PARSING_ERROR', errorData)\n+ throw errorHandler('PARSING_ERROR', errorData)\n }\n }\n " + }, + { + "sha": "36758afcd0cbb80121940c75b0066c5e3614d60c", + "filename": "test/acceptance/api.test.js", + "status": "modified", + "additions": 56, + "deletions": 43, + "changes": 99, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Facceptance%2Fapi.test.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Facceptance%2Fapi.test.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/test%2Facceptance%2Fapi.test.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -26,7 +26,7 @@ afterAll(done => {\n })\n \n describe('Connect endpoint', () => {\n- test('accepts the invitation if one is found and replies with \"OK!\"', () => {\n+ test('accepts the invitation if one is found and replies with \"OK!\"', async () => {\n const invitationId = 123\n \n const reqListInvititations = nock('https://api.github.com', {\n@@ -52,15 +52,13 @@ describe('Connect endpoint', () => {\n .patch(`/user/repository_invitations/${invitationId}`)\n .reply(204)\n \n- return request('/v2/connect/johndoe/foobar')\n- .then(response => {\n- expect(reqListInvititations.isDone()).toBe(true)\n- expect(reqAcceptInvitation.isDone()).toBe(true)\n- expect(response).toBe('OK!')\n- })\n+ let response = await request('/v2/connect/johndoe/foobar')\n+ expect(reqListInvititations.isDone()).toBe(true)\n+ expect(reqAcceptInvitation.isDone()).toBe(true)\n+ expect(response).toBe('OK!')\n })\n \n- test('returns a 404 and an error message if a matching invitation is not found', () => {\n+ test('returns a 404 and an error message if a matching invitation is not found', async () => {\n const invitationId = 123\n const reqListInvititations = nock('https://api.github.com', {\n reqheaders: {\n@@ -85,18 +83,21 @@ describe('Connect endpoint', () => {\n .patch(`/user/repository_invitations/${invitationId}`)\n .reply(204)\n \n- return request('/v2/connect/johndoe/foobar')\n- .catch(err => {\n+ expect.assertions(4)\n+\n+ try {\n+ await request('/v2/connect/johndoe/foobar')\n+ } catch (err) {\n expect(reqListInvititations.isDone()).toBe(true)\n expect(reqAcceptInvitation.isDone()).toBe(false)\n expect(err.response.body).toBe('Invitation not found')\n expect(err.statusCode).toBe(404)\n- })\n+ }\n })\n })\n \n describe('Entry endpoint', () => {\n- test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong site key)', () => {\n+ test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong site key)', async () => {\n const data = Object.assign({}, helpers.getParameters(), {\n path: 'staticman.yml'\n })\n@@ -136,23 +137,27 @@ describe('Entry endpoint', () => {\n }\n const formData = querystring.stringify(form)\n \n- return request({\n- body: formData,\n- method: 'POST',\n- uri: `/v2/entry/${data.username}/${data.repository}/${data.branch}/${data.property}`,\n- headers: {\n- 'content-type': 'application/x-www-form-urlencoded'\n- }\n- }).catch((response) => {\n+ expect.assertions(3)\n+\n+ try {\n+ await request({\n+ body: formData,\n+ method: 'POST',\n+ uri: `/v2/entry/${data.username}/${data.repository}/${data.branch}/${data.property}`,\n+ headers: {\n+ 'content-type': 'application/x-www-form-urlencoded'\n+ }\n+ })\n+ } catch(response) {\n const error = JSON.parse(response.error)\n \n expect(error.success).toBe(false)\n expect(error.errorCode).toBe('RECAPTCHA_CONFIG_MISMATCH')\n expect(error.message).toBe('reCAPTCHA options do not match Staticman config')\n- })\n+ }\n })\n \n- test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong secret)', () => {\n+ test('outputs a RECAPTCHA_CONFIG_MISMATCH error if reCaptcha options do not match (wrong secret)', async () => {\n const data = Object.assign({}, helpers.getParameters(), {\n path: 'staticman.yml'\n })\n@@ -192,23 +197,27 @@ describe('Entry endpoint', () => {\n }\n const formData = querystring.stringify(form)\n \n- return request({\n- body: formData,\n- method: 'POST',\n- uri: '/v2/entry/johndoe/foobar/master/comments',\n- headers: {\n- 'content-type': 'application/x-www-form-urlencoded'\n- }\n- }).catch(response => {\n+ expect.assertions(3)\n+\n+ try {\n+ await request({\n+ body: formData,\n+ method: 'POST',\n+ uri: '/v2/entry/johndoe/foobar/master/comments',\n+ headers: {\n+ 'content-type': 'application/x-www-form-urlencoded'\n+ }\n+ })\n+ } catch (response) {\n const error = JSON.parse(response.error)\n \n expect(error.success).toBe(false)\n expect(error.errorCode).toBe('RECAPTCHA_CONFIG_MISMATCH')\n expect(error.message).toBe('reCAPTCHA options do not match Staticman config')\n- })\n+ }\n })\n \n- test('outputs a MISSING_CONFIG_BLOCK error if the site config is malformed', () => {\n+ test('outputs a PARSING_ERROR error if the site config is malformed', async () => {\n const data = Object.assign({}, helpers.getParameters(), {\n path: 'staticman.yml'\n })\n@@ -243,20 +252,24 @@ describe('Entry endpoint', () => {\n }\n const formData = querystring.stringify(form)\n \n- return request({\n- body: formData,\n- method: 'POST',\n- uri: '/v2/entry/johndoe/foobar/master/comments',\n- headers: {\n- 'content-type': 'application/x-www-form-urlencoded'\n- }\n- }).catch(response => {\n+ expect.assertions(4)\n+\n+ try {\n+ await request({\n+ body: formData,\n+ method: 'POST',\n+ uri: '/v2/entry/johndoe/foobar/master/comments',\n+ headers: {\n+ 'content-type': 'application/x-www-form-urlencoded'\n+ }\n+ })\n+ } catch (response) {\n const error = JSON.parse(response.error)\n \n expect(error.success).toBe(false)\n- expect(error.errorCode).toBe('MISSING_CONFIG_BLOCK')\n- expect(error.message).toBe('Error whilst parsing Staticman config file')\n+ expect(error.errorCode).toBe('PARSING_ERROR')\n+ expect(error.message).toBe('Error whilst parsing config file')\n expect(error.rawError).toBeDefined()\n- })\n+ }\n })\n })" + }, + { + "sha": "7b3955cae254892e843181d84f2af0f1c0e8bf63", + "filename": "test/helpers/sampleData.js", + "status": "modified", + "additions": 7, + "deletions": 0, + "changes": 7, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Fhelpers%2FsampleData.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Fhelpers%2FsampleData.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/test%2Fhelpers%2FsampleData.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -150,6 +150,13 @@ module.exports.config3 = `comments:\n siteKey: \"123456789\"\n secret: \"@reCaptchaSecret@\"`\n \n+module.exports.configInvalidYML = `invalid:\n+- x\n+y\n+ foo\n+bar\n+`\n+\n module.exports.prBody1 = `Dear human,\n \n Here's a new entry for your approval. :tada:" + }, + { + "sha": "24bc50980aa1f4c396fefe6ddc2be40ea0553b03", + "filename": "test/unit/lib/GitHub.test.js", + "status": "modified", + "additions": 48, + "deletions": 12, + "changes": 60, + "blob_url": "https://github.com/eduardoboucas/staticman/blob/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Funit%2Flib%2FGitHub.test.js", + "raw_url": "https://github.com/eduardoboucas/staticman/raw/5d7ed7708775e3d4864382cca88d2d73ff875864/test%2Funit%2Flib%2FGitHub.test.js", + "contents_url": "https://api.github.com/repos/eduardoboucas/staticman/contents/test%2Funit%2Flib%2FGitHub.test.js?ref=5d7ed7708775e3d4864382cca88d2d73ff875864", + "patch": "@@ -100,6 +100,8 @@ describe('GitHub interface', () => {\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.readFile(filePath)\n } catch (err) {\n@@ -109,18 +111,46 @@ describe('GitHub interface', () => {\n expect(scope.isDone()).toBe(true)\n })\n \n- test('returns an error if parsing fails for the given file', async () => {\n+ test('returns an error if the config file cannot be read', async () => {\n const filePath = 'path/to/file.yml'\n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.readFile(filePath)\n } catch (err) {\n- expect(err._smErrorCode).toEqual('PARSING_ERROR')\n+ expect(err._smErrorCode).toEqual('GITHUB_READING_FILE')\n expect(err.message).toBeDefined()\n }\n })\n \n+ test('returns an error if the config file cannot be parsed', async () => {\n+ const scope = nock((/api\\.github\\.com/), {\n+ reqheaders: {\n+ authorization: 'token '.concat('1q2w3e4r')\n+ }\n+ })\n+ .get('/repos/johndoe/foobar/contents/path/to/file.yml?ref=master')\n+ .reply(200, {\n+ content: btoa(sampleData.configInvalidYML)\n+ })\n+\n+ const filePath = 'path/to/file.yml'\n+ const githubInstance = await new GitHub(req.params)\n+\n+ expect.assertions(3)\n+\n+ try {\n+ await githubInstance.readFile(filePath)\n+ } catch (err) {\n+ expect(err._smErrorCode).toEqual('PARSING_ERROR')\n+ expect(err.message).toBeDefined()\n+ }\n+\n+ expect(scope.isDone()).toBe(true)\n+ })\n+\n test('reads a YAML file and returns its parsed contents', async () => {\n const filePath = 'path/to/file.yml'\n const parsedConfig = yaml.safeLoad(sampleData.config1, 'utf8')\n@@ -284,12 +314,12 @@ describe('GitHub interface', () => {\n }\n })\n .put('/repos/johndoe/foobar/contents/path/to/file.txt')\n- .reply(200, {\n- number: 123\n- })\n+ .replyWithError('An error')\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.writeFile(\n options.path,\n@@ -361,22 +391,24 @@ describe('GitHub interface', () => {\n id: 1\n })\n \n+ expect.assertions(5)\n+\n const githubInstance = await new GitHub(req.params)\n \n- await githubInstance.writeFileAndSendReview(\n+ const data = await githubInstance.writeFileAndSendReview(\n options.path,\n options.content,\n options.newBranch,\n options.commitTitle,\n options.commitBody\n )\n \n- setTimeout(() => {\n- expect(branchScope.isDone()).toBe(true)\n- expect(refsScope.isDone()).toBe(true)\n- expect(fileScope.isDone()).toBe(true)\n- expect(pullScope.isDone()).toBe(true)\n- })\n+ expect(data).toEqual({\"id\": 1})\n+\n+ expect(branchScope.isDone()).toBe(true)\n+ expect(refsScope.isDone()).toBe(true)\n+ expect(fileScope.isDone()).toBe(true)\n+ expect(pullScope.isDone()).toBe(true)\n })\n \n // TODO: Figure out why this works with no mocks\n@@ -401,6 +433,8 @@ describe('GitHub interface', () => {\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.writeFileAndSendReview(\n options.path,\n@@ -448,6 +482,8 @@ describe('GitHub interface', () => {\n \n const githubInstance = await new GitHub(req.params)\n \n+ expect.assertions(2)\n+\n try {\n await githubInstance.getCurrentUser()\n } catch (err) {" + } + ] +} diff --git a/apigh/2023-04-20/talkatv b/apigh/2023-04-20/talkatv new file mode 100644 index 00000000..a5896f94 --- /dev/null +++ b/apigh/2023-04-20/talkatv @@ -0,0 +1,138 @@ +{ + "id": 5424958, + "node_id": "MDEwOlJlcG9zaXRvcnk1NDI0OTU4", + "name": "talkatv", + "full_name": "talkatv/talkatv", + "private": false, + "owner": { + "login": "talkatv", + "id": 2156324, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIxNTYzMjQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/2156324?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talkatv", + "html_url": "https://github.com/talkatv", + "followers_url": "https://api.github.com/users/talkatv/followers", + "following_url": "https://api.github.com/users/talkatv/following{/other_user}", + "gists_url": "https://api.github.com/users/talkatv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talkatv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talkatv/subscriptions", + "organizations_url": "https://api.github.com/users/talkatv/orgs", + "repos_url": "https://api.github.com/users/talkatv/repos", + "events_url": "https://api.github.com/users/talkatv/events{/privacy}", + "received_events_url": "https://api.github.com/users/talkatv/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/talkatv/talkatv", + "description": "An open source commenting system", + "fork": false, + "url": "https://api.github.com/repos/talkatv/talkatv", + "forks_url": "https://api.github.com/repos/talkatv/talkatv/forks", + "keys_url": "https://api.github.com/repos/talkatv/talkatv/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/talkatv/talkatv/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/talkatv/talkatv/teams", + "hooks_url": "https://api.github.com/repos/talkatv/talkatv/hooks", + "issue_events_url": "https://api.github.com/repos/talkatv/talkatv/issues/events{/number}", + "events_url": "https://api.github.com/repos/talkatv/talkatv/events", + "assignees_url": "https://api.github.com/repos/talkatv/talkatv/assignees{/user}", + "branches_url": "https://api.github.com/repos/talkatv/talkatv/branches{/branch}", + "tags_url": "https://api.github.com/repos/talkatv/talkatv/tags", + "blobs_url": "https://api.github.com/repos/talkatv/talkatv/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/talkatv/talkatv/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/talkatv/talkatv/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/talkatv/talkatv/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/talkatv/talkatv/statuses/{sha}", + "languages_url": "https://api.github.com/repos/talkatv/talkatv/languages", + "stargazers_url": "https://api.github.com/repos/talkatv/talkatv/stargazers", + "contributors_url": "https://api.github.com/repos/talkatv/talkatv/contributors", + "subscribers_url": "https://api.github.com/repos/talkatv/talkatv/subscribers", + "subscription_url": "https://api.github.com/repos/talkatv/talkatv/subscription", + "commits_url": "https://api.github.com/repos/talkatv/talkatv/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/talkatv/talkatv/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/talkatv/talkatv/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/talkatv/talkatv/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/talkatv/talkatv/contents/{+path}", + "compare_url": "https://api.github.com/repos/talkatv/talkatv/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/talkatv/talkatv/merges", + "archive_url": "https://api.github.com/repos/talkatv/talkatv/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/talkatv/talkatv/downloads", + "issues_url": "https://api.github.com/repos/talkatv/talkatv/issues{/number}", + "pulls_url": "https://api.github.com/repos/talkatv/talkatv/pulls{/number}", + "milestones_url": "https://api.github.com/repos/talkatv/talkatv/milestones{/number}", + "notifications_url": "https://api.github.com/repos/talkatv/talkatv/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/talkatv/talkatv/labels{/name}", + "releases_url": "https://api.github.com/repos/talkatv/talkatv/releases{/id}", + "deployments_url": "https://api.github.com/repos/talkatv/talkatv/deployments", + "created_at": "2012-08-15T10:51:28Z", + "updated_at": "2023-02-22T08:17:31Z", + "pushed_at": "2012-12-03T13:10:58Z", + "git_url": "git://github.com/talkatv/talkatv.git", + "ssh_url": "git@github.com:talkatv/talkatv.git", + "clone_url": "https://github.com/talkatv/talkatv.git", + "svn_url": "https://github.com/talkatv/talkatv", + "homepage": "", + "size": 1727, + "stargazers_count": 207, + "watchers_count": 207, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 20, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 26, + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0", + "node_id": "MDc6TGljZW5zZTE=" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + + ], + "visibility": "public", + "forks": 20, + "open_issues": 26, + "watchers": 207, + "default_branch": "master", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + }, + "temp_clone_token": "", + "organization": { + "login": "talkatv", + "id": 2156324, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjIxNTYzMjQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/2156324?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/talkatv", + "html_url": "https://github.com/talkatv", + "followers_url": "https://api.github.com/users/talkatv/followers", + "following_url": "https://api.github.com/users/talkatv/following{/other_user}", + "gists_url": "https://api.github.com/users/talkatv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talkatv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talkatv/subscriptions", + "organizations_url": "https://api.github.com/users/talkatv/orgs", + "repos_url": "https://api.github.com/users/talkatv/repos", + "events_url": "https://api.github.com/users/talkatv/events{/privacy}", + "received_events_url": "https://api.github.com/users/talkatv/received_events", + "type": "Organization", + "site_admin": false + }, + "network_count": 20, + "subscribers_count": 21 +} diff --git a/apigh/2023-04-20/talkatv.commit b/apigh/2023-04-20/talkatv.commit new file mode 100644 index 00000000..ff00e64e --- /dev/null +++ b/apigh/2023-04-20/talkatv.commit @@ -0,0 +1,115 @@ +{ + "sha": "d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "node_id": "MDY6Q29tbWl0NTQyNDk1ODpkNTUyOGM4YjMxMzY4M2JmYTI0Y2M2Mjk5Y2ZhYWNlZDA1YzZiMTdm", + "commit": { + "author": { + "name": "joar", + "email": "joar@wandborg.com", + "date": "2012-12-03T13:10:57Z" + }, + "committer": { + "name": "joar", + "email": "joar@wandborg.com", + "date": "2012-12-03T13:10:57Z" + }, + "message": "Merge pull request #39 from etu/master\n\nPlease don't suggest people to use document.write anymore...", + "tree": { + "sha": "1256a718a8b66871dc1e8a32cfffa3d919a6c952", + "url": "https://api.github.com/repos/talkatv/talkatv/git/trees/1256a718a8b66871dc1e8a32cfffa3d919a6c952" + }, + "url": "https://api.github.com/repos/talkatv/talkatv/git/commits/d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } + }, + "url": "https://api.github.com/repos/talkatv/talkatv/commits/d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "html_url": "https://github.com/talkatv/talkatv/commit/d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "comments_url": "https://api.github.com/repos/talkatv/talkatv/commits/d5528c8b313683bfa24cc6299cfaaced05c6b17f/comments", + "author": { + "login": "joar", + "id": 20814, + "node_id": "MDQ6VXNlcjIwODE0", + "avatar_url": "https://avatars.githubusercontent.com/u/20814?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joar", + "html_url": "https://github.com/joar", + "followers_url": "https://api.github.com/users/joar/followers", + "following_url": "https://api.github.com/users/joar/following{/other_user}", + "gists_url": "https://api.github.com/users/joar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joar/subscriptions", + "organizations_url": "https://api.github.com/users/joar/orgs", + "repos_url": "https://api.github.com/users/joar/repos", + "events_url": "https://api.github.com/users/joar/events{/privacy}", + "received_events_url": "https://api.github.com/users/joar/received_events", + "type": "User", + "site_admin": false + }, + "committer": { + "login": "joar", + "id": 20814, + "node_id": "MDQ6VXNlcjIwODE0", + "avatar_url": "https://avatars.githubusercontent.com/u/20814?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/joar", + "html_url": "https://github.com/joar", + "followers_url": "https://api.github.com/users/joar/followers", + "following_url": "https://api.github.com/users/joar/following{/other_user}", + "gists_url": "https://api.github.com/users/joar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joar/subscriptions", + "organizations_url": "https://api.github.com/users/joar/orgs", + "repos_url": "https://api.github.com/users/joar/repos", + "events_url": "https://api.github.com/users/joar/events{/privacy}", + "received_events_url": "https://api.github.com/users/joar/received_events", + "type": "User", + "site_admin": false + }, + "parents": [ + { + "sha": "71e40b7276eaee88bff7ae0b5f34c7a131392c42", + "url": "https://api.github.com/repos/talkatv/talkatv/commits/71e40b7276eaee88bff7ae0b5f34c7a131392c42", + "html_url": "https://github.com/talkatv/talkatv/commit/71e40b7276eaee88bff7ae0b5f34c7a131392c42" + }, + { + "sha": "81014a619c50643ea52acf9edf8570e658637ebb", + "url": "https://api.github.com/repos/talkatv/talkatv/commits/81014a619c50643ea52acf9edf8570e658637ebb", + "html_url": "https://github.com/talkatv/talkatv/commit/81014a619c50643ea52acf9edf8570e658637ebb" + } + ], + "stats": { + "total": 27, + "additions": 15, + "deletions": 12 + }, + "files": [ + { + "sha": "9801cd123b8a2ec766ebb9324b5a6e2d80f44b8b", + "filename": "examples/talkatv-test/index.html", + "status": "modified", + "additions": 5, + "deletions": 4, + "changes": 9, + "blob_url": "https://github.com/talkatv/talkatv/blob/d5528c8b313683bfa24cc6299cfaaced05c6b17f/examples%2Ftalkatv-test%2Findex.html", + "raw_url": "https://github.com/talkatv/talkatv/raw/d5528c8b313683bfa24cc6299cfaaced05c6b17f/examples%2Ftalkatv-test%2Findex.html", + "contents_url": "https://api.github.com/repos/talkatv/talkatv/contents/examples%2Ftalkatv-test%2Findex.html?ref=d5528c8b313683bfa24cc6299cfaaced05c6b17f", + "patch": "@@ -23,10 +23,11 @@

      Comments

      \n var talkatv_ordered = true;\n \n /* Include talkatv.js */\n- document.write(unescape('%3Cscript src=\"'\n- + talkatv_home + (window.talkatv_shortcut\n- ? '/talkatv.js' : '/static/js/talkatv.js')\n- + '\" type=\"text/javascript\"%3E%3C/script%3E'));\n+ script = document.createElement('script');\n+ script.src = talkatv_home + (talkatv_shortcut ? '/talkatv.js' : '/static/js/talkatv.js');\n+ script.type = 'text/javascript';\n+\n+ document.body.appendChild(script);\n \n