diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml new file mode 100644 index 0000000..dc12ee1 --- /dev/null +++ b/.github/workflows/node.js.yml @@ -0,0 +1,27 @@ +name: Update data + +on: + schedule: + - cron: "0 8 * * *" + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Generate data + uses: actions/setup-node@v1 + with: + node-version: 15.x + - run: node generate.js + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Commit & Push Generated Data + run: | + git config --local user.email "actions@github.com" + git config --local user.name "Actions Auto Build" + git add -f . + git commit -m "docs: generate documents" || true + git push --force origin HEAD:refs/heads/main diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..68f394d --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @github/primer-reviewers diff --git a/README.md b/README.md index b6858d3..9edb38a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,107 @@ # github-elements + GitHub's Web Component collection. + +We have 17 open source custom elements: + +### [github/auto-check-element](https://github.com/github/auto-check-element) + +An input element that validates its value with a server endpoint. + +[Repository](https://github.com/github/auto-check-element) | [Example](https://github.github.com/auto-check-element/examples/) + +### [github/auto-complete-element](https://github.com/github/auto-complete-element) + +Auto-complete input values from server search results. + +[Repository](https://github.com/github/auto-complete-element) | [Example](https://github.github.com/auto-complete-element/examples/) + +### [github/clipboard-copy-element](https://github.com/github/clipboard-copy-element) + +Copy element text content or input values to the clipboard. + +[Repository](https://github.com/github/clipboard-copy-element) | [Example](https://github.github.io/clipboard-copy-element/examples/) + +### [github/details-dialog-element](https://github.com/github/details-dialog-element) + +A modal dialog that's opened with <details>. + +[Repository](https://github.com/github/details-dialog-element) | [Example](https://github.github.io/details-dialog-element/example/index.html) + +### [github/details-menu-element](https://github.com/github/details-menu-element) + +A menu opened with <details>. + +[Repository](https://github.com/github/details-menu-element) | [Example](https://github.github.io/details-menu-element/examples) + +### [github/file-attachment-element](https://github.com/github/file-attachment-element) + +Attach files via drag and drop or file input. + +[Repository](https://github.com/github/file-attachment-element) | [Example](https://github.github.com/file-attachment-element/examples/) + +### [github/filter-input-element](https://github.com/github/filter-input-element) + +Display elements in a subtree that match filter input text. + +[Repository](https://github.com/github/filter-input-element) | [Example](https://github.github.io/filter-input-element/examples/) + +### [github/g-emoji-element](https://github.com/github/g-emoji-element) + +Backports native emoji characters to browsers that don't support them by replacing the characters with fallback images. + +[Repository](https://github.com/github/g-emoji-element) | [Example](https://github.github.io/g-emoji-element/examples/) + +### [github/image-crop-element](https://github.com/github/image-crop-element) + +A custom element for cropping a square image. Returns x, y, width, and height. + +[Repository](https://github.com/github/image-crop-element) | [Example](https://github.github.io/image-crop-element/examples/) + +### [github/include-fragment-element](https://github.com/github/include-fragment-element) + +A client-side includes tag. + +[Repository](https://github.com/github/include-fragment-element) | [Example](https://github.github.io/include-fragment-element/examples) + +### [github/markdown-toolbar-element](https://github.com/github/markdown-toolbar-element) + +Markdown formatting buttons for text inputs. + +[Repository](https://github.com/github/markdown-toolbar-element) | [Example](https://github.github.com/markdown-toolbar-element/examples/) + +### [github/relative-time-element](https://github.com/github/relative-time-element) + +Web component extensions to the standard <time> element. + +[Repository](https://github.com/github/relative-time-element) | [Example](https://github.github.io/relative-time-element/examples/) + +### [github/remote-input-element](https://github.com/github/remote-input-element) + +An input element that sends its value to a server endpoint and renders the response body. + +[Repository](https://github.com/github/remote-input-element) | [Example](https://github.github.io/remote-input-element/examples) + +### [github/tab-container-element](https://github.com/github/tab-container-element) + +An accessible tab container element with keyboard support. + +[Repository](https://github.com/github/tab-container-element) | [Example](https://github.github.com/tab-container-element/examples/) + +### [github/task-lists-element](https://github.com/github/task-lists-element) + +Drag and drop task list items. + +[Repository](https://github.com/github/task-lists-element) | [Example](https://github.github.io/task-lists-element/examples/) + +### [github/text-expander-element](https://github.com/github/text-expander-element) + +Activates a suggestion menu to expand text snippets as you type. + +[Repository](https://github.com/github/text-expander-element) | [Example](http://github.github.io/text-expander-element/examples) + +### [github/typing-effect-element](https://github.com/github/typing-effect-element) + +A custom element that shows text as if it were being typed + +[Repository](https://github.com/github/typing-effect-element) | [Example](https://github.github.com/typing-effect-element/examples/) diff --git a/bower.json b/bower.json index d65505e..fbb349c 100644 --- a/bower.json +++ b/bower.json @@ -13,13 +13,17 @@ "clipboard-copy-element": "github/clipboard-copy-element", "details-dialog-element": "github/details-dialog-element", "details-menu-element": "github/details-menu-element", + "file-attachment-element": "github/file-attachment-element", + "filter-input-element": "github/filter-input-element", "g-emoji-element": "github/g-emoji-element", "image-crop-element": "github/image-crop-element", "include-fragment-element": "github/include-fragment-element", "markdown-toolbar-element": "github/markdown-toolbar-element", + "relative-time-element": "github/relative-time-element", "remote-input-element": "github/remote-input-element", "tab-container-element": "github/tab-container-element", "task-lists-element": "github/task-lists-element", - "time-elements": "github/time-elements" + "text-expander-element": "github/text-expander-element", + "typing-effect-element": "github/typing-effect-element" } -} +} \ No newline at end of file diff --git a/generate.js b/generate.js new file mode 100755 index 0000000..5dda923 --- /dev/null +++ b/generate.js @@ -0,0 +1,90 @@ +#!/usr/bin/env node +import {request} from 'https' +import {readFileSync, writeFileSync} from 'fs' +const escapeMap = { + '&': '&', + '<': '<', + '>': '>', + "'": ''', + '"': 'quot;', +} +function escape(str) { + let newStr = '' + for(const char of str) newStr += char in escapeMap ? escapeMap[char] : char + return newStr +} + +function json(url) { + return new Promise((resolve, reject) => { + if (!process.env['GITHUB_TOKEN']) { + return reject(new Error('GITHUB_TOKEN is not defined')) + } + + const req = request(url, { + headers: { + 'User-Agent': `nodejs ${process.version}`, + 'Authorization': `Bearer ${process.env['GITHUB_TOKEN']}`, + 'Accept': 'application/vnd.github.mercy-preview+json' + } + }, async res => { + res.on('error', reject) + let body = '' + for await (const chunk of res) { + body += chunk + } + resolve(JSON.parse(body)) + }) + req.on('error', reject) + req.end() + }) +} + +async function *getRepos() { + for(let page = 1; page < 1000; page += 1) { + const repos = await json(`https://api.github.com/orgs/github/repos?type=public&per_page=100&page=${page}`) + if (!repos.length) return + for (const repo of repos) { + if (!repo.topics) continue + if (repo.private) continue + if (repo.fork) continue + if (!repo.topics.includes('web-components')) continue + if (!repo.topics.includes('custom-elements')) continue + yield repo + } + } +} + +let readme = readFileSync('readme.head.md', 'utf-8') +const bowerJson = JSON.parse(readFileSync('bower.json', 'utf-8')) +bowerJson.dependencies = {} +const packageJson = JSON.parse(readFileSync('package.json', 'utf-8')) +packageJson.dependencies = {} +let repos = [] +for await (const repo of getRepos()) { + if (repo.full_name === 'github/custom-element-boilerplate') continue + repos.push(repo) +} +repos.sort((a, b) => a.full_name.localeCompare(b.full_name)) +readme += ` +We have ${repos.length} open source custom elements: +` +for (const repo of repos) { + bowerJson.dependencies[repo.name] = repo.full_name + packageJson.dependencies[`@${repo.full_name}`] = '*' + let exampleLink = ''; + if (repo.homepage) { + exampleLink = ` | [Example](${repo.homepage})` + } + readme += ` +### [${escape(repo.full_name)}](${repo.html_url}) + +${escape(repo.description)} + +[Repository](${repo.html_url})${exampleLink} +` +} +readme += readFileSync('readme.tail.md', 'utf-8') +writeFileSync('README.md', readme) +writeFileSync('bower.json', JSON.stringify(bowerJson, null, 2)) +writeFileSync('package.json', JSON.stringify(packageJson, null, 2)) + diff --git a/package.json b/package.json new file mode 100644 index 0000000..68fa6ff --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "github-elements", + "private": true, + "description": "GitHub's Web Component collection.", + "keywords": [ + "element-collection" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/github/github-elements.git" + }, + "license": "MIT", + "type": "module", + "main": "", + "scripts": { + "generate": "node generate.js" + }, + "dependencies": { + "@github/auto-check-element": "*", + "@github/auto-complete-element": "*", + "@github/clipboard-copy-element": "*", + "@github/details-dialog-element": "*", + "@github/details-menu-element": "*", + "@github/file-attachment-element": "*", + "@github/filter-input-element": "*", + "@github/g-emoji-element": "*", + "@github/image-crop-element": "*", + "@github/include-fragment-element": "*", + "@github/markdown-toolbar-element": "*", + "@github/relative-time-element": "*", + "@github/remote-input-element": "*", + "@github/tab-container-element": "*", + "@github/task-lists-element": "*", + "@github/text-expander-element": "*", + "@github/typing-effect-element": "*" + } +} \ No newline at end of file diff --git a/readme.head.md b/readme.head.md new file mode 100644 index 0000000..006fd33 --- /dev/null +++ b/readme.head.md @@ -0,0 +1,3 @@ +# github-elements + +GitHub's Web Component collection. diff --git a/readme.tail.md b/readme.tail.md new file mode 100644 index 0000000..e69de29
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: