Skip to content

feat: add code blocks to the homepage #1089

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 26 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .ember-cli
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,11 @@

Setting `disableAnalytics` to true will prevent any data from being sent.
*/
"disableAnalytics": false
"disableAnalytics": false,

/**
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
*/
"isTypeScriptProject": false
}
3 changes: 3 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,7 @@
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ module.exports = {
},
},
{
// Test files:
// test files
files: ['tests/**/*-test.{js,ts}'],
extends: ['plugin:qunit/recommended'],
rules: {
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,14 @@ jsconfig.json
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try

/.lighthouseci/

/.idea/
/package-lock.json.ember-try
/yarn.lock.ember-try

# broccoli-debug
/DEBUG/
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,12 @@
/coverage/
!.*
.eslintcache
.lint-todo/

# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ Components come from [ember-styleguide](https://github.com/ember-learn/ember-sty
You will need the following things properly installed on your computer.

* [Git](https://git-scm.com/)
* [Node.js](https://nodejs.org/)
* [Ember CLI](https://ember-cli.com/)
* [Node.js](https://nodejs.org/) (with npm)
* [Ember CLI](https://cli.emberjs.com/release/)
* [Google Chrome](https://google.com/chrome/)

## Installation
Expand Down Expand Up @@ -52,7 +52,7 @@ The app is continuously deployed to Netlify when a pull request is merged and pa
## Further Reading / Useful Links

* [ember.js](https://emberjs.com/)
* [ember-cli](https://ember-cli.com/)
* [ember-cli](https://cli.emberjs.com/release/)
* Development Browser Extensions
* [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi)
* [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/)
Expand Down
12 changes: 12 additions & 0 deletions app/components/code-preview.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<div class='grid lg:grid-2 code-preview'>
<div class='lg:col-3 code-preview__code'>
<h4 class="code-preview__title">Code</h4>
<CodeBlock @code={{@code}} @language='gjs' @showCopyButton={{false}} />
</div>
<div class='lg:col-3 code-preview__result'>
<h4 class="code-preview__title">Result</h4>
<div class="code-preview__rendered">
{{yield}}
</div>
</div>
</div>
45 changes: 45 additions & 0 deletions app/components/index/ember-code-examples.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<div class="grid lg:grid-2">
<div class='lg:col-3'>
<h3 class='text-lg'>Components embrace HTML</h3>
<p>
Ember components are a superset of HTML - that means
<span class="inline-code">&lt;p&gt;Hello World&lt;/p&gt;</span>
is a fully-fledged Ember Component. Simply wrap your HTML with a <span class="inline-code">&lt;template&gt;</span> tag to make it a reusable component.
</p>
</div>
</div>
<CodePreview @code={{this.simpleComponent}}>
Hello, World!
</CodePreview>

<div class="grid lg:grid-2 mt-4">
<div class='lg:col-3'>
<h3 class='text-lg'>Simple composability</h3>
<p>
Ember components accept arguments to make them dynamic. To pass data into components, use the <span class="inline-code">@</span> symbol along with an argument name.
</p>
</div>
</div>
<CodePreview @code={{this.composableComponent}}>
Hello, Ember!
<p>Components can easily be reused 🚀</p>
</CodePreview>

<div class="grid lg:grid-2 mt-4">
<div class='lg:col-3'>
<h3 class='text-lg'>Delightful reactivity</h3>
<p>
State can be added to Ember components progressively by wrapping the template in a JavaScript class. The component will automatically rerender when a property decorated with
<span class="inline-code">@tracked</span> is changed.
</p>
</div>
</div>
<CodePreview @code={{this.stateManagemnent}}>
<Index::EmberCodeExamples::Counter />
</CodePreview>

<div class="lg:col-4 lg:start-2 text-center">
<p class="mt-4 text-gray">
The code examples above use the <a href="https://guides.emberjs.com/release/components/template-tag-format/">Template Tag format</a>. It is a powerful, new way to write components in Ember as a single-file format that combines the JavaScript and Glimmer template code. The format is part of the <a href="https://emberjs.com/editions/polaris/">Ember Polaris edition</a>.
</p>
</div>
31 changes: 31 additions & 0 deletions app/components/index/ember-code-examples.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import Component from '@glimmer/component';

export default class IndexEmberAddonsComponent extends Component {
simpleComponent = `<template>
<p>Hello, World!</p>
</template>`;

composableComponent = `const Welcome = <template>
<p>Hello, {{@name}}!</p>
</template>;

<template>
<Welcome @name="Ember" />
<p>Components can easily be reused 🚀</p>
</template>`;

stateManagemnent = `import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { on } from '@ember/modifier';

export default class Counter extends Component {
@tracked count = 0;

add = () => this.count += 1;

<template>
<p>You have clicked {{this.count}} times.</p>
<button {{on "click" this.add}}>Click</button>
</template>
}`;
}
2 changes: 2 additions & 0 deletions app/components/index/ember-code-examples/counter.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<p>You have clicked {{this.count}} times.</p>
<button type="button" {{on "click" this.increment}}>Click</button>
8 changes: 8 additions & 0 deletions app/components/index/ember-code-examples/counter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';

export default class GridDotsComponent extends Component {
@tracked count = 0;

increment = () => (this.count += 1);
}
1 change: 0 additions & 1 deletion app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="Ember.js helps developers be more productive out of the box. Designed with developer ergonomics in mind, its friendly APIs help you get your job done—fast.">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:description" content="Ember.js helps developers be more productive out of the box. Designed with developer ergonomics in mind, its friendly APIs help you get your job done—fast." />
Expand Down
1 change: 1 addition & 0 deletions app/styles/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
@import "components/ecosystem-icons.css";
@import "components/cta-emberconf.css";
@import "components/faqs.css";
@import "components/code-preview.css";
@import "components/homepage-image-grid.css";
@import "components/homepage-hero-callout.css";
@import "components/lts-table.css";
Expand Down
88 changes: 88 additions & 0 deletions app/styles/components/code-preview.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/* stylelint-disable selector-class-pattern */
code:not([class*="language-"]) {
background-color: initial;
}

.text-gray {
color: var(--color-gray-600);
}

.inline-code {
font-family: var(--font-family-mono);
background-color: var(--color-gray-300);
padding: 4px 6px;
border-radius: 4px;
font-weight: 600;
font-size: 0.875em;
}

.code-preview {
gap: 0;
box-shadow: 0 5px 15px -10px rgb(0 0 0 / 75%);
border-radius: var(--radius-lg);
}

.code-preview .shiki {
/* Shiki sets inline background color. Force using our own. */
background-color: var(--color-gray-900) !important;

--ember-shiki-padding-x: 16px;
--ember-shiki-padding-y: 16px;
--ember-shiki-border-radius: var(--radius-lg);
}

.code-preview pre:focus {
box-shadow: none;
}

.code-preview__title {
padding: 16px;
border-bottom: 1px solid;
font-weight: var(--font-weight-3);
margin-bottom: 0;
}

.code-preview__code {
background-color: var(--color-gray-900);
border-radius: var(--radius-lg) var(--radius-lg) 0 0;
min-width: 0;

/* Makes the scrollbar dark */
color-scheme: dark;
}

.code-preview__code .code-preview__title {
color: var(--color-gray-100);
border-bottom-color: var(--color-gray-700);
}

.code-preview__result {
background-color: var(--color-white);
border-radius: 0 0 var(--radius-lg) var(--radius-lg);
min-width: 0;
}

.code-preview__result .code-preview__title {
color: var(--color-gray-900);
border-bottom-color: var(--color-gray-300);
}

.code-preview__rendered {
padding: 16px;
}

@media (min-width: 1008px) {
.code-preview__code {
border-radius: var(--radius-lg) 0 0 var(--radius-lg);
}

.code-preview__result {
border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
}

.bg-shape-swipe-top-right {
background-image: url("/images/swipe-top-right.svg");
background-repeat: no-repeat;
background-position: top right;
}
}
6 changes: 6 additions & 0 deletions app/templates/index.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@
</div>
</section>

<section aria-labelledby="section-code" class="bg-light bg-shape-swipe-top-right">
<div class="container layout">
<Index::EmberCodeExamples />
</div>
</section>

<section aria-labelledby="section-batteries-included" class="bg-light-muted">
<div class="container layout">
<div class="lg:col-4 lg:start-2 text-center">
Expand Down
2 changes: 1 addition & 1 deletion config/ember-cli-update.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"packages": [
{
"name": "ember-cli",
"version": "3.28.4",
"version": "4.4.0",
"blueprints": [
{
"name": "app",
Expand Down
3 changes: 1 addition & 2 deletions config/environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ module.exports = function (environment) {
modulePrefix: 'ember-website',
environment,
rootURL: '/',
locationType: 'trailing-history',
historySupportMiddleware: true,
locationType: 'history',
EmberENV: {
FEATURES: {
// Here you can enable experimental features on an ember canary build
Expand Down
23 changes: 23 additions & 0 deletions config/fastboot.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module.exports = function () {
return {
buildSandboxGlobals(defaultGlobals) {
return Object.assign({}, defaultGlobals, {
fetch: fetch,
AbortController,
ReadableStream:
typeof ReadableStream !== 'undefined'
? ReadableStream
: require('node:stream/web').ReadableStream,
WritableStream:
typeof WritableStream !== 'undefined'
? WritableStream
: require('node:stream/web').WritableStream,
TransformStream:
typeof TransformStream !== 'undefined'
? TransformStream
: require('node:stream/web').TransformStream,
Headers: typeof Headers !== 'undefined' ? Headers : undefined,
});
},
};
};
15 changes: 0 additions & 15 deletions config/targets.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,6 @@ const browsers = [
'last 1 Safari versions',
];

// Ember's browser support policy is changing, and IE11 support will end in
// v4.0 onwards.
//
// See https://deprecations.emberjs.com/v3.x#toc_3-0-browser-support-policy
//
// If you need IE11 support on a version of Ember that still offers support
// for it, uncomment the code block below.
//
// const isCI = Boolean(process.env.CI);
// const isProduction = process.env.EMBER_ENV === 'production';
//
// if (isCI || isProduction) {
// browsers.push('ie 11');
// }

module.exports = {
browsers,
node: 'current',
Expand Down
Loading