├── .nvmrc ├── .stylelintignore ├── ssr ├── .gitignore ├── tsconfig.json ├── modules.d.ts ├── include.d.ts ├── print.css └── index.ts ├── testing ├── integration │ ├── utils │ │ └── __init__.py │ └── headless │ │ └── __init__.py ├── tests │ └── filechecker │ │ ├── samplefiles-html │ │ ├── zero.gif │ │ ├── png.jpeg │ │ ├── orphan.png │ │ ├── index.html │ │ ├── onhandler.svg │ │ └── script.svg │ │ └── samplefiles-md │ │ ├── index.md │ │ ├── orphan.png │ │ └── circle.svg ├── content │ └── files │ │ ├── en-us │ │ ├── web │ │ │ ├── images │ │ │ │ ├── bad_src │ │ │ │ │ ├── empty.gif │ │ │ │ │ ├── actuallynota.svg │ │ │ │ │ └── actuallynota.png │ │ │ │ ├── florian.png │ │ │ │ ├── images_in_samples │ │ │ │ │ ├── pic.gif │ │ │ │ │ ├── image.png │ │ │ │ │ └── index.html │ │ │ │ ├── srcless │ │ │ │ │ └── index.html │ │ │ │ ├── linked_to │ │ │ │ │ └── index.html │ │ │ │ └── repeated_external_images │ │ │ │ │ └── index.html │ │ │ ├── foo │ │ │ │ ├── screenshot.png │ │ │ │ └── index.html │ │ │ ├── fixable_flaws │ │ │ │ ├── images │ │ │ │ │ ├── fixable.png │ │ │ │ │ └── index.html │ │ │ │ ├── deprecated_macros │ │ │ │ │ └── index.html │ │ │ │ └── bad_pre_tags │ │ │ │ │ └── index.html │ │ │ ├── css │ │ │ │ └── number │ │ │ │ │ └── index.html │ │ │ ├── api │ │ │ │ ├── index.html │ │ │ │ ├── blob │ │ │ │ │ └── index.html │ │ │ │ └── page_visibility_api │ │ │ │ │ └── index.html │ │ │ ├── brokenlinks_markdown │ │ │ │ ├── broken_http_link │ │ │ │ │ └── index.md │ │ │ │ ├── without_locale_prefix │ │ │ │ │ └── index.md │ │ │ │ └── self_links │ │ │ │ │ └── index.md │ │ │ ├── seo_summarized │ │ │ │ └── index.html │ │ │ ├── brokenlinks │ │ │ │ ├── broken_http_link │ │ │ │ │ └── index.html │ │ │ │ ├── without_locale_prefix │ │ │ │ │ └── index.html │ │ │ │ └── self_links │ │ │ │ │ └── index.html │ │ │ ├── fubar │ │ │ │ └── index.html │ │ │ ├── badbcdqueries │ │ │ │ └── index.html │ │ │ ├── wrong_xref_macro │ │ │ │ └── index.html │ │ │ ├── javascript │ │ │ │ └── reference │ │ │ │ │ ├── strict_mode │ │ │ │ │ └── index.html │ │ │ │ │ └── global_objects │ │ │ │ │ └── boolean │ │ │ │ │ └── index.html │ │ │ ├── embeddable │ │ │ │ └── legacy │ │ │ │ │ └── index.md │ │ │ ├── interactiveexample │ │ │ │ └── index.html │ │ │ ├── html_headings │ │ │ │ └── index.html │ │ │ ├── empty_image │ │ │ │ └── index.html │ │ │ ├── heading_links │ │ │ │ └── index.html │ │ │ ├── brokenlinks_repeats │ │ │ │ └── index.html │ │ │ ├── html │ │ │ │ └── element │ │ │ │ │ └── a │ │ │ │ │ └── index.html │ │ │ ├── spec_section_extraction │ │ │ │ └── index.html │ │ │ ├── externallinks │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ └── not_lowercase_anchors │ │ │ │ └── index.html │ │ ├── glossary │ │ │ └── bézier_curve │ │ │ │ └── cubic_bézier_curves_with_grid.png │ │ ├── _redirects.txt │ │ └── learn │ │ │ └── css │ │ │ └── css_layout │ │ │ └── introduction │ │ │ └── flex │ │ │ └── index.html │ │ ├── popularities.json │ │ └── jsondata │ │ └── L10n-JavaScript.json ├── scripts │ └── functional-test.sh └── translated-content │ └── files │ ├── zh-tw │ └── web │ │ └── foo │ │ └── index.html │ └── fr │ └── web │ ├── embeddable │ └── index.html │ └── spec_section_extraction │ └── index.html ├── client ├── src │ ├── telemetry │ │ └── generated │ │ │ └── .gitkeep │ ├── ui │ │ ├── molecules │ │ │ ├── grids │ │ │ │ ├── grids.scss │ │ │ │ └── _standard-page.scss │ │ │ ├── tools-menu │ │ │ │ └── index.scss │ │ │ ├── pagination │ │ │ │ └── index.scss │ │ │ ├── card │ │ │ │ └── index.tsx │ │ │ ├── learn-menu │ │ │ │ └── index.scss │ │ │ ├── maintenance │ │ │ │ └── index.tsx │ │ │ ├── notecards │ │ │ │ └── index.tsx │ │ │ ├── plus-menu │ │ │ │ └── index.scss │ │ │ ├── tabs │ │ │ │ └── index.scss │ │ │ ├── auth-container │ │ │ │ └── index.tsx │ │ │ ├── offline-status-bar │ │ │ │ └── index.scss │ │ │ └── menu │ │ │ │ └── index.scss │ │ ├── atoms │ │ │ ├── page-content │ │ │ │ └── index.scss │ │ │ ├── notification │ │ │ │ ├── index.tsx │ │ │ │ └── index.scss │ │ │ ├── container │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── signup-link │ │ │ │ └── index.scss │ │ │ ├── auth-disabled │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── spinner │ │ │ │ └── index.tsx │ │ │ ├── loading │ │ │ │ └── index.scss │ │ │ ├── login-link │ │ │ │ └── index.scss │ │ │ ├── signout │ │ │ │ └── index.scss │ │ │ ├── logo │ │ │ │ └── index.scss │ │ │ ├── limit-banner │ │ │ │ └── index.scss │ │ │ └── internal-link │ │ │ │ └── index.tsx │ │ ├── base │ │ │ └── _typography.scss │ │ └── _color-palette.scss │ ├── assets │ │ ├── hero-dino.png │ │ ├── fonts │ │ │ ├── Inter.var.woff2 │ │ │ ├── Montserrat-VF.woff2 │ │ │ ├── inter-v3-latin-600.woff │ │ │ ├── Montserrat-SemiBold.woff │ │ │ ├── Montserrat-SemiBold.woff2 │ │ │ ├── inter-v3-latin-600.woff2 │ │ │ ├── inter-v3-latin-regular.woff │ │ │ ├── inter-v3-latin-regular.woff2 │ │ │ └── BarlowCondensed-SemiBold.woff2 │ │ ├── curriculum │ │ │ ├── scrim-bg.png │ │ │ ├── landing-scrim.png │ │ │ └── scrim-play.svg │ │ ├── community │ │ │ ├── video-thumbnail.png │ │ │ ├── quote-end.svg │ │ │ ├── quote-start.svg │ │ │ ├── quote-end-dark.svg │ │ │ ├── quote-start-dark.svg │ │ │ ├── community-calls.svg │ │ │ └── community-calls-dark.svg │ │ ├── about │ │ │ ├── line-dot.svg │ │ │ ├── sparkle.svg │ │ │ ├── accurate.svg │ │ │ ├── accurate-sm.svg │ │ │ ├── text-box-check-outline.svg │ │ │ ├── dot.svg │ │ │ ├── dot-dark.svg │ │ │ └── handshake.svg │ │ ├── icons │ │ │ ├── small-arrow.svg │ │ │ ├── cancel.svg │ │ │ ├── filter.svg │ │ │ ├── chevron.svg │ │ │ ├── curriculum-next.svg │ │ │ ├── curriculum-prev.svg │ │ │ ├── caret.svg │ │ │ ├── checkmark.svg │ │ │ ├── note-info.svg │ │ │ ├── yes.svg │ │ │ ├── menu.svg │ │ │ ├── next.svg │ │ │ ├── information.svg │ │ │ ├── search.svg │ │ │ ├── previous.svg │ │ │ ├── bookmark.svg │ │ │ ├── mobile.svg │ │ │ ├── send.svg │ │ │ ├── twitter-x.svg │ │ │ ├── yes-circle.svg │ │ │ ├── bookmark-filled.svg │ │ │ ├── feed.svg │ │ │ ├── highlight.svg │ │ │ ├── no.svg │ │ │ ├── queue.svg │ │ │ ├── nodejs.svg │ │ │ ├── nonstandard.svg │ │ │ ├── note-warning.svg │ │ │ ├── more.svg │ │ │ ├── critical.svg │ │ │ ├── experimental.svg │ │ │ ├── partial.svg │ │ │ ├── queued.svg │ │ │ ├── baseline │ │ │ │ ├── high.svg │ │ │ │ ├── high-dark.svg │ │ │ │ ├── limited.svg │ │ │ │ ├── limited-dark.svg │ │ │ │ ├── browser-check.svg │ │ │ │ ├── browser-cross.svg │ │ │ │ └── low.svg │ │ │ ├── trash-filled.svg │ │ │ ├── edit-filled.svg │ │ │ ├── preview.svg │ │ │ ├── theme-dark.svg │ │ │ ├── footnote.svg │ │ │ ├── warning.svg │ │ │ ├── note-deprecated.svg │ │ │ ├── chrome.svg │ │ │ ├── sidebar.svg │ │ │ ├── theme-os-default.svg │ │ │ ├── external.svg │ │ │ ├── ellipses.svg │ │ │ ├── unknown.svg │ │ │ ├── menu-filled.svg │ │ │ ├── feedback.svg │ │ │ ├── ai-help.svg │ │ │ ├── message.svg │ │ │ ├── webview.svg │ │ │ ├── bluesky.svg │ │ │ ├── edit.svg │ │ │ ├── disabled.svg │ │ │ ├── server.svg │ │ │ ├── curriculum-started-underline.svg │ │ │ ├── progress-helper.svg │ │ │ ├── quote.svg │ │ │ ├── return.svg │ │ │ └── opera.svg │ │ ├── lines.svg │ │ ├── m-logo.svg │ │ └── m-icon.svg │ ├── lit │ │ ├── interactive-example │ │ │ ├── tabs.panel.scss │ │ │ └── tabs.wrapper.scss │ │ ├── play │ │ │ ├── runner.scss │ │ │ ├── types.d.ts │ │ │ └── console.scss │ │ ├── community │ │ │ └── types.d.ts │ │ ├── curriculum │ │ │ └── scrim-inline.global.css │ │ ├── glean-mixin.js │ │ ├── modules.d.ts │ │ └── compat │ │ │ └── index-desktop-xl.scss │ ├── types │ │ ├── playground.ts │ │ ├── theme.ts │ │ ├── notecards.ts │ │ └── notifications.ts │ ├── plus │ │ ├── offer-overview │ │ │ ├── offer-overview-subscribe │ │ │ │ └── stripe.tsx │ │ │ └── index.tsx │ │ ├── ai-help │ │ │ ├── utils.ts │ │ │ └── constants.tsx │ │ └── common │ │ │ └── plus-tabs.tsx │ ├── translations │ │ └── index.scss │ ├── document │ │ ├── mathml-polyfill │ │ │ ├── font │ │ │ │ └── STIXTwoMath-Regular.woff2 │ │ │ ├── mathml-font.scss │ │ │ └── polyfill.tsx │ │ ├── toolbar │ │ │ └── edit-actions.scss │ │ ├── languages.css │ │ └── code │ │ │ └── render-md.ts │ ├── homepage │ │ ├── types.tsx │ │ └── index.scss │ ├── writers-homepage │ │ ├── viewed-documents.scss │ │ └── index.scss │ ├── page-not-found │ │ └── index.scss │ ├── curriculum │ │ ├── topic-icon.scss │ │ ├── prev-next.scss │ │ └── body.tsx │ ├── newsletter │ │ └── index.scss │ ├── constants.ts │ ├── app.test.tsx │ └── flaw-utils.js ├── public │ ├── favicon.ico │ ├── assets │ │ ├── afree.png │ │ ├── ai-help.png │ │ ├── avatar.png │ │ ├── offline.png │ │ ├── updates.png │ │ ├── app-dl-ms.png │ │ ├── collections.png │ │ ├── playground.png │ │ ├── mdn_contributor.png │ │ ├── notifications_light.png │ │ ├── ai-help │ │ │ ├── ai-help_dark.png │ │ │ └── ai-help_light.png │ │ ├── plus-docs │ │ │ ├── updates │ │ │ │ ├── updates.png │ │ │ │ ├── collections.png │ │ │ │ ├── updates_bcd.png │ │ │ │ ├── updates_filter.png │ │ │ │ ├── updates_search.png │ │ │ │ └── updates_collection.png │ │ │ ├── ai-help │ │ │ │ ├── history-banner.png │ │ │ │ ├── issue-template.png │ │ │ │ ├── login-signup.png │ │ │ │ ├── rate-answers.png │ │ │ │ ├── history-settings.png │ │ │ │ ├── report-feedback.png │ │ │ │ ├── code-examples-queue.png │ │ │ │ ├── code-examples-playground.png │ │ │ │ ├── example-question-editing.png │ │ │ │ └── example-question-answering.png │ │ │ ├── collections │ │ │ │ ├── mobile-menu.png │ │ │ │ ├── mobile-add-note.png │ │ │ │ ├── mobile-plus-menu.png │ │ │ │ ├── mobile-save-page.png │ │ │ │ ├── mobile-saved-page.png │ │ │ │ ├── desktop-remove-saved.png │ │ │ │ ├── desktop-saving-page.png │ │ │ │ ├── mobile-burger-menu.png │ │ │ │ ├── collections-dashboard.png │ │ │ │ ├── desktop-page-add-note.png │ │ │ │ ├── desktop-collections-fva.png │ │ │ │ ├── desktop-collections-sort.png │ │ │ │ ├── desktop-collections-undo.png │ │ │ │ ├── desktop-page-dialog-save.png │ │ │ │ ├── desktop-page-open-dialog.png │ │ │ │ ├── mobile-collections-undo.png │ │ │ │ ├── mobile-save-page-step-one.png │ │ │ │ ├── desktop-collections-filter.png │ │ │ │ ├── desktop-remove-saved-delete.png │ │ │ │ ├── mobile-collections-fva-undo.png │ │ │ │ ├── mobile-open-article-actions.png │ │ │ │ ├── desktop-collections-delete-fva.png │ │ │ │ ├── desktop-collections-edit-menu.png │ │ │ │ ├── desktop-collections-user-menu.png │ │ │ │ ├── mobile-collections-dashboard.png │ │ │ │ ├── mobile-collections-menu-item.png │ │ │ │ ├── desktop-collections-edit-dialog.png │ │ │ │ ├── mobile-collections-delete-entry.png │ │ │ │ ├── desktop-collections-three-dot-menu.png │ │ │ │ ├── mobile-collections-dashboard-edit.png │ │ │ │ ├── desktop-collections-dashboard-delete.png │ │ │ │ ├── desktop-collections-edit-dialog-add-note.png │ │ │ │ ├── mobile-collections-dashboard-edit-entry.png │ │ │ │ ├── mobile-collections-dashboard-three-dots.png │ │ │ │ └── mobile-collections-dashboard-delete-entry.png │ │ │ ├── notifications │ │ │ │ ├── watch-list.png │ │ │ │ ├── watch-page.png │ │ │ │ ├── unwatch-page.png │ │ │ │ ├── star-notification.png │ │ │ │ ├── unwatch-dashboard.png │ │ │ │ ├── bulk-unwatch-dashboard.png │ │ │ │ ├── notifications-user-menu.png │ │ │ │ ├── mobile-notifications-user-menu.png │ │ │ │ └── access-notifications-from-main-menu.png │ │ │ ├── playground │ │ │ │ ├── playground-menu.png │ │ │ │ ├── playground-example.png │ │ │ │ └── playground-sample.png │ │ │ └── offline │ │ │ │ ├── desktop-offline-clear-data.png │ │ │ │ ├── desktop-offline-user-menu.png │ │ │ │ ├── desktop-offline-manual-update.png │ │ │ │ ├── desktop-offline-enable-offline.png │ │ │ │ └── desktop-offline-enable-auto-update.png │ │ ├── observatory │ │ │ ├── results-icon.svg │ │ │ ├── stars.svg │ │ │ ├── tooltip-arrow.svg │ │ │ └── pass-icon.svg │ │ └── curriculum │ │ │ └── curriculum-topic-standards.svg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-48x48.png │ ├── favicon-64x64.png │ ├── apple-touch-icon.png │ ├── favicon-128x128.png │ ├── favicon-150x150.png │ ├── favicon-192x192.png │ ├── favicon-512x512.png │ ├── mdn-social-share.png │ ├── favicon-48x48-flaws.png │ ├── favicon-48x48-flawless.png │ ├── favicon-48x48-flaws-fixable.png │ ├── opensearch.xml │ ├── manifest.json │ ├── favicon.svg │ └── index.html ├── pwa │ ├── README.md │ ├── src │ │ └── caches.ts │ └── tsconfig.json ├── config │ ├── webpack │ │ └── persistentCache │ │ │ └── createEnvironmentHash.js │ └── jest │ │ ├── cssTransform.js │ │ ├── rawTransform.js │ │ └── babelTransform.js └── jest-setup.ts ├── markdown ├── .gitignore ├── index.ts ├── utils │ └── index.ts ├── localizations │ ├── ja.json │ ├── ko.json │ ├── zh-CN.json │ ├── zh-TW.json │ ├── de.json │ ├── en-US.json │ ├── fr.json │ ├── pl.json │ ├── pt-BR.json │ ├── es.json │ └── ru.json └── h2m │ └── index.ts ├── kumascript ├── tests │ ├── fixtures │ │ ├── server │ │ │ ├── macros │ │ │ │ ├── t3.ejs │ │ │ │ ├── t1.ejs │ │ │ │ ├── reqvar.ejs │ │ │ │ ├── reqlocale.ejs │ │ │ │ ├── broken2.ejs │ │ │ │ ├── json.ejs │ │ │ │ ├── json_unescaped.ejs │ │ │ │ ├── reqvar-json.ejs │ │ │ │ ├── template-exec-template.ejs │ │ │ │ ├── broken3.ejs │ │ │ │ ├── autorequire-used.ejs │ │ │ │ ├── template-exec.ejs │ │ │ │ ├── t2.ejs │ │ │ │ ├── library1-used.ejs │ │ │ │ ├── library1.ejs │ │ │ │ ├── autorequire-lib1.ejs │ │ │ │ ├── memcache-user.ejs │ │ │ │ └── require-used.ejs │ │ │ ├── documents │ │ │ │ ├── 시작하기.txt │ │ │ │ ├── 시작하기-expected.txt │ │ │ │ ├── template-exec.txt │ │ │ │ ├── memcache-expected.txt │ │ │ │ ├── template-exec-expected.txt │ │ │ │ ├── autorequire-expected.txt │ │ │ │ ├── autorequire.txt │ │ │ │ ├── memcache.txt │ │ │ │ ├── require-test.txt │ │ │ │ ├── require-test-expected.txt │ │ │ │ ├── library-test-expected.txt │ │ │ │ ├── document2.txt │ │ │ │ ├── library-test.txt │ │ │ │ ├── document2-expected.txt │ │ │ │ ├── request-variables-expected.txt │ │ │ │ └── request-variables.txt │ │ │ └── homepage-expected.html │ │ ├── render │ │ │ ├── macros │ │ │ │ ├── echo.ejs │ │ │ │ ├── undefined.ejs │ │ │ │ ├── env.ejs │ │ │ │ ├── asyncMacro.ejs │ │ │ │ ├── syntax.ejs │ │ │ │ ├── throw.ejs │ │ │ │ ├── includeError.ejs │ │ │ │ └── bar.ejs │ │ │ ├── testcase1 │ │ │ │ ├── macros │ │ │ │ │ ├── test.ejs │ │ │ │ │ └── PlainText.ejs │ │ │ │ ├── input │ │ │ │ └── output │ │ │ ├── syntax3 │ │ │ ├── testcase2 │ │ │ │ ├── macros │ │ │ │ │ ├── 頁尾附註.ejs │ │ │ │ │ ├── HelloWorld.ejs │ │ │ │ │ ├── ParenTastic.ejs │ │ │ │ │ ├── macrowithjson.ejs │ │ │ │ │ ├── Alpha_Macro_123.ejs │ │ │ │ │ ├── Bracepocalypse.ejs │ │ │ │ │ ├── MacroUsingParams.ejs │ │ │ │ │ └── multi-line-macro.ejs │ │ │ │ ├── output_selective_remove │ │ │ │ └── output │ │ │ ├── testcase3 │ │ │ │ ├── macros │ │ │ │ │ └── jsonify.ejs │ │ │ │ └── output │ │ │ ├── testcase4 │ │ │ │ └── macros │ │ │ │ │ └── jsonify.ejs │ │ │ ├── syntax4 │ │ │ ├── syntax2 │ │ │ └── syntax1 │ │ └── templates │ │ │ ├── macros │ │ │ ├── Test2.ejs │ │ │ ├── test1.ejs │ │ │ └── async.ejs │ │ │ ├── duplicate_macros │ │ │ ├── dup │ │ │ │ ├── test.ejs │ │ │ │ └── test.json │ │ │ └── test.ejs │ │ │ └── empty_macro_dir │ │ │ └── README │ └── macros │ │ ├── fixtures │ │ ├── apiref │ │ │ └── groupdata.json │ │ ├── listgroups │ │ │ └── groupdata.json │ │ └── compat │ │ │ ├── prefixes.json │ │ │ └── alternative_name.json │ │ ├── Deprecated.test.ts │ │ └── svgattr.test.ts ├── macros │ ├── Non-standard_Inline.ejs │ ├── Next.ejs │ ├── Previous.ejs │ ├── NextMenu.ejs │ ├── PreviousMenu.ejs │ ├── PreviousNext.ejs │ ├── experimental_inline.ejs │ ├── SVGAttr.ejs │ ├── CSSSyntax.ejs │ ├── LandingPageListSubpages.ejs │ ├── MathMLElement.ejs │ ├── Glossary.ejs │ ├── xref_cssinherited.ejs │ ├── xref_csscomputed.ejs │ ├── HTTPStatus.ejs │ ├── httpheader.ejs │ ├── xref_cssinitial.ejs │ ├── CSP.ejs │ ├── EmbedYouTube.ejs │ ├── HTTPMethod.ejs │ ├── LiveSampleLink.ejs │ ├── JSFiddleEmbed.ejs │ ├── QuickLinksWithSubpages.ejs │ └── propertiesbox.ejs └── README.md ├── .gitattributes ├── .release-please-manifest.json ├── deployer └── src │ └── deployer │ ├── __init__.py │ └── constants.py ├── assets ├── nonprod │ └── robots.txt └── prod │ └── robots.txt ├── Procfile.start ├── Procfile.rari ├── cloud-function ├── Procfile ├── .gitignore ├── src │ ├── constants.ts │ ├── canonicals.ts │ ├── middlewares │ │ ├── not-found.ts │ │ └── stripForwardedHostHeaders.ts │ ├── index.ts │ └── handlers │ │ ├── proxy-pong.ts │ │ ├── proxy-telemetry.ts │ │ └── proxy-api.ts └── .env-dist ├── Procfile.dev ├── libs ├── languages │ ├── index.d.ts │ └── package.json ├── pong │ ├── cc2ip.d.ts │ ├── index.d.ts │ ├── index.js │ ├── image.d.ts │ ├── image.js │ ├── package.json │ ├── validate-cc2ip.js │ ├── coding.d.ts │ └── types.d.ts ├── fundamental-redirects │ ├── index.d.ts │ └── package.json ├── locale-utils │ ├── index.d.ts │ └── package.json ├── slug-utils │ ├── index.d.ts │ └── package.json ├── types │ ├── package.json │ ├── core.ts │ └── hydration.ts ├── env │ └── package.json ├── constants │ └── package.json └── play │ ├── tsconfig.json │ └── package.json ├── server ├── filename.ts └── types.ts ├── Procfile.rari.dev ├── tsconfig.dist.json ├── .flake8 ├── playwright.config.js ├── .eslintignore ├── type-fixes └── front-matter.ts ├── .editorconfig ├── .prettierrc ├── .github └── workflows │ ├── labeler.yml │ ├── new-issues.yml │ ├── glean-probe-scraper.yml │ ├── mark-as-idle-issues-pr.yml │ └── pr-rebase-needed.yml ├── .env-dist ├── jest.config.json ├── CODE_OF_CONDUCT.md └── content └── index.ts /.nvmrc: -------------------------------------------------------------------------------- 1 | v22 2 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | **/*.css 2 | -------------------------------------------------------------------------------- /ssr/.gitignore: -------------------------------------------------------------------------------- 1 | include.ts 2 | -------------------------------------------------------------------------------- /testing/integration/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/telemetry/generated/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /markdown/.gitignore: -------------------------------------------------------------------------------- 1 | __image_snapshots__/ 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/t3.ejs: -------------------------------------------------------------------------------- 1 | t3 2 | -------------------------------------------------------------------------------- /testing/tests/filechecker/samplefiles-html/zero.gif: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | build/** linguist-generated=false 2 | 3 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/t1.ejs: -------------------------------------------------------------------------------- 1 | foo 2 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/images/bad_src/empty.gif: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.release-please-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | ".": "5.1.2" 3 | } 4 | -------------------------------------------------------------------------------- /deployer/src/deployer/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.3.0" 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/echo.ejs: -------------------------------------------------------------------------------- 1 | <%= $0 -%> 2 | -------------------------------------------------------------------------------- /assets/nonprod/robots.txt: -------------------------------------------------------------------------------- 1 | User-Agent: * 2 | 3 | Disallow: / 4 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/undefined.ejs: -------------------------------------------------------------------------------- 1 | <%= x -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/templates/macros/Test2.ejs: -------------------------------------------------------------------------------- 1 | <%= n+1 -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/templates/macros/test1.ejs: -------------------------------------------------------------------------------- 1 | <%= 1 -%> 2 | -------------------------------------------------------------------------------- /Procfile.start: -------------------------------------------------------------------------------- 1 | server: yarn start:server 2 | web: yarn start:client 3 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/env.ejs: -------------------------------------------------------------------------------- 1 | <%= env.x + env.y -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/reqvar.ejs: -------------------------------------------------------------------------------- 1 | <%= env[$0] %> 2 | -------------------------------------------------------------------------------- /Procfile.rari: -------------------------------------------------------------------------------- 1 | server: yarn start:rari-server 2 | web: yarn start:client 3 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/시작하기.txt: -------------------------------------------------------------------------------- 1 | * 시작하기 2 | * {{t1}} 3 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/reqlocale.ejs: -------------------------------------------------------------------------------- 1 | <%= env.locale %> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/templates/duplicate_macros/dup/test.ejs: -------------------------------------------------------------------------------- 1 | <%= 2 %> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/templates/duplicate_macros/dup/test.json: -------------------------------------------------------------------------------- 1 | [{}] 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/templates/duplicate_macros/test.ejs: -------------------------------------------------------------------------------- 1 | <%= 1 %> 2 | -------------------------------------------------------------------------------- /cloud-function/Procfile: -------------------------------------------------------------------------------- 1 | proxy: npm run proxy 2 | server: npm run server:watch 3 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/시작하기-expected.txt: -------------------------------------------------------------------------------- 1 | * 시작하기 2 | * foo 3 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/broken2.ejs: -------------------------------------------------------------------------------- 1 | <%= ### while class -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/json.ejs: -------------------------------------------------------------------------------- 1 | <%= JSON.stringify( $$ ) %> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase1/macros/test.ejs: -------------------------------------------------------------------------------- 1 | This macro is plain text. 2 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/images/bad_src/actuallynota.svg: -------------------------------------------------------------------------------- 1 |
Not SVG 2 | -------------------------------------------------------------------------------- /kumascript/macros/Non-standard_Inline.ejs: -------------------------------------------------------------------------------- 1 | <%- await template("NonStandardBadge", [1]) %> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/syntax3: -------------------------------------------------------------------------------- 1 | Syntax error: ends with an unfinished macro {{ 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase1/macros/PlainText.ejs: -------------------------------------------------------------------------------- 1 | (This macro is plain text) -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/頁尾附註.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase3/macros/jsonify.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase4/macros/jsonify.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/json_unescaped.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify( $$ ) %> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/reqvar-json.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify(env[$0]) %> 2 | -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon.ico -------------------------------------------------------------------------------- /client/src/ui/molecules/grids/grids.scss: -------------------------------------------------------------------------------- 1 | @use "./document-page"; 2 | @use "./standard-page"; 3 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/asyncMacro.ejs: -------------------------------------------------------------------------------- 1 | <%= await env.after(500, 'yay!') -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/syntax4: -------------------------------------------------------------------------------- 1 | Syntax error: ends with an unfinished macro {{ test( 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/HelloWorld.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/ParenTastic.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/macrowithjson.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/template-exec-template.ejs: -------------------------------------------------------------------------------- 1 | The result was a <%= $0 %>! 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/Alpha_Macro_123.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/Bracepocalypse.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/MacroUsingParams.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/macros/multi-line-macro.ejs: -------------------------------------------------------------------------------- 1 | <%- JSON.stringify($$) -%> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/broken3.ejs: -------------------------------------------------------------------------------- 1 | <% throw new Error("this macro throws"); %> 2 | -------------------------------------------------------------------------------- /client/public/assets/afree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/afree.png -------------------------------------------------------------------------------- /client/public/assets/ai-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/ai-help.png -------------------------------------------------------------------------------- /client/public/assets/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/avatar.png -------------------------------------------------------------------------------- /client/public/assets/offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/offline.png -------------------------------------------------------------------------------- /client/public/assets/updates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/updates.png -------------------------------------------------------------------------------- /client/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-16x16.png -------------------------------------------------------------------------------- /client/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-32x32.png -------------------------------------------------------------------------------- /client/public/favicon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-48x48.png -------------------------------------------------------------------------------- /client/public/favicon-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-64x64.png -------------------------------------------------------------------------------- /client/src/assets/hero-dino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/hero-dino.png -------------------------------------------------------------------------------- /client/src/lit/interactive-example/tabs.panel.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | flex: 1; 3 | min-height: 0; 4 | } 5 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/syntax.ejs: -------------------------------------------------------------------------------- 1 | <% ### syntax error: this macro won't compile ### %> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/throw.ejs: -------------------------------------------------------------------------------- 1 | <% throw new Error('artisanally thrown error'); %> 2 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/autorequire-used.ejs: -------------------------------------------------------------------------------- 1 | The result is a <%= test_api.result($0) %> 2 | -------------------------------------------------------------------------------- /client/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/apple-touch-icon.png -------------------------------------------------------------------------------- /client/public/assets/app-dl-ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/app-dl-ms.png -------------------------------------------------------------------------------- /client/public/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-128x128.png -------------------------------------------------------------------------------- /client/public/favicon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-150x150.png -------------------------------------------------------------------------------- /client/public/favicon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-192x192.png -------------------------------------------------------------------------------- /client/public/favicon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-512x512.png -------------------------------------------------------------------------------- /client/public/mdn-social-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/mdn-social-share.png -------------------------------------------------------------------------------- /client/src/lit/play/runner.scss: -------------------------------------------------------------------------------- 1 | iframe { 2 | border: none; 3 | height: 100%; 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/template-exec.ejs: -------------------------------------------------------------------------------- 1 | <%= template('template-exec-template', [$0]) %> 2 | -------------------------------------------------------------------------------- /client/public/assets/collections.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/collections.png -------------------------------------------------------------------------------- /client/public/assets/playground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/playground.png -------------------------------------------------------------------------------- /client/public/favicon-48x48-flaws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-48x48-flaws.png -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/macros/t2.ejs: -------------------------------------------------------------------------------- 1 | <%= parseInt(arguments[0]) + parseInt(arguments[1]) %> 2 | -------------------------------------------------------------------------------- /client/src/assets/fonts/Inter.var.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/fonts/Inter.var.woff2 -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/syntax2: -------------------------------------------------------------------------------- 1 | Trailing comma in the argument list is a syntax error. 2 | 3 | {{ add(1,) }} 4 | -------------------------------------------------------------------------------- /client/public/assets/mdn_contributor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/mdn_contributor.png -------------------------------------------------------------------------------- /client/public/favicon-48x48-flawless.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-48x48-flawless.png -------------------------------------------------------------------------------- /client/src/assets/curriculum/scrim-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/curriculum/scrim-bg.png -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/template-exec.txt: -------------------------------------------------------------------------------- 1 | Testing a library: 2 | 3 | * {{ template-exec('SUCCESS') }} 4 | -------------------------------------------------------------------------------- /markdown/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./utils/index.js"; 2 | export * from "./m2h/index.js"; 3 | export * from "./h2m/index.js"; 4 | -------------------------------------------------------------------------------- /client/public/assets/notifications_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/notifications_light.png -------------------------------------------------------------------------------- /client/src/assets/fonts/Montserrat-VF.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/fonts/Montserrat-VF.woff2 -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/includeError.ejs: -------------------------------------------------------------------------------- 1 | <%= await template("throw") -%> 2 | <%= await template("nope") -%> 3 | 4 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/memcache-expected.txt: -------------------------------------------------------------------------------- 1 | This is a test of a template using Memcache: 2 | 3 | * true 4 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/template-exec-expected.txt: -------------------------------------------------------------------------------- 1 | Testing a library: 2 | 3 | * The result was a SUCCESS! 4 | -------------------------------------------------------------------------------- /client/public/assets/ai-help/ai-help_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/ai-help/ai-help_dark.png -------------------------------------------------------------------------------- /client/public/assets/ai-help/ai-help_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/ai-help/ai-help_light.png -------------------------------------------------------------------------------- /client/public/favicon-48x48-flaws-fixable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/favicon-48x48-flaws-fixable.png -------------------------------------------------------------------------------- /client/src/assets/community/video-thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/community/video-thumbnail.png -------------------------------------------------------------------------------- /client/src/assets/curriculum/landing-scrim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/curriculum/landing-scrim.png -------------------------------------------------------------------------------- /client/src/assets/fonts/inter-v3-latin-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/fonts/inter-v3-latin-600.woff -------------------------------------------------------------------------------- /client/src/types/playground.ts: -------------------------------------------------------------------------------- 1 | export interface QueueEntry { 2 | key: number; 3 | id: string; 4 | lang?: string | null; 5 | } 6 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/autorequire-expected.txt: -------------------------------------------------------------------------------- 1 | This exercises autorequire: 2 | 3 | * The result is a SUCCESS! 4 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/autorequire.txt: -------------------------------------------------------------------------------- 1 | This exercises autorequire: 2 | 3 | * {{ autorequire-used('SUCCESS') }} 4 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/memcache.txt: -------------------------------------------------------------------------------- 1 | This is a test of a template using Memcache: 2 | 3 | * {{ memcache-user() }} 4 | -------------------------------------------------------------------------------- /testing/tests/filechecker/samplefiles-md/index.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [Circle](circle.svg) 4 | -------------------------------------------------------------------------------- /Procfile.dev: -------------------------------------------------------------------------------- 1 | server: yarn start:server 2 | type-check: cd client && tsc --noEmit --watch 3 | web: yarn start:client 4 | ssr: yarn watch:ssr 5 | -------------------------------------------------------------------------------- /client/src/assets/fonts/Montserrat-SemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/fonts/Montserrat-SemiBold.woff -------------------------------------------------------------------------------- /client/src/assets/fonts/Montserrat-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/fonts/Montserrat-SemiBold.woff2 -------------------------------------------------------------------------------- /client/src/assets/fonts/inter-v3-latin-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/src/assets/fonts/inter-v3-latin-600.woff2 -------------------------------------------------------------------------------- /client/src/lit/community/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface ContributorData { 2 | name: string; 3 | github: string; 4 | org?: string; 5 | } 6 | -------------------------------------------------------------------------------- /client/src/types/theme.ts: -------------------------------------------------------------------------------- 1 | type Scheme = "dark" | "light"; 2 | type Theme = Scheme | "os-default"; 3 | 4 | export type { Scheme, Theme }; 5 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/macros/bar.ejs: -------------------------------------------------------------------------------- 1 | (<%= await template('echo', ['included']) -%> 2 | <%= await template('echo', ['words']) -%>) -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/homepage-expected.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |Hello from KumaScript!
4 | 5 | 6 | -------------------------------------------------------------------------------- /libs/languages/index.d.ts: -------------------------------------------------------------------------------- 1 | declare const _exports: RecordYou've reached the number test page.
8 | -------------------------------------------------------------------------------- /client/public/assets/plus-docs/collections/desktop-collections-delete-fva.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/plus-docs/collections/desktop-collections-delete-fva.png -------------------------------------------------------------------------------- /client/public/assets/plus-docs/collections/desktop-collections-edit-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/plus-docs/collections/desktop-collections-edit-menu.png -------------------------------------------------------------------------------- /client/public/assets/plus-docs/collections/desktop-collections-user-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/plus-docs/collections/desktop-collections-user-menu.png -------------------------------------------------------------------------------- /client/public/assets/plus-docs/collections/mobile-collections-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/plus-docs/collections/mobile-collections-dashboard.png -------------------------------------------------------------------------------- /client/public/assets/plus-docs/collections/mobile-collections-menu-item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/plus-docs/collections/mobile-collections-menu-item.png -------------------------------------------------------------------------------- /client/public/assets/plus-docs/offline/desktop-offline-enable-auto-update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mdn/yari/HEAD/client/public/assets/plus-docs/offline/desktop-offline-enable-auto-update.png -------------------------------------------------------------------------------- /client/src/page-not-found/index.scss: -------------------------------------------------------------------------------- 1 | @use "sass:math"; 2 | 3 | .page-not-found { 4 | .fallback-document { 5 | .fallback-link { 6 | font-size: 1rem; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /client/src/ui/atoms/notification/index.tsx: -------------------------------------------------------------------------------- 1 | import "./index.scss"; 2 | 3 | export default function Notification({ children }) { 4 | returnThis is a list of all the APIs that are available.
7 | 8 |This is going to be the summary. But this is not.
7 | -------------------------------------------------------------------------------- /client/src/assets/icons/curriculum-next.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /client/src/assets/icons/curriculum-prev.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/server/documents/library-test-expected.txt: -------------------------------------------------------------------------------- 1 | Testing a library: 2 | 3 | * First: The result was A HUGE SUCCESS! 4 | * Second: The result was A FOLLOWUP SUCCESS! 5 | * Third: The result was AN ENCORE! 6 | -------------------------------------------------------------------------------- /server/types.ts: -------------------------------------------------------------------------------- 1 | export interface FlawFilters { 2 | popularity?: string; 3 | fixableFlaws?: string; 4 | flaws?: string; 5 | search_flaws?: string | Array{{Compat}}
10 | -------------------------------------------------------------------------------- /testing/tests/filechecker/samplefiles-html/script.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /client/src/curriculum/prev-next.scss: -------------------------------------------------------------------------------- 1 | .curriculum-prev-next { 2 | display: flex; 3 | flex-wrap: wrap; 4 | gap: 0 1rem; 5 | justify-content: space-between; 6 | margin-top: 2rem; 7 | width: 100%; 8 | 9 | a { 10 | margin: 0.5rem 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /client/src/newsletter/index.scss: -------------------------------------------------------------------------------- 1 | .section-newsletter { 2 | margin: 0 auto; 3 | max-width: 35rem; 4 | padding: 2rem; 5 | 6 | input[type="email"], 7 | button { 8 | width: 100%; 9 | } 10 | 11 | form { 12 | margin-bottom: 2rem; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /libs/constants/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@yari-internal/constants", 3 | "version": "0.0.1", 4 | "private": true, 5 | "license": "MPL-2.0", 6 | "type": "module", 7 | "exports": "./index.js", 8 | "main": "index.js", 9 | "types": "index.d.ts" 10 | } 11 | -------------------------------------------------------------------------------- /libs/languages/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@yari-internal/languages", 3 | "version": "0.0.1", 4 | "private": true, 5 | "license": "MPL-2.0", 6 | "type": "module", 7 | "exports": "./index.js", 8 | "main": "index.js", 9 | "types": "index.d.ts" 10 | } 11 | -------------------------------------------------------------------------------- /playwright.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | use: { 3 | channel: "chrome", 4 | // See more interesting options at https://playwright.dev/docs/test-configuration/ 5 | // viewport: { width: 1280, height: 720 }, 6 | // video: "retain-on-failure", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /libs/play/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["*.js"], 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "strict": true, 7 | "declaration": true, 8 | "emitDeclarationOnly": true, 9 | "esModuleInterop": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/api/blob/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Blob 3 | slug: Web/API/Blob 4 | tags: 5 | - API 6 | - Blob 7 | - File API 8 | - Interface 9 | - Raw 10 | - Reference 11 | - data 12 | --- 13 |You've reached the Blob test page.
14 | -------------------------------------------------------------------------------- /client/src/ui/atoms/notification/index.scss: -------------------------------------------------------------------------------- 1 | @use "../../vars" as *; 2 | 3 | .notification-container { 4 | background-color: $mdn-color-violet-90; 5 | color: #fff; 6 | padding: 12px; 7 | text-align: center; 8 | 9 | p { 10 | margin-bottom: 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/fixable_flaws/deprecated_macros/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deprecated macros 3 | slug: Web/Fixable_Flaws/Deprecated_macros 4 | --- 5 | 6 |Don't use macros no more
7 | 8 |
7 | Promise is actually not a Web API: {{DOMxRef("Promise")}}
8 | It should have used the jsxref macro.
9 |
Fixable...
7 |
8 |
9 | Hopeless...
10 |
11 |
--------------------------------------------------------------------------------
/kumascript/macros/SVGAttr.ejs:
--------------------------------------------------------------------------------
1 | <%
2 | /* one parameter: attribute name */
3 | var slug = mdn.localString({
4 | "de": "Attribut",
5 | "en-US": "Attribute",
6 | });
7 |
8 | var URL = "/" + env.locale + "/docs/Web/SVG/" + slug + "/" + $0;
9 | %>
10 | <%= $0 %>
11 |
--------------------------------------------------------------------------------
/client/src/assets/icons/previous.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/client/src/ui/molecules/pagination/index.scss:
--------------------------------------------------------------------------------
1 | @use "../../../ui/vars" as *;
2 |
3 | .pagination {
4 | align-items: center;
5 | display: flex;
6 | gap: 1rem;
7 | justify-content: center;
8 | padding: 1rem 0;
9 |
10 | &-label {
11 | font-size: var(--type-smaller-font-size);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/kumascript/tests/fixtures/render/testcase1/input:
--------------------------------------------------------------------------------
1 | Here is \{{ some more text \}} with double braces, but not a macro.
2 | But, we should also \\{ be able to use \ backslashes \\wherever \\\we like.
3 | Here is { some text } with braces, but not a macro.
4 | This is a {{ PlainText }} macro and {{PlainText()}} macro.
5 |
--------------------------------------------------------------------------------
/client/pwa/README.md:
--------------------------------------------------------------------------------
1 | # MDN Offline
2 |
3 | This is MDN's ServiceWorker that powers MDN Offline. It's not being build by
4 | default for local development. And for now it requires a running instance of
5 | [kuma](https://github.com/mdn/kuma) to work. We might add support for local
6 | development and update this README.
7 |
--------------------------------------------------------------------------------
/client/src/assets/icons/bookmark.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/kumascript/tests/macros/fixtures/apiref/groupdata.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "TestInterface": {
4 | "overview": ["TestInterface API"],
5 | "interfaces": ["AnInterface"],
6 | "methods": ["AnInterface.doOneThing()", "AnotherInterface.doAnother()"],
7 | "properties": []
8 | }
9 | }
10 | ]
11 |
--------------------------------------------------------------------------------
/client/src/assets/icons/mobile.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/kumascript/tests/fixtures/server/documents/request-variables-expected.txt:
--------------------------------------------------------------------------------
1 | This is a test of request environment vars:
2 |
3 | * en-US
4 | * This is the alpha value
5 | * Consultez les forums dédiés de Mozilla
6 | * コミュニティ
7 | * 커뮤니티
8 | * ["one","two","three"]
9 | * {"a":1,"b":2,"c":3}
10 |
11 | That's all folks!
12 |
--------------------------------------------------------------------------------
/testing/content/files/en-us/web/javascript/reference/strict_mode/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Strict mode
3 | slug: Web/JavaScript/Reference/Strict_mode
4 | tags:
5 | - ECMAScript 5
6 | - Guide
7 | - JavaScript
8 | - Strict Mode
9 | ---
10 | You've reached the JavaScript strict-mode reference test page.
11 | -------------------------------------------------------------------------------- /client/src/assets/icons/send.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/document/mathml-polyfill/mathml-font.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "STIXTwoMath-Regular"; 3 | font-weight: normal; 4 | src: 5 | local("STIXTwoMath-Regular"), 6 | url("./font/STIXTwoMath-Regular.woff2") format("woff2"); 7 | } 8 | 9 | math { 10 | font-family: "STIXTwoMath-Regular"; 11 | } 12 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/javascript/reference/global_objects/boolean/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Boolean 3 | slug: Web/JavaScript/Reference/Global_Objects/Boolean 4 | tags: 5 | - Boolean 6 | - Class 7 | - JavaScript 8 | - Reference 9 | --- 10 |You've reached the JavaScript Boolean object test page.
11 | -------------------------------------------------------------------------------- /type-fixes/front-matter.ts: -------------------------------------------------------------------------------- 1 | import frontmatter from "../node_modules/front-matter/index.js"; 2 | 3 | // frontmatter 4.0.2 exposes incorrect types for an esm consumer: 4 | // types are on frontmatter.default, however frontmatter.default is actually undefined 5 | export default frontmatter as unknown as typeof frontmatter.default; 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | 14 | [*.py] 15 | indent_size = 4 16 | -------------------------------------------------------------------------------- /client/config/webpack/persistentCache/createEnvironmentHash.js: -------------------------------------------------------------------------------- 1 | import { createHash } from "node:crypto"; 2 | 3 | const createEnvironmentHash = (env) => { 4 | const hash = createHash("md5"); 5 | hash.update(JSON.stringify(env)); 6 | 7 | return hash.digest("hex"); 8 | }; 9 | 10 | export default createEnvironmentHash; 11 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase1/output: -------------------------------------------------------------------------------- 1 | Here is {{ some more text }} with double braces, but not a macro. 2 | But, we should also \{ be able to use \ backslashes \\wherever \\\we like. 3 | Here is { some text } with braces, but not a macro. 4 | This is a (This macro is plain text) macro and (This macro is plain text) macro. 5 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/embeddable/legacy/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Legacy Live Samples 3 | slug: Web/Embeddable/Legacy 4 | --- 5 | 6 | # Foo 7 | 8 | ```html 9 | foo 10 | ``` 11 | 12 | ```css 13 | span { 14 | background-color: #pink; 15 | } 16 | ``` 17 | 18 | {{ EmbedLiveSample('foo', '100%', '70') }} 19 | -------------------------------------------------------------------------------- /client/src/assets/icons/twitter-x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/yes-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/ui/atoms/auth-disabled/index.scss: -------------------------------------------------------------------------------- 1 | @use "../../vars" as *; 2 | 3 | .auth-disabled { 4 | border: 1px solid var(--border-primary); 5 | border-radius: var(--elem-radius); 6 | box-shadow: var(--shadow-01); 7 | color: var(--text-secondary); 8 | padding: 16px; 9 | 10 | p { 11 | margin-bottom: 0; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /libs/pong/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@yari-internal/pong", 3 | "version": "0.0.1", 4 | "private": true, 5 | "license": "MPL-2.0", 6 | "type": "module", 7 | "main": "index.js", 8 | "dependencies": { 9 | "@adzerk/decision-sdk": "^1.0.0-beta.28", 10 | "he": "^1.2.0" 11 | }, 12 | "export": "./index.js" 13 | } 14 | -------------------------------------------------------------------------------- /ssr/include.d.ts: -------------------------------------------------------------------------------- 1 | interface AssetManifest { 2 | files: Record
7 | body {
8 | background-image: url(image.png);
9 | }
10 |
11 |
12 | 13 | <img src=pic.gif> 14 |15 | -------------------------------------------------------------------------------- /client/jest-setup.ts: -------------------------------------------------------------------------------- 1 | //globalThis.IS_REACT_ACT_ENVIRONMENT = true; 2 | 3 | if (!globalThis.TextEncoder || !globalThis.TextDecoder) { 4 | // eslint-disable-next-line @typescript-eslint/no-var-requires 5 | const { TextDecoder, TextEncoder } = require("node:util"); 6 | globalThis.TextEncoder = TextEncoder; 7 | globalThis.TextDecoder = TextDecoder; 8 | } 9 | -------------------------------------------------------------------------------- /client/src/lit/glean-mixin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @template {new (...args: any[]) => {}} TBase 3 | * @param {TBase} Base 4 | */ 5 | export const GleanMixin = (Base) => 6 | class extends Base { 7 | /** @param {string} detail */ 8 | _gleanClick(detail) { 9 | window.dispatchEvent(new CustomEvent("glean-click", { detail })); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /client/src/ui/atoms/auth-disabled/index.tsx: -------------------------------------------------------------------------------- 1 | import "./index.scss"; 2 | 3 | export function AuthDisabled() { 4 | return ( 5 |
7 | Authentication disabled: Authentication and the user 8 | settings app is currently disabled. 9 |
10 |7 | Peter's note. I don't know how to express anything in Chinese beyond Google 8 | Translate 9 |
10 | 11 |
13 | {{HTMLSidebar}}
9 | 10 |Below is a sample interactive example:
11 | 12 |codeAt the moment, you're allowed to have formatting in the <h2> and <h3> tags.
9 | 10 |...in the heading tags too.
13 | -------------------------------------------------------------------------------- /client/src/assets/community/quote-end.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/community/quote-start.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/baseline/high-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/trash-filled.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/empty_image/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Empty
7 | Check out this image:
8 |
9 | Pretty nihilistic, eh?
10 |
13 | This one is based on make sure we've solved: 14 | issue#3186 15 |
16 | 17 |<' + name + '>';
12 | %>
13 | <%- result %>
14 |
--------------------------------------------------------------------------------
/testing/translated-content/files/fr/web/embeddable/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Incorporer un échantillon en direct avec et sans nom
3 | slug: Web/Embeddable
4 | ---
5 |
6 |
7 | This make exists to demonstrate that the French content has a difference in
8 | the EmbedLiveSample macro use.
9 |
A broken link due to lack of prefix
7 | 8 |Will not help to try with 'en-US'
9 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/heading_links/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Naughty headings with tags in them' 3 | slug: Web/Heading_links 4 | --- 5 |
6 | This page exists to demonstrate the heading_links flaw.
7 |
ThreeAlso, make it appear as text too
8 | 9 | -------------------------------------------------------------------------------- /client/config/jest/babelTransform.js: -------------------------------------------------------------------------------- 1 | import { createRequire } from "node:module"; 2 | import babelJest from "babel-jest"; 3 | 4 | const require = createRequire(import.meta.url); 5 | 6 | export default babelJest.createTransformer({ 7 | presets: [ 8 | [ 9 | require.resolve("babel-preset-react-app"), 10 | { 11 | runtime: "automatic", 12 | }, 13 | ], 14 | ], 15 | babelrc: false, 16 | configFile: false, 17 | }); 18 | -------------------------------------------------------------------------------- /client/src/homepage/index.scss: -------------------------------------------------------------------------------- 1 | @use "../ui/vars" as *; 2 | 3 | .homepage { 4 | align-items: center; 5 | display: flex; 6 | flex-direction: column; 7 | overflow-x: clip; 8 | overflow-y: visible; 9 | position: relative; 10 | 11 | width: 100%; 12 | 13 | > * { 14 | margin-top: 2rem; 15 | } 16 | 17 | > *:first-child { 18 | margin-top: 0; 19 | } 20 | 21 | a:hover { 22 | text-decoration: underline; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /markdown/utils/index.ts: -------------------------------------------------------------------------------- 1 | const KS_RE = /{{([^}]*)}}/g; 2 | 3 | export function encodeKS(raw) { 4 | return raw.replace( 5 | KS_RE, 6 | (_, ks) => `{{${Buffer.from(ks).toString("base64")}}}` 7 | ); 8 | } 9 | 10 | export function decodeKS(raw) { 11 | return raw.replace( 12 | KS_RE, 13 | (_, ks) => `{{${Buffer.from(ks, "base64").toString()}}}` 14 | ); 15 | } 16 | 17 | export default { 18 | encodeKS, 19 | decodeKS, 20 | }; 21 | -------------------------------------------------------------------------------- /.github/workflows/pr-rebase-needed.yml: -------------------------------------------------------------------------------- 1 | name: "PR Needs Rebase" 2 | 3 | on: 4 | push: 5 | pull_request_target: 6 | types: [synchronize] 7 | 8 | permissions: 9 | # Label pull requests. 10 | pull-requests: write 11 | 12 | jobs: 13 | label-rebase-needed: 14 | uses: mdn/workflows/.github/workflows/pr-rebase-needed.yml@main 15 | with: 16 | target-repo: "mdn/yari" 17 | secrets: 18 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 19 | -------------------------------------------------------------------------------- /client/src/app.test.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from "react-dom/client"; 2 | import { MemoryRouter } from "react-router-dom"; 3 | 4 | import { App } from "./app"; 5 | 6 | it("renders without crashing", () => { 7 | const app = ( 8 |'; endcode = '' }
17 |
18 | %><%- code %><%- str %><%- endcode %>
19 |
--------------------------------------------------------------------------------
/kumascript/macros/httpheader.ejs:
--------------------------------------------------------------------------------
1 | <%
2 |
3 | let lang = env.locale;
4 | let header = $0;
5 | let str = $1 || $0;
6 | let URL = "/" + lang + '/docs/Web/HTTP/Headers/' + header;
7 | let anch = '';
8 |
9 | if ($2) {
10 | str = str + '.' + $2;
11 | anch = '#' + $2;
12 | }
13 |
14 | let code = '';
15 | let endcode = '';
16 | if (!$3) { code = ''; endcode = '' }
17 |
18 | %><%- code %><%- str %><%- endcode %>
19 |
--------------------------------------------------------------------------------
/markdown/localizations/ja.json:
--------------------------------------------------------------------------------
1 | {
2 | "translations": {
3 | "": {
4 | "card_note_label": {
5 | "msgid": "card_note_label",
6 | "msgstr": ["メモ:"]
7 | },
8 | "card_warning_label": {
9 | "msgid": "card_warning_label",
10 | "msgstr": ["警告:"]
11 | },
12 | "card_callout_label": {
13 | "msgid": "card_callout_label",
14 | "msgstr": ["注目:"]
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/markdown/localizations/ko.json:
--------------------------------------------------------------------------------
1 | {
2 | "translations": {
3 | "": {
4 | "card_note_label": {
5 | "msgid": "card_note_label",
6 | "msgstr": ["참고:"]
7 | },
8 | "card_warning_label": {
9 | "msgid": "card_warning_label",
10 | "msgstr": ["경고:"]
11 | },
12 | "card_callout_label": {
13 | "msgid": "card_callout_label",
14 | "msgstr": ["알림:"]
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/markdown/localizations/zh-CN.json:
--------------------------------------------------------------------------------
1 | {
2 | "translations": {
3 | "": {
4 | "card_note_label": {
5 | "msgid": "card_note_label",
6 | "msgstr": ["备注:"]
7 | },
8 | "card_warning_label": {
9 | "msgid": "card_warning_label",
10 | "msgstr": ["警告:"]
11 | },
12 | "card_callout_label": {
13 | "msgid": "card_callout_label",
14 | "msgstr": ["标注:"]
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/markdown/localizations/zh-TW.json:
--------------------------------------------------------------------------------
1 | {
2 | "translations": {
3 | "": {
4 | "card_note_label": {
5 | "msgid": "card_note_label",
6 | "msgstr": ["備註:"]
7 | },
8 | "card_warning_label": {
9 | "msgid": "card_warning_label",
10 | "msgstr": ["警告:"]
11 | },
12 | "card_callout_label": {
13 | "msgid": "card_callout_label",
14 | "msgstr": ["標註:"]
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/client/src/assets/m-logo.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/client/src/ui/atoms/limit-banner/index.scss:
--------------------------------------------------------------------------------
1 | @use "../../vars.scss" as *;
2 |
3 | .limit-banner {
4 | background: var(--background-primary);
5 | border: 1px solid var(--border-secondary);
6 | border-radius: var(--elem-radius);
7 | margin-top: 0.5rem;
8 | padding-bottom: 0.5rem;
9 | padding-top: 0.5rem;
10 | text-align: center;
11 |
12 | p {
13 | margin: 0.5rem;
14 | }
15 |
16 | a {
17 | color: var(--text-link);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/deployer/src/deployer/constants.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from decouple import AutoConfig
4 |
5 | config = AutoConfig(os.curdir)
6 |
7 | CI = config("CI", default=False, cast=bool)
8 |
9 | # If you're doing local development, you can download and install your own
10 | # instance of Elasticsearch 7 and start it. Then set this environment variable
11 | # value to `http://localhost:9200`
12 | ELASTICSEARCH_URL = config("DEPLOYER_ELASTICSEARCH_URL", default=None)
13 |
--------------------------------------------------------------------------------
/kumascript/macros/xref_cssinitial.ejs:
--------------------------------------------------------------------------------
1 | <%
2 | let linkText = mdn.localString({
3 | "de" : "Initialer Wert",
4 | "en-US": "Initial value",
5 | "es" : "Valor inicial",
6 | "fr" : "Valeur initiale",
7 | "ja" : "初期値",
8 | "ko" : "초기값",
9 | "ru" : "Начальное значение",
10 | "zh-CN": "初始值",
11 | "zh-TW": "預設值"
12 |
13 | });
14 | %>
15 | <%- web.smartLink(`${env.locale}/docs/Web/CSS/initial_value`, null, linkText) %>
16 |
--------------------------------------------------------------------------------
/client/public/opensearch.xml:
--------------------------------------------------------------------------------
1 | '; endcode = '' }
17 |
18 | %><%- code %><%- str %><%- endcode %>
19 |
--------------------------------------------------------------------------------
/markdown/localizations/es.json:
--------------------------------------------------------------------------------
1 | {
2 | "translations": {
3 | "": {
4 | "card_note_label": {
5 | "msgid": "card_note_label",
6 | "msgstr": ["Nota:"]
7 | },
8 | "card_warning_label": {
9 | "msgid": "card_warning_label",
10 | "msgstr": ["Advertencia:"]
11 | },
12 | "card_callout_label": {
13 | "msgid": "card_callout_label",
14 | "msgstr": ["Observación:"]
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/markdown/localizations/ru.json:
--------------------------------------------------------------------------------
1 | {
2 | "translations": {
3 | "": {
4 | "card_note_label": {
5 | "msgid": "card_note_label",
6 | "msgstr": ["Примечание:"]
7 | },
8 | "card_warning_label": {
9 | "msgid": "card_warning_label",
10 | "msgstr": ["Предупреждение:"]
11 | },
12 | "card_callout_label": {
13 | "msgid": "card_callout_label",
14 | "msgstr": ["Сноска:"]
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/client/src/assets/icons/chrome.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/client/src/assets/icons/sidebar.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/testing/integration/headless/__init__.py:
--------------------------------------------------------------------------------
1 | import requests
2 |
3 |
4 | DEFAULT_TIMEOUT = 120 # seconds
5 | # Kuma web domains that are indexed
6 | INDEXED_WEB_DOMAINS = {"developer.mozilla.org"}
7 |
8 |
9 | def request(method, url, **kwargs):
10 | if "timeout" not in kwargs:
11 | kwargs.update(timeout=DEFAULT_TIMEOUT)
12 | if "allow_redirects" not in kwargs:
13 | kwargs.update(allow_redirects=False)
14 | return requests.request(method, url, **kwargs)
15 |
--------------------------------------------------------------------------------
/client/src/assets/about/accurate.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/plus/common/plus-tabs.tsx:
--------------------------------------------------------------------------------
1 | import { Button } from "../../ui/atoms/button";
2 |
3 | export function showMoreButton(setSelectAllChecked, setOffset, list: any[]) {
4 | return (
5 | '; endcode = '' }
17 |
18 | %><%- code %><%- str %><%- endcode %>
19 |
--------------------------------------------------------------------------------
/client/src/assets/icons/external.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/client/src/lit/compat/index-desktop-xl.scss:
--------------------------------------------------------------------------------
1 | @use "../../ui/vars" as *;
2 |
3 | @media (min-width: $screen-xl) {
4 | .table-container {
5 | margin: 0;
6 | width: 100%;
7 | }
8 |
9 | .table-container-inner {
10 | padding: 0;
11 | }
12 |
13 | .bc-table {
14 | // 33% for feature, 67% for browser columns.
15 | grid-template-columns: minmax(33%, max-content) repeat(
16 | var(--browser-count),
17 | calc(67% / var(--browser-count))
18 | );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/client/src/ui/molecules/maintenance/index.tsx:
--------------------------------------------------------------------------------
1 | import { useUserData } from "../../../user-context";
2 | import "./index.scss";
3 |
4 | export default function Maintenance() {
5 | const userData = useUserData();
6 | return (
7 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/client/public/assets/observatory/pass-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/about/accurate-sm.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/icons/ellipses.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/client/src/assets/icons/unknown.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/client/src/ui/molecules/notecards/index.tsx:
--------------------------------------------------------------------------------
1 | import { NotecardType } from "../../../types/notecards";
2 |
3 | export default function NoteCard({
4 | children,
5 | type = "info",
6 | extraClasses,
7 | }: {
8 | children: JSX.Element | JSX.Element[];
9 | type?: NotecardType;
10 | extraClasses?: string | null;
11 | }) {
12 | const classes = `notecard ${type !== "info" ? type : ""} ${
13 | extraClasses || ""
14 | }`.trim();
15 |
16 | return You've reached the HTML anchor element test page.
18 |hef
7 | One
8 |
9 |
12 | Two, but same image URL
13 |
14 |
17 | Three, but same image URL
18 |
19 |
Text in Intro
9 | 10 |{{Specifications}}
13 | 14 |{{Compat}}
17 | 18 |More stuff
21 | -------------------------------------------------------------------------------- /ssr/index.ts: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { StaticRouter } from "react-router-dom"; 3 | 4 | import { App } from "../client/src/app"; 5 | import render from "./render"; 6 | import { HydrationData } from "../libs/types/hydration"; 7 | 8 | export function renderHTML(context: HydrationData) { 9 | return render( 10 | React.createElement( 11 | StaticRouter, 12 | { location: context.url }, 13 | React.createElement(App, context) 14 | ), 15 | context.url, 16 | context 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/brokenlinks_markdown/self_links/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Links that link to the current page you're on 3 | slug: Web/BrokenLinks_Markdown/Self_links 4 | --- 5 | [Straight up](/en-US/docs/Web/BrokenLinks_Markdown/Self_links) 6 | 7 | [Anchored](/en-US/docs/Web/BrokenLinks_Markdown/Self_links#anchored) 8 | 9 | [Self-link but wrong case](/en-US/docs/Web/BrokenLinks_Markdown/self_Links) 10 | 11 | [Self-link but wrong case and with anchor](/en-US/docs/Web/BrokenLinks_Markdown/self_Links#hash) 12 | -------------------------------------------------------------------------------- /client/src/assets/icons/feedback.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cloud-function/src/middlewares/stripForwardedHostHeaders.ts: -------------------------------------------------------------------------------- 1 | import { NextFunction, Request, Response } from "express"; 2 | 3 | // Don't strip other `X-Forwarded-*` headers. 4 | const HEADER_REGEXP = /^(x-forwarded-host|forwarded)$/i; 5 | 6 | export async function stripForwardedHostHeaders( 7 | req: Request, 8 | _res: Response, 9 | next: NextFunction 10 | ) { 11 | Object.keys(req.headers) 12 | .filter((name) => HEADER_REGEXP.test(name)) 13 | .forEach((name) => delete req.headers[name]); 14 | next(); 15 | } 16 | -------------------------------------------------------------------------------- /jest.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionsToTreatAsEsm": [".ts", ".tsx"], 3 | "moduleNameMapper": { 4 | "^(\\.{1,2}/.*)\\.js$": "$1" 5 | }, 6 | "preset": "ts-jest/presets/default-esm", 7 | "testPathIgnorePatterns": ["headless*", "developing.spec.ts"], 8 | "transform": { 9 | "\\.tsx?$": [ 10 | "ts-jest", 11 | { 12 | "babelConfig": true, 13 | "isolatedModules": true, 14 | "tsconfig": { "moduleResolution": "node" }, 15 | "useESM": true 16 | } 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /kumascript/README.md: -------------------------------------------------------------------------------- 1 | # Kumascript in Yari 2 | 3 | ## Signaling macro deprecation 4 | 5 | If a macro should no longer be used and is marked for removal, add the following 6 | to the top of the relevant macro: 7 | 8 | ```js 9 | // Throw a MacroDeprecatedError flaw 10 | mdn.deprecated(); 11 | ``` 12 | 13 | It is also useful to add a code comment to the macro detailing what the blockers 14 | are for removal. See the following pull request for reference: 15 | [Deprecate the {{index}} macro](https://github.com/mdn/yari/pull/5607) 16 | -------------------------------------------------------------------------------- /client/src/assets/icons/baseline/limited.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /kumascript/tests/macros/Deprecated.test.ts: -------------------------------------------------------------------------------- 1 | import { assert, itMacro, describeMacro } from "./utils.js"; 2 | 3 | // TODO: Add tests for other {{Deprecated_*}} macros 4 | describeMacro("Deprecated_Inline", function () { 5 | itMacro("No arguments (en-US)", function (macro) { 6 | return assert.eventually.equal( 7 | macro.call(), 8 | ` 9 | Deprecated 10 | ` 11 | ); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /client/src/assets/icons/ai-help.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/baseline/limited-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/about/text-box-check-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/ui/molecules/auth-container/index.tsx: -------------------------------------------------------------------------------- 1 | import LogInLink from "../../atoms/login-link"; 2 | import { SignUpLink } from "../../atoms/signup-link"; 3 | 4 | import "./index.scss"; 5 | 6 | export const AuthContainer = ({ logInGleanContext, signUpGleanContext }) => { 7 | return ( 8 |{{Compat}}
23 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/brokenlinks/self_links/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Links that link to the current page you're on 3 | slug: Web/BrokenLinks/Self_links 4 | --- 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |Self-link but wrong case and with anchor
13 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Community Participation Guidelines 2 | 3 | This repository is governed by Mozilla's code of conduct and etiquette 4 | guidelines. For more details, please read the 5 | [Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/). 6 | 7 | ## How to Report 8 | 9 | For more information on how to report violations of the Community Participation 10 | Guidelines, please read our 11 | [How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/) 12 | page. 13 | -------------------------------------------------------------------------------- /client/src/plus/offer-overview/index.tsx: -------------------------------------------------------------------------------- 1 | import { useScrollToAnchor } from "../../hooks"; 2 | import OfferHero from "./offer-hero"; 3 | import OfferOverviewFeatures from "./offer-overview-feature"; 4 | import OfferOverviewSubscribe from "./offer-overview-subscribe"; 5 | 6 | function OfferOverview() { 7 | useScrollToAnchor(); 8 | return ( 9 |${attr}`
11 | );
12 | });
13 | }
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/testing/content/files/en-us/web/fixable_flaws/bad_pre_tags/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Fixable flawed tags 3 | slug: Web/Fixable_Flaws/Bad_pre_tags 4 | --- 5 | 6 |Fixable pre tag...
7 |9 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/foo/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: '<pre><code>code 8 |: A test tag' 3 | slug: Web/Foo 4 | tags: 5 | - Tag1 6 | - Tag2 7 | --- 8 | {{HTMLSidebar}}
9 | 10 |11 |13 | 14 |This should not become the summary.
12 |This becomes the summary.
15 | 16 |17 | 20 | 21 |18 |
A perfectly normal image 19 |Heading 3
22 | 23 |Heading 4 with own bad ID
24 | -------------------------------------------------------------------------------- /client/src/assets/icons/baseline/browser-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/webview.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/ui/molecules/offline-status-bar/index.scss: -------------------------------------------------------------------------------- 1 | .offline-status-bar { 2 | background-color: var(--accent-primary-engage); // rgba(24, 112, 240, 0.1) 3 | color: var(--text-primary); 4 | display: none; 5 | 6 | &.is-offline, 7 | &.is-online { 8 | display: block; 9 | padding: 1rem; 10 | text-align: center; 11 | } 12 | 13 | &.is-online { 14 | animation: fade-out 3s ease-out 0.5s; 15 | } 16 | } 17 | 18 | @keyframes fade-out { 19 | 0% { 20 | opacity: 1; 21 | } 22 | 23 | 100% { 24 | opacity: 0; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /kumascript/tests/macros/fixtures/compat/prefixes.json: -------------------------------------------------------------------------------- 1 | { 2 | "prefixes": { 3 | "feature": { 4 | "__compat": { 5 | "support": { 6 | "chrome": { 7 | "prefix": "-webkit-", 8 | "version_added": "10" 9 | }, 10 | "firefox": [ 11 | { 12 | "version_added": "12" 13 | }, 14 | { 15 | "prefix": "-moz-", 16 | "version_added": "5" 17 | } 18 | ] 19 | } 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/externallinks/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lots of external links 3 | slug: Web/ExternalLinks 4 | --- 5 | 6 |External links
7 | 8 |9 |
14 | -------------------------------------------------------------------------------- /client/src/assets/icons/bluesky.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /client/src/assets/icons/edit.svg: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /testing/translated-content/files/fr/web/spec_section_extraction/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Extraction de sections de spécifications 3 | slug: Web/Spec_Section_Extraction 4 | --- 5 | 6 |- Peterbe.com
10 |- Mozilla.org
11 |- Hacks blog
12 |- Insights
13 |7 | The purpose of this fixture is to test that this translated document can 8 | benefit from the
11 | 12 |browser-compatfront-matter in it's en-US 9 | parent. 10 |Spécifications
13 | 14 |{{Specifications}}
15 | 16 |Compatibilité des navigateur
17 | 18 |{{Compat}}
19 | -------------------------------------------------------------------------------- /client/src/assets/about/dot.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/lit/play/console.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | background-color: var(--code-background-inline); 3 | box-sizing: border-box; 4 | display: flex; 5 | flex-direction: column; 6 | font-size: 0.875rem; 7 | margin: 0; 8 | overflow: auto; 9 | width: 100%; 10 | } 11 | 12 | ul { 13 | list-style: none; 14 | margin: 0; 15 | padding: 0; 16 | } 17 | 18 | li { 19 | padding: 0 0.5em; 20 | 21 | &::before { 22 | content: ">"; 23 | } 24 | } 25 | 26 | code { 27 | font-family: var(--font-code); 28 | tab-size: 4; 29 | white-space: pre-wrap; 30 | } 31 | -------------------------------------------------------------------------------- /client/public/favicon.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 15 |MDN Web Docs 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /client/src/assets/about/dot-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/disabled.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase2/output: -------------------------------------------------------------------------------- 1 | The following items are all macros, though: 2 | 3 | * ["Foo","Bar","Baz"] 4 | * ["HéllöWôrld"] 5 | * ["下一頁","カタカナ","BLAH"] 6 | * ["Quoted, Comma","Another, quoted"] 7 | * ["()()()"] 8 | * ["{{}}{{}}{{}}"] 9 | 10 | Here is a ["With many","parameters","including \"quoted\"","text of both 'kinds'","even \"escaped\"","like 'these'","and numbers","-10","0","0.1","10","100"] that even works inline. 11 | 12 | Here is a [{"es":"es/JavaScript/Acerca_de_JavaScript","en":"en/JavaScript/About_JavaScript"}] that even works inline. 13 | -------------------------------------------------------------------------------- /client/src/assets/m-icon.svg: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /client/src/document/languages.css: -------------------------------------------------------------------------------- 1 | .document-languages { 2 | float: right; 3 | font-size: 80%; 4 | } 5 | .document-languages .translations { 6 | z-index: 10; 7 | position: absolute; 8 | background-color: white; 9 | opacity: 0.95; 10 | } 11 | .document-languages .choices { 12 | position: relative; 13 | } 14 | 15 | .document-languages .translations { 16 | padding: 10px; 17 | left: -100px; 18 | width: 200px; 19 | } 20 | .document-languages .translations ul { 21 | padding: 0; 22 | } 23 | .document-languages .translations li { 24 | list-style-type: none; 25 | } 26 | -------------------------------------------------------------------------------- /content/index.ts: -------------------------------------------------------------------------------- 1 | export * as Document from "./document.js"; 2 | export * as Translation from "./translation.js"; 3 | export { getPopularities } from "./popularities.js"; 4 | export * as Redirect from "./redirect.js"; 5 | export * as FileAttachment from "./file-attachment.js"; 6 | export { 7 | buildURL, 8 | memoize, 9 | slugToFolder, 10 | execGit, 11 | getRoot, 12 | urlToFolderPath, 13 | MEMOIZE_INVALIDATE, 14 | } from "./utils.js"; 15 | export { resolveFundamental } from "../libs/fundamental-redirects/index.js"; 16 | export { translationsOf } from "./translations.js"; 17 | -------------------------------------------------------------------------------- /kumascript/macros/propertiesbox.ejs: -------------------------------------------------------------------------------- 1 | <% 2 | /* 3 | Outputs properties as a table 4 | 5 | $0 - String containing a serialized array of properties of the structure 6 | {"label": "foo", "value": "bar"} 7 | */ 8 | var properties = JSON.parse($0); 9 | var result = "" + 10 | ""; 11 | properties.forEach(function(property) { 12 | result += "
"; 18 | %><%- result %> 19 | -------------------------------------------------------------------------------- /kumascript/tests/fixtures/render/testcase3/output: -------------------------------------------------------------------------------- 1 | Decimals are not truncated to integers: 2 | * ["3.6"] 3 | * [{"x":3.6}] 4 | 5 | Quotes and escaped quotes work correctly 6 | * ["This is a \"test\""] 7 | * ["This is a 'test'"] 8 | * ["This is a \"test\""] 9 | * ["This is a 'test'"] 10 | * ["This is a 'test'"] 11 | * ["This is a \"test\""] 12 | * [{"x":"This is a 'test'"}] 13 | * [{"x":"This is a \"test\""}] 14 | 15 | Empty arguments are not elided 16 | * [""] 17 | * [""] 18 | * ["","",""] 19 | * ["docs/User:trevorh/aTest","docs/User:trevorh/Generic_template_test","","Anything"] 20 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Web technology for developers 3 | slug: Web 4 | tags: 5 | - Landing 6 | - Web 7 | --- 8 |" + 13 | " " + 17 | "" + property.label + " " + 14 | "" + property.value + " "; 15 | }); 16 | result += "The open Web presents incredible opportunities for developers. To take full advantage of these technologies, you need to know how to use them. Below you'll find the links to MDN's documentation on Web technologies.
9 | 10 |11 | Check out some sub-pages: 12 |
13 |14 |
17 | -------------------------------------------------------------------------------- /client/src/assets/community/community-calls.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /testing/content/files/en-us/web/not_lowercase_anchors/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Anchor links that aren't lowercased 3 | slug: Web/Not_lowercase_anchors 4 | --- 5 | 6 |- Foo page
15 |- CSS
16 |number7 |
14 | -------------------------------------------------------------------------------- /client/src/assets/community/community-calls-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/server.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/pong/types.d.ts: -------------------------------------------------------------------------------- 1 | type Colors = { 2 | textColor?: string; 3 | backgroundColor?: string; 4 | ctaTextColor?: string; 5 | ctaBackgroundColor?: string; 6 | textColorDark?: string; 7 | backgroundColorDark?: string; 8 | ctaTextColorDark?: string; 9 | ctaBackgroundColorDark?: string; 10 | }; 11 | 12 | export type Payload = { 13 | status: Status; 14 | click: string; 15 | view: string; 16 | copy?: string; 17 | image?: string; 18 | imageFormat?: string; 19 | alt?: string; 20 | cta?: string; 21 | colors?: Colors; 22 | version: number; 23 | heading?: string; 24 | }; 25 | -------------------------------------------------------------------------------- /client/src/assets/about/handshake.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/baseline/browser-cross.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/curriculum-started-underline.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /client/src/assets/icons/progress-helper.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/icons/quote.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /client/src/assets/icons/return.svg: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /client/src/document/code/render-md.ts: -------------------------------------------------------------------------------- 1 | import { unified } from "unified"; 2 | import remarkGfm from "remark-gfm"; 3 | import remarkParse from "remark-parse"; 4 | import remarkRehype from "remark-rehype"; 5 | import rehypeSanitize from "rehype-sanitize"; 6 | import rehypeStringify from "rehype-stringify"; 7 | 8 | export function render(md: string) { 9 | return unified() 10 | .use(remarkParse) 11 | .use(remarkGfm) 12 | .use(remarkRehype, { 13 | allowDangerousHtml: true, 14 | }) 15 | .use(rehypeSanitize) 16 | .use(rehypeStringify) 17 | .processSync(md) 18 | .toString(); 19 | } 20 | -------------------------------------------------------------------------------- /client/src/plus/ai-help/constants.tsx: -------------------------------------------------------------------------------- 1 | export const OFF_TOPIC_PREFIX = "I'm sorry, but I can't"; 2 | export const OFF_TOPIC_MESSAGE = 3 | "I'm sorry, but I can't answer questions outside web development."; 4 | 5 | export const MESSAGE_SEARCHING = "Searching for MDN content…"; 6 | export const MESSAGE_SEARCHED = "Consulted MDN content:"; 7 | export const MESSAGE_ANSWERING = "Generating your answer…"; 8 | export const MESSAGE_ANSWERED = "Answer:"; 9 | export const MESSAGE_STOPPED = "Answer (stopped):"; 10 | export const MESSAGE_FAILED = "Error generating your answer!"; 11 | 12 | export const EVENT_TIMEOUT = 15000; 13 | -------------------------------------------------------------------------------- /client/src/ui/molecules/menu/index.scss: -------------------------------------------------------------------------------- 1 | .top-level-entry-container { 2 | &.active > a { 3 | &:link, 4 | &:visited { 5 | color: var(--text-active); 6 | } 7 | 8 | &:hover, 9 | &:active { 10 | color: var(--category-color); 11 | } 12 | } 13 | 14 | .top-level-entry-dot ~ .top-level-entry::after { 15 | background: var(--text-primary-blue); 16 | border: 1px solid var(--background-primary); 17 | border-radius: 2rem; 18 | content: ""; 19 | height: 0.5rem; 20 | position: absolute; 21 | right: 0; 22 | top: 0.5rem; 23 | width: 0.5rem; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /testing/content/files/en-us/learn/css/css_layout/introduction/flex/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: A Test Introduction to CSS Flexbox Layout 3 | slug: Learn/CSS/CSS_layout/Introduction/Flex 4 | tags: 5 | - Examples 6 | - Beginner 7 | - CSS 8 | - Layout 9 | - Learn 10 | - flexbox 11 | --- 12 | 13 |- Heading1
8 |- Heading2
9 |- Empty anchor
10 |- No anchor
11 |- Pathname broken (fixable) with anchor
12 |- External site
13 |Flexbox
14 | 20 | -------------------------------------------------------------------------------- /client/src/assets/icons/opera.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /kumascript/tests/macros/fixtures/compat/alternative_name.json: -------------------------------------------------------------------------------- 1 | { 2 | "alternative_name": { 3 | "feature": { 4 | "__compat": { 5 | "support": { 6 | "chrome": { 7 | "alternative_name": "contextMenus.ContextType", 8 | "version_added": "10" 9 | }, 10 | "firefox": [ 11 | { 12 | "version_added": "12" 13 | }, 14 | { 15 | "alternative_name": "CookieMonsterInterface", 16 | "version_added": "5" 17 | } 18 | ] 19 | } 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /client/src/assets/icons/baseline/low.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/curriculum/body.tsx: -------------------------------------------------------------------------------- 1 | import { CurriculumDoc } from "../../../libs/types/curriculum"; 2 | import { Section } from "../../../libs/types/document"; 3 | import { Prose } from "../document/ingredients/prose"; 4 | 5 | export function RenderCurriculumBody({ 6 | doc, 7 | renderer = () => null, 8 | }: { 9 | doc?: CurriculumDoc; 10 | renderer?: (section: Section, i: number) => null | JSX.Element; 11 | }) { 12 | return doc?.body.map((section, i) => { 13 | return ( 14 | renderer(section, i) || ( 15 |16 | ) 17 | ); 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /client/src/flaw-utils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file serves to help flaws when displayed one at a time and when 3 | * displayed in batches. 4 | * 5 | */ 6 | 7 | export function humanizeFlawName(name) { 8 | const verboseNames = { 9 | // List all the names that can't be nicely computed by the fallback() 10 | // function. 11 | bad_bcd_queries: "Bad BCD queries", 12 | bad_pre_tags: "Bad tags", 13 | unsafe_html: "Unsafe HTML", 14 | }; 15 | function fallback() { 16 | return name.charAt(0).toUpperCase() + name.slice(1).replace(/_/g, " "); 17 | } 18 | return verboseNames[name] || fallback(); 19 | } 20 | --------------------------------------------------------------------------------