├── static-files
├── CNAME
├── robots.txt
├── favicon.ico
├── og-image.png
├── favicon-32x32.png
├── apple-touch-icon.png
├── mstile-150x150.png
├── assets
│ ├── icons.f41c5641.ttf
│ ├── icons.cf61dfff.woff
│ ├── sourcesanspro-bold.cb7d3610.woff
│ ├── sourcesanspro-regular.f84b2bd4.woff
│ ├── search.17d09555.svg
│ ├── 261.bd162b4a.js.LICENSE.txt
│ ├── 139.820be3d5.js
│ ├── manifest.json
│ ├── 67.4ae9feba.css
│ ├── 553.90d4e0e8.css
│ ├── runtime.124568e7.js
│ ├── 67.ab055693.js
│ ├── 553.da065a6b.js
│ ├── icons.b4abbede.svg
│ └── 139.3ced3f7b.css
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── browserconfig.xml
├── manifest.json
└── safari-pinned-tab.svg
├── .gitignore
├── pages
├── index.md
└── changelog.md
├── theme
├── assets
│ ├── components
│ │ ├── component-info
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ ├── off-canvas-menu
│ │ │ ├── index.js
│ │ │ ├── menu.js
│ │ │ ├── index.css
│ │ │ └── menu.css
│ │ ├── version-selector
│ │ │ ├── index.js
│ │ │ ├── selector.js
│ │ │ ├── selector.css
│ │ │ └── index.css
│ │ └── docsearch
│ │ │ ├── index.js
│ │ │ ├── algolia-autocomplete.js
│ │ │ └── algolia-autocomplete.css
│ ├── webpack-public-path.js
│ ├── img
│ │ ├── search.png
│ │ └── search.svg
│ ├── icons
│ │ ├── fonts
│ │ │ ├── icons.ttf
│ │ │ ├── icons.woff
│ │ │ └── icons.svg
│ │ ├── icons.css
│ │ ├── style.css
│ │ └── selection.json
│ ├── fonts
│ │ ├── sourcesanspro-bold.woff
│ │ ├── sourcesanspro-regular.woff
│ │ └── fonts.css
│ ├── styles
│ │ ├── center.css
│ │ ├── iframe.css
│ │ ├── footer.css
│ │ ├── links.css
│ │ ├── styles.css
│ │ ├── anchor.css
│ │ ├── variables.css
│ │ ├── grid.css
│ │ ├── toc.css
│ │ ├── alert.css
│ │ ├── header.css
│ │ ├── hamburger.css
│ │ ├── code.css
│ │ ├── box.css
│ │ ├── searchbox.css
│ │ ├── highlight.css
│ │ ├── welcome.css
│ │ └── base.css
│ └── index.js
├── component-license.html.twig
├── changelog.html.twig
├── component-changelog.html.twig
├── partials
│ ├── changelog.html.twig
│ └── header_menu.html.twig
├── component.html.twig
└── default.html.twig
├── .env.dist
├── data
├── talks.php
├── built_with.php
├── articles.php
└── components.php
├── .github
└── workflows
│ └── ci.yml
├── composer.json
├── LICENSE
├── package.json
├── config
├── webpack-dev-server.config.js
├── webpack.config.js
└── berti.config.php
├── README.md
├── src
├── Twig
│ └── Extension.php
├── data.php
└── berti.php
└── bin
└── build
/static-files/CNAME:
--------------------------------------------------------------------------------
1 | reactphp.org
2 |
--------------------------------------------------------------------------------
/static-files/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /tmp
3 | /vendor
4 | /.env
5 |
--------------------------------------------------------------------------------
/pages/index.md:
--------------------------------------------------------------------------------
1 | Placeholder markdown file for the homepage.
2 |
--------------------------------------------------------------------------------
/theme/assets/components/component-info/index.js:
--------------------------------------------------------------------------------
1 | import './style.css';
2 |
--------------------------------------------------------------------------------
/theme/assets/webpack-public-path.js:
--------------------------------------------------------------------------------
1 | __webpack_public_path__ = window.__assets;
2 |
--------------------------------------------------------------------------------
/pages/changelog.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | The combined changelog for all ReactPHP components.
4 |
--------------------------------------------------------------------------------
/static-files/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/favicon.ico
--------------------------------------------------------------------------------
/static-files/og-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/og-image.png
--------------------------------------------------------------------------------
/theme/assets/components/off-canvas-menu/index.js:
--------------------------------------------------------------------------------
1 | import './index.css';
2 |
3 | import('./menu.js');
4 |
--------------------------------------------------------------------------------
/theme/assets/img/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/theme/assets/img/search.png
--------------------------------------------------------------------------------
/static-files/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/favicon-32x32.png
--------------------------------------------------------------------------------
/theme/assets/components/version-selector/index.js:
--------------------------------------------------------------------------------
1 | import './index.css';
2 |
3 | import('./selector.js');
4 |
--------------------------------------------------------------------------------
/static-files/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/apple-touch-icon.png
--------------------------------------------------------------------------------
/static-files/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/mstile-150x150.png
--------------------------------------------------------------------------------
/theme/assets/icons/fonts/icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/theme/assets/icons/fonts/icons.ttf
--------------------------------------------------------------------------------
/theme/assets/icons/fonts/icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/theme/assets/icons/fonts/icons.woff
--------------------------------------------------------------------------------
/static-files/assets/icons.f41c5641.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/assets/icons.f41c5641.ttf
--------------------------------------------------------------------------------
/static-files/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/android-chrome-192x192.png
--------------------------------------------------------------------------------
/static-files/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/android-chrome-512x512.png
--------------------------------------------------------------------------------
/static-files/assets/icons.cf61dfff.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/assets/icons.cf61dfff.woff
--------------------------------------------------------------------------------
/theme/assets/fonts/sourcesanspro-bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/theme/assets/fonts/sourcesanspro-bold.woff
--------------------------------------------------------------------------------
/theme/assets/icons/icons.css:
--------------------------------------------------------------------------------
1 | @import "./style.css";
2 |
3 | [class^="icon-"], [class*=" icon-"] {
4 | vertical-align: -8%;
5 | }
6 |
--------------------------------------------------------------------------------
/theme/assets/fonts/sourcesanspro-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/theme/assets/fonts/sourcesanspro-regular.woff
--------------------------------------------------------------------------------
/.env.dist:
--------------------------------------------------------------------------------
1 | GITHUB_TOKEN=""
2 | DEPLOY_REPO="reactphp/reactphp.github.io"
3 | DEPLOY_TARGET_BRANCH="master"
4 | DEPLOY_URL="https://reactphp.org"
5 |
--------------------------------------------------------------------------------
/static-files/assets/sourcesanspro-bold.cb7d3610.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/assets/sourcesanspro-bold.cb7d3610.woff
--------------------------------------------------------------------------------
/static-files/assets/sourcesanspro-regular.f84b2bd4.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/reactphp/website/HEAD/static-files/assets/sourcesanspro-regular.f84b2bd4.woff
--------------------------------------------------------------------------------
/theme/assets/components/version-selector/selector.js:
--------------------------------------------------------------------------------
1 | import ctrly from 'ctrly/src/ctrly';
2 |
3 | import './selector.css';
4 |
5 | ctrly({selector: '[data-version-selector-control]'});
6 |
--------------------------------------------------------------------------------
/theme/assets/components/off-canvas-menu/menu.js:
--------------------------------------------------------------------------------
1 | import ctrly from 'ctrly/src/ctrly';
2 |
3 | import './menu.css';
4 |
5 | ctrly({selector: '[data-off-canvas-menu-control]', closeOnScroll: true});
6 |
--------------------------------------------------------------------------------
/theme/assets/styles/center.css:
--------------------------------------------------------------------------------
1 | .center {
2 | text-align: center;
3 |
4 | & h1,
5 | & h2,
6 | & h3,
7 | & h4,
8 | & h5,
9 | & h6 {
10 | display: inline-block; /* For anchor positioning */
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/theme/component-license.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'component.html.twig' %}
2 |
3 | {% block title %}{{ component.title ~ ': License' }}{% endblock %}
4 | {% block component_content %}
5 |
{{ component.title }} License
6 |
7 | {{ berti.content|strip_title|emoji|raw }}
8 | {% endblock %}
9 |
--------------------------------------------------------------------------------
/theme/assets/components/off-canvas-menu/index.css:
--------------------------------------------------------------------------------
1 | @import "../../styles/variables.css";
2 |
3 | .off-canvas-menu {
4 | position: fixed;
5 | top: 0;
6 | right: 0;
7 | pointer-events: none;
8 | }
9 |
10 | .off-canvas-menu__content {
11 | transform: translate3d(105%, 0, 0);
12 | }
13 |
--------------------------------------------------------------------------------
/theme/assets/styles/iframe.css:
--------------------------------------------------------------------------------
1 | .iframe {
2 | position:relative;
3 | padding-bottom:56.25%;
4 | height:0;
5 | overflow:hidden;
6 | width:100%;
7 | }
8 |
9 | .iframe iframe {
10 | position:absolute;
11 | top:0;
12 | left:0;
13 | width:100%;
14 | height:100%;
15 | }
16 |
--------------------------------------------------------------------------------
/static-files/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #f4f3f1
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/theme/assets/index.js:
--------------------------------------------------------------------------------
1 | import 'core-js/stable';
2 |
3 | import './fonts/fonts.css';
4 | import './icons/icons.css';
5 |
6 | import './styles/styles.css';
7 |
8 | import './components/off-canvas-menu';
9 | import './components/docsearch';
10 | import './components/component-info';
11 | import './components/version-selector';
12 |
--------------------------------------------------------------------------------
/theme/assets/img/search.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/theme/assets/styles/footer.css:
--------------------------------------------------------------------------------
1 | .footer {
2 | background: var(--color-base);
3 | padding: 32px;
4 | text-align: center;
5 | text-shadow: 1px 1px 0 rgba(0, 0, 0, .125);
6 | }
7 |
8 | .footer .links a {
9 | color: var(--color-background-light);
10 | text-decoration: none;
11 | }
12 |
13 | .footer .links a:hover {
14 | color: var(--color-green-light);
15 | text-decoration: none;
16 | }
17 |
--------------------------------------------------------------------------------
/static-files/assets/search.17d09555.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/static-files/assets/261.bd162b4a.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /*!
2 | * @overview es6-promise - a tiny implementation of Promises/A+.
3 | * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
4 | * @license Licensed under MIT license
5 | * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
6 | * @version v4.2.8+1e68dce6
7 | */
8 |
--------------------------------------------------------------------------------
/theme/assets/styles/links.css:
--------------------------------------------------------------------------------
1 | .links {
2 | margin: 0;
3 | padding: 0;
4 | }
5 |
6 | .links li {
7 | display: inline-block;
8 | margin: 0 8px;
9 | text-decoration: none;
10 | }
11 |
12 | .links li:first-child {
13 | margin-left: 0;
14 | }
15 |
16 | .links li:last-child {
17 | margin-right: 0;
18 | }
19 |
20 | .links a {
21 | display: block;
22 | text-decoration: none;
23 | }
24 |
25 | .links a:hover {
26 | text-decoration: none;
27 | }
28 |
--------------------------------------------------------------------------------
/static-files/assets/139.820be3d5.js:
--------------------------------------------------------------------------------
1 | (self.webpackChunkreactphp_website=self.webpackChunkreactphp_website||[]).push([[139],{7399:function(e,t,i){"use strict";i.r(t),i.d(t,{init:function(){return n}});var a=i(261),c=i.n(a),r=0;function n(e){var t=e.getAttribute("id");t||(t="docsearch-"+r++,e.setAttribute("id",t)),c()({apiKey:"4c440463ddff54a35b4d7dc24afb010b",indexName:"reactphp",inputSelector:"#"+t,debug:"true"===e.getAttribute("data-docsearch-debug"),algoliaOptions:{hitsPerPage:5}})}},5525:function(){}}]);
--------------------------------------------------------------------------------
/static-files/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ReactPHP",
3 | "icons": [
4 | {
5 | "src": "android-chrome-192x192.png",
6 | "sizes": "192x192",
7 | "type": "image/png"
8 | },
9 | {
10 | "src": "android-chrome-512x512.png",
11 | "sizes": "512x512",
12 | "type": "image/png"
13 | }
14 | ],
15 | "theme_color": "#f4f3f1",
16 | "background_color": "#f4f3f1",
17 | "display": "standalone"
18 | }
--------------------------------------------------------------------------------
/theme/assets/styles/styles.css:
--------------------------------------------------------------------------------
1 | @import "./variables.css";
2 | @import "./base.css";
3 | @import "./grid.css";
4 | @import "./center.css";
5 | @import "./hamburger.css";
6 | @import "./header.css";
7 | @import "./footer.css";
8 | @import "./iframe.css";
9 | @import "./links.css";
10 | @import "./box.css";
11 | @import "./code.css";
12 | @import "./highlight.css";
13 | @import "./anchor.css";
14 | @import "./searchbox.css";
15 | @import "./alert.css";
16 | @import "./toc.css";
17 | @import "./welcome.css";
18 |
--------------------------------------------------------------------------------
/data/talks.php:
--------------------------------------------------------------------------------
1 | 'https://www.youtube.com/watch?v=-5ZdGUvOqx4',
6 | 'embed_url' => 'https://www.youtube-nocookie.com/embed/-5ZdGUvOqx4'
7 | ],
8 | [
9 | 'link' => 'https://www.youtube.com/watch?v=s6xrnYae1FU',
10 | 'embed_url' => 'https://www.youtube-nocookie.com/embed/s6xrnYae1FU'
11 | ],
12 | [
13 | 'link' => 'https://www.youtube.com/watch?v=MWNcItWuKpI',
14 | 'embed_url' => 'https://www.youtube-nocookie.com/embed/MWNcItWuKpI'
15 | ],
16 | ];
17 |
--------------------------------------------------------------------------------
/theme/assets/components/docsearch/index.js:
--------------------------------------------------------------------------------
1 | import {ready, find} from 'domestique';
2 |
3 | // Workaround for https://github.com/algolia/algoliasearch-client-javascript/issues/691
4 | window.process = {
5 | env: { DEBUG: undefined }
6 | };
7 |
8 | ready(() => {
9 | find('[data-docsearch]:not([data-docsearch-initialized])').forEach(element => {
10 | element.setAttribute('data-docsearch-initialized', true);
11 |
12 | import('./algolia-autocomplete.js').then(module => {
13 | module.init(element);
14 | });
15 | })
16 | });
17 |
--------------------------------------------------------------------------------
/theme/assets/fonts/fonts.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Source Sans Pro';
3 | font-style: normal;
4 | font-weight: 400;
5 | font-display: swap;
6 | src: local("Source Sans Pro Regular"),
7 | local("SourceSansPro-Regular"),
8 | url("sourcesanspro-regular.woff") format("woff");
9 | }
10 |
11 | @font-face {
12 | font-family: 'Source Sans Pro';
13 | font-style: normal;
14 | font-weight: 700;
15 | font-display: swap;
16 | src: local("Source Sans Pro Bold"),
17 | local("SourceSansPro-Bold"),
18 | url("sourcesanspro-bold.woff") format("woff");
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/theme/assets/styles/anchor.css:
--------------------------------------------------------------------------------
1 | .anchor {
2 | display: block;
3 | float: left;
4 | position: absolute;
5 | padding-right: 2px;
6 | transform: translateX(-100%);
7 | text-decoration: none !important;
8 | }
9 |
10 | .anchor:focus {
11 | outline: none;
12 | }
13 |
14 | .anchor > * {
15 | visibility: hidden;
16 | }
17 |
18 | *:hover > .anchor > * {
19 | visibility: visible;
20 | }
21 |
22 | .anchor > *:before {
23 | content: '#';
24 | font-weight: normal !important;
25 | color: var(--color-key-light);
26 | }
27 |
28 | .anchor--disable .anchor > *,
29 | .anchor.anchor--disable > * {
30 | visibility: hidden !important;
31 | }
32 |
--------------------------------------------------------------------------------
/theme/assets/styles/variables.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --color-key: #4f5b93;
3 | --color-key-light: #a2aacd;
4 |
5 | --color-base: #584b4f;
6 | --color-base-light: #afa1a5;
7 |
8 | --color-green: #40a977;
9 | --color-green-light: #9ad8bb;
10 |
11 | --color-red: #ba3525;
12 | --color-red-light: #e79187;
13 |
14 | --color-background: #d6d1c8;
15 | --color-background-light: #eae8e3;
16 | --color-background-lighter: #f4f3f1;
17 | --color-background-lightest: #f9f9f8;
18 |
19 | --box-shadow-light: 0 1px 0 0 rgba(0, 0, 0, .15);
20 | --box-shadow-lighter: 0 1px 0 0 rgba(0, 0, 0, .1);
21 | --box-shadow-lightest: 0 1px 0 0 rgba(0, 0, 0, .08);
22 | }
23 |
--------------------------------------------------------------------------------
/theme/assets/components/docsearch/algolia-autocomplete.js:
--------------------------------------------------------------------------------
1 | import docsearch from 'docsearch.js';
2 |
3 | import './algolia-autocomplete.css';
4 |
5 | let idCounter = 0;
6 |
7 | export function init(input) {
8 | let id = input.getAttribute('id');
9 |
10 | if (!id) {
11 | id = 'docsearch-' + idCounter++;
12 | input.setAttribute('id', id);
13 | }
14 |
15 | docsearch({
16 | apiKey: '4c440463ddff54a35b4d7dc24afb010b',
17 | indexName: 'reactphp',
18 | inputSelector: '#' + id,
19 | debug: 'true' === input.getAttribute('data-docsearch-debug'),
20 | algoliaOptions: {
21 | hitsPerPage: 5
22 | }
23 | });
24 | }
25 |
--------------------------------------------------------------------------------
/data/built_with.php:
--------------------------------------------------------------------------------
1 | 'Thruway',
6 | 'repository' => 'voryx/Thruway'
7 | ],
8 | [
9 | 'title' => 'PPM - PHP Process Manager',
10 | 'repository' => 'php-pm/php-pm'
11 | ],
12 | [
13 | 'title' => 'php-ar-drone',
14 | 'repository' => 'jolicode/php-ar-drone'
15 | ],
16 | [
17 | 'title' => 'Ratchet',
18 | 'repository' => 'ratchetphp/Ratchet'
19 | ],
20 | [
21 | 'title' => 'Predis\Async',
22 | 'repository' => 'nrk/predis-async'
23 | ],
24 | [
25 | 'title' => 'clue/redis-server',
26 | 'repository' => 'clue/redis-server'
27 | ],
28 | ];
29 |
--------------------------------------------------------------------------------
/theme/assets/styles/grid.css:
--------------------------------------------------------------------------------
1 | .grid {
2 | display: flex;
3 | flex-direction: row;
4 | flex-wrap: wrap;
5 | justify-content: center;
6 | width: 102%;
7 | margin-left: -2%;
8 | }
9 |
10 | .grid > * {
11 | margin-left: 2%;
12 | max-width: 100%;
13 | }
14 |
15 | .grid--4cols > * {
16 | flex-basis: 23%;
17 | }
18 |
19 | .grid--3cols > * {
20 | flex-basis: 31.33%;
21 | }
22 |
23 | .grid--2cols > * {
24 | flex-basis: 48%;
25 | }
26 |
27 | @media (max-width: 768px) {
28 | .grid {
29 | flex-direction: column;
30 | width: 100%;
31 | margin-left: 0;
32 | }
33 |
34 | .grid > * {
35 | width: 100%;
36 | flex: 0 0 auto;
37 | margin-left: 0;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/static-files/assets/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "main.css": "main.09dbcb8e.css",
3 | "main.js": "main.93d54642.js",
4 | "runtime.js": "runtime.124568e7.js",
5 | "553.90d4e0e8.css": "553.90d4e0e8.css",
6 | "553.da065a6b.js": "553.da065a6b.js",
7 | "139.3ced3f7b.css": "139.3ced3f7b.css",
8 | "139.820be3d5.js": "139.820be3d5.js",
9 | "67.4ae9feba.css": "67.4ae9feba.css",
10 | "67.ab055693.js": "67.ab055693.js",
11 | "261.bd162b4a.js": "261.bd162b4a.js",
12 | "sourcesanspro-regular.woff": "sourcesanspro-regular.f84b2bd4.woff",
13 | "sourcesanspro-bold.woff": "sourcesanspro-bold.cb7d3610.woff",
14 | "icons.svg?ae19fi": "icons.b4abbede.svg?ae19fi",
15 | "icons.woff?ae19fi": "icons.cf61dfff.woff?ae19fi",
16 | "icons.ttf?ae19fi": "icons.f41c5641.ttf?ae19fi",
17 | "search.svg": "search.17d09555.svg"
18 | }
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: Deploy
2 |
3 | on:
4 | push:
5 | pull_request:
6 | workflow_dispatch:
7 |
8 | jobs:
9 | Deploy:
10 | runs-on: ubuntu-22.04
11 | steps:
12 | - uses: actions/checkout@v4
13 | - uses: shivammathur/setup-php@v2
14 | with:
15 | php-version: 7.1
16 | - run: composer install
17 | - run: mkdir ~/.ssh && echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_rsa && chmod 400 ~/.ssh/id_rsa
18 | - run: echo 'GITHUB_TOKEN="${{ secrets.PAT || secrets.GITHUB_TOKEN }}"' > .env && cat .env.dist >> .env
19 | - run: git config --global user.name "GitHub Actions" && git config --global user.email "actions@github.com"
20 | - run: bin/build
21 | - run: bin/build --deploy --no-component-update
22 | if: ${{ github.ref == 'refs/heads/main' }}
23 |
--------------------------------------------------------------------------------
/theme/assets/styles/toc.css:
--------------------------------------------------------------------------------
1 | .toc {
2 | display: flex;
3 | flex-wrap: wrap;
4 | padding: 0;
5 | list-style: none;
6 | margin-left: -4px;
7 |
8 | & li {
9 | margin: 4px;
10 | }
11 |
12 | & a {
13 | display: flex;
14 | background-color: var(--color-base);
15 | box-shadow: var(--box-shadow-lighter);
16 | color: #fff;
17 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
18 | font-weight: bolder;
19 | letter-spacing: normal;
20 | padding: .25rem 1rem .15rem 1rem;
21 | border-radius: 4px;
22 | text-decoration: none;
23 | }
24 |
25 | & a:hover {
26 | text-decoration: none;
27 | color: #fff;
28 | }
29 |
30 | @media (max-width: 768px) {
31 | font-size: .85rem;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/theme/changelog.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'default.html.twig' %}
2 |
3 | {% block head %}
4 |
5 | {% endblock %}
6 |
7 | {% block content %}
8 |
9 |
10 |
11 | {{ berti.content|raw }}
12 |
13 | {% include 'partials/changelog.html.twig' with {releases_by_year: releases_by_year, is_combined_changelog: true} %}
14 |
15 |
23 |
24 |
25 |
26 | {% endblock %}
27 |
--------------------------------------------------------------------------------
/theme/component-changelog.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'component.html.twig' %}
2 |
3 | {% block title %}{{ component.title ~ ': Changelog' }}{% endblock %}
4 |
5 | {% block head %}
6 |
7 | {% endblock %}
8 |
9 | {% block component_content %}
10 | {{ component.title }} Changelog
11 |
12 | {% include 'partials/changelog.html.twig' with {releases_by_year: component_releases_by_year, is_combined_changelog: false} %}
13 |
14 |
22 | {% endblock %}
23 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react/website",
3 | "description": "Source code of reactphp.org",
4 | "license": "MIT",
5 | "authors": [
6 | {
7 | "name": "Jan Sorgalla",
8 | "email": "jsorgalla@gmail.com"
9 | }
10 | ],
11 | "autoload": {
12 | "psr-4": {
13 | "React\\Website\\": "src/"
14 | },
15 | "files": [
16 | "src/berti.php",
17 | "src/data.php"
18 | ]
19 | },
20 | "require-dev": {
21 | "jsor/berti": "^4.1",
22 | "symfony/cache": "^3.4",
23 | "symfony/filesystem": "^3.4",
24 | "symfony/process": "^3.4",
25 | "vlucas/phpdotenv": "^2.6",
26 | "elvanto/litemoji": "^1.4",
27 | "zendframework/zend-feed": "^2.12",
28 | "igorw/retry": "^1.0@dev"
29 | },
30 | "config": {
31 | "platform": {
32 | "php": "7.1.99"
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/theme/assets/styles/alert.css:
--------------------------------------------------------------------------------
1 | .alert {
2 | padding: 16px 16px 16px 24px;
3 | border-left: 4px solid var(--color-red);
4 | border-radius: 4px;
5 | background-color: var(--color-background-lighter);
6 | box-shadow: var(--box-shadow-lighter);
7 | position: relative;
8 | font-size: .9em;
9 |
10 | &:before {
11 | content: '!';
12 | position: absolute;
13 | top: 12px;
14 | left: -14px;
15 | display: block;
16 | width: 24px;
17 | height: 24px;
18 | background: var(--color-red);
19 | font-size: 12px;
20 | padding: 0 4px;
21 | box-sizing: border-box;
22 | text-align: center;
23 | font-weight: bold;
24 | color: #fff;
25 | line-height: 22px;
26 | border-radius: 50%;
27 | }
28 |
29 | & a {
30 | color: var(--color-red);
31 | }
32 |
33 | & :last-child {
34 | margin-bottom: 0;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/data/articles.php:
--------------------------------------------------------------------------------
1 | 'Sergey Zhuk',
6 | 'description' => 'A series of articles covering ReactPHP: from the basics to the real application examples.',
7 | 'link' => 'http://sergeyzhuk.me/reactphp-series',
8 | ],
9 | [
10 | 'title' => 'Cees-Jan Kiewiet',
11 | 'description' => 'Blog series about several ReactPHP components and how they work.',
12 | 'link' => 'http://blog.wyrihaximus.net/categories/reactphp-series/',
13 | ],
14 | [
15 | 'title' => 'Loïc Faugeron',
16 | 'description' => 'Super Speed Symfony - ReactPHP.',
17 | 'link' => 'https://gnugat.github.io/2016/04/13/super-speed-sf-react-php.html',
18 | ],
19 | [
20 | 'title' => 'Marc J. Schmidt',
21 | 'description' => 'Bring High Performance Into Your PHP App (with ReactPHP).',
22 | 'link' => 'http://marcjschmidt.de/blog/2014/02/08/php-high-performance.html',
23 | ],
24 | ];
25 |
--------------------------------------------------------------------------------
/theme/assets/styles/header.css:
--------------------------------------------------------------------------------
1 | .header {
2 | width: 100%;
3 | background: #fefefe;
4 | box-shadow: var(--box-shadow-lightest);
5 | padding: 0 32px;
6 |
7 | @media (max-width: 768px) {
8 | padding: 0 16px;
9 | }
10 | }
11 |
12 | .header__container {
13 | width: 100%;
14 | position: relative;
15 | display: flex;
16 | align-items: center;
17 | justify-content: space-between;
18 | }
19 |
20 | .header__logo {
21 | display: block;
22 | line-height: 1;
23 | padding: 16px 0;
24 | }
25 |
26 | .header__logo svg {
27 | display: block;
28 | width: 120px;
29 | height: 18px;
30 | }
31 |
32 | .header__search {
33 | margin: 0;
34 | position: absolute;
35 | right: 48px;
36 | top: 7px;
37 | z-index: 799;
38 |
39 | & input {
40 | width: 400px;
41 |
42 | @media (max-width: 768px) {
43 | width: calc(100vw - 94px);
44 | }
45 | }
46 | }
47 |
48 | .header__menu {
49 | position: absolute;
50 | right: -12px;
51 | top: 0;
52 | z-index: 800;
53 | }
54 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2017 Jan Sorgalla
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is furnished
8 | to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/theme/assets/styles/hamburger.css:
--------------------------------------------------------------------------------
1 | .hamburger {
2 | padding: 14px 12px;
3 | display: inline-block;
4 | height: 48px;
5 | cursor: pointer;
6 | font: inherit;
7 | color: inherit;
8 | text-transform: none;
9 | background-color: transparent;
10 | border: 0;
11 | margin: 0;
12 | overflow: visible;
13 | outline: none;
14 | }
15 |
16 | .hamburger__box {
17 | width: 24px;
18 | height: 16px;
19 | display: inline-block;
20 | position: relative;
21 | }
22 |
23 | .hamburger__inner {
24 | display: block;
25 | top: 50%;
26 | margin-top: -2px;
27 | }
28 |
29 | .hamburger__inner, .hamburger__inner::before, .hamburger__inner::after {
30 | width: 24px;
31 | height: 3px;
32 | background-color: var(--color-base);
33 | border-radius: 2px;
34 | position: absolute;
35 | transition-property: transform;
36 | transition-duration: 0.15s;
37 | transition-timing-function: ease;
38 | }
39 |
40 | .hamburger__inner::before, .hamburger__inner::after {
41 | content: "";
42 | display: block;
43 | }
44 |
45 | .hamburger__inner::before {
46 | top: -6px;
47 | }
48 |
49 | .hamburger__inner::after {
50 | bottom: -6px;
51 | }
52 |
--------------------------------------------------------------------------------
/theme/assets/components/version-selector/selector.css:
--------------------------------------------------------------------------------
1 | @import "../../styles/variables.css";
2 |
3 | .version-selector__button {
4 | &[aria-expanded="true"] {
5 | z-index: 999;
6 | background: var(--color-base) !important;
7 | border-bottom-left-radius: 0;
8 | border-bottom-right-radius: 0;
9 | box-shadow: none;
10 |
11 | & [class="icon-chevron-down"] {
12 | display: none;
13 | }
14 | & [class="icon-chevron-up"] {
15 | display: inline-block;
16 | }
17 | }
18 | }
19 |
20 | .version-selector__panel {
21 | z-index: 998;
22 | left: -115px;
23 |
24 | background: var(--color-base);
25 | padding: 1rem;
26 | width: 300px;
27 | border-radius: 4px;
28 | outline: none;
29 | box-shadow: 0 0 8px rgba(0, 0, 0, .33);
30 |
31 | font-weight: normal;
32 |
33 | &[aria-hidden="false"] {
34 | position: absolute;
35 | visibility: visible;
36 | top: auto;
37 | }
38 | }
39 |
40 | .version-selector__list {
41 | display: flex;
42 | flex-wrap: wrap;
43 | padding: 0;
44 | list-style: none;
45 | margin-left: -4px;
46 |
47 | & li {
48 | margin: 4px;
49 | width: calc(25% - 8px);
50 | }
51 |
52 | & a {
53 | display: block;
54 | text-align: center;
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/static-files/assets/67.4ae9feba.css:
--------------------------------------------------------------------------------
1 | :root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,.08)}.version-selector__button[aria-expanded=true]{background:#584b4f!important;background:var(--color-base)!important;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:none;box-shadow:none;z-index:999}.version-selector__button[aria-expanded=true] [class=icon-chevron-down]{display:none}.version-selector__button[aria-expanded=true] [class=icon-chevron-up]{display:inline-block}.version-selector__panel{background:#584b4f;background:var(--color-base);border-radius:4px;-webkit-box-shadow:0 0 8px rgba(0,0,0,.33);box-shadow:0 0 8px rgba(0,0,0,.33);font-weight:400;left:-115px;outline:none;padding:1rem;width:300px;z-index:998}.version-selector__panel[aria-hidden=false]{position:absolute;top:auto;visibility:visible}.version-selector__list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin-left:-4px;padding:0}.version-selector__list li{margin:4px;width:calc(25% - 8px)}.version-selector__list a{display:block;text-align:center}
--------------------------------------------------------------------------------
/theme/partials/changelog.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {% for year, releases in releases_by_year %}
3 | - {{ year }}
4 | {% endfor %}
5 |
6 |
7 | {% for year, releases in releases_by_year %}
8 |
9 |
10 | {{ year }}
11 |
12 |
13 | {% for release in releases %}
14 |
15 | {% set _id = release.version|replace({'.': ''}) ~ '-' ~ release.date|date('Y-m-d') %}
16 | {% if is_combined_changelog == true %}
17 | {% set _id = release.component|lower ~ '-' ~ _id %}
18 | {% endif %}
19 |
20 |
21 |
22 | {% if is_combined_changelog == true %}{{ release.component }} {% endif %}{{ release.version }}
23 |
24 |
25 | ({{ release.date|date('Y-m-d') }})
26 |
27 | Release on GitHub
28 |
29 |
30 |
31 |
32 | {{ release.html|raw }}
33 |
34 |
35 | {% endfor %}
36 | {% endfor %}
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "reactphp-website",
3 | "version": "2.0.0",
4 | "description": "Source code of reactphp.org",
5 | "repository": "git@github.com:reactphp/website.git",
6 | "author": "Jan Sorgalla ",
7 | "license": "MIT",
8 | "scripts": {
9 | "build": "webpack --config ./config/webpack.config.js --progress",
10 | "watch": "webpack --config ./config/webpack.config.js --progress --watch",
11 | "dev-server": "webpack-dev-server --config ./config/webpack-dev-server.config.js --hot"
12 | },
13 | "browserslist": [
14 | "> 1%",
15 | "last 4 versions",
16 | "Firefox ESR",
17 | "not ie < 10"
18 | ],
19 | "dependencies": {
20 | "core-js": "^3.21.0",
21 | "ctrly": "^0.7.0",
22 | "docsearch.js": "^2.6.3",
23 | "domestique": "^1.7.0"
24 | },
25 | "devDependencies": {
26 | "@babel/core": "^7.17.0",
27 | "@babel/plugin-syntax-dynamic-import": "^7.8.3",
28 | "@babel/preset-env": "^7.16.11",
29 | "babel-loader": "^8.2.3",
30 | "clean-webpack-plugin": "^4.0.0",
31 | "css-loader": "^6.6.0",
32 | "cssnano": "^5.0.16",
33 | "mini-css-extract-plugin": "^2.5.3",
34 | "postcss-assets-webpack-plugin": "^4.1.2",
35 | "postcss-flexbugs-fixes": "^5.0.2",
36 | "postcss-import": "^14.0.2",
37 | "postcss-loader": "^6.2.1",
38 | "postcss-preset-env": "^7.3.1",
39 | "style-loader": "^3.3.1",
40 | "webpack": "^5.68.0",
41 | "webpack-cli": "^4.9.2",
42 | "webpack-dev-server": "^4.7.4",
43 | "webpack-manifest-plugin": "^4.1.1"
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/theme/assets/icons/style.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'icons';
3 | src:
4 | url('fonts/icons.ttf?ae19fi') format('truetype'),
5 | url('fonts/icons.woff?ae19fi') format('woff'),
6 | url('fonts/icons.svg?ae19fi#icons') format('svg');
7 | font-weight: normal;
8 | font-style: normal;
9 | }
10 |
11 | [class^="icon-"], [class*=" icon-"] {
12 | /* use !important to prevent issues with browser extensions that change fonts */
13 | font-family: 'icons' !important;
14 | speak: none;
15 | font-style: normal;
16 | font-weight: normal;
17 | font-variant: normal;
18 | text-transform: none;
19 | line-height: 1;
20 |
21 | /* Better Font Rendering =========== */
22 | -webkit-font-smoothing: antialiased;
23 | -moz-osx-font-smoothing: grayscale;
24 | }
25 |
26 | .icon-hash:before {
27 | content: "\e900";
28 | }
29 | .icon-twitter:before {
30 | content: "\e901";
31 | }
32 | .icon-github:before {
33 | content: "\e902";
34 | }
35 | .icon-blog:before {
36 | content: "\e905";
37 | }
38 | .icon-earth:before {
39 | content: "\e903";
40 | }
41 | .icon-link:before {
42 | content: "\e906";
43 | }
44 | .icon-youtube:before {
45 | content: "\e904";
46 | }
47 | .icon-book:before {
48 | content: "\f007";
49 | }
50 | .icon-calendar:before {
51 | content: "\f068";
52 | }
53 | .icon-chevron-down:before {
54 | content: "\f0a3";
55 | }
56 | .icon-chevron-up:before {
57 | content: "\f0a2";
58 | }
59 | .icon-law:before {
60 | content: "\f0d8";
61 | }
62 | .icon-search:before {
63 | content: "\f02e";
64 | }
65 | .icon-x:before {
66 | content: "\f081";
67 | }
68 | .icon-feed:before {
69 | content: "\ea9b";
70 | }
71 |
--------------------------------------------------------------------------------
/theme/assets/styles/code.css:
--------------------------------------------------------------------------------
1 | tt, code, pre {
2 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
3 | }
4 |
5 | code, tt {
6 | font-size: .75rem;
7 | padding: .3rem .45rem;
8 | margin: 0;
9 | background-color: rgba(0, 0, 0, 0.05);
10 | border-radius: 4px;
11 | }
12 |
13 | code br, tt br {
14 | display: none
15 | }
16 |
17 | del code {
18 | text-decoration: inherit
19 | }
20 |
21 | pre {
22 | word-wrap: normal;
23 | text-align: left;
24 | font-size: .875rem;
25 | line-height: 1.45;
26 |
27 | @media (max-width: 768px) {
28 | font-size: .75rem;
29 | }
30 | }
31 |
32 | pre > code {
33 | padding: 0;
34 | margin: 0;
35 | font-size: 100%;
36 | word-break: normal;
37 | white-space: pre;
38 | background: transparent;
39 | border: 0
40 | }
41 |
42 | .highlight {
43 | margin-bottom: 16px;
44 | }
45 |
46 | .highlight pre {
47 | margin-bottom: 0;
48 | word-break: normal
49 | }
50 |
51 | .highlight pre, pre {
52 | padding: 16px 16px 14px 16px;
53 | overflow: auto;
54 | background-color: var(--color-background-lightest);
55 | box-shadow: var(--box-shadow-lightest);
56 | color: var(--color-base);
57 | text-shadow: none !important;
58 | border-radius: 4px;
59 | }
60 |
61 | pre code, pre tt {
62 | display: inline;
63 | max-width: none;
64 | padding: 0;
65 | margin: 0;
66 | overflow: visible;
67 | line-height: inherit;
68 | word-wrap: normal;
69 | background-color: transparent;
70 | border: 0
71 | }
72 |
73 | pre code::before, pre code::after, pre tt::before, pre tt::after {
74 | content: normal
75 | }
76 |
--------------------------------------------------------------------------------
/theme/assets/styles/box.css:
--------------------------------------------------------------------------------
1 | .box {
2 | background: var(--color-background-lighter);
3 | box-shadow: var(--box-shadow-lighter);
4 | border-radius: 4px;
5 | text-align: left;
6 | vertical-align: top;
7 | padding: 24px;
8 | margin-top: 0;
9 | margin-bottom: 24px;
10 | text-decoration: none;
11 | color: inherit;
12 | overflow: auto;
13 | display: flex;
14 | flex-direction: column;
15 | }
16 |
17 | .box:hover {
18 | background: var(--color-background-light);
19 | box-shadow: var(--box-shadow-light);
20 | text-decoration: none;
21 | }
22 |
23 | .box p,
24 | .box ul,
25 | .box ol,
26 | .box hr,
27 | .box h1,
28 | .box h2,
29 | .box h3,
30 | .box h4,
31 | .box h5,
32 | .box h6 {
33 | margin-bottom: 8px;
34 | }
35 |
36 | .box h1,
37 | .box h2,
38 | .box h3,
39 | .box h4,
40 | .box h5,
41 | .box h6 {
42 | color:var(--color-base);
43 | }
44 |
45 | .box :first-child {
46 | margin-top: 0;
47 | }
48 |
49 | .box :last-child {
50 | margin-bottom: 0;
51 | }
52 |
53 | .box__content {
54 | flex-grow: 1;
55 | color: var(--color-base);
56 | text-decoration: none;
57 |
58 | & p {
59 | font-size: .875rem;
60 | }
61 | }
62 |
63 | .box__content:hover {
64 | color: var(--color-base);
65 | text-decoration: none;
66 | }
67 |
68 | .box__content:not(:last-child) {
69 | margin-bottom: 16px;
70 | }
71 |
72 | .box__link {
73 | display: block;
74 | font-size: .75rem;
75 | color: var(--color-key);
76 | text-decoration: none;
77 | }
78 |
79 | .box__link [class*="icon"] {
80 | color: var(--color-key);
81 | }
82 |
83 | .box__link:hover {
84 | color: var(--color-key-light);
85 | text-decoration: none;
86 | }
87 |
--------------------------------------------------------------------------------
/theme/partials/header_menu.html.twig:
--------------------------------------------------------------------------------
1 |
10 |
43 |
--------------------------------------------------------------------------------
/theme/assets/styles/searchbox.css:
--------------------------------------------------------------------------------
1 | .searchbox {
2 | width: 100%;
3 |
4 | &,
5 | &:focus {
6 | appearance: none;
7 | padding: 6px 8px 6px 32px;
8 | font-size: .875rem;
9 | line-height: 24px;
10 | color: var(--color-base);
11 | border: 0;
12 | background: var(--color-background-light) url(../img/search.svg) no-repeat 10px center;
13 | background-size: 16px 16px;
14 | box-shadow: var(--box-shadow-light);
15 | border-radius: 4px;
16 | outline: none;
17 | transition: width .35s cubic-bezier(0.23, 1, 0.32, 1);
18 | }
19 |
20 | &::-webkit-input-placeholder {
21 | color: var(--color-base-light);
22 | }
23 | &:-moz-placeholder {
24 | color: var(--color-base-light);
25 | }
26 | &::-moz-placeholder {
27 | color: var(--color-base-light);
28 | opacity: 1;
29 | }
30 | &:-ms-input-placeholder {
31 | color: var(--color-base-light);
32 | }
33 |
34 | &:focus {
35 | background-color: var(--color-background-lighter) !important;
36 | box-shadow: var(--box-shadow-lighter);
37 | }
38 | }
39 |
40 | .searchbox--collapsed {
41 | &:not(:focus) {
42 | background-color: transparent;
43 | border: 0;
44 | width: 32px !important;
45 | margin-right: -12px;
46 | cursor: pointer;
47 | box-shadow: none;
48 |
49 | &::-webkit-search-decoration {
50 | display: none;
51 | }
52 | &::-webkit-search-cancel-button {
53 | display: none;
54 | }
55 | &::-webkit-search-results-button {
56 | display: none;
57 | }
58 | &::-webkit-search-results-decoration {
59 | display: none;
60 | }
61 | &::-ms-clear {
62 | display: none;
63 | }
64 | }
65 | }
66 |
67 | .searchbox--large {
68 | &,
69 | &:focus {
70 | padding: 8px 12px 8px 40px;
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/theme/assets/styles/highlight.css:
--------------------------------------------------------------------------------
1 | .pl-c {
2 | color: #969896
3 | }
4 |
5 | .pl-c1, .pl-s .pl-v {
6 | color: #0086b3
7 | }
8 |
9 | .pl-e, .pl-en {
10 | color: #795da3
11 | }
12 |
13 | .pl-smi, .pl-s .pl-s1 {
14 | color: #444
15 | }
16 |
17 | .pl-ent {
18 | color: #63a35c
19 | }
20 |
21 | .pl-k {
22 | color: #a71d5d
23 | }
24 |
25 | .pl-s, .pl-pds, .pl-s .pl-pse .pl-s1, .pl-sr, .pl-sr .pl-cce, .pl-sr .pl-sre, .pl-sr .pl-sra {
26 | color: #183691
27 | }
28 |
29 | .pl-v, .pl-smw {
30 | color: #ed6a43
31 | }
32 |
33 | .pl-bu {
34 | color: #b52a1d
35 | }
36 |
37 | .pl-ii {
38 | color: #f8f8f8;
39 | background-color: #b52a1d
40 | }
41 |
42 | .pl-c2 {
43 | color: #f8f8f8;
44 | background-color: #b52a1d
45 | }
46 |
47 | .pl-c2::before {
48 | content: "^M"
49 | }
50 |
51 | .pl-sr .pl-cce {
52 | font-weight: bold;
53 | color: #63a35c
54 | }
55 |
56 | .pl-ml {
57 | color: #693a17
58 | }
59 |
60 | .pl-mh, .pl-mh .pl-en, .pl-ms {
61 | font-weight: bold;
62 | color: #1d3e81
63 | }
64 |
65 | .pl-mq {
66 | color: #008080
67 | }
68 |
69 | .pl-mi {
70 | font-style: italic;
71 | color: #333
72 | }
73 |
74 | .pl-mb {
75 | font-weight: bold;
76 | color: #333
77 | }
78 |
79 | .pl-md {
80 | color: #bd2c00;
81 | background-color: #ffecec
82 | }
83 |
84 | .pl-mi1 {
85 | color: #55a532;
86 | background-color: #eaffea
87 | }
88 |
89 | .pl-mc {
90 | color: #ef9700;
91 | background-color: #ffe3b4
92 | }
93 |
94 | .pl-mi2 {
95 | color: #d8d8d8;
96 | background-color: #808080
97 | }
98 |
99 | .pl-mdr {
100 | font-weight: bold;
101 | color: #795da3
102 | }
103 |
104 | .pl-mo {
105 | color: #1d3e81
106 | }
107 |
108 | .pl-ba {
109 | color: #595e62
110 | }
111 |
112 | .pl-sg {
113 | color: #c0c0c0
114 | }
115 |
116 | .pl-corl {
117 | text-decoration: underline;
118 | color: #183691
119 | }
120 |
--------------------------------------------------------------------------------
/theme/assets/styles/welcome.css:
--------------------------------------------------------------------------------
1 | .welcome__intro {
2 | padding: 16px 0 136px 0;
3 | border-bottom: 1px dashed var(--color-background-light);
4 | background-image: radial-gradient(ellipse at center, #fff 0%, var(--color-background-light) 100%);
5 | background-size: auto 100%;
6 | background-position: 50% 0;
7 | }
8 |
9 | .welcome__intro h1 {
10 | font-size: 2rem;
11 | margin-bottom: 16px;
12 | color: var(--color-key);
13 | }
14 |
15 | .welcome__logo {
16 | display: block;
17 | margin: 0 auto;
18 | max-width: 320px;
19 | }
20 |
21 | .welcome__logo svg {
22 | /*filter: drop-shadow(0 0 25px #fff);*/
23 | display: block;
24 | height: 240px;
25 | }
26 |
27 | .welcome__content {
28 | padding-top: 16px;
29 | display: block;
30 | max-width: calc(98% - 320px);
31 | }
32 |
33 | .welcome__example {
34 | display: block;
35 | margin: auto;
36 | max-width: 850px;
37 | margin-top: -160px;
38 | }
39 |
40 | .welcome__example .highlight pre {
41 | padding: 32px;
42 | background: #fff;
43 | box-shadow: 0 0 16px var(--color-background);
44 | }
45 |
46 | .welcome__intro .links a {
47 | color: var(--color-base);
48 | text-decoration: none;
49 | }
50 |
51 | .welcome__intro .links a:hover {
52 | color: var(--color-key);
53 | text-decoration: none;
54 | }
55 |
56 | .welcome__team img {
57 | border-radius: 50%;
58 | max-width: 190px;
59 | display: inline-block;
60 | }
61 |
62 | .welcome__team h3 {
63 | display: block;
64 | margin: .2em 0;
65 | }
66 |
67 | .welcome__team div.grid > * {
68 | margin-bottom: 1em;
69 | }
70 |
71 | @media (max-width: 768px) {
72 | .welcome__content {
73 | padding: 32px 16px 16px 16px;
74 | max-width: 100%;
75 | }
76 |
77 | .welcome__logo svg {
78 | height: 160px;
79 | }
80 |
81 | .welcome__intro h1 {
82 | text-align: center;
83 | font-size: 1.75rem;
84 | margin-bottom: 16px;
85 | color: var(--color-key);
86 | }
87 |
88 | .welcome__intro .links {
89 | text-align: center;
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/data/components.php:
--------------------------------------------------------------------------------
1 | 'EventLoop',
6 | 'repository' => 'reactphp/event-loop',
7 | 'category' => 'Core Components'
8 | ],
9 | [
10 | 'title' => 'Stream',
11 | 'repository' => 'reactphp/stream',
12 | 'category' => 'Core Components'
13 | ],
14 | [
15 | 'title' => 'Promise',
16 | 'repository' => 'reactphp/promise',
17 | 'category' => 'Core Components'
18 | ],
19 | [
20 | 'title' => 'Async',
21 | 'repository' => 'reactphp/async',
22 | 'category' => 'Core Components'
23 | ],
24 | [
25 | 'title' => 'Socket',
26 | 'repository' => 'reactphp/socket',
27 | 'category' => 'Network Components'
28 | ],
29 | [
30 | 'title' => 'Datagram',
31 | 'repository' => 'reactphp/datagram',
32 | 'category' => 'Network Components'
33 | ],
34 | [
35 | 'title' => 'HTTP',
36 | 'repository' => 'reactphp/http',
37 | 'category' => 'Network Components'
38 | ],
39 | [
40 | 'title' => 'DNS',
41 | 'repository' => 'reactphp/dns',
42 | 'category' => 'Network Components'
43 | ],
44 | [
45 | 'title' => 'Cache',
46 | 'repository' => 'reactphp/cache',
47 | 'category' => 'Utility Components'
48 | ],
49 | [
50 | 'title' => 'ChildProcess',
51 | 'repository' => 'reactphp/child-process',
52 | 'category' => 'Utility Components'
53 | ],
54 | [
55 | 'title' => 'PromiseTimer',
56 | 'repository' => 'reactphp/promise-timer',
57 | 'category' => 'Utility Components'
58 | ],
59 | [
60 | 'title' => 'PromiseStream',
61 | 'repository' => 'reactphp/promise-stream',
62 | 'category' => 'Utility Components'
63 | ],
64 | [
65 | 'title' => 'HttpClient',
66 | 'repository' => 'reactphp/http-client',
67 | 'category' => 'Legacy Components'
68 | ],
69 | [
70 | 'title' => 'SocketClient',
71 | 'repository' => 'reactphp/socket-client',
72 | 'category' => 'Legacy Components'
73 | ],
74 | ];
75 |
--------------------------------------------------------------------------------
/theme/assets/components/version-selector/index.css:
--------------------------------------------------------------------------------
1 | @import "../../styles/variables.css";
2 |
3 | .version-selector {
4 | position: relative;
5 | font-size: .875rem;
6 | color: #fff;
7 |
8 | & :last-child {
9 | margin-bottom: 0;
10 | }
11 | }
12 |
13 | .version-selector__button,
14 | .version-selector__version {
15 | /*