chore(i18n,learn): processed translations (#48578)

This commit is contained in:
camperbot 2022-11-23 10:04:30 -08:00 committed by GitHub
parent 6ba84c091a
commit 7bc2ba4a91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
277 changed files with 621 additions and 621 deletions

View File

@ -34,7 +34,7 @@ dashedName: build-a-25--5-clock
**قصة المستخدم #10:** يمكنني رؤية عنصر قابل للنقر مع `id="reset"`.
**قصة المستخدم #11:** عندما أنقر على العنصر مع معرف `reset`، أي مؤقت قيد التشغيل يجب إيقافه، القيمة ضمن `id="break-length"` يجب أن تنتج `5`، القيمة ضمن `id="session-length"` يجب أن تعود إلى 25، والعنصر مع `id="time-left"` يجب أن يعاد تعيينه إلى حالته الافتراضية.
**قصة المستخدم #11:** عندما أنقر على العنصر مع معرف `reset`، أي مؤقت قيد التشغيل يجب إيقافه، القيمة ضمن `id="break-length"` يجب أن تنتج `5`، القيمة ضمن `id="session-length"` يجب أن تعود إلى 25، والعنصر مع `id="time-left"` يجب أن يعاد تعيينه إلى حالته (state) الافتراضية.
**قصة المستخدم #12:** عندما أنقر على العنصر مع معرف `break-decrement`، القيمة ضمن `id="break-length"` مراسيم بقيمة 1، ويمكنني أن أرى القيمة المحدثة.

View File

@ -10,7 +10,7 @@ dashedName: connect-redux-to-the-messages-app
الآن بعد أن فهمت كيفية استخدام `connect` لتوصيل React إلى Redux، يمكنك تطبيق ما تعلمته على مكون React الخاص بك الذي يتعامل مع الرسائل.
في الدرس الأخير، المكون الذي يتصل إلى Redux يسما `Presentational`، وهذا لم يكن غير مقصود. هذا المصطلح *عمومًا* يشير إلى مكونات React غير متصلة قاصدًا إلى Redux. وهم ببساطة مسؤولون عن عرض واجهة المستخدم ويفعلون ذلك كوظيفة (function) من الميزات (props) التي يتلقُها. وعلى النقيض من ذلك، فإن مكونات المحتوي موصولة إلى Redux. وعادة ما تكون هذه المؤسسات مسؤولة عن إرسال الإجراءات إلى المتجر (store) وكثيراً ما تنقل إلى مكونات الفرعية كميزات (props).
في الدرس الأخير، المكون الذي يتصل إلى Redux يسما `Presentational`، وهذا لم يكن غير مقصود. هذا المصطلح *عمومًا* يشير إلى مكونات React غير متصلة قاصدًا إلى Redux. وهم ببساطة مسؤولون عن عرض واجهة المستخدم ويفعلون ذلك كوظيفة (function) من الميزات (props) التي يتلقُها. وعلى النقيض من ذلك، فإن مكونات المحتوي موصولة إلى Redux. وعادة ما تكون هذه المؤسسات مسؤولة عن إرسال (dispatching) الإجراءات (actions) إلى المتجر (store) وكثيراً ما تنقل إلى مكونات (components) الفرعية كميزات (props).
# --instructions--

View File

@ -8,7 +8,7 @@ dashedName: map-dispatch-to-props
# --description--
تستخدم الوظيفة `mapDispatchToProps()` لتوفير منشئي إجراءات (action creators) محددة لمكونات React الخاصة بك حتى يتمكنوا من إرسال إجراءات (dispatch actions) ضد متجر Redux. إنها مشابهة في التركيب الوظيفة `mapStateToProps()` التي كتبتها في التحدي الأخير. إنها ترسل كائنا يركّب إجراءات الإرسال (dispatch) إلى أسماء الخواص، التي تصبح مكونا `props`. مع ذلك، بدلاً من إعادة قطعة من `state`، ترجع كل خاصية وظيفة تستدعي `dispatch` مع منشئ العمل وأي بيانات عمل ذات صلة. لديك حق الوصول إلى هذا `dispatch` لأنه يُمرر إلى `mapDispatchToProps()` كحجة عند تعريف الوظيفة، تماما كما مررت `state` إلى `mapStateToProps()`. خلف المشاهد, React المرتبط إلى Redux يستخدم `store.dispatch()` في Redux لإجراء هذه الرسائل مع `mapDispatchToProps()`. يشبه هذه كيفية أستخدام `store.subscribe()` إلى المكونات التي تركب في `state`.
تستخدم الوظيفة `mapDispatchToProps()` لتوفير منشئي إجراءات (action creators) محددة لمكونات React الخاصة بك حتى يتمكنوا من إرسال إجراءات (dispatch actions) ضد متجر Redux. إنها مشابهة في التركيب الوظيفة `mapStateToProps()` التي كتبتها في التحدي الأخير. إنها ترسل كائنا يركّب إجراءات الإرسال (dispatch) إلى أسماء الخواص، التي تصبح مكونا `props`. مع ذلك، بدلاً من إعادة قطعة من `state`، ترجع كل خاصية وظيفة (function) تستدعي `dispatch` مع منشئ (action creator) العمل وأي بيانات عمل ذات صلة. لديك حق الوصول إلى هذا `dispatch` لأنه يُمرر إلى `mapDispatchToProps()` كحجة عند تعريف الوظيفة، تماما كما مررت `state` إلى `mapStateToProps()`. خلف المشاهد, React المرتبط إلى Redux يستخدم `store.dispatch()` في Redux لإجراء هذه الرسائل مع `mapDispatchToProps()`. يشبه هذه كيفية أستخدام `store.subscribe()` إلى المكونات (components) التي تركب في `state`.
على سبيل المثال، لديك منشئ إجراء `loginUser()` يأخذ `username` كحمولة للإجراء. هذا الكائن ينتج من `mapDispatchToProps()` لمنشئ هذا الإجراء سيبدو شيئا مثل:

View File

@ -10,13 +10,13 @@ dashedName: bind-this-to-a-class-method
بالإضافة إلى إعداد وتحديث `state`، يمكنك أيضًا تحديد طرق (methods) لفئة مكوناتك (component class). عادة ما تحتاج طريقة الفئة (class method) إلى استخدام مصطلح `this` حتى تتمكن من الوصول إلى الخصائص في الفئة (class) (مثل `state` و `props`) داخل نطاق الطريقة (method). هناك بعض الطرق للسماح لطرقية الفئة الخاص بك بالوصول إلى `this`.
إحدى الطرق الشائعة هي ربط `this` صراحة في الإنشاء لذلك يصبح `this` مرتبطاً بأساليب الفئة (class method) عندما يتم تهيئة المكون. ربما لاحظت التحدي الأخير المستخدم `this.handleClick = this.handleClick.bind(this)` لطريقة `handleClick` في البناء. بعد ذلك، عندما تتصل بالوظيفة مثل `this.setState()` ضمن طريقة الفئة الخاص بك، `this` يشير إلى الفئة ولن يكون `undefined`.
إحدى الطرق الشائعة هي ربط `this` صراحة في الإنشاء لذلك يصبح `this` مرتبطاً بأساليب الفئة (class method) عندما يتم تهيئة المكون. ربما لاحظت التحدي الأخير المستخدم `this.handleClick = this.handleClick.bind(this)` لطريقة `handleClick` في البناء. بعد ذلك، عندما تتصل بالوظيفة (function) مثل `this.setState()` ضمن طريقتك لفئة (class method)، يشير `this` إلى الفئة (class) ولن يكون `undefined`.
**ملاحظة:** الكلمة المفتاحية `this` هي واحدة من أكثر الجوانب ارتباكاً في JavaScript ولكنها تؤدي دوراً هاماً في React. مع أنّ أن سلوكها هنا طبيعي تماما، هذه الدروس ليست المكان المناسب لإجراء استعراض متعمق لكلمة `this` لذا يرجى الرجوع إلى الدروس الأخرى إذا كان ما ورد أعلا مثيرا للارتباك!
# --instructions--
يحتوي محرر التعليمات البرمجية على مكون مع `state` التي تتابع حالة النص. ثم أن لديها طريقة تسمح لك بتعيين النص إلى `You clicked!`. ومع ذلك، فإن الطريقة لا تعمل لأنها تستخدم الكلمة المفتاحية `this` التي لم يتم تعريفها. أصلحة بواسطة ربط `this` بشكل معتمد للطريقة `handleClick()` في بناء المكوّن.
يحتوي محرر كود على مكون (component) مع `state` التي تتابع حالة النص. ثم أن لديها طريقة تسمح لك بتعيين النص إلى `You clicked!`. ومع ذلك، فإن الطريقة لا تعمل لأنها تستخدم الكلمة المفتاحية `this` التي لم يتم تعريفها. أصلحة بواسطة ربط `this` بشكل معتمد للطريقة `handleClick()` في بناء المكوّن.
بعد ذلك، أضف معالج النقر (click handler) إلى عنصر `button` في طريقة التقديم. يجب أن تشغل طريقة `handleClick()` عندما يتلقى الزر حدثا بالنقر عليه. تذكر أن الطريقة التي تمررها إلى معالج `onClick` تحتاج إلى أقواس غريبة لأنه يجب أن تفسر قاصدًا على أنها JavaScript.
@ -40,7 +40,7 @@ assert(
);
```
حالة `MyComponent` يجب أن تهيئ مع زوج القيمة الرئيسة `{ text: "Hello" }`.
يجب أن تهيئ حالة (state) تسمى `MyComponent` مع هُوِيَّة (key) القيمة الرئيسة `{ text: "Hello" }`.
```js
assert(
@ -48,7 +48,7 @@ assert(
);
```
النقر على `button` يجب تشغيل طريقة `handleClick` وتعيين `text` إلى `You clicked!`.
النقر على `button` يجب تشغيل طريقة (method) تسمى `handleClick` وتعيين حالة (state) تسمى `text` بقيمة `You clicked!`.
```js
async () => {

View File

@ -53,7 +53,7 @@ assert(
);
```
`GameOfChance` يجب تبدئ حالة تحتوي على خاصية `counter` بقيمة `1`.
`GameOfChance` يجب تبدئ حالة (state) تحتوي على خاصية `counter` بقيمة `1`.
```js
assert.strictEqual(
@ -71,7 +71,7 @@ assert.strictEqual(
);
```
في كل مرة يتم النقر على الزر، يجب زيادة حالة counter بقيمة 1، وينبغي تقديم عنصر واحد `p` إلى DOM الذي يحتوي على نص `Turn: N`، حيث `N` هي قيمة الحالة counter.
في كل مرة يتم النقر على الزر، يجب زيادة حالة (state) برنامَج counter بقيمة 1، وينبغي تقديم عنصر واحد `p` إلى DOM الذي يحتوي على نص `Turn: N`، حيث `N` هي قيمة حالة (state) برنامَج counter.
```js
(() => {

View File

@ -8,7 +8,7 @@ dashedName: use-a-ternary-expression-for-conditional-rendering
# --description--
قبل الانتقال إلى تقنيات العرض الديناميكي، هناك طريقة أخيرة لاستخدام اشتراطات JavaScript المدمجة لتقديم ما تريده, تسمى: <dfn>ternary operator</dfn>. غالباً ما يستخدم ternary operator كاختصار لتعبيرات `if/else` في JavaScript. إنها ليست قوية تماما مثل تعبيرات `if/else` التقليدية، لكنها تحظى بشعبية كبيرة بين مطوري React. أحد أسباب هذا هو بسبب كيفية تجميع JSX، أن `if/else` البيانات لا يمكن إدراجها قاصدًا في تعليمات البرمجية JSX. ربما كنت قد لاحظت هذا في تحديين السابقين - عندما يكون تعبير `if/else` مطلوب، كان دائماً *خارج* كلمة `return`. Ternary expressions يمكن أن تكون بديلا ممتازا إذا كنت تريد تنفيذ المنطق الشرط (conditional logic) داخل JSX. تذكر أن ternary operator له ثلاث أجزاء، ولكن يمكنك الجمع بين عدة ternary expressions. إليك الجملة الأساسية:
قبل الانتقال إلى تقنيات العرض الديناميكي، هناك طريقة أخيرة لاستخدام اشتراطات JavaScript المدمجة لتقديم ما تريده, تسمى: <dfn>ternary operator</dfn>. غالباً ما يستخدم ternary operator كاختصار لتعبيرات `if/else` في JavaScript. إنها ليست قوية تماما مثل تعبيرات `if/else` التقليدية، لكنها تحظى بشعبية كبيرة بين مطوري React. أحد أسباب هذا هو بسبب كيفية تجميع JSX، أن تعبيرات `if/else` لا يمكن إدراجها في كود JSX مباشرة. ربما كنت قد لاحظت هذا في تحديين السابقين - عندما يكون تعبير `if/else` مطلوب، كان دائماً *خارج* كلمة `return`. Ternary expressions يمكن أن تكون بديلا ممتازا إذا كنت تريد تنفيذ المنطق الشرط (conditional logic) داخل JSX. تذكر أن ternary operator له ثلاث أجزاء، ولكن يمكنك الجمع بين عدة ternary expressions. إليك الجملة الأساسية:
```jsx
condition ? expressionIfTrue : expressionIfFalse;
@ -16,7 +16,7 @@ condition ? expressionIfTrue : expressionIfFalse;
# --instructions--
يحتوي محرر التعليمات البرمجية على ثلاث ثوابت تُعرف في مكون `CheckUserAge` داخل طريقة `render()`. يطلق عليهم `buttonOne`, و `buttonTwo`, و `buttonThree`. يتم تعيين كل من هذه عبارة JSX بسيطة تمثل عنصر الزر (button). أولا، تهيئة حالة `CheckUserAge` مع `input` و `userAge` وكلاهما مجموعة string بقيم فارغة.
يحتوي محرر التعليمات البرمجية على ثلاث ثوابت تُعرف في مكون `CheckUserAge` داخل طريقة `render()`. يطلق عليهم `buttonOne`, و `buttonTwo`, و `buttonThree`. يتم تعيين كل من هذه عبارة JSX بسيطة تمثل عنصر الزر (button). أولا، هيّئ حالة (state) بقيمة `CheckUserAge` مع `input` و `userAge` وكلاهما مجموعة مقطع نصي (string) فارغة.
وبمجرد أن يقدم المكون المعلومات إلى الصفحة، ينبغي أن يكون لدى المستخدمين طريقة للتفاعل معها. ضمن تعبير `return` للمكون، أنشئ ternary expression يطبق المنطق التالي: عند تحميل الصفحة أول مرة، يعرض زر الإرسال (submit button)، باسم `buttonOne`، إلى الصفحة. بعد ذلك، عندما يدخل المستخدم عمره وينقر على الزر، ينتج زر مختلف تبعاً لعمره. إذا دخل المستخدم رقماً أقل من `18`، أنشئ `buttonThree`. إذا دخل المستخدم رقما أكبر من أو يساوي `18`، أنشئ `buttonTwo`.
@ -33,7 +33,7 @@ assert(
);
```
يجب تهيئة حالة المكون `CheckUserAge` بخاصية `userAge` وخاصية `input`، كل منما يحمل string بقيمة فارغة.
يجب تهيئة حالة (state) المكون (component) مسمى `CheckUserAge` بخاصية `userAge` وخاصية `input`، كل منهما يحمل مقطع نصي (string) فارغ.
```js
assert(
@ -156,7 +156,7 @@ assert(
})();
```
يجب ألا يحتوي تعليماتك البرمجية على أي تعبيرات `if/else`.
يجب ألا يحتوي كودك على أي تعبيرات `if/else`.
```js
assert(

View File

@ -8,7 +8,7 @@ dashedName: use-state-to-toggle-an-element
# --description--
في بعض الأحيان قد تحتاج إلى معرفة الحالة السابقة عند تحديث الحالة (state). ومع ذلك، قد تكون تعديلات الحالة غير متزامنة - وهذا يعني أن React قد إجراء مكالمات متعددة `setState()` في تحديث واحد. وهذا يعني أنه لا يمكنك الاعتماد على القيمة السابقة في `this.state` أو `this.props` عند حساب القيمة التالية. لذلك يجب ألا تستخدم التعليمات البرمجية مثل:
في بعض الأحيان قد تحتاج إلى معرفة الحالة (state) السابقة عند تحديث الحالة (state). ومع ذلك، قد تكون تعديلات الحالة (state) غير متزامنة - وهذا يعني أن React قد إجراء مكالمات متعددة `setState()` في تحديث واحد. وهذا يعني أنه لا يمكنك الاعتماد على القيمة السابقة في `this.state` أو `this.props` عند حساب القيمة التالية. لذلك يجب ألا تستخدم التعليمات البرمجية مثل:
```jsx
this.setState({
@ -16,7 +16,7 @@ this.setState({
});
```
بدلاً من ذلك، يجب عليك تمرير وظيفة `setState` تسمح لك بالوصول إلى الحالة ومِيزات. استخدام الحالة مع `setState` يضمن لك العمل مع أكثر القيم حداثة من الحالة والمِيزات. وهذا يعني أنه ينبغي إعادة كتابة ما ورد أعلاه على النحو التالي:
بدلاً من ذلك، يجب عليك تمرير وظيفة `setState` تسمح لك بالوصول إلى الحالة (state) ومِيزات (props). استخدام وظيفة (function) مع `setState` يضمن لك العمل مع أكثر القيم حداثة من الحالة (state) والمِيزات (props). وهذا يعني أنه ينبغي إعادة كتابة ما ورد أعلاه على النحو التالي:
```jsx
this.setState((state, props) => ({
@ -24,7 +24,7 @@ this.setState((state, props) => ({
}));
```
يمكنك أيضًا استخدام نموذج دون `props` إذا كنت بحاجة فقط إلى `state`:
يمكنك أيضًا استخدام نموذج (form) دون `props` إذا كنت بحاجة فقط إلى `state`:
```jsx
this.setState(state => ({
@ -38,7 +38,7 @@ this.setState(state => ({
`MyComponent` لها خاصية `visibility` التي تم تهيئتها إلى `false`. تنتج طريقة العرض طريقة عرض واحدة إذا كانت قيمة `visibility` صحيحة، وعرضًا مختلفًا إذا كانت خاطئة (false).
حاليا، لا توجد طريقة لتحديث خاصية `visibility` في المكون `state`. يجب أن تبديل القيمة ذهابا وإيابا بين الحقيقة (true) والخاطئة (false). هناك معالج ضغط على الزر الذي يشغل طريقة فئة تسمى `toggleVisibility()`. مرر الوظيفة إلى `setState` لتعريف هذه الطريقة بحيث تبديل `state` بقيمة `visibility` إلى القيمة المضادة عند تشغيل الطريقة. إذا كان `visibility` يكون `false`، فالطريقة تغيره إلى `true`، والعكس كذلك.
حاليا، لا توجد طريقة لتحديث خاصية `visibility` في `state` المكون (component). يجب أن تبديل القيمة ذهابا وإيابا بين الحقيقة (true) والخاطئة (false). هناك معالج ضغط على الزر الذي يشغل طريقة فئة تسمى `toggleVisibility()`. مرر الوظيفة (function) إلى `setState` لتعريف هذه الطريقة (method) بحيث تبديل `state` بقيمة `visibility` إلى القيمة المضادة عند تشغيل الطريقة (method). إذا كان `visibility` يكون `false`، فالطريقة تغيره إلى `true`، والعكس كذلك.
وأخيراً، انقر على الزر لرؤية العرض المشروط (conditional rendering) للمكون استناداً إلى `state`.
@ -56,7 +56,7 @@ assert.strictEqual(
);
```
حالة `MyComponent` يجب أن تَبدء بخاصية `visibility` محددة إلى سلسلة `false`.
يجب أن تَبدء حالة (state) في `MyComponent` بخاصية `visibility` يرجع حالة `false`.
```js
assert.strictEqual(
@ -65,7 +65,7 @@ assert.strictEqual(
);
```
النقر على عنصر الزر يجب أن يغير خاصية `visibility` في الحالة بين `true` و `false`.
النقر على عنصر الزر يجب أن يغير خاصية `visibility` في الحالة (state) بين `true` و `false`.
```js
(() => {
@ -104,7 +104,7 @@ assert(
);
```
`this` يجب عدم استخدامه داخل `setState`
يجب عدم استخدام `this` داخل `setState`
```js
assert(!/this\.setState\([^}]*this/.test(code));

View File

@ -8,13 +8,13 @@ dashedName: use-a-switch-statement-to-handle-multiple-actions
# --description--
يمكنك إخبار متجر Redux كيفية التعامل مع أنواع متعددة من الإجراءات. قل أنك إدارة توثيق المستخدم (user authentication) في متجرك Redux. تريد أن يكون لديك تمثيل للحالة عندما يتم تسجيل دخول المستخدمين وعندما يتم تسجيل خروجهم. أنت تمثل هذا مع كائن حالة (state) واحد مع الخاصية `authenticated`. تحتاج أيضًا إلى منشئي الإجراءات الذين ينشئ إجراءات مناظرة لتسجيل دخول المستخدم وتسجيل خروجه، إلى جانب كائنات الإجراء نفسها.
يمكنك إخبار متجر Redux كيفية التعامل مع أنواع متعددة من الإجراءات. قل أنك إدارة توثيق المستخدم (user authentication) في متجرك Redux. تريد أن يكون لديك تمثيل للحالة (state) عندما يتم تسجيل دخول المستخدمين وعندما يتم تسجيل خروجهم. أنت تمثل هذا مع كائن (object) حالة (state) واحد مع الخاصية `authenticated`. تحتاج أيضًا إلى منشئي الإجراءات الذين ينشئ إجراءات مناظرة لتسجيل دخول المستخدم وتسجيل خروجه، إلى جانب كائنات الإجراء نفسها.
# --instructions--
يحتوي محرر التعليمات البرمجية على متجر، وإجراءات، وناشئ إجراءات تم إعدادهم لك. املأ الوظيفة `reducer` للتعامل مع إجراءات الموثقة المتعددة. استخدم تعبير `switch` من JavaScript في `reducer` للرد على أحداث الإجراء مختلفة. هذا نمط قياسي في كتابة reducers في Redux. يجب أن يبدل تعبير التبديل إلى `action.type` وأن يعيد حالة التوثيق المناسبة.
يحتوي محرر التعليمات البرمجية على متجر، وإجراءات، وناشئ إجراءات تم إعدادهم لك. املأ الوظيفة `reducer` للتعامل مع إجراءات الموثقة المتعددة. استخدم تعبير `switch` من JavaScript في `reducer` للرد على أحداث الإجراء (action events) مختلفة. هذا نمط قياسي في كتابة reducers في Redux. يجب أن يبدل تعبير التبديل (switch) إلى `action.type` وأن يعيد حالة التوثيق (state authentication) المناسبة.
**ملاحظة:** في هذه المرحلة، لا تقلق حول عدم قدرة الحالة على التغيير، لأنها صغيرة وبسيطة في هذا المثال. لكل إجراء، يمكنك إعادة كائن جديد - على سبيل المثال `{authenticated: true}`. كما لا تنس كتابة قاعدة (case) باسم `default` في تعبير التبديل الخاص بك الذي يعيد الحالة `state`. هذا مهم لأنه بمجرد أن يكون التطبيق الخاص بك يحتوي على reducers متعددة، يتم تشغيلها جميعا في أي وقت يتم فيه إرسال إجراء، حتى عندما لا يكون الإجراء متصلا بذلك reducer. في مثل هذه الحالة، تريد التأكد من إعادة `state` الحالية.
**ملاحظة:** في هذه المرحلة، لا تقلق حول عدم قدرة الحالة (state) على التغيير، لأنها صغيرة وبسيطة في هذا المثال. لكل إجراء، يمكنك إعادة كائن جديد - على سبيل المثال `{authenticated: true}`. كما لا تنس كتابة قاعدة (case) باسم `default` في تعبيرك لتبديل الذي ينتج `state`. هذا مهم لأنه بمجرد أن يكون التطبيق الخاص بك يحتوي على reducers متعددة، يتم تشغيلها جميعا في أي وقت يتم فيه إرسال إجراء، حتى عندما لا يكون الإجراء متصلا بذلك reducer. في هذا الإطار، تريد التأكد من أنشاء `state` الحالية.
# --hints--
@ -36,7 +36,7 @@ assert(logoutUser().type === 'LOGOUT');
assert(store.getState().authenticated === false);
```
إرسال `loginUser` يجب أن تحديث خاصية `authenticated` في حالة المتجر إلى `true`.
إرسال `loginUser` يجب أن تحديث خاصية `authenticated` في حالة (state) المتجر (store) إلى `true`.
```js
assert(
@ -51,7 +51,7 @@ assert(
);
```
إرسال `logoutUser` يجب أن تحديث خاصية `authenticated` في حالة المتجر إلى `false`.
إرسال `logoutUser` يجب أن تحديث خاصية `authenticated` في حالة (state) المتجر (store) إلى `false`.
```js
assert(

View File

@ -36,7 +36,7 @@ assert(logoutUser().type === 'LOGOUT');
assert(store.getState().authenticated === false);
```
إرسال `loginUser` يجب أن تحديث خاصية `login` في حالة المتجر إلى `true`.
إرسال `loginUser` يجب أن تحديث خاصية `login` في حالة (state) المتجر (store) إلى `true`.
```js
assert(
@ -51,7 +51,7 @@ assert(
);
```
إرسال `logoutUser` يجب أن تحديث خاصية `login` في حالة المتجر إلى `false`.
إرسال `logoutUser` يجب أن تحديث خاصية `login` في حالة (state) المتجر (store) إلى `false`.
```js
assert(
@ -67,7 +67,7 @@ assert(
);
```
يجب أن تتعامل وظيفة `authReducer` مع أنواع متعددة من الإجراءات مع تعبير switch.
يجب أن تتعامل وظيفة `authReducer` مع أنواع متعددة من الإجراءات (actions) مع تعبير switch.
```js
(getUserInput) =>

View File

@ -7,7 +7,7 @@ dashedName: step-43
# --description--
Increase the pseudo-element's transparency by `30%`.
Aumenta la trasparenza dello pseudo-elemento del `30%`.
# --hints--

View File

@ -11,7 +11,7 @@ dashedName: step-2
適切な `charset` の値を持つ `meta` 要素を 1 つ、ページに加えてください。
`charset` 属性はページの文字エンコーディングを指定します。現状、ほとんどのブラウザーでサポートされている唯一のエンコーディングは `UTF-8`す。
`charset` 属性はページの文字エンコーディングを指定します。今日では `UTF-8` が、大半のブラウザーでサポートされている唯一のエンコーディングとなっています。
# --hints--

View File

@ -9,7 +9,7 @@ dashedName: step-8
_SVG_ (scalable vector graphics) の便利な特徴として、SVG は、画像の解像度に影響を与えずに拡大縮小することを可能にする `path` 属性を含みます。
Currently, the `img` is assuming its default size, which is too large. 正しく表示するため、`id` をセレクターとして使用し、`width` の値を `max(100px, 18vw)` に設定して画像を縮小してください。
今、`img` 要素はデフォルトのサイズが使われていますが、大きすぎるようです。 正しく表示するため、`id` をセレクターとして使用し、`width` の値を `max(100px, 18vw)` に設定して画像を縮小してください。
# --hints--

View File

@ -7,7 +7,7 @@ dashedName: step-10
# --description--
Make the `header` take up the full width of its parent container, set its `height` to `50px`, and set the `background-color` to `#1b1b32`. 次に、`display` の設定で_フレックスボックス_が使われるようにします。
`header` 要素について、幅が親コンテナーの幅全体に広がるよう設定し、`height` は `50px`、`background-color` は `#1b1b32` に設定してください。 次に、`display` の設定で_フレックスボックス_が使われるようにします。
# --hints--

View File

@ -7,29 +7,29 @@ dashedName: step-30
# --description--
Add an `id` to all of your radio `input`s so you can link your labels to them. Give the first one an `id` of `q1-a1`. Give the rest of them `id`s of `q1-a2`, `q2-a1`, and `q2-a2`, respectively.
ラベルを関連付けられるように、ラジオボタンの `input` 要素すべてに `id` を追加しましょう。 1 つ目の `id``q1-a1` としてください。 残りの `id` は順に `q1-a2`、`q2-a1`、`q2-a2` としてください。
# --hints--
You should give the first `input` element an `id` of `q1-a1`.
1 番目の `input` 要素の `id``q1-a1` に設定する必要があります。
```js
assert.equal(document.querySelectorAll('ul.answers-list > li > label > input')?.[0]?.id, "q1-a1");
```
You should give the second `input` element an `id` of `q1-a2`.
2 番目の `input` 要素の `id``q1-a2` に設定する必要があります。
```js
assert.equal(document.querySelectorAll('ul.answers-list > li > label > input')?.[1]?.id, "q1-a2");
```
You should give the third `input` element an `id` of `q2-a1`.
3 番目の `input` 要素の `id``q2-a1` に設定する必要があります。
```js
assert.equal(document.querySelectorAll('ul.answers-list > li > label > input')?.[2]?.id, "q2-a1");
```
You should give the fourth `input` element an `id` of `q2-a2`.
4 番目の `input` 要素の `id``q2-a2` に設定する必要があります。
```js
assert.equal(document.querySelectorAll('ul.answers-list > li > label > input')?.[3]?.id, "q2-a2");

View File

@ -1,6 +1,6 @@
---
id: 6145e8b5080a5f06bb0223d0
title: Step 32
title: ステップ 32
challengeType: 0
dashedName: step-32
---

View File

@ -1,6 +1,6 @@
---
id: 6145eb5f08a38a0786c7a80c
title: Step 33
title: ステップ 33
challengeType: 0
dashedName: step-33
---

View File

@ -1,6 +1,6 @@
---
id: 6145ed1f22caab087630aaad
title: Step 34
title: ステップ 34
challengeType: 0
dashedName: step-34
---

View File

@ -1,6 +1,6 @@
---
id: 6145ee65e2e1530938cb594d
title: Step 35
title: ステップ 35
challengeType: 0
dashedName: step-35
---

View File

@ -1,6 +1,6 @@
---
id: 6145f02240ff8f09f7ec913c
title: Step 36
title: ステップ 36
challengeType: 0
dashedName: step-36
---

View File

@ -1,6 +1,6 @@
---
id: 6145f14f019a4b0adb94b051
title: Step 37
title: ステップ 37
challengeType: 0
dashedName: step-37
---

View File

@ -1,6 +1,6 @@
---
id: 6145f3a5cd9be60b9459cdd6
title: Step 38
title: ステップ 38
challengeType: 0
dashedName: step-38
---

View File

@ -1,6 +1,6 @@
---
id: 6145f47393fbe70c4d885f9c
title: Step 39
title: ステップ 39
challengeType: 0
dashedName: step-39
---

View File

@ -1,6 +1,6 @@
---
id: 6145f59029474c0d3dc1c8b8
title: Step 40
title: ステップ 40
challengeType: 0
dashedName: step-40
---

View File

@ -1,6 +1,6 @@
---
id: 6145f685797bd30df9784e8c
title: Step 41
title: ステップ 41
challengeType: 0
dashedName: step-41
---

View File

@ -1,6 +1,6 @@
---
id: 6145f829ac6a920ebf5797d7
title: Step 42
title: ステップ 42
challengeType: 0
dashedName: step-42
---

View File

@ -1,6 +1,6 @@
---
id: 6145f8f8bcd4370f6509078e
title: Step 43
title: ステップ 43
challengeType: 0
dashedName: step-43
---

View File

@ -1,6 +1,6 @@
---
id: 6145fb5018cb5b100cb2a88c
title: Step 44
title: ステップ 44
challengeType: 0
dashedName: step-44
---

View File

@ -1,6 +1,6 @@
---
id: 6145fc3707fc3310c277f5c8
title: Step 45
title: ステップ 45
challengeType: 0
dashedName: step-45
---

View File

@ -1,6 +1,6 @@
---
id: 614796cb8086be482d60e0ac
title: Step 46
title: ステップ 46
challengeType: 0
dashedName: step-46
---

View File

@ -1,6 +1,6 @@
---
id: 6147a14ef5668b5881ef2297
title: Step 47
title: ステップ 47
challengeType: 0
dashedName: step-47
---

View File

@ -1,6 +1,6 @@
---
id: 614878f7a412310647873015
title: Step 48
title: ステップ 48
challengeType: 0
dashedName: step-48
---

View File

@ -1,6 +1,6 @@
---
id: 61487b77d4a37707073a64e5
title: Step 49
title: ステップ 49
challengeType: 0
dashedName: step-49
---

View File

@ -1,6 +1,6 @@
---
id: 61487da611a65307e78d2c20
title: Step 50
title: ステップ 50
challengeType: 0
dashedName: step-50
---

View File

@ -1,6 +1,6 @@
---
id: 61487f703571b60899055cf9
title: Step 51
title: ステップ 51
challengeType: 0
dashedName: step-51
---

View File

@ -1,6 +1,6 @@
---
id: 614880dc16070e093e29bc56
title: Step 52
title: ステップ 52
challengeType: 0
dashedName: step-52
---

View File

@ -1,6 +1,6 @@
---
id: 614883b6fa720e09fb167de9
title: Step 53
title: ステップ 53
challengeType: 0
dashedName: step-53
---

View File

@ -1,6 +1,6 @@
---
id: 614884c1f5d6f30ab3d78cde
title: Step 54
title: ステップ 54
challengeType: 0
dashedName: step-54
---

View File

@ -1,6 +1,6 @@
---
id: 61488ecfd05e290b5712e6da
title: Step 55
title: ステップ 55
challengeType: 0
dashedName: step-55
---

View File

@ -1,6 +1,6 @@
---
id: 6148d99cdc7acd0c519862cb
title: Step 56
title: ステップ 56
challengeType: 0
dashedName: step-56
---

View File

@ -1,6 +1,6 @@
---
id: 6148da157cc0bd0d06df5c0a
title: Step 57
title: ステップ 57
challengeType: 0
dashedName: step-57
---

View File

@ -1,6 +1,6 @@
---
id: 6148dc095264000dce348bf5
title: Step 58
title: ステップ 58
challengeType: 0
dashedName: step-58
---

View File

@ -1,6 +1,6 @@
---
id: 6148dcaaf2e8750e6cb4501a
title: Step 59
title: ステップ 59
challengeType: 0
dashedName: step-59
---

View File

@ -1,6 +1,6 @@
---
id: 6148dd31d210990f0fb140f8
title: Step 60
title: ステップ 60
challengeType: 0
dashedName: step-60
---

View File

@ -1,6 +1,6 @@
---
id: 6148defa9c01520fb9d178a0
title: Step 61
title: ステップ 61
challengeType: 0
dashedName: step-61
---

View File

@ -1,6 +1,6 @@
---
id: 6148dfab9b54c110577de165
title: Step 62
title: ステップ 62
challengeType: 0
dashedName: step-62
---

View File

@ -1,6 +1,6 @@
---
id: 6148e0bcc13efd10f7d7a6a9
title: Step 63
title: ステップ 63
challengeType: 0
dashedName: step-63
---

View File

@ -1,6 +1,6 @@
---
id: 6148e161ecec9511941f8833
title: Step 64
title: ステップ 64
challengeType: 0
dashedName: step-64
---

View File

@ -1,6 +1,6 @@
---
id: 6148e28706b34912340fd042
title: Step 65
title: ステップ 65
challengeType: 0
dashedName: step-65
---

View File

@ -1,6 +1,6 @@
---
id: 6148e335c1edd512d00e4691
title: Step 66
title: ステップ 66
challengeType: 0
dashedName: step-66
---

View File

@ -1,6 +1,6 @@
---
id: 6148e41c728f65138addf9cc
title: Step 67
title: ステップ 67
challengeType: 0
dashedName: step-67
---

View File

@ -1,6 +1,6 @@
---
id: 6148e5aeb102e3142de026a2
title: Step 68
title: ステップ 68
challengeType: 0
dashedName: step-68
---

View File

@ -1,64 +1,64 @@
---
id: 6351e7a8684bf5377c4ee7f7
title: Step 31
title: ステップ 31
challengeType: 0
dashedName: step-31
---
# --description--
Although not required for `label` elements with a nested `input`, it is still best-practice to explicitly link a `label` with its corresponding `input` element.
`input` 要素がネストされている `label` 要素の場合は必須ではないものの、`label` は対応する `input` 要素と明示的に関連付けることがベストプラクティスです。
Now, add a `for` attribute to each of your four `label`s that links the `label` to its corresponding radio `input`.
4 つの `label` 要素にそれぞれ `for` 属性を追加して、`label` を 対応するラジオボタンの `input` 要素に関連付けてください。
# --hints--
You should give the first `label` a `for` attribute.
1 つ目の `label``for` 属性を追加してください。
```js
assert.notEmpty(document.querySelectorAll('ul.answers-list > li > label')?.[0]?.htmlFor);
```
You should give the first `label` a `for` attribute matching the `id` of its `input` element.
1 つ目の `label` に、対応する `input` 要素の `id` と一致する `for` 属性を設定してください。
```js
const htmlFor = document.querySelectorAll('ul.answers-list > li > label')?.[0]?.htmlFor;
assert.equal(htmlFor, document.querySelectorAll('ul.answers-list > li > label > input')?.[0]?.id);
```
You should give the second `label` a `for` attribute.
2 つ目の `label``for` 属性を追加してください。
```js
assert.notEmpty(document.querySelectorAll('ul.answers-list > li > label')?.[1]?.htmlFor);
```
You should give the second `label` a `for` attribute matching the `id` of its `input` element.
2 つ目の `label` に、対応する `input` 要素の `id` と一致する `for` 属性を設定してください。
```js
const htmlFor = document.querySelectorAll('ul.answers-list > li > label')?.[1]?.htmlFor;
assert.equal(htmlFor, document.querySelectorAll('ul.answers-list > li > label > input')?.[1]?.id);
```
You should give the third `label` a `for` attribute.
3 つ目の `label``for` 属性を追加してください。
```js
assert.notEmpty(document.querySelectorAll('ul.answers-list > li > label')?.[2]?.htmlFor);
```
You should give the third `label` a `for` attribute matching the `id` of its `input` element.
3 つ目の `label` に、対応する `input` 要素の `id` と一致する `for` 属性を設定してください。
```js
const htmlFor = document.querySelectorAll('ul.answers-list > li > label')?.[2]?.htmlFor;
assert.equal(htmlFor, document.querySelectorAll('ul.answers-list > li > label > input')?.[2]?.id);
```
You should give the fourth `label` a `for` attribute.
4 つ目の `label``for` 属性を追加してください。
```js
assert.notEmpty(document.querySelectorAll('ul.answers-list > li > label')?.[3]?.htmlFor);
```
You should give the fourth `label` a `for` attribute matching the `id` of its `input` element.
4 つ目の `label` に、対応する `input` 要素の `id` と一致する `for` 属性を設定してください。
```js
const htmlFor = document.querySelectorAll('ul.answers-list > li > label')?.[3]?.htmlFor;

View File

@ -7,29 +7,29 @@ dashedName: step-5
# --description--
It's time to add some menu content. Add a `main` element within the existing `body` element. It will eventually contain pricing information about coffee and desserts offered by the cafe.
メニューの中身を追加しましょう。 `main` 要素を、既存の `body` 要素の中に追加してください。 後ほど、カフェが提供するコーヒーとデザートの値段をここに入れます。
# --hints--
Your code should have an opening `<main>` tag.
`<main>` の開始タグが 1 つ必要です。
```js
assert(code.match(/<main>/i));
```
Your code should have a closing `</main>` tag.
終了タグ `</main>` が 1 つ必要です。
```js
assert(code.match(/<\/main>/i));
```
You should not change your `body` element. Make sure you don't accidentally delete your closing tag.
`body` 要素を変更しないでください。 誤って終了タグを削除していないか確認してください。
```js
assert($('body').length === 1);
```
Your `main` tag should be within your `body` tag.
`main` タグは `body` タグの中に置く必要があります。
```js
const main = document.querySelector('main');

View File

@ -7,35 +7,35 @@ dashedName: step-6
# --description--
The name of the cafe is `CAMPER CAFE`. Add an `h1` element within your `main` element. Give it the name of the cafe in capitalized letters to make it stand out.
カフェの名前は `CAMPER CAFE` です。 `h1` 要素を `main` 要素内に 1 つ追加してください。 そこにカフェの名前を、目立つように大文字で入れてください。
# --hints--
You should have an opening `<h1>` tag.
`<h1>` の開始タグが 1 つ必要です。
```js
assert(code.match(/<h1>/i));
```
You should have a closing `</h1>` tag.
終了タグ `</h1>` が 1 つ必要です。
```js
assert(code.match(/<\/h1>/i));
```
You should not change your existing `main` element.
既存の `main` 要素を変更しないでください。
```js
assert($('main').length === 1);
```
Your `h1` element should be nested in your `main` element.
`h1` 要素は `main` 要素の中にネストされている必要があります。
```js
assert($('h1')[0].parentElement.tagName === "MAIN");
```
Your `h1` element should have the text `CAMPER CAFE`.
`h1` 要素は `CAMPER CAFE` というテキストをもつ必要があります。
```js
assert(code.match(/<h1>CAMPER CAFE<\/h1>/));

View File

@ -7,35 +7,35 @@ dashedName: step-7
# --description--
To let visitors know the cafe was founded in 2020, add a `p` element below the `h1` element with the text `Est. 2020`.
カフェが 2020 年にオープンしたということを訪問者に知らせるために、`p` 要素を `h1` 要素の下に追加して、そのテキストを `Est. 2020` にしてください。
# --hints--
You should have an opening `<p>` tag.
`<p>` の開始タグが 1 つ必要です。
```js
assert(code.match(/<p>/i));
```
You should have a closing `</p>` tag.
終了タグ `</p>` が 1 つ必要です。
```js
assert(code.match(/<\/p>/i));
```
You should not change your existing `h1` element. Make sure you did not delete the closing tag.
既存の `h1` 要素を変更しないでください。 終了タグを削除していないか確認してください。
```js
assert($('h1').length === 1);
```
Your `p` element should be below your `h1` element.
`p` 要素は `h1` 要素の下に置く必要があります。
```js
assert($('p')[0].previousElementSibling.tagName === 'H1');
```
Your `p` element should have the text `Est. 2020`.
`p` 要素は `Est. 2020` というテキストをもつ必要があります。
```js
assert(document.querySelector("p").innerText === "Est. 2020");

View File

@ -1,6 +1,6 @@
---
id: 5f344f9c805cd193c33d829c
title: Step 11
title: ステップ 11
challengeType: 0
dashedName: step-11
---
@ -15,7 +15,7 @@ element {
}
```
`h1` 要素の `text-align` プロパティを `center` に設定して、中央に配置してください。
`h1` 要素の `text-align` プロパティを `center` に設定して、中央揃えにしてください。
# --hints--

View File

@ -1,6 +1,6 @@
---
id: 5f344fad8bf01691e71a30eb
title: Step 10
title: ステップ 10
challengeType: 0
dashedName: step-10
---

View File

@ -1,6 +1,6 @@
---
id: 5f344fbc22624a2976425065
title: Step 9
title: ステップ 9
challengeType: 0
dashedName: step-9
---

View File

@ -1,6 +1,6 @@
---
id: 5f344fc1520b6719f2e35605
title: Step 8
title: ステップ 8
challengeType: 0
dashedName: step-8
---

View File

@ -1,6 +1,6 @@
---
id: 5f3477ae34c1239cafe128be
title: Step 13
title: ステップ 13
challengeType: 0
dashedName: step-13
---

View File

@ -1,6 +1,6 @@
---
id: 5f3477ae8466a9a3d2cc953c
title: Step 15
title: ステップ 15
challengeType: 0
dashedName: step-15
---

View File

@ -1,13 +1,13 @@
---
id: 5f3477ae9675db8bb7655b30
title: Step 12
title: ステップ 12
challengeType: 0
dashedName: step-12
---
# --description--
前のステップで、<dfn>要素型セレクター</dfn>を使用して `h1` 要素にスタイルを適用しました。 Center the `h2` and `p` elements by adding a new type selector for each one to the existing `style` element.
前のステップで、<dfn>要素型セレクター</dfn>を使用して `h1` 要素にスタイルを適用しました。 同じ `style` 要素内に、今度は `h2` 要素と `p` 要素にそれぞれ対応する要素型セレクターを新しく追加して、中央揃えにしてください。
# --hints--
@ -18,42 +18,42 @@ const hasH1 = new __helpers.CSSHelp(document).getStyle('h1');
assert(hasH1);
```
You should not add a new `style` tag. Add the new CSS rules to the existing `style` tag.
`style` タグは新しく追加しないでください。 既存の `style` タグの中に、新しい CSS ルールを追加してください。
```js
const hasManyStyleTags = document.querySelectorAll('style').length > 1;
assert(!hasManyStyleTags);
```
You should add a new `h2` selector.
`h2` セレクターを新しく追加してください。
```js
const hasH2 = new __helpers.CSSHelp(document).getStyle('h2');
assert(hasH2);
```
You should add a new `p` selector.
`p` セレクターを新しく追加してください。
```js
const hasP = new __helpers.CSSHelp(document).getStyle('p');
assert(hasP);
```
Your `h1` element should have a `text-align` of `center`.
`h1` 要素の `text-align``center` に設定する必要があります。
```js
const h1TextAlign = new __helpers.CSSHelp(document).getStyle('h1')?.getPropertyValue('text-align');
assert(h1TextAlign === 'center');
```
Your `h2` element should have a `text-align` of `center`.
`h2` 要素の `text-align``center` に設定する必要があります。
```js
const h2TextAlign = new __helpers.CSSHelp(document).getStyle('h2')?.getPropertyValue('text-align');
assert(h2TextAlign === 'center');
```
Your `p` element should have a `text-align` of `center`.
`p` 要素の `text-align``center` に設定する必要があります。
```js
const pTextAlign = new __helpers.CSSHelp(document).getStyle('p')?.getPropertyValue('text-align');

View File

@ -1,6 +1,6 @@
---
id: 5f3477aefa51bfc29327200b
title: Step 14
title: ステップ 14
challengeType: 0
dashedName: step-14
---

View File

@ -1,6 +1,6 @@
---
id: 5f3477cb2e27333b1ab2b955
title: Step 16
title: ステップ 16
challengeType: 0
dashedName: step-16
---

View File

@ -1,6 +1,6 @@
---
id: 5f3477cb303c5cb61b43aa9b
title: Step 18
title: ステップ 18
challengeType: 0
dashedName: step-18
---

View File

@ -1,6 +1,6 @@
---
id: 5f3477cbcb6ba47918c1da92
title: Step 17
title: ステップ 17
challengeType: 0
dashedName: step-17
---

View File

@ -1,6 +1,6 @@
---
id: 5f34a1fd611d003edeafd681
title: Step 19
title: ステップ 19
challengeType: 0
dashedName: step-19
---

View File

@ -1,6 +1,6 @@
---
id: 5f356ed60785e1f3e9850b6e
title: Step 24
title: ステップ 24
challengeType: 0
dashedName: step-24
---

View File

@ -1,6 +1,6 @@
---
id: 5f356ed60a5decd94ab66986
title: Step 22
title: ステップ 22
challengeType: 0
removeComments: false
dashedName: step-22

View File

@ -1,6 +1,6 @@
---
id: 5f356ed6199b0cdef1d2be8f
title: Step 26
title: ステップ 26
challengeType: 0
dashedName: step-26
---

View File

@ -1,6 +1,6 @@
---
id: 5f356ed63c7807a4f1e6d054
title: Step 21
title: ステップ 21
challengeType: 0
dashedName: step-21
---

View File

@ -1,6 +1,6 @@
---
id: 5f356ed63e0fa262326eef05
title: Step 23
title: ステップ 23
challengeType: 0
dashedName: step-23
---

View File

@ -1,6 +1,6 @@
---
id: 5f356ed656a336993abd9f7c
title: Step 25
title: ステップ 25
challengeType: 0
dashedName: step-25
---

View File

@ -1,6 +1,6 @@
---
id: 5f356ed69db0a491745e2bb6
title: Step 27
title: ステップ 27
challengeType: 0
dashedName: step-27
---

View File

@ -1,6 +1,6 @@
---
id: 5f356ed6cf6eab5f15f5cfe6
title: Step 20
title: ステップ 20
challengeType: 0
dashedName: step-20
---

View File

@ -1,6 +1,6 @@
---
id: 5f35e5c4321f818cdc4bed30
title: Step 29
title: ステップ 29
challengeType: 0
dashedName: step-29
---

View File

@ -1,6 +1,6 @@
---
id: 5f35e5c44359872a137bd98f
title: Step 28
title: ステップ 28
challengeType: 0
dashedName: step-28
---

View File

@ -1,6 +1,6 @@
---
id: 5f3c866d0fc037f7311b4ac8
title: Step 38
title: ステップ 38
challengeType: 0
dashedName: step-38
---

View File

@ -1,6 +1,6 @@
---
id: 5f3c866d28d7ad0de6470505
title: Step 32
title: ステップ 32
challengeType: 0
dashedName: step-32
---

View File

@ -1,6 +1,6 @@
---
id: 5f3c866d5414453fc2d7b480
title: Step 31
title: ステップ 31
challengeType: 0
dashedName: step-31
---

View File

@ -1,6 +1,6 @@
---
id: 5f3c866daec9a49519871816
title: Step 30
title: ステップ 30
challengeType: 0
dashedName: step-30
---

View File

@ -1,6 +1,6 @@
---
id: 5f3c866dbf362f99b9a0c6d0
title: Step 37
title: ステップ 37
challengeType: 0
dashedName: step-37
---

View File

@ -1,6 +1,6 @@
---
id: 5f3c866dd0d0275f01d4d847
title: Step 39
title: ステップ 39
challengeType: 0
dashedName: step-39
---

View File

@ -1,6 +1,6 @@
---
id: 5f3c866de7a5b784048f94b1
title: Step 36
title: ステップ 36
challengeType: 0
dashedName: step-36
---

View File

@ -1,6 +1,6 @@
---
id: 5f3cade94c6576e7f7b7953f
title: Step 41
title: ステップ 41
challengeType: 0
dashedName: step-41
---

View File

@ -1,6 +1,6 @@
---
id: 5f3cade9993019e26313fa8e
title: Step 42
title: ステップ 42
challengeType: 0
dashedName: step-42
---

View File

@ -1,6 +1,6 @@
---
id: 5f3cade99dda4e6071a85dfd
title: Step 46
title: ステップ 46
challengeType: 0
dashedName: step-46
---

View File

@ -1,6 +1,6 @@
---
id: 5f3cade9fa77275d9f4efe62
title: Step 40
title: ステップ 40
challengeType: 0
dashedName: step-40
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e01f288a026d709587
title: Step 66
title: ステップ 66
challengeType: 0
dashedName: step-66
---
@ -9,7 +9,7 @@ dashedName: step-66
`hr` 要素を使用して、コンテンツが異なるセクション間に区切り線を表示できます。
First, add an `hr` element between the `p` element with the class `established` and the first `section` element. `hr` 要素は自己終了要素であることに注意してください。
まずは `hr` 要素を 1 つ、`established` というクラスの `p` 要素と最初の `section` 要素の間に追加してください。 `hr` 要素は自己終了要素であることに注意してください。
# --hints--
@ -20,7 +20,7 @@ assert(code.match(/<hr\s?\/?>/i));
assert(!code.match(/<\/hr>/i));
```
You should not change your existing `p` element with the class `established`.
既存の、`established` というクラスの `p` 要素は変更しないでください。
```js
assert($('p.established').length === 1);
@ -32,7 +32,7 @@ assert($('p.established').length === 1);
assert($('main').length === 1);
```
Your `hr` element should be between your `p` element and your `section` element.
`hr` 要素は `p` 要素と `section` 要素の間にある必要があります。
```js
assert($('hr')[0].previousElementSibling.tagName === 'P');

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e03d719d5ac4738993
title: Step 56
title: ステップ 56
challengeType: 0
dashedName: step-56
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e04559b939080db057
title: Step 55
title: ステップ 55
challengeType: 0
dashedName: step-55
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e050279c7a4a7101d3
title: Step 54
title: ステップ 54
challengeType: 0
dashedName: step-54
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e05473f91f948724ab
title: Step 57
title: ステップ 57
challengeType: 0
dashedName: step-57
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e056bdde6ae6892ba2
title: Step 58
title: ステップ 58
challengeType: 0
dashedName: step-58
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e06d34faac0447fc44
title: Step 60
title: ステップ 60
challengeType: 0
dashedName: step-60
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e07276f782bb46b93d
title: Step 63
title: ステップ 63
challengeType: 0
dashedName: step-63
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e0819d4f23ca7285e6
title: Step 48
title: ステップ 48
challengeType: 0
dashedName: step-48
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e087d56ed3ffdc36be
title: Step 61
title: ステップ 61
challengeType: 0
dashedName: step-61
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e0a81099d9a697b550
title: Step 64
title: ステップ 64
challengeType: 0
dashedName: step-64
---

View File

@ -1,6 +1,6 @@
---
id: 5f3ef6e0b431cc215bb16f55
title: Step 65
title: ステップ 65
challengeType: 0
dashedName: step-65
---

Some files were not shown because too many files have changed in this diff Show More