├── .bp-config ├── httpd │ ├── httpd.conf │ └── user-provided │ │ └── httpd-drupalsupport.conf ├── options.json └── php │ └── php.ini.d │ └── memory_limit.ini ├── .cfignore ├── .csslintrc ├── .docker ├── Dockerfile ├── install-composer.sh ├── startup └── wait_for_db_then ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .gitignore ├── .profile ├── CODEOWNERS ├── DESIGN.md ├── ISSUE_TEMPLATE.md ├── LICENSE.txt ├── PULL_REQUEST_TEMPLATE.md ├── README.md ├── SECURITY.md ├── apt.yml ├── bin ├── bootstrap ├── composer ├── drupal ├── drush └── mysql ├── bootstrap.sh ├── composer.json ├── composer.lock ├── cronish.sh ├── delete-cloudgov.sh ├── deploy-cloudgov.sh ├── docker-compose.yml ├── drush ├── README.md └── policy.drush.inc ├── manifest.yml ├── phpunit.xml.dist ├── scripts └── composer │ └── ScriptHandler.php └── web ├── .csslintrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .gitignore ├── .ht.router.php ├── autoload.php ├── index.php ├── modules └── README.txt ├── profiles └── README.txt ├── robots.txt ├── sites ├── README.txt ├── default │ ├── config │ │ ├── .htaccess │ │ ├── action.settings.yml │ │ ├── aggregator.settings.yml │ │ ├── automated_cron.settings.yml │ │ ├── block.block.mainnavigation.yml │ │ ├── block.block.pagetitle.yml │ │ ├── block.block.searchform.yml │ │ ├── block.block.seven_breadcrumbs.yml │ │ ├── block.block.seven_content.yml │ │ ├── block.block.seven_help.yml │ │ ├── block.block.seven_local_actions.yml │ │ ├── block.block.seven_login.yml │ │ ├── block.block.seven_messages.yml │ │ ├── block.block.seven_page_title.yml │ │ ├── block.block.seven_primary_local_tasks.yml │ │ ├── block.block.seven_secondary_local_tasks.yml │ │ ├── block.block.tabs.yml │ │ ├── block.block.uswds_account_menu.yml │ │ ├── block.block.uswds_branding.yml │ │ ├── block.block.uswds_breadcrumbs.yml │ │ ├── block.block.uswds_content.yml │ │ ├── block.block.uswds_footer.yml │ │ ├── block.block.uswds_help.yml │ │ ├── block.block.uswds_local_actions.yml │ │ ├── block.block.uswds_local_tasks.yml │ │ ├── block.block.uswds_main_menu.yml │ │ ├── block.block.uswds_messages.yml │ │ ├── block.block.uswds_page_title.yml │ │ ├── block.block.uswds_search.yml │ │ ├── block.block.uswds_tools.yml │ │ ├── block_content.type.basic.yml │ │ ├── comment.type.comment.yml │ │ ├── core.base_field_override.node.page.promote.yml │ │ ├── core.base_field_override.node.page.status.yml │ │ ├── core.date_format.fallback.yml │ │ ├── core.date_format.html_date.yml │ │ ├── core.date_format.html_datetime.yml │ │ ├── core.date_format.html_month.yml │ │ ├── core.date_format.html_time.yml │ │ ├── core.date_format.html_week.yml │ │ ├── core.date_format.html_year.yml │ │ ├── core.date_format.html_yearless_date.yml │ │ ├── core.date_format.long.yml │ │ ├── core.date_format.medium.yml │ │ ├── core.date_format.short.yml │ │ ├── core.entity_form_display.block_content.basic.default.yml │ │ ├── core.entity_form_display.comment.comment.default.yml │ │ ├── core.entity_form_display.node.page.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_accordion.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_accordion_item.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_column.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_graphic_list.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_grid.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_hero.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_media_block.default.yml │ │ ├── core.entity_form_display.paragraph.uswds_text.default.yml │ │ ├── core.entity_form_display.user.user.default.yml │ │ ├── core.entity_form_mode.user.register.yml │ │ ├── core.entity_view_display.aggregator_feed.aggregator_feed.default.yml │ │ ├── core.entity_view_display.aggregator_feed.aggregator_feed.summary.yml │ │ ├── core.entity_view_display.aggregator_item.aggregator_item.summary.yml │ │ ├── core.entity_view_display.block_content.basic.default.yml │ │ ├── core.entity_view_display.comment.comment.default.yml │ │ ├── core.entity_view_display.node.page.default.yml │ │ ├── core.entity_view_display.node.page.teaser.yml │ │ ├── core.entity_view_display.paragraph.uswds_accordion.default.yml │ │ ├── core.entity_view_display.paragraph.uswds_accordion_item.default.yml │ │ ├── core.entity_view_display.paragraph.uswds_column.default.yml │ │ ├── core.entity_view_display.paragraph.uswds_graphic_list.default.yml │ │ ├── core.entity_view_display.paragraph.uswds_grid.default.yml │ │ ├── core.entity_view_display.paragraph.uswds_hero.default.yml │ │ ├── core.entity_view_display.paragraph.uswds_media_block.default.yml │ │ ├── core.entity_view_display.paragraph.uswds_text.default.yml │ │ ├── core.entity_view_display.user.user.compact.yml │ │ ├── core.entity_view_display.user.user.default.yml │ │ ├── core.entity_view_mode.aggregator_feed.summary.yml │ │ ├── core.entity_view_mode.aggregator_item.summary.yml │ │ ├── core.entity_view_mode.block.token.yml │ │ ├── core.entity_view_mode.block_content.full.yml │ │ ├── core.entity_view_mode.block_content.token.yml │ │ ├── core.entity_view_mode.comment.full.yml │ │ ├── core.entity_view_mode.comment.token.yml │ │ ├── core.entity_view_mode.file.token.yml │ │ ├── core.entity_view_mode.menu_link_content.token.yml │ │ ├── core.entity_view_mode.node.diff.yml │ │ ├── core.entity_view_mode.node.full.yml │ │ ├── core.entity_view_mode.node.rss.yml │ │ ├── core.entity_view_mode.node.search_index.yml │ │ ├── core.entity_view_mode.node.search_result.yml │ │ ├── core.entity_view_mode.node.teaser.yml │ │ ├── core.entity_view_mode.node.token.yml │ │ ├── core.entity_view_mode.paragraph.preview.yml │ │ ├── core.entity_view_mode.shortcut.token.yml │ │ ├── core.entity_view_mode.taxonomy_term.full.yml │ │ ├── core.entity_view_mode.taxonomy_term.token.yml │ │ ├── core.entity_view_mode.tour.token.yml │ │ ├── core.entity_view_mode.user.compact.yml │ │ ├── core.entity_view_mode.user.full.yml │ │ ├── core.entity_view_mode.user.token.yml │ │ ├── core.extension.yml │ │ ├── core.menu.static_menu_link_overrides.yml │ │ ├── dblog.settings.yml │ │ ├── devel.settings.yml │ │ ├── devel.toolbar.settings.yml │ │ ├── diff.plugins.yml │ │ ├── diff.settings.yml │ │ ├── editor.editor.basic_html.yml │ │ ├── editor.editor.full_html.yml │ │ ├── editor.editor.restricted_html.yml │ │ ├── embed.settings.yml │ │ ├── field.field.block_content.basic.body.yml │ │ ├── field.field.comment.comment.comment_body.yml │ │ ├── field.field.node.page.body.yml │ │ ├── field.field.node.page.field_paragraph.yml │ │ ├── field.field.paragraph.uswds_accordion.field_uswds_accordion_bordered.yml │ │ ├── field.field.paragraph.uswds_accordion.field_uswds_accordion_expand.yml │ │ ├── field.field.paragraph.uswds_accordion.field_uswds_accordion_multi.yml │ │ ├── field.field.paragraph.uswds_accordion.field_uswds_paragraphs.yml │ │ ├── field.field.paragraph.uswds_accordion_item.field_uswds_body.yml │ │ ├── field.field.paragraph.uswds_accordion_item.field_uswds_title.yml │ │ ├── field.field.paragraph.uswds_column.field_uswds_body.yml │ │ ├── field.field.paragraph.uswds_graphic_list.field_uswds_paragraphs.yml │ │ ├── field.field.paragraph.uswds_grid.field_uswds_grid_column_stretch.yml │ │ ├── field.field.paragraph.uswds_grid.field_uswds_grid_column_width.yml │ │ ├── field.field.paragraph.uswds_grid.field_uswds_paragraphs.yml │ │ ├── field.field.paragraph.uswds_hero.field_uswds_button.yml │ │ ├── field.field.paragraph.uswds_hero.field_uswds_image.yml │ │ ├── field.field.paragraph.uswds_hero.field_uswds_link.yml │ │ ├── field.field.paragraph.uswds_hero.field_uswds_title.yml │ │ ├── field.field.paragraph.uswds_media_block.field_uswds_body.yml │ │ ├── field.field.paragraph.uswds_media_block.field_uswds_image.yml │ │ ├── field.field.paragraph.uswds_media_block.field_uswds_title.yml │ │ ├── field.field.paragraph.uswds_text.field_uswds_body.yml │ │ ├── field.field.user.user.user_picture.yml │ │ ├── field.settings.yml │ │ ├── field.storage.block_content.body.yml │ │ ├── field.storage.comment.comment_body.yml │ │ ├── field.storage.node.body.yml │ │ ├── field.storage.node.field_paragraph.yml │ │ ├── field.storage.paragraph.field_uswds_accordion_bordered.yml │ │ ├── field.storage.paragraph.field_uswds_accordion_expand.yml │ │ ├── field.storage.paragraph.field_uswds_accordion_multi.yml │ │ ├── field.storage.paragraph.field_uswds_body.yml │ │ ├── field.storage.paragraph.field_uswds_button.yml │ │ ├── field.storage.paragraph.field_uswds_grid_column_stretch.yml │ │ ├── field.storage.paragraph.field_uswds_grid_column_width.yml │ │ ├── field.storage.paragraph.field_uswds_image.yml │ │ ├── field.storage.paragraph.field_uswds_link.yml │ │ ├── field.storage.paragraph.field_uswds_paragraphs.yml │ │ ├── field.storage.paragraph.field_uswds_title.yml │ │ ├── field.storage.user.user_picture.yml │ │ ├── field_ui.settings.yml │ │ ├── file.settings.yml │ │ ├── filter.format.basic_html.yml │ │ ├── filter.format.full_html.yml │ │ ├── filter.format.plain_text.yml │ │ ├── filter.format.restricted_html.yml │ │ ├── filter.settings.yml │ │ ├── hal.settings.yml │ │ ├── image.settings.yml │ │ ├── image.style.large.yml │ │ ├── image.style.medium.yml │ │ ├── image.style.thumbnail.yml │ │ ├── menu_ui.settings.yml │ │ ├── node.settings.yml │ │ ├── node.type.page.yml │ │ ├── paragraphs.paragraphs_type.uswds_accordion.yml │ │ ├── paragraphs.paragraphs_type.uswds_accordion_item.yml │ │ ├── paragraphs.paragraphs_type.uswds_column.yml │ │ ├── paragraphs.paragraphs_type.uswds_graphic_list.yml │ │ ├── paragraphs.paragraphs_type.uswds_grid.yml │ │ ├── paragraphs.paragraphs_type.uswds_hero.yml │ │ ├── paragraphs.paragraphs_type.uswds_media_block.yml │ │ ├── paragraphs.paragraphs_type.uswds_text.yml │ │ ├── paragraphs.settings.yml │ │ ├── pathauto.pattern.page.yml │ │ ├── pathauto.settings.yml │ │ ├── rdf.mapping.comment.comment.yml │ │ ├── rdf.mapping.node.page.yml │ │ ├── rdf.mapping.taxonomy_term.tags.yml │ │ ├── rdf.mapping.user.user.yml │ │ ├── search.page.node_search.yml │ │ ├── search.page.user_search.yml │ │ ├── search.settings.yml │ │ ├── serialization.settings.yml │ │ ├── seven.settings.yml │ │ ├── shortcut.set.default.yml │ │ ├── system.action.comment_delete_action.yml │ │ ├── system.action.comment_publish_action.yml │ │ ├── system.action.comment_save_action.yml │ │ ├── system.action.comment_unpublish_action.yml │ │ ├── system.action.node_delete_action.yml │ │ ├── system.action.node_make_sticky_action.yml │ │ ├── system.action.node_make_unsticky_action.yml │ │ ├── system.action.node_promote_action.yml │ │ ├── system.action.node_publish_action.yml │ │ ├── system.action.node_save_action.yml │ │ ├── system.action.node_unpromote_action.yml │ │ ├── system.action.node_unpublish_action.yml │ │ ├── system.action.pathauto_update_alias_node.yml │ │ ├── system.action.pathauto_update_alias_user.yml │ │ ├── system.action.user_add_role_action.administrator.yml │ │ ├── system.action.user_block_user_action.yml │ │ ├── system.action.user_cancel_user_action.yml │ │ ├── system.action.user_remove_role_action.administrator.yml │ │ ├── system.action.user_unblock_user_action.yml │ │ ├── system.authorize.yml │ │ ├── system.cron.yml │ │ ├── system.date.yml │ │ ├── system.diff.yml │ │ ├── system.file.yml │ │ ├── system.image.gd.yml │ │ ├── system.image.yml │ │ ├── system.logging.yml │ │ ├── system.mail.yml │ │ ├── system.maintenance.yml │ │ ├── system.menu.account.yml │ │ ├── system.menu.admin.yml │ │ ├── system.menu.devel.yml │ │ ├── system.menu.footer.yml │ │ ├── system.menu.main.yml │ │ ├── system.menu.tools.yml │ │ ├── system.performance.yml │ │ ├── system.rss.yml │ │ ├── system.site.yml │ │ ├── system.theme.global.yml │ │ ├── system.theme.yml │ │ ├── taxonomy.settings.yml │ │ ├── taxonomy.vocabulary.tags.yml │ │ ├── text.settings.yml │ │ ├── tour.tour.views-ui.yml │ │ ├── update.settings.yml │ │ ├── user.flood.yml │ │ ├── user.mail.yml │ │ ├── user.role.administrator.yml │ │ ├── user.role.anonymous.yml │ │ ├── user.role.authenticated.yml │ │ ├── user.settings.yml │ │ ├── uswds.settings.yml │ │ ├── views.settings.yml │ │ ├── views.view.aggregator_rss_feed.yml │ │ ├── views.view.aggregator_sources.yml │ │ ├── views.view.archive.yml │ │ ├── views.view.block_content.yml │ │ ├── views.view.comment.yml │ │ ├── views.view.comments_recent.yml │ │ ├── views.view.content.yml │ │ ├── views.view.content_recent.yml │ │ ├── views.view.files.yml │ │ ├── views.view.frontpage.yml │ │ ├── views.view.glossary.yml │ │ ├── views.view.my_content.yml │ │ ├── views.view.taxonomy_term.yml │ │ ├── views.view.user_admin_people.yml │ │ ├── views.view.watchdog.yml │ │ ├── views.view.who_s_new.yml │ │ ├── views.view.who_s_online.yml │ │ └── your_uswds_subtheme.settings.yml │ ├── content │ │ └── .htaccess │ ├── default.services.yml │ ├── default.settings.php │ ├── files │ │ └── .htaccess │ ├── settings.cf.php │ └── settings.php ├── development.services.yml ├── example.settings.local.php └── example.sites.php ├── template-.htaccess ├── themes ├── README.txt └── custom │ └── your_uswds_subtheme │ ├── .gitignore │ ├── README.md │ ├── assets │ ├── CONTRIBUTING.md │ ├── LICENSE.md │ ├── README.md │ ├── css │ │ ├── uswds.css │ │ ├── uswds.css.map │ │ ├── uswds.min.css │ │ └── uswds.min.css.map │ ├── fonts │ │ ├── merriweather-bold-webfont.eot │ │ ├── merriweather-bold-webfont.ttf │ │ ├── merriweather-bold-webfont.woff │ │ ├── merriweather-bold-webfont.woff2 │ │ ├── merriweather-italic-webfont.eot │ │ ├── merriweather-italic-webfont.ttf │ │ ├── merriweather-italic-webfont.woff │ │ ├── merriweather-italic-webfont.woff2 │ │ ├── merriweather-light-webfont.eot │ │ ├── merriweather-light-webfont.ttf │ │ ├── merriweather-light-webfont.woff │ │ ├── merriweather-light-webfont.woff2 │ │ ├── merriweather-regular-webfont.eot │ │ ├── merriweather-regular-webfont.ttf │ │ ├── merriweather-regular-webfont.woff │ │ ├── merriweather-regular-webfont.woff2 │ │ ├── sourcesanspro-bold-webfont.eot │ │ ├── sourcesanspro-bold-webfont.ttf │ │ ├── sourcesanspro-bold-webfont.woff │ │ ├── sourcesanspro-bold-webfont.woff2 │ │ ├── sourcesanspro-italic-webfont.eot │ │ ├── sourcesanspro-italic-webfont.ttf │ │ ├── sourcesanspro-italic-webfont.woff │ │ ├── sourcesanspro-italic-webfont.woff2 │ │ ├── sourcesanspro-light-webfont.eot │ │ ├── sourcesanspro-light-webfont.ttf │ │ ├── sourcesanspro-light-webfont.woff │ │ ├── sourcesanspro-light-webfont.woff2 │ │ ├── sourcesanspro-regular-webfont.eot │ │ ├── sourcesanspro-regular-webfont.ttf │ │ ├── sourcesanspro-regular-webfont.woff │ │ └── sourcesanspro-regular-webfont.woff2 │ ├── img │ │ ├── alerts │ │ │ ├── error.png │ │ │ ├── error.svg │ │ │ ├── info.png │ │ │ ├── info.svg │ │ │ ├── success.png │ │ │ ├── success.svg │ │ │ ├── warning.png │ │ │ └── warning.svg │ │ ├── angle-arrow-down-hover.png │ │ ├── angle-arrow-down-hover.svg │ │ ├── angle-arrow-down-primary-hover.png │ │ ├── angle-arrow-down-primary-hover.svg │ │ ├── angle-arrow-down-primary.png │ │ ├── angle-arrow-down-primary.svg │ │ ├── angle-arrow-down.png │ │ ├── angle-arrow-down.svg │ │ ├── angle-arrow-up-primary-hover.png │ │ ├── angle-arrow-up-primary-hover.svg │ │ ├── angle-arrow-up-primary.png │ │ ├── angle-arrow-up-primary.svg │ │ ├── arrow-both.png │ │ ├── arrow-both.svg │ │ ├── arrow-down.png │ │ ├── arrow-down.svg │ │ ├── arrow-right.png │ │ ├── arrow-right.svg │ │ ├── circle-124.png │ │ ├── close-primary.png │ │ ├── close-primary.svg │ │ ├── close.png │ │ ├── close.svg │ │ ├── correct8.png │ │ ├── correct8.svg │ │ ├── correct9.png │ │ ├── correct9.svg │ │ ├── external-link-alt-hover.png │ │ ├── external-link-alt-hover.svg │ │ ├── external-link-alt.png │ │ ├── external-link-alt.svg │ │ ├── external-link-hover.png │ │ ├── external-link-hover.svg │ │ ├── external-link.png │ │ ├── external-link.svg │ │ ├── favicons │ │ │ ├── favicon-114.png │ │ │ ├── favicon-144.png │ │ │ ├── favicon-16.png │ │ │ ├── favicon-192.png │ │ │ ├── favicon-40.png │ │ │ ├── favicon-57.png │ │ │ ├── favicon-72.png │ │ │ ├── favicon.ico │ │ │ └── favicon.png │ │ ├── hero.png │ │ ├── icon-dot-gov.svg │ │ ├── icon-https.svg │ │ ├── logo-img.png │ │ ├── minus-alt.png │ │ ├── minus-alt.svg │ │ ├── minus.png │ │ ├── minus.svg │ │ ├── plus-alt.png │ │ ├── plus-alt.svg │ │ ├── plus.png │ │ ├── plus.svg │ │ ├── search-alt.png │ │ ├── search-alt.svg │ │ ├── search-primary.png │ │ ├── search-primary.svg │ │ ├── search.png │ │ ├── search.svg │ │ ├── social-icons │ │ │ ├── png │ │ │ │ ├── facebook25.png │ │ │ │ ├── rss25.png │ │ │ │ ├── twitter16.png │ │ │ │ └── youtube15.png │ │ │ └── svg │ │ │ │ ├── facebook25.svg │ │ │ │ ├── rss25.svg │ │ │ │ ├── twitter16.svg │ │ │ │ └── youtube15.svg │ │ └── us_flag_small.png │ ├── js │ │ ├── uswds.js │ │ ├── uswds.min.js │ │ └── uswds.min.js.map │ └── scss │ │ ├── _all.scss │ │ ├── components │ │ ├── _accordions.scss │ │ ├── _alerts.scss │ │ ├── _banner.scss │ │ ├── _footer.scss │ │ ├── _forms.scss │ │ ├── _graphic-list.scss │ │ ├── _header.scss │ │ ├── _hero.scss │ │ ├── _layout.scss │ │ ├── _media-block.scss │ │ ├── _navigation.scss │ │ ├── _search.scss │ │ ├── _section.scss │ │ ├── _sidenav.scss │ │ └── _skipnav.scss │ │ ├── elements │ │ ├── _buttons.scss │ │ ├── _embed.scss │ │ ├── _figure.scss │ │ ├── _inputs.scss │ │ ├── _labels.scss │ │ ├── _list.scss │ │ ├── _table.scss │ │ └── _typography.scss │ │ ├── lib │ │ ├── _bourbon-deprecate.scss │ │ ├── _bourbon-deprecated-upcoming.scss │ │ ├── _bourbon.scss │ │ ├── _neat-helpers.scss │ │ ├── _neat.scss │ │ ├── _normalize.scss │ │ ├── addons │ │ │ ├── _border-color.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _border-style.scss │ │ │ ├── _border-width.scss │ │ │ ├── _buttons.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _ellipsis.scss │ │ │ ├── _font-stacks.scss │ │ │ ├── _hide-text.scss │ │ │ ├── _margin.scss │ │ │ ├── _padding.scss │ │ │ ├── _position.scss │ │ │ ├── _prefixer.scss │ │ │ ├── _retina-image.scss │ │ │ ├── _size.scss │ │ │ ├── _text-inputs.scss │ │ │ ├── _timing-functions.scss │ │ │ ├── _triangle.scss │ │ │ └── _word-wrap.scss │ │ ├── css3 │ │ │ ├── _animation.scss │ │ │ ├── _appearance.scss │ │ │ ├── _backface-visibility.scss │ │ │ ├── _background-image.scss │ │ │ ├── _background.scss │ │ │ ├── _border-image.scss │ │ │ ├── _calc.scss │ │ │ ├── _columns.scss │ │ │ ├── _filter.scss │ │ │ ├── _flex-box.scss │ │ │ ├── _font-face.scss │ │ │ ├── _font-feature-settings.scss │ │ │ ├── _hidpi-media-query.scss │ │ │ ├── _hyphens.scss │ │ │ ├── _image-rendering.scss │ │ │ ├── _keyframes.scss │ │ │ ├── _linear-gradient.scss │ │ │ ├── _perspective.scss │ │ │ ├── _placeholder.scss │ │ │ ├── _radial-gradient.scss │ │ │ ├── _selection.scss │ │ │ ├── _text-decoration.scss │ │ │ ├── _transform.scss │ │ │ ├── _transition.scss │ │ │ └── _user-select.scss │ │ ├── functions │ │ │ ├── _assign-inputs.scss │ │ │ ├── _contains-falsy.scss │ │ │ ├── _contains.scss │ │ │ ├── _is-length.scss │ │ │ ├── _is-light.scss │ │ │ ├── _is-number.scss │ │ │ ├── _is-size.scss │ │ │ ├── _modular-scale.scss │ │ │ ├── _new-breakpoint.scss │ │ │ ├── _private.scss │ │ │ ├── _px-to-em.scss │ │ │ ├── _px-to-rem.scss │ │ │ ├── _shade.scss │ │ │ ├── _strip-units.scss │ │ │ ├── _tint.scss │ │ │ ├── _transition-property-name.scss │ │ │ └── _unpack.scss │ │ ├── grid │ │ │ ├── _box-sizing.scss │ │ │ ├── _direction-context.scss │ │ │ ├── _display-context.scss │ │ │ ├── _fill-parent.scss │ │ │ ├── _media.scss │ │ │ ├── _omega.scss │ │ │ ├── _outer-container.scss │ │ │ ├── _pad.scss │ │ │ ├── _private.scss │ │ │ ├── _row.scss │ │ │ ├── _shift.scss │ │ │ ├── _span-columns.scss │ │ │ ├── _to-deprecate.scss │ │ │ └── _visual-grid.scss │ │ ├── helpers │ │ │ ├── _convert-units.scss │ │ │ ├── _directional-values.scss │ │ │ ├── _font-source-declaration.scss │ │ │ ├── _gradient-positions-parser.scss │ │ │ ├── _linear-angle-parser.scss │ │ │ ├── _linear-gradient-parser.scss │ │ │ ├── _linear-positions-parser.scss │ │ │ ├── _linear-side-corner-parser.scss │ │ │ ├── _radial-arg-parser.scss │ │ │ ├── _radial-gradient-parser.scss │ │ │ ├── _radial-positions-parser.scss │ │ │ ├── _render-gradients.scss │ │ │ ├── _shape-size-stripper.scss │ │ │ └── _str-to-num.scss │ │ ├── mixins │ │ │ └── _clearfix.scss │ │ └── settings │ │ │ ├── _asset-pipeline.scss │ │ │ ├── _deprecation-warnings.scss │ │ │ ├── _disable-warnings.scss │ │ │ ├── _grid.scss │ │ │ ├── _prefixer.scss │ │ │ ├── _px-to-em.scss │ │ │ └── _visual-grid.scss │ │ └── uswds.scss │ ├── footer-logo.png │ ├── logo.svg │ ├── nav-logo.png │ ├── package-lock.json │ ├── package.json │ ├── preprocess │ └── README.md │ ├── process │ └── README.md │ ├── sass │ ├── _variables.scss │ └── uswds.scss │ ├── templates │ └── system │ │ └── menu │ │ └── menu--footer_menu.html.twig │ └── your_uswds_subtheme.info.yml ├── update.php └── web.config /.bp-config/httpd/user-provided/httpd-drupalsupport.conf: -------------------------------------------------------------------------------- 1 | # Enable proxy_http for our s3fs module 2 | LoadModule proxy_http_module modules/mod_proxy_http.so 3 | -------------------------------------------------------------------------------- /.bp-config/options.json: -------------------------------------------------------------------------------- 1 | { 2 | "COMPOSER_INSTALL_OPTIONS": [ 3 | "--no-dev --optimize-autoloader --no-progress --no-interaction" 4 | ], 5 | "COMPOSER_VENDOR_DIR": "vendor", 6 | "WEBDIR": "web", 7 | "PHP_EXTENSIONS": ["bz2", "curl", "gd", "mbstring", "mcrypt", "pdo", "pdo_mysql", "zip"], 8 | "ADDITIONAL_PREPROCESS_CMDS": [ 9 | "$HOME/bootstrap.sh" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /.bp-config/php/php.ini.d/memory_limit.ini: -------------------------------------------------------------------------------- 1 | ; Maximum amount of memory a script may consume (128MB) 2 | ; http://php.net/memory-limit 3 | memory_limit = 512M 4 | -------------------------------------------------------------------------------- /.cfignore: -------------------------------------------------------------------------------- 1 | # Ignore directories generated by Composer 2 | /drush/contrib/ 3 | /vendor/ 4 | /web/core/ 5 | /web/modules/contrib/ 6 | /web/themes/contrib/ 7 | /web/profiles/contrib/ 8 | /web/libraries/ 9 | 10 | # Ignore node modules from USWDS or otherwise. 11 | */node_modules/ 12 | 13 | # Typically, composer generates a .gitignore to ignore the 14 | # `settings.php` files. For cloud.gov and Cloud Foundry, no sensitive 15 | # information is stored in the settings files. Instead, those files 16 | # have code that parses environment variables for DB and S3 17 | # 18 | # Ignore sensitive information [This is a `composer` default] 19 | # /web/sites/*/settings.php 20 | # /web/sites/*/settings.local.php 21 | 22 | 23 | # Ignore Drupal's file directory 24 | /web/sites/*/files/ 25 | 26 | # Ignore SimpleTest multi-site environment. 27 | /web/sites/simpletest 28 | 29 | # Ignore files generated by PhpStorm 30 | /.idea/ 31 | 32 | .DS_Store -------------------------------------------------------------------------------- /.docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.1-apache 2 | 3 | # Set the DocumentRoot to /var/www/web instead of /var/www/html 4 | RUN sed -i 's/html/web/g' /etc/apache2/sites-available/000-default.conf 5 | 6 | RUN apt-get update &&\ 7 | apt-get install -y \ 8 | libbz2-dev libcurl4-openssl-dev libmcrypt-dev \ 9 | libwebp-dev libjpeg-dev libpng-dev \ 10 | git jq wget mariadb-client &&\ 11 | docker-php-ext-install bz2 curl gd mbstring mcrypt pdo pdo_mysql zip &&\ 12 | apt-get autoremove -y &&\ 13 | rm -rf /var/lib/apt/lists/* &&\ 14 | rm -rf /var/cache/apt/* 15 | 16 | RUN a2enmod rewrite proxy proxy_http 17 | 18 | COPY ["install-composer.sh", "/tmp"] 19 | RUN "/tmp/install-composer.sh" 20 | 21 | # Add composer-installed libs to path 22 | ENV PATH=/var/www/vendor/bin:$PATH 23 | -------------------------------------------------------------------------------- /.docker/install-composer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # from https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md 3 | set -e 4 | 5 | EXPECTED_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig) 6 | php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 7 | ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');") 8 | 9 | if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ] 10 | then 11 | >&2 echo 'ERROR: Invalid installer signature' 12 | rm composer-setup.php 13 | exit 1 14 | fi 15 | 16 | php composer-setup.php --quiet --version=2.2.0 17 | RESULT=$? 18 | rm composer-setup.php 19 | mv composer.phar /usr/local/bin/composer 20 | exit $RESULT 21 | -------------------------------------------------------------------------------- /.docker/startup: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | /var/www/.docker/wait_for_db_then /var/www/bootstrap.sh 5 | apache2-foreground 6 | -------------------------------------------------------------------------------- /.docker/wait_for_db_then: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | FIRST_RUN=true 5 | 6 | until (echo 2>/dev/null > /dev/tcp/database/3306) 7 | do 8 | echo "Startup: Waiting for MySQL..." 9 | if $FIRST_RUN; then 10 | echo -e "\tTo track progress, run:" 11 | echo -e "\tdocker-compose logs -f database" 12 | FIRST_RUN=false 13 | fi 14 | sleep 1 15 | done 16 | 17 | exec "$@" 18 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Drupal editor configuration normalization 2 | # @see http://editorconfig.org/ 3 | 4 | # This is the top-most .editorconfig file; do not search in parent directories. 5 | root = true 6 | 7 | # All files. 8 | [*] 9 | end_of_line = LF 10 | indent_style = space 11 | indent_size = 2 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [composer.{json,lock}] 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | core/**/* 2 | vendor/**/* 3 | sites/**/files/**/* 4 | libraries/**/* 5 | sites/**/libraries/**/* 6 | profiles/**/libraries/**/* 7 | **/js_test_files/**/* 8 | **/node_modules/**/* 9 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./core/.eslintrc.json" 3 | } 4 | -------------------------------------------------------------------------------- /.profile: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # this code is executed while initializing the app: 3 | # https://docs.cloudfoundry.org/devguide/deploy-apps/deploy-app.html#profile 4 | 5 | if [ -f /app/web/.htaccess ] ; then 6 | if [ -n "$S3_BUCKET" ] && [ -n "$S3_REGION" ]; then 7 | # Add Proxy rewrite rules to the top of the htaccess file 8 | sed "s/^#RewriteRule .s3fs/RewriteRule ^s3fs/" /app/web/template-.htaccess > /app/web/.htaccess 9 | else 10 | cp /app/web/template-.htaccess /app/web/.htaccess 11 | fi 12 | else 13 | echo "cannot find .htaccess!" 14 | exit 1 15 | fi 16 | 17 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @cloud-gov/customer-success-squad 2 | 3 | -------------------------------------------------------------------------------- /DESIGN.md: -------------------------------------------------------------------------------- 1 | # Design choices documentation 2 | 3 | ## S3 support 4 | 5 | Drupals has two modules for S3 support: 6 | 7 | * [S3FS](https://www.drupal.org/project/s3fs) 8 | * [Flysystem S3](https://www.drupal.org/project/flysystem_s3) 9 | 10 | S3FS has greater usage, but its lead developer has left the project. It supports more features, 11 | including CORS upload and s3fs migrate. For a new site that doesn't expect to need to support 12 | large uploads, flysystem_s3 is probably leaner choice, but for general applicability S3FS is 13 | a good choice. 14 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## User story 2 | As a \, I want \ so that \. 3 | 4 | ## Acceptance criteria 5 | - [ ] 6 | - [ ] 7 | - [ ] 8 | 9 | ## Definition of done 10 | - [ ] 11 | - [ ] 12 | - [ ] 13 | -------------------------------------------------------------------------------- /PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Fixes issue(s) # . 2 | 3 | Changes proposed in this pull request: 4 | - 5 | - 6 | - 7 | -------------------------------------------------------------------------------- /apt.yml: -------------------------------------------------------------------------------- 1 | --- 2 | packages: 3 | - mariadb-client 4 | -------------------------------------------------------------------------------- /bin/bootstrap: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker-compose run \ 5 | --rm \ 6 | --workdir /var/www \ 7 | web \ 8 | .docker/wait_for_db_then /var/www/bootstrap.sh 9 | -------------------------------------------------------------------------------- /bin/composer: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker-compose run \ 5 | --rm \ 6 | --no-deps \ 7 | --workdir /var/www \ 8 | web \ 9 | composer "$@" 10 | -------------------------------------------------------------------------------- /bin/drupal: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker-compose run \ 5 | --rm \ 6 | --workdir /var/www \ 7 | web \ 8 | .docker/wait_for_db_then drupal --root=/var/www/web "$@" 9 | -------------------------------------------------------------------------------- /bin/drush: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker-compose run \ 5 | --rm \ 6 | --workdir /var/www \ 7 | web \ 8 | .docker/wait_for_db_then drush --root=/var/www/web "$@" 9 | -------------------------------------------------------------------------------- /bin/mysql: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker-compose run \ 5 | --rm \ 6 | database \ 7 | mysql --host=database --user=root --password=mysql mysql \ 8 | "$@" 9 | -------------------------------------------------------------------------------- /cronish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | while true 5 | do 6 | drush --root=$HOME/web core:cron 7 | sleep 15m 8 | done 9 | -------------------------------------------------------------------------------- /delete-cloudgov.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # This script will attempt to clean up the drupal install in cloud.gov 4 | # 5 | 6 | # delete apps 7 | cf delete cronish 8 | cf delete web 9 | 10 | # delete services 11 | cf delete-service database 12 | cf delete-service secrets 13 | cf delete-service storage 14 | 15 | -------------------------------------------------------------------------------- /drush/README.md: -------------------------------------------------------------------------------- 1 | This directory contains commands, configuration and site aliases for Drush. See https://packagist.org/search/?type=drupal-drush for a directory of Drush commands installable via Composer. 2 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | ./test/ 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /web/.editorconfig: -------------------------------------------------------------------------------- 1 | # Drupal editor configuration normalization 2 | # @see http://editorconfig.org/ 3 | 4 | # This is the top-most .editorconfig file; do not search in parent directories. 5 | root = true 6 | 7 | # All files. 8 | [*] 9 | end_of_line = LF 10 | indent_style = space 11 | indent_size = 2 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [composer.{json,lock}] 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /web/.eslintignore: -------------------------------------------------------------------------------- 1 | core/**/* 2 | vendor/**/* 3 | sites/**/files/**/* 4 | libraries/**/* 5 | sites/**/libraries/**/* 6 | profiles/**/libraries/**/* 7 | **/js_test_files/**/* 8 | **/node_modules/**/* 9 | -------------------------------------------------------------------------------- /web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./core/.eslintrc.json" 3 | } 4 | -------------------------------------------------------------------------------- /web/.gitignore: -------------------------------------------------------------------------------- 1 | /INSTALL.txt 2 | /README.txt 3 | /example.gitignore -------------------------------------------------------------------------------- /web/autoload.php: -------------------------------------------------------------------------------- 1 | handle($request); 20 | $response->send(); 21 | 22 | $kernel->terminate($request, $response); 23 | -------------------------------------------------------------------------------- /web/sites/README.txt: -------------------------------------------------------------------------------- 1 | This directory structure contains the settings and configuration files specific 2 | to your site or sites and is an integral part of multisite configurations. 3 | 4 | It is now recommended to place your custom and downloaded extensions in the 5 | /modules, /themes, and /profiles directories located in the Drupal root. The 6 | sites/all/ subdirectory structure, which was recommended in previous versions 7 | of Drupal, is still supported. 8 | 9 | See core/INSTALL.txt for information about single-site installation or 10 | multisite configuration. 11 | -------------------------------------------------------------------------------- /web/sites/default/config/.htaccess: -------------------------------------------------------------------------------- 1 | # Deny all requests from Apache 2.4+. 2 | 3 | Require all denied 4 | 5 | 6 | # Deny all requests from Apache 2.0-2.2. 7 | 8 | Deny from all 9 | 10 | # Turn off all options we don't need. 11 | Options None 12 | Options +FollowSymLinks 13 | 14 | # Set the catch-all handler to prevent scripts from being executed. 15 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 16 | 17 | # Override the handler again if we're run later in the evaluation list. 18 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 19 | 20 | 21 | # If we know how to do it safely, disable the PHP engine entirely. 22 | 23 | php_flag engine off 24 | 25 | -------------------------------------------------------------------------------- /web/sites/default/config/action.settings.yml: -------------------------------------------------------------------------------- 1 | recursion_limit: 35 2 | _core: 3 | default_config_hash: X4YpfA5OdcR0yUAF6UsJxqmOdrviYYj45h_SAH_p4oU 4 | -------------------------------------------------------------------------------- /web/sites/default/config/aggregator.settings.yml: -------------------------------------------------------------------------------- 1 | fetcher: aggregator 2 | parser: aggregator 3 | processors: 4 | - aggregator 5 | items: 6 | allowed_html: '